[FFmpeg-cvslog] avcodec/dcadec: Search and decode frame in case it starts later in a packet

Michael Niedermayer git at videolan.org
Sat May 23 16:38:42 CEST 2015


ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Sat May 23 16:23:52 2015 +0200| [4ae15605f6298d8369a1f1374596b52a3839c703] | committer: Michael Niedermayer

avcodec/dcadec: Search and decode frame in case it starts later in a packet

This fixes decoding the first frame of some dts files

Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

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

 libavcodec/dcadec.c |    7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/libavcodec/dcadec.c b/libavcodec/dcadec.c
index 91db893..3ea1bcf 100644
--- a/libavcodec/dcadec.c
+++ b/libavcodec/dcadec.c
@@ -1487,8 +1487,11 @@ static int dca_decode_frame(AVCodecContext *avctx, void *data,
     s->exss_ext_mask = 0;
     s->xch_present   = 0;
 
-    s->dca_buffer_size = avpriv_dca_convert_bitstream(buf, buf_size, s->dca_buffer,
-                                                  DCA_MAX_FRAME_SIZE + DCA_MAX_EXSS_HEADER_SIZE);
+    s->dca_buffer_size = AVERROR_INVALIDDATA;
+    for (i = 0; i < buf_size - 3 && s->dca_buffer_size == AVERROR_INVALIDDATA; i++)
+        s->dca_buffer_size = avpriv_dca_convert_bitstream(buf + i, buf_size - i, s->dca_buffer,
+                                                          DCA_MAX_FRAME_SIZE + DCA_MAX_EXSS_HEADER_SIZE);
+
     if (s->dca_buffer_size == AVERROR_INVALIDDATA) {
         av_log(avctx, AV_LOG_ERROR, "Not a valid DCA frame\n");
         return AVERROR_INVALIDDATA;



More information about the ffmpeg-cvslog mailing list