diff options
author | Paul B Mahol <onemda@gmail.com> | 2016-01-27 13:58:25 +0100 |
---|---|---|
committer | Paul B Mahol <onemda@gmail.com> | 2016-01-27 13:58:25 +0100 |
commit | 75a7565bcb69701823a922c6b2becb35fbd7983f (patch) | |
tree | cd3b3b0892139ad0720087e184b7ee3bcf073490 /libavcodec/dvaudiodec.c | |
parent | 74e8f4f674466d7f0b6810954c7b496286d56d6c (diff) | |
download | ffmpeg-75a7565bcb69701823a922c6b2becb35fbd7983f.tar.gz |
avcodec/dvaudiodec: support cases when codec_tag is not set but block_align is
Support packets larger than block size, return single block size.
Signed-off-by: Paul B Mahol <onemda@gmail.com>
Diffstat (limited to 'libavcodec/dvaudiodec.c')
-rw-r--r-- | libavcodec/dvaudiodec.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/libavcodec/dvaudiodec.c b/libavcodec/dvaudiodec.c index a0f3b191fb..0cbc2be48c 100644 --- a/libavcodec/dvaudiodec.c +++ b/libavcodec/dvaudiodec.c @@ -41,14 +41,16 @@ static av_cold int decode_init(AVCodecContext *avctx) if (avctx->codec_tag == 0x0215) { s->block_size = 7200; - s->is_pal = 0; } else if (avctx->codec_tag == 0x0216) { s->block_size = 8640; - s->is_pal = 1; + } else if (avctx->block_align == 7200 || + avctx->block_align == 8640) { + s->block_size = avctx->block_align; } else { return AVERROR(EINVAL); } + s->is_pal = s->block_size == 8640; s->is_12bit = avctx->bits_per_raw_sample == 12; avctx->sample_fmt = AV_SAMPLE_FMT_S16; avctx->channel_layout = AV_CH_LAYOUT_STEREO; @@ -108,7 +110,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int16_t *dst; int ret, i; - if (pkt->size != s->block_size) + if (pkt->size < s->block_size) return AVERROR_INVALIDDATA; frame->nb_samples = dv_get_audio_sample_count(pkt->data + 244, s->is_pal); @@ -130,7 +132,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, *got_frame_ptr = 1; - return pkt->size; + return s->block_size; } AVCodec ff_dvaudio_decoder = { |