You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-10 06:10:52 +02:00
fftools/ffmpeg_filter: use correct timebase for filter EOF timestamp
It does not need to be equal to demuxer timebase.
This commit is contained in:
@@ -1320,12 +1320,9 @@ static int transcode_subtitles(InputStream *ist, const AVPacket *pkt,
|
|||||||
static int send_filter_eof(InputStream *ist)
|
static int send_filter_eof(InputStream *ist)
|
||||||
{
|
{
|
||||||
int i, ret;
|
int i, ret;
|
||||||
/* TODO keep pts also in stream time base to avoid converting back */
|
|
||||||
int64_t pts = av_rescale_q_rnd(ist->pts, AV_TIME_BASE_Q, ist->st->time_base,
|
|
||||||
AV_ROUND_NEAR_INF | AV_ROUND_PASS_MINMAX);
|
|
||||||
|
|
||||||
for (i = 0; i < ist->nb_filters; i++) {
|
for (i = 0; i < ist->nb_filters; i++) {
|
||||||
ret = ifilter_send_eof(ist->filters[i], pts);
|
ret = ifilter_send_eof(ist->filters[i], ist->pts, AV_TIME_BASE_Q);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@@ -788,7 +788,7 @@ int init_complex_filtergraph(FilterGraph *fg);
|
|||||||
void sub2video_update(InputStream *ist, int64_t heartbeat_pts, AVSubtitle *sub);
|
void sub2video_update(InputStream *ist, int64_t heartbeat_pts, AVSubtitle *sub);
|
||||||
|
|
||||||
int ifilter_send_frame(InputFilter *ifilter, AVFrame *frame, int keep_reference);
|
int ifilter_send_frame(InputFilter *ifilter, AVFrame *frame, int keep_reference);
|
||||||
int ifilter_send_eof(InputFilter *ifilter, int64_t pts);
|
int ifilter_send_eof(InputFilter *ifilter, int64_t pts, AVRational tb);
|
||||||
|
|
||||||
int ifilter_parameters_from_codecpar(InputFilter *ifilter, AVCodecParameters *par);
|
int ifilter_parameters_from_codecpar(InputFilter *ifilter, AVCodecParameters *par);
|
||||||
int ifilter_has_all_input_formats(FilterGraph *fg);
|
int ifilter_has_all_input_formats(FilterGraph *fg);
|
||||||
|
@@ -1454,13 +1454,17 @@ int reap_filters(int flush)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ifilter_send_eof(InputFilter *ifilter, int64_t pts)
|
int ifilter_send_eof(InputFilter *ifilter, int64_t pts, AVRational tb)
|
||||||
{
|
{
|
||||||
|
InputFilterPriv *ifp = ifp_from_ifilter(ifilter);
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ifilter->eof = 1;
|
ifilter->eof = 1;
|
||||||
|
|
||||||
if (ifilter->filter) {
|
if (ifilter->filter) {
|
||||||
|
pts = av_rescale_q_rnd(pts, tb, ifp->time_base,
|
||||||
|
AV_ROUND_NEAR_INF | AV_ROUND_PASS_MINMAX);
|
||||||
|
|
||||||
ret = av_buffersrc_close(ifilter->filter, pts, AV_BUFFERSRC_FLAG_PUSH);
|
ret = av_buffersrc_close(ifilter->filter, pts, AV_BUFFERSRC_FLAG_PUSH);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
Reference in New Issue
Block a user