From e816a8bc26a9c9c72e4d3e0e1d6854ecffaa4fc0 Mon Sep 17 00:00:00 2001 From: Justin Ruggles Date: Wed, 22 May 2013 13:49:58 -0400 Subject: ffmpeg: use actual packet pts when discarding for the copypriorss option The ist->pts value at this point does not necessarily match the actual packet pts, which is what should be used to decide whether to discard the packet. Without this change, some video packets that have pts on or after the start time are getting discarded when they should not be. Signed-off-by: Derek Buitenhuis --- ffmpeg.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'ffmpeg.c') diff --git a/ffmpeg.c b/ffmpeg.c index 40b96085a1..886039b485 100644 --- a/ffmpeg.c +++ b/ffmpeg.c @@ -1388,6 +1388,7 @@ static void do_streamcopy(InputStream *ist, OutputStream *ost, const AVPacket *p { OutputFile *of = output_files[ost->file_index]; int64_t ost_tb_start_time = av_rescale_q(of->start_time, AV_TIME_BASE_Q, ost->st->time_base); + int64_t ist_tb_start_time = av_rescale_q(of->start_time, AV_TIME_BASE_Q, ist->st->time_base); AVPicture pict; AVPacket opkt; @@ -1397,9 +1398,15 @@ static void do_streamcopy(InputStream *ist, OutputStream *ost, const AVPacket *p !ost->copy_initial_nonkeyframes) return; - if (!ost->frame_number && ist->pts < of->start_time && - !ost->copy_prior_start) - return; + if (pkt->pts == AV_NOPTS_VALUE) { + if (!ost->frame_number && ist->pts < of->start_time && + !ost->copy_prior_start) + return; + } else { + if (!ost->frame_number && pkt->pts < ist_tb_start_time && + !ost->copy_prior_start) + return; + } if (of->recording_time != INT64_MAX && ist->pts >= of->recording_time + of->start_time) { -- cgit v1.2.3