как я понял из исходников libavcodec, каждый аудио кодек имеет своё значение frame_size которое зависит от числа каналов и частоты дискретизации (возможно ещё от чего-то, но это не принципиально). мне требуется перекодировать из mp3 в adpcm_swf.
1) у mp3'шного кодека (22050 Hz, mono, 64 kb/s) audioCodecCtx->frame_size равен 1152. функция avcodec_decode_audio2 при декодировании этим декодером возвращает frame_size_ptr равный 4608 (то есть, длина раскодированного фрейма равна 4608). 4608 = 1152 * 4. почему на 4?
2) у adpcm_swf кодека frame_size равен 1024. функция avcodec_encode_audio из буфера забирает количество байт равное frame_size * channels, то есть ровно 1024. в итоге получается что из 4608 байт каждого фрейма конечный кодек забирает только 1024. в результате на выходе я получаю прерывистый звук.
соответственно вопросы: почему mp3'шный кодек выдаёт аж 4608 байт вместо 1152, и как из этих 4608 сделать 1024 чтобы подавать на вход adpcm?
ps. исходники ffmpeg'а читал. =).