[FFmpeg-cvslog] r10701 - trunk/libavformat/ogg2.c

reimar subversion
Wed Oct 10 12:33:07 CEST 2007


Author: reimar
Date: Wed Oct 10 12:33:07 2007
New Revision: 10701

Log:
Add a read_timestamp function to ogg demuxer


Modified:
   trunk/libavformat/ogg2.c

Modified: trunk/libavformat/ogg2.c
==============================================================================
--- trunk/libavformat/ogg2.c	(original)
+++ trunk/libavformat/ogg2.c	Wed Oct 10 12:33:07 2007
@@ -659,21 +659,28 @@ ogg_read_seek (AVFormatContext * s, int 
 
 }
 
-#if 0
 static int64_t
 ogg_read_timestamp (AVFormatContext * s, int stream_index, int64_t * pos_arg,
                     int64_t pos_limit)
 {
     ogg_t *ogg = s->priv_data;
     ByteIOContext *bc = &s->pb;
-    int64_t pos, pts;
-
-    if (*pos_arg < 0)
-        return AV_NOPTS_VALUE;
-
-    pos = *pos_arg;
+    int64_t pts = AV_NOPTS_VALUE;
+    int i;
+    url_fseek(bc, *pos_arg, SEEK_SET);
+    while (url_ftell(bc) < pos_limit && !ogg_read_page (s, &i)) {
+        if (ogg->streams[i].granule != -1 && ogg->streams[i].granule != 0 &&
+            ogg->streams[i].codec && i == stream_index) {
+            pts = ogg_gptopts(s, i, ogg->streams[i].granule);
+            // FIXME: this is the position of the packet after the one with above
+            // pts.
+            *pos_arg = url_ftell(bc);
+            break;
+        }
+    }
+    ogg_reset(ogg);
+    return pts;
 }
-#endif
 
 static int ogg_probe(AVProbeData *p)
 {
@@ -694,6 +701,6 @@ AVInputFormat ogg_demuxer = {
     ogg_read_packet,
     ogg_read_close,
     ogg_read_seek,
-// ogg_read_timestamp,
+    ogg_read_timestamp,
     .extensions = "ogg",
 };




More information about the ffmpeg-cvslog mailing list