[FFmpeg-devel] [PATCH v3 0/6] ffmpeg: late A/V encoder init, AVFrame metadata usage
Jan Ekström
jeebjp at gmail.com
Wed Oct 21 10:14:42 EEST 2020
On Fri, Oct 16, 2020, 16:16 Jan Ekström <jeebjp at gmail.com> wrote:
> This patch set started with a very simple wish to not have to set color
> related values manually each time when utilizing ffmpeg.c.
>
> As of the third iteration, the following changes were done since the
> second:
> 1. A simple mistake was corrected, fixing `debug_ts`.
> 2. As I noticed such a change enabling a fix for the interlaced flag
> writing
> for Y4M, switched the location of the field order and
> interlaced/progressive
> logic to where the encoder is initialized.
> 3. First attempt at fixing cases where the difference between stream copy
> and re-encoding leads to the muxer queue filling up, breaking cases
> where a stream with lots of small packets (such as audio) is copied,
> and a seek ends up multiple seconds before the actual requested seek
> time.
>
> Unfortunately, audio still needs two locations where the encoder is
> initialized, due to how avfilter_graph_request_oldest peeks and already
> puts
> one AVFrame to be available from the filter graph (which is then utilized
> as-is as an early return inside both av_buffersink_get_frame_flags and
> av_buffersink_get_samples). If this would be improved in lavfi (or the call
> to avfilter_graph_request_oldest removed), we could at least remove one of
> these.
>
> Currently limited to using values for video and started with the basic
> values,
> more can be added later if needed.
>
> This probably fixes some trac issues, but with a quick look I couldn't find
> anything that explicitly was due to lack of video color metadata
> passthrough.
>
>
> Jan
>
>
> Example 1:
>
> I have an RGB 3-D render, which I would like to encode into BT.709 YCbCr.
> The video filter I'm generally using for this (zscale) does flag the
> matrix in
> the output AVFrame.
>
> Yet to have the video encoder have the correct metadata set, I have to
> set the value(s) manually.
>
> With this patch set, the value(s) from the first AVFrame fed to
> do_video_out
> will be utilized.
>
> Example 2:
>
> I have an input video that sets one or more of the following:
> matrix/primaries/transfer function/range/chroma location.
>
> I just want to re-encode it. All of this metadata gets stripped.
>
> With this patch set, the value(s) from the first AVFrame fed to
> do_video_out
> will be utilized.
>
> Example 3:
>
> I have a video which has incorrect metadata tagged. Before, I had to set
> the correct data data manually.
>
> With this patch set, since ffmpeg.c takes color related options as
> dictionary
> keys, the AVFrame values will only be utilized if the user has not set the
> option for a given stream. Thus, this use case still works.
>
>
> Jan Ekström (6):
> ffmpeg: deduplicate init_output_stream usage logic
> ffmpeg: move AVFrame time base adjustment into a function
> ffmpeg: move A/V non-streamcopy initialization to a later point
> ffmpeg: pass decoded or filtered AVFrame to output stream
> initialization
> ffmpeg: move field order decision making to encoder initialization
> ffmpeg: add a data size threshold for muxing queue size
>
> doc/ffmpeg.texi | 5 +
> fftools/ffmpeg.c | 249 ++++++++++++------
> fftools/ffmpeg.h | 11 +
> fftools/ffmpeg_opt.c | 8 +
> .../fate/concat-demuxer-extended-lavf-mxf_d10 | 2 +-
> .../fate/concat-demuxer-simple1-lavf-mxf_d10 | 2 +-
> tests/ref/fate/rgb24-mkv | 4 +-
> tests/ref/lavf/mxf_d10 | 2 +-
> tests/ref/lavf/mxf_dv25 | 2 +-
> tests/ref/lavf/mxf_dvcpro50 | 2 +-
> tests/ref/lavf/mxf_opatom | 2 +-
> 11 files changed, 202 insertions(+), 87 deletions(-)
>
> --
> 2.26.2
>
Ping on the patch set or if nothing else on the patch that improves the mux
queue buffer?
As far as I can see this can enable passing through information such as
stereo3d info as long as we get the info through AVFrame side data, but I
do not want to add even more changes to this patch set until it has
proceeded at least somewhat.
Jan
>
More information about the ffmpeg-devel
mailing list