[SCM] libav/experimental: oggdec: Move PTS/DTS calculation to a function

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 17:04:10 UTC 2013


The following commit has been merged in the experimental branch:
commit 6abaa27211dab639d07414dc243620af697047cd
Author: David Conrad <lessen42 at gmail.com>
Date:   Thu Mar 11 07:17:53 2010 +0000

    oggdec: Move PTS/DTS calculation to a function
    
    Originally committed as revision 22461 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libavformat/oggdec.c b/libavformat/oggdec.c
index bdbbf3f..f627c1e 100644
--- a/libavformat/oggdec.c
+++ b/libavformat/oggdec.c
@@ -493,6 +493,36 @@ ogg_read_header (AVFormatContext * s, AVFormatParameters * ap)
     return 0;
 }
 
+static int64_t ogg_calc_pts(AVFormatContext *s, int idx, int64_t *dts)
+{
+    struct ogg *ogg = s->priv_data;
+    struct ogg_stream *os = ogg->streams + idx;
+    int64_t pts = AV_NOPTS_VALUE;
+
+    if (dts)
+        *dts = AV_NOPTS_VALUE;
+
+    if (os->lastpts != AV_NOPTS_VALUE) {
+        pts = os->lastpts;
+        os->lastpts = AV_NOPTS_VALUE;
+    }
+    if (os->lastdts != AV_NOPTS_VALUE) {
+        if (dts)
+            *dts = os->lastdts;
+        os->lastdts = AV_NOPTS_VALUE;
+    }
+    if (os->page_end) {
+        if (os->granule != -1LL) {
+            if (os->codec && os->codec->granule_is_start)
+                pts = ogg_gptopts(s, idx, os->granule, dts);
+            else
+                os->lastpts = ogg_gptopts(s, idx, os->granule, &os->lastdts);
+            os->granule = -1LL;
+        } else
+            av_log(s, AV_LOG_WARNING, "Packet is missing granule\n");
+    }
+    return pts;
+}
 
 static int
 ogg_read_packet (AVFormatContext * s, AVPacket * pkt)
@@ -518,25 +548,7 @@ ogg_read_packet (AVFormatContext * s, AVPacket * pkt)
     pkt->stream_index = idx;
     memcpy (pkt->data, os->buf + pstart, psize);
 
-    if (os->lastpts != AV_NOPTS_VALUE) {
-        pkt->pts = os->lastpts;
-        os->lastpts = AV_NOPTS_VALUE;
-    }
-    if (os->lastdts != AV_NOPTS_VALUE) {
-        pkt->dts = os->lastdts;
-        os->lastdts = AV_NOPTS_VALUE;
-    }
-    if (os->page_end) {
-        if (os->granule != -1LL) {
-            if (os->codec && os->codec->granule_is_start)
-                pkt->pts    = ogg_gptopts(s, idx, os->granule, &pkt->dts);
-            else
-                os->lastpts = ogg_gptopts(s, idx, os->granule, &os->lastdts);
-            os->granule = -1LL;
-        } else
-            av_log(s, AV_LOG_WARNING, "Packet is missing granule\n");
-    }
-
+    pkt->pts = ogg_calc_pts(s, idx, &pkt->dts);
     pkt->flags = os->pflags;
     pkt->duration = os->pduration;
     pkt->pos = fpos;

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list