[FFmpeg-cvslog] cdxl: fix duration

Piotr Bandurski git at videolan.org
Mon Dec 22 20:44:43 CET 2014


ffmpeg | branch: master | Piotr Bandurski <ami_stuff at o2.pl> | Mon Dec 17 12:55:34 2012 +0100| [75cc85b23970b1238d6e3107ac817120e42a6686] | committer: Michael Niedermayer

cdxl: fix duration

fixes ticket #1937

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

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

 libavformat/cdxl.c |   14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/libavformat/cdxl.c b/libavformat/cdxl.c
index e3e379a..2f1c87c 100644
--- a/libavformat/cdxl.c
+++ b/libavformat/cdxl.c
@@ -37,6 +37,7 @@ typedef struct CDXLDemuxContext {
     uint8_t     header[CDXL_HEADER_SIZE];
     int         video_stream_index;
     int         audio_stream_index;
+    int64_t     filesize;
 } CDXLDemuxContext;
 
 static int cdxl_read_probe(AVProbeData *p)
@@ -96,6 +97,8 @@ static int cdxl_read_header(AVFormatContext *s)
     cdxl->video_stream_index = -1;
     cdxl->audio_stream_index = -1;
 
+    cdxl->filesize = avio_size(s->pb);
+
     s->ctx_flags |= AVFMTCTX_NOHEADER;
 
     return 0;
@@ -108,7 +111,7 @@ static int cdxl_read_packet(AVFormatContext *s, AVPacket *pkt)
     uint32_t current_size, video_size, image_size;
     uint16_t audio_size, palette_size, width, height;
     int64_t  pos;
-    int      ret;
+    int      frames, ret;
 
     if (avio_feof(pb))
         return AVERROR_EOF;
@@ -175,6 +178,15 @@ static int cdxl_read_packet(AVFormatContext *s, AVPacket *pkt)
             st->codec->codec_id      = AV_CODEC_ID_CDXL;
             st->codec->width         = width;
             st->codec->height        = height;
+
+            if (audio_size + video_size && cdxl->filesize > 0) {
+                frames = cdxl->filesize / (audio_size + video_size);
+
+                if(cdxl->framerate)
+                    st->duration = frames;
+                else
+                    st->duration = frames * audio_size;
+            }
             st->start_time           = 0;
             cdxl->video_stream_index = st->index;
             if (cdxl->framerate)



More information about the ffmpeg-cvslog mailing list