# HG changeset patch # User reimar # Date 1307837015 0 # Node ID 3209d6cbc393a5dc7d9f7c3efd4caa321f0a7f0d # Parent c36fec5ba5b6985b642838ad2f9044ace6a21205 Fix encoding to formats taking input other than 16 bits per sample. diff -r c36fec5ba5b6 -r 3209d6cbc393 libmpcodecs/ae_lavc.c --- a/libmpcodecs/ae_lavc.c Sat Jun 11 23:36:52 2011 +0000 +++ b/libmpcodecs/ae_lavc.c Sun Jun 12 00:03:35 2011 +0000 @@ -122,11 +122,12 @@ (!strcmp(lavc_acodec->name,"ac3") || !strcmp(lavc_acodec->name,"libfaac"))) { int isac3 = !strcmp(lavc_acodec->name,"ac3"); + int bps = av_get_bytes_per_sample(lavc_actx->sample_fmt); reorder_channel_nch(src, AF_CHANNEL_LAYOUT_MPLAYER_DEFAULT, isac3 ? AF_CHANNEL_LAYOUT_LAVC_DEFAULT : AF_CHANNEL_LAYOUT_AAC_DEFAULT, encoder->params.channels, - size / 2, 2); + size / bps, bps); } n = avcodec_encode_audio(lavc_actx, dest, size, src); compressed_frame_size = n; @@ -251,7 +252,9 @@ lavc_actx->frame_size = (lavc_actx->block_align - 4 * lavc_actx->channels) * 8 / (4 * lavc_actx->channels) + 1; } - encoder->decode_buffer_size = lavc_actx->frame_size * 2 * encoder->params.channels; + encoder->decode_buffer_size = lavc_actx->frame_size * + av_get_bytes_per_sample(lavc_actx->sample_fmt) * + encoder->params.channels; while (encoder->decode_buffer_size < 1024) encoder->decode_buffer_size *= 2; encoder->bind = bind_lavc; encoder->get_frame_size = get_frame_size;