[FFmpeg-cvslog] avcodec/dvaudiodec: support cases when codec_tag is not set but block_align is

Paul B Mahol git at videolan.org
Wed Jan 27 14:03:45 CET 2016


ffmpeg | branch: master | Paul B Mahol <onemda at gmail.com> | Wed Jan 27 13:58:25 2016 +0100| [75a7565bcb69701823a922c6b2becb35fbd7983f] | committer: Paul B Mahol

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 at gmail.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=75a7565bcb69701823a922c6b2becb35fbd7983f
---

 libavcodec/dvaudiodec.c |   10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/libavcodec/dvaudiodec.c b/libavcodec/dvaudiodec.c
index a0f3b19..0cbc2be 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 = {



More information about the ffmpeg-cvslog mailing list