summaryrefslogtreecommitdiff
path: root/libavformat/oggdec.c
diff options
context:
space:
mode:
authorDavid Conrad <lessen42@gmail.com>2010-03-11 07:17:53 +0000
committerDavid Conrad <lessen42@gmail.com>2010-03-11 07:17:53 +0000
commit6abaa27211dab639d07414dc243620af697047cd (patch)
tree9d73a6395230a9a41f7b1560f56bb90ab36b5095 /libavformat/oggdec.c
parent2ac41150c03eab9a2149b54d537e338ea3df0b09 (diff)
oggdec: Move PTS/DTS calculation to a function
Originally committed as revision 22461 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat/oggdec.c')
-rw-r--r--libavformat/oggdec.c50
1 files changed, 31 insertions, 19 deletions
diff --git a/libavformat/oggdec.c b/libavformat/oggdec.c
index bdbbf3f081..f627c1efb3 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;