Что происходит, когда вы выполняете преобразование из AV_SAMPLE_FMT_S16P в AV_SAMPLE_FMT_S16? Как структура AVFrame будет содержать планарные и непланарные данные?
В чем разница между AV_SAMPLE_FMT_S16P и AV_SAMPLE_FMT_S16?
Ответы (2)
AV_SAMPLE_FMT_S16P
— это 16-битный звук с плоской подписью, т. е. 2 байта для каждого сэмпла, который одинаков для AV_SAMPLE_FMT_S16
.
Единственное отличие состоит в том, что AV_SAMPLE_FMT_S16
сэмплов каждого канала чередуются, т.е. если у вас есть двухканальный звук, то буфер сэмплов будет выглядеть так:
c1 c2 c1 c2 c1 c2 c1 c2...
где c1
— образец для канала 1, а c2
— образец для канала 2.
в то время как для одного кадра планарного звука у вас будет что-то вроде
c1 c1 c1 c1 .... c2 c2 c2 c2 ..
как он хранится в AVFrame:
- для планарного звука:
data[i] будет содержать данные канала i (при условии, что канал 0 является первым каналом).
однако, если у вас больше каналов, чем 8, то данные для остальных каналов можно найти в атрибуте extended_data AVFrame.
- для непланарного звука
data[0] будет содержать данные для всех каналов в чередующемся порядке.
c1 c1 c2 c2
должен относиться к байтам в буфере, а не к образцам. Следует либо изменить его на c1 c2 c1 c2
для образцов, либо обновить текст, чтобы сказать байты.
- person DuBistKomisch; 20.09.2016
В
AV_SAMPLE_FMT_S16P
данные поступают в виде decoded_frame-›extended_data, а в AV_SAMPLE_FMT_S16 данные поступают в виде decoded_frame-›data.В
AV_SAMPLE_FMT_S16P
данные плоскиеВ
AV_SAMPLE_FMT_S16
данные чередуются, я полагаю, вы знаете, что это значит.
Пример кода доступен в программном обеспечении на основе Sourceforge Libav.