diff options
author | David Conrad <lessen42@gmail.com> | 2010-03-11 07:17:53 +0000 |
---|---|---|
committer | David Conrad <lessen42@gmail.com> | 2010-03-11 07:17:53 +0000 |
commit | 6abaa27211dab639d07414dc243620af697047cd (patch) | |
tree | 9d73a6395230a9a41f7b1560f56bb90ab36b5095 | |
parent | 2ac41150c03eab9a2149b54d537e338ea3df0b09 (diff) | |
download | ffmpeg-6abaa27211dab639d07414dc243620af697047cd.tar.gz |
oggdec: Move PTS/DTS calculation to a function
Originally committed as revision 22461 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r-- | libavformat/oggdec.c | 50 |
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; |