diff options
Diffstat (limited to 'ffmpeg.c')
-rw-r--r-- | ffmpeg.c | 23 |
1 files changed, 8 insertions, 15 deletions
@@ -1680,13 +1680,6 @@ static void choose_sample_fmt(AVStream *st, AVCodec *codec) } } -static double -get_sync_ipts(const OutputStream *ost, int64_t pts) -{ - OutputFile *of = output_files[ost->file_index]; - return (double)(pts - of->start_time) / AV_TIME_BASE; -} - static void write_frame(AVFormatContext *s, AVPacket *pkt, OutputStream *ost) { AVBitStreamFilterContext *bsfc = ost->bitstream_filters; @@ -1934,7 +1927,7 @@ static void do_video_out(AVFormatContext *s, if(ist && ist->st->start_time != AV_NOPTS_VALUE && ist->st->first_dts != AV_NOPTS_VALUE && ost->frame_rate.num) duration = 1/(av_q2d(ost->frame_rate) * av_q2d(enc->time_base)); - sync_ipts = get_sync_ipts(ost, in_picture->pts) / av_q2d(enc->time_base); + sync_ipts = in_picture->pts; delta = sync_ipts - ost->sync_opts + duration; /* by default, we output a single frame */ @@ -2162,22 +2155,22 @@ static int poll_filters(void) break; } frame_pts = AV_NOPTS_VALUE; - if (ost->enc->type == AVMEDIA_TYPE_VIDEO) - filtered_frame->pts = frame_pts = av_rescale_q(picref->pts, ist_pts_tb, AV_TIME_BASE_Q); - else if (picref->pts != AV_NOPTS_VALUE) + if (picref->pts != AV_NOPTS_VALUE) { filtered_frame->pts = frame_pts = av_rescale_q(picref->pts, ost->filter->filter->inputs[0]->time_base, ost->st->codec->time_base) - av_rescale_q(of->start_time, AV_TIME_BASE_Q, ost->st->codec->time_base); + + if (of->start_time && filtered_frame->pts < 0) { + avfilter_unref_buffer(picref); + continue; + } + } //if (ost->source_index >= 0) // *filtered_frame= *input_streams[ost->source_index]->decoded_frame; //for me_threshold - if (of->start_time && filtered_frame->pts < of->start_time) { - avfilter_unref_buffer(picref); - continue; - } switch (ost->filter->filter->inputs[0]->type) { case AVMEDIA_TYPE_VIDEO: |