Что происходит, когда вы выполняете преобразование из AV_SAMPLE_FMT_S16P в AV_SAMPLE_FMT_S16? Как структура AVFrame будет содержать плоские и непланарные данные?
В чем разница между AV_SAMPLE_FMT_S16P и AV_SAMPLE_FMT_S16?
Ответ 1
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] будет содержать данные канала я (при условии, что канал 0 является первым каналом).
однако, если у вас больше каналов, чем 8, данные об остальных каналах можно найти в атрибуте extended_data AVFrame.
- для неплоского звука
Данные [0] будут содержать данные для всех каналов с чередованием.