From: "Jan Ekström" <jeebjp@gmail.com> To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org> Subject: Re: [FFmpeg-devel] [PATCH v3 11/12] avcodec/libx264: add support for writing out CLL and MDCV Date: Mon, 21 Aug 2023 23:31:31 +0300 Message-ID: <CAEu79SazQctj+hKkiB37AyWeRzc_22nS3Hq5YuDVQ+zZMhaZsg@mail.gmail.com> (raw) In-Reply-To: <AS8P250MB07448959B86569E34328BE7F8F19A@AS8P250MB0744.EURP250.PROD.OUTLOOK.COM> On Sun, Aug 20, 2023 at 9:54 AM Andreas Rheinhardt <andreas.rheinhardt@outlook.com> wrote: > > Jan Ekström: > > Both of these two structures were first available with X264_BUILD > > 163, so make relevant functionality conditional on the version > > being at least such. > > > > Keep handle_side_data available in all cases as this way X264_init > > does not require additional version based conditions within it. > > > > Finally, add a FATE test which verifies that pass-through of the > > MDCV/CLL side data is working during encoding. > > --- > > libavcodec/libx264.c | 79 ++++++++++++++++++++++++++++++++++++ > > tests/fate/enc_external.mak | 5 +++ > > tests/ref/fate/libx264-hdr10 | 15 +++++++ > > 3 files changed, 99 insertions(+) > > create mode 100644 tests/ref/fate/libx264-hdr10 > > > > diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c > > index 1a7dc7bdd5..30ea3dae4c 100644 > > --- a/libavcodec/libx264.c > > +++ b/libavcodec/libx264.c > > @@ -25,6 +25,7 @@ > > #include "libavutil/eval.h" > > #include "libavutil/internal.h" > > #include "libavutil/opt.h" > > +#include "libavutil/mastering_display_metadata.h" > > #include "libavutil/mem.h" > > #include "libavutil/pixdesc.h" > > #include "libavutil/stereo3d.h" > > @@ -842,6 +843,82 @@ static int convert_pix_fmt(enum AVPixelFormat pix_fmt) > > return AVERROR(EINVAL);\ > > } > > > > +#if X264_BUILD >= 163 > > +static void handle_mdcv(x264_param_t *params, > > + const AVMasteringDisplayMetadata *mdcv) > > +{ > > + int *points[][2] = { > > + { > > + ¶ms->mastering_display.i_red_x, > > + ¶ms->mastering_display.i_red_y > > + }, > > + { > > + ¶ms->mastering_display.i_green_x, > > + ¶ms->mastering_display.i_green_y > > + }, > > + { > > + ¶ms->mastering_display.i_blue_x, > > + ¶ms->mastering_display.i_blue_y > > + }, > > + }; > > + > > + if (!mdcv->has_primaries && !mdcv->has_luminance) > > + return; > > + > > + params->mastering_display.b_mastering_display = 1; > > + > > + if (!mdcv->has_primaries) > > + goto skip_primaries; > > Normally we try to avoid gotos for non-error stuff. You are basically > replacing an ordinary "if" here. > Yes, I think this was mostly me attempting to follow the "early exit if possible" best practice, which mostly brings usefulness that the following code no longer needs to be think about that condition (which often then leads to less indentation etc). You might be right that checking it the other way and just putting the contents into the if might be better in this spot, will adjust and check. > > +static void handle_side_data(AVCodecContext *avctx, x264_param_t *params) > > +{ > > +#if X264_BUILD >= 163 > > + const AVFrameSideDataSet set = avctx->side_data_set; > > + const AVFrameSideData *cll_sd = > > + av_side_data_set_get_item(set, AV_FRAME_DATA_CONTENT_LIGHT_LEVEL); > > + const AVFrameSideData *mdcv_sd = > > + av_side_data_set_get_item(set, AV_FRAME_DATA_MASTERING_DISPLAY_METADATA); > > You can improve code locality by not using two variables for the side > data, but only one: > side_data = av_side_data_set_get_item(set, > AV_FRAME_DATA_CONTENT_LIGHT_LEVEL); > if (side_data) { ... } > side_data = av_side_data_set_get_item(set, > AV_FRAME_DATA_MASTERING_DISPLAY_METADATA); > if (side_data) { ... } This is something where I wonder whether this actually brings performance benefits, and whether those are worth it VS the separation of the pre-optimization variable names? Jan _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
next prev parent reply other threads:[~2023-08-21 20:31 UTC|newest] Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-08-17 21:48 [FFmpeg-devel] [PATCH v3 00/12] encoder AVCodecContext configuration side data Jan Ekström 2023-08-17 21:48 ` [FFmpeg-devel] [PATCH v3 01/12] avutil/frame: add AVFrameSideDataSet for passing sets of " Jan Ekström 2023-08-17 21:48 ` [FFmpeg-devel] [PATCH v3 02/12] avutil/frame: split side data list wiping out to non-AVFrame function Jan Ekström 2023-08-17 21:48 ` [FFmpeg-devel] [PATCH v3 03/12] avutil/frame: add helper for uninitializing side data sets Jan Ekström 2023-08-17 21:48 ` [FFmpeg-devel] [PATCH v3 04/12] avutil/frame: split side_data_from_buf to base and AVFrame func Jan Ekström 2023-08-17 21:48 ` [FFmpeg-devel] [PATCH v3 05/12] avutil/frame: add helper for adding side data to set Jan Ekström 2023-08-18 4:52 ` Andreas Rheinhardt 2023-08-17 21:48 ` [FFmpeg-devel] [PATCH v3 06/12] avutil/frame: add helper for getting side data from set Jan Ekström 2023-08-17 21:48 ` [FFmpeg-devel] [PATCH v3 07/12] avutil/frame: add helper for extending a set of side data Jan Ekström 2023-08-20 9:45 ` Andreas Rheinhardt 2023-08-28 20:30 ` Jan Ekström 2023-08-17 21:48 ` [FFmpeg-devel] [PATCH v3 08/12] avcodec: add side data set to AVCodecContext Jan Ekström 2023-08-17 21:48 ` [FFmpeg-devel] [PATCH v3 09/12] ffmpeg: pass first video AVFrame's side data to encoder Jan Ekström 2023-08-17 21:48 ` [FFmpeg-devel] [PATCH v3 10/12] avcodec/libsvtav1: add support for writing out CLL and MDCV Jan Ekström 2023-08-20 7:11 ` Andreas Rheinhardt 2023-08-21 21:38 ` Jan Ekström 2023-08-21 22:00 ` Andreas Rheinhardt 2023-08-22 21:49 ` Jan Ekström 2023-08-17 21:48 ` [FFmpeg-devel] [PATCH v3 11/12] avcodec/libx264: " Jan Ekström 2023-08-19 16:53 ` Michael Niedermayer 2023-08-19 22:25 ` Jan Ekström 2023-08-20 6:32 ` Andreas Rheinhardt 2023-08-20 13:12 ` Michael Niedermayer 2023-08-21 19:31 ` Jan Ekström 2023-08-21 19:50 ` Andreas Rheinhardt 2023-08-22 13:19 ` Vittorio Giovara 2023-08-22 17:45 ` Andreas Rheinhardt 2023-08-20 6:55 ` Andreas Rheinhardt 2023-08-21 20:31 ` Jan Ekström [this message] 2023-08-17 21:48 ` [FFmpeg-devel] [PATCH v3 12/12] avcodec/libx265: " Jan Ekström 2023-08-20 7:04 ` Andreas Rheinhardt
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=CAEu79SazQctj+hKkiB37AyWeRzc_22nS3Hq5YuDVQ+zZMhaZsg@mail.gmail.com \ --to=jeebjp@gmail.com \ --cc=ffmpeg-devel@ffmpeg.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git