diff options
Diffstat (limited to 'libavformat')
-rw-r--r-- | libavformat/ffm.c | 8 |
1 files changed, 7 insertions, 1 deletions
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; } |