On Fri, Feb 22, 2019 at 9:56 PM Jan Ekström <[email protected]> wrote:
>
> This seems to fix use cases where the sub2video output is the only
> input to a filter chain.
>
> Additionally, this is the value to which the structure's values
> would implicitly get initialized to. The ballooning buffering case
> would not get hit by this as the value of end_pts after
> (re-)initialization would be less than INT64_MAX, thus hitting the
> sub2video AVFrame initialization logic via sub2video_update in
> sub2video_heartbeat.
> ---
> fftools/ffmpeg_filter.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c
> index 72838de1e2..536f9c9c46 100644
> --- a/fftools/ffmpeg_filter.c
> +++ b/fftools/ffmpeg_filter.c
> @@ -739,7 +739,7 @@ static int sub2video_prepare(InputStream *ist,
> InputFilter *ifilter)
> if (!ist->sub2video.frame)
> return AVERROR(ENOMEM);
> ist->sub2video.last_pts = INT64_MIN;
> - ist->sub2video.end_pts = INT64_MIN;
> + ist->sub2video.end_pts = 0;
> return 0;
> }
>
> --
> 2.20.1
>
An alternative for this would be to:
1. add a flag to sub2video structure that timestamp initialization is
required, and set it as required during (re-)initializations.
2. pass heartbeat pts to sub2video_update
3. finally, in sub2video_update
} else {
pts = !ist->sub2video.timestamp_initialized ?
heartbeat_pts : ist->sub2video.end_pts;
end_pts = INT64_MAX;
num_rects = 0;
}
and ist->sub2video.timestamp_initialized = 1; at the end.
This way the sub2video logic would start with the first heartbeat's
timestamp (often zero, but not always), as opposed to the initial
value of end_pts.
Jan
_______________________________________________
ffmpeg-devel mailing list
[email protected]
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel