--- Supporting either sample format for this particular encoder is trivial and does not require additional processing in either case.
libavcodec/mpegaudioenc.c | 13 +++++++++---- 1 files changed, 9 insertions(+), 4 deletions(-) diff --git a/libavcodec/mpegaudioenc.c b/libavcodec/mpegaudioenc.c index ab9e0fa..3549f0b 100644 --- a/libavcodec/mpegaudioenc.c +++ b/libavcodec/mpegaudioenc.c @@ -736,13 +736,17 @@ static int MPA_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, int *got_packet_ptr) { MpegAudioContext *s = avctx->priv_data; - const int16_t *samples = (const int16_t *)frame->data[0]; short smr[MPA_MAX_CHANNELS][SBLIMIT]; unsigned char bit_alloc[MPA_MAX_CHANNELS][SBLIMIT]; int padding, i, ret; - for(i=0;i<s->nb_channels;i++) { - filter(s, i, samples + i, s->nb_channels); + if (avctx->sample_fmt == AV_SAMPLE_FMT_S16P) { + for (i = 0; i < s->nb_channels; i++) + filter(s, i, (const int16_t *)frame->data[i], 1); + } else { + const int16_t *samples = (const int16_t *)frame->data[0]; + for (i = 0; i < s->nb_channels; i++) + filter(s, i, samples + i, s->nb_channels); } for(i=0;i<s->nb_channels;i++) { @@ -792,7 +796,8 @@ AVCodec ff_mp2_encoder = { .init = MPA_encode_init, .encode2 = MPA_encode_frame, .close = MPA_encode_close, - .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16, + .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16P, + AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_NONE }, .supported_samplerates = (const int[]){ 44100, 48000, 32000, 22050, 24000, 16000, 0 -- 1.7.1 _______________________________________________ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel