diff options
Diffstat (limited to 'src/libffmpeg/libavcodec/pcm.c')
-rw-r--r-- | src/libffmpeg/libavcodec/pcm.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/libffmpeg/libavcodec/pcm.c b/src/libffmpeg/libavcodec/pcm.c index 4c999b430..8e57d11a1 100644 --- a/src/libffmpeg/libavcodec/pcm.c +++ b/src/libffmpeg/libavcodec/pcm.c @@ -127,6 +127,23 @@ static int pcm_encode_init(AVCodecContext *avctx) break; } + switch(avctx->codec->id) { + case CODEC_ID_PCM_S16LE: + case CODEC_ID_PCM_S16BE: + case CODEC_ID_PCM_U16LE: + case CODEC_ID_PCM_U16BE: + avctx->block_align = 2 * avctx->channels; + break; + case CODEC_ID_PCM_S8: + case CODEC_ID_PCM_U8: + case CODEC_ID_PCM_MULAW: + case CODEC_ID_PCM_ALAW: + avctx->block_align = avctx->channels; + break; + default: + break; + } + avctx->coded_frame= avcodec_alloc_frame(); avctx->coded_frame->key_frame= 1; @@ -282,6 +299,9 @@ static int pcm_decode_frame(AVCodecContext *avctx, samples = data; src = buf; + if(buf_size > AVCODEC_MAX_AUDIO_FRAME_SIZE/2) + buf_size = AVCODEC_MAX_AUDIO_FRAME_SIZE/2; + switch(avctx->codec->id) { case CODEC_ID_PCM_S16LE: n = buf_size >> 1; |