pts fix by (Bryan Mayland / bmayland O leoninedev o com)
authorMichael Niedermayer <michaelni@gmx.at>
Thu, 19 Jan 2006 00:54:10 +0000 (00:54 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Thu, 19 Jan 2006 00:54:10 +0000 (00:54 +0000)
Originally committed as revision 4867 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavformat/ffm.c

index 338e51e6f40109498982166b285b8fc5e9c3532f..db9c2c7fd79e2b62a3e015112aac2555845dc694 100644 (file)
@@ -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;
     }