From d271481f1a308a36b139a03d145b2cd4e994f09f Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Thu, 19 Jan 2006 00:54:10 +0000 Subject: pts fix by (Bryan Mayland / bmayland O leoninedev o com) Originally committed as revision 4867 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavformat/ffm.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'libavformat/ffm.c') diff --git a/libavformat/ffm.c b/libavformat/ffm.c index 338e51e6f4..db9c2c7fd7 100644 --- a/libavformat/ffm.c +++ b/libavformat/ffm.c @@ -44,6 +44,7 @@ typedef struct FFMContext { /* read and write */ int first_packet; /* true if first packet, needed to set the discontinuity tag */ + int first_frame_in_packet; /* true if first frame in packet, needed to know if PTS information is valid */ int packet_size; int frame_offset; int64_t pts; @@ -347,6 +348,7 @@ static int ffm_read_data(AVFormatContext *s, get_be16(pb); /* PACKET_ID */ fill_size = get_be16(pb); ffm->pts = get_be64(pb); + ffm->first_frame_in_packet = 1; frame_offset = get_be16(pb); get_buffer(pb, ffm->packet, ffm->packet_size - FFM_HEADER_SIZE); ffm->packet_end = ffm->packet + (ffm->packet_size - FFM_HEADER_SIZE - fill_size); @@ -614,7 +616,11 @@ static int ffm_read_packet(AVFormatContext *s, AVPacket *pkt) av_free_packet(pkt); return -EAGAIN; } - pkt->pts = ffm->pts; + if (ffm->first_frame_in_packet) + { + pkt->pts = ffm->pts; + ffm->first_frame_in_packet = 0; + } pkt->duration = duration; break; } -- cgit v1.2.3