[FFmpeg-cvslog] oggvorbisdec: Apply timestamp calculation always when timestamps arent known.
Michael Niedermayer
git at videolan.org
Sat May 5 00:01:37 CEST 2012
ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Fri May 4 22:45:57 2012 +0200| [fe5c5bccce4afa5d70306151c3d9e76f68157b66] | committer: Michael Niedermayer
oggvorbisdec: Apply timestamp calculation always when timestamps arent known.
Signed-off-by: Michael Niedermayer <michaelni at gmx.at>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=fe5c5bccce4afa5d70306151c3d9e76f68157b66
---
libavformat/oggparsevorbis.c | 10 ++++++----
1 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/libavformat/oggparsevorbis.c b/libavformat/oggparsevorbis.c
index 57af4a1..02da127 100644
--- a/libavformat/oggparsevorbis.c
+++ b/libavformat/oggparsevorbis.c
@@ -296,7 +296,7 @@ static int vorbis_packet(AVFormatContext *s, int idx)
here we parse the duration of each packet in the first page and compare
the total duration to the page granule to find the encoder delay and
set the first timestamp */
- if (!os->lastpts) {
+ if ((!os->lastpts || os->lastpts == AV_NOPTS_VALUE) && !(os->flags & OGG_FLAG_EOS)) {
int seg, d;
uint8_t *last_pkt = os->buf + os->pstart;
uint8_t *next_pkt = last_pkt;
@@ -324,9 +324,11 @@ static int vorbis_packet(AVFormatContext *s, int idx)
next_pkt += os->segments[seg];
}
os->lastpts = os->lastdts = os->granule - duration;
- s->streams[idx]->start_time = os->lastpts;
- if (s->streams[idx]->duration)
- s->streams[idx]->duration -= s->streams[idx]->start_time;
+ if(s->streams[idx]->start_time == AV_NOPTS_VALUE) {
+ s->streams[idx]->start_time = os->lastpts;
+ if (s->streams[idx]->duration)
+ s->streams[idx]->duration -= s->streams[idx]->start_time;
+ }
priv->final_pts = AV_NOPTS_VALUE;
avpriv_vorbis_parse_reset(&priv->vp);
}
More information about the ffmpeg-cvslog
mailing list