From 2b093d3fee38b54395b69a3f7fd9af8370f16a3b Mon Sep 17 00:00:00 2001 From: Damiano Galassi Date: Thu, 12 Dec 2024 11:36:15 +0100 Subject: [PATCH] libhb: cli: add a way to disable hdr dynamic metadata passthru --- libhb/common.c | 39 +++++++- libhb/encsvtav1.c | 6 +- libhb/encx265.c | 6 +- libhb/handbrake/common.h | 15 ++- libhb/handbrake/preset_builtin.h | 93 ++++++++++++++++++- libhb/muxavformat.c | 2 +- libhb/platform/macosx/encvt.c | 6 +- libhb/preset.c | 7 +- libhb/work.c | 33 +++---- macosx/HBJob+HBJobConversion.m | 17 ++++ macosx/HBVideo.h | 9 ++ macosx/HBVideo.m | 43 ++++++++- preset/preset_builtin.json | 89 ++++++++++++++++++ preset/preset_builtin.list | 2 +- preset/preset_cli_default.json | 1 + preset/preset_template.json | 1 + test/test.c | 49 +++++++++- .../Interop/Json/Presets/HBPreset.cs | 5 + .../Services/Encode/Model/EncodeTask.cs | 2 + .../Presets/Factories/JsonPresetFactory.cs | 2 + 20 files changed, 386 insertions(+), 41 deletions(-) diff --git a/libhb/common.c b/libhb/common.c index 0cf0eec36d63..d68c2bf65424 100644 --- a/libhb/common.c +++ b/libhb/common.c @@ -1707,6 +1707,41 @@ int hb_video_multipass_is_supported(uint32_t codec, int constant_quality) } } +int hb_video_hdr_dynamic_metadata_is_supported(uint32_t codec, int hdr_dynamic_metadata, int profile) +{ + if (hdr_dynamic_metadata == HB_HDR_DYNAMIC_METADATA_HDR10PLUS) + { + switch (codec) + { + case HB_VCODEC_X265_10BIT: + case HB_VCODEC_VT_H265_10BIT: + case HB_VCODEC_SVT_AV1_10BIT: + return 1; + } + } +#if HB_PROJECT_FEATURE_LIBDOVI + else if (hdr_dynamic_metadata == HB_HDR_DYNAMIC_METADATA_DOVI) + { + if (profile != 5 && + profile != 7 && + profile != 8 && + profile != 10) + { + return 0; + } + + switch (codec) + { + case HB_VCODEC_X265_10BIT: + case HB_VCODEC_VT_H265_10BIT: + case HB_VCODEC_SVT_AV1_10BIT: + return 1; + } + } +#endif + return 0; +} + int hb_video_encoder_is_supported(int encoder) { const hb_encoder_t *video_encoder = NULL; @@ -4446,8 +4481,8 @@ static void job_setup(hb_job_t * job, hb_title_t * title) job->coll = title->coll; job->ambient = title->ambient; job->dovi = title->dovi; - job->passthru_dynamic_hdr_metadata |= title->dovi.dv_profile ? DOVI : NONE; - job->passthru_dynamic_hdr_metadata |= title->hdr_10_plus ? HDR_10_PLUS : NONE; + job->passthru_dynamic_hdr_metadata |= title->dovi.dv_profile ? HB_HDR_DYNAMIC_METADATA_DOVI : HB_HDR_DYNAMIC_METADATA_NONE; + job->passthru_dynamic_hdr_metadata |= title->hdr_10_plus ? HB_HDR_DYNAMIC_METADATA_HDR10PLUS : HB_HDR_DYNAMIC_METADATA_NONE; job->mux = HB_MUX_MP4; diff --git a/libhb/encsvtav1.c b/libhb/encsvtav1.c index a2f18034f411..45a1e3482402 100644 --- a/libhb/encsvtav1.c +++ b/libhb/encsvtav1.c @@ -329,7 +329,7 @@ int encsvtInit(hb_work_object_t *w, hb_job_t *job) } // Update and set Dolby Vision level - if (job->passthru_dynamic_hdr_metadata & DOVI) + if (job->passthru_dynamic_hdr_metadata & HB_HDR_DYNAMIC_METADATA_DOVI) { int level_idx, high_tier; hb_parse_av1_extradata(*w->extradata, &level_idx, &high_tier); @@ -486,7 +486,7 @@ static int send(hb_work_object_t *w, hb_buffer_t *in) for (int i = 0; i < in->nb_side_data; i++) { const AVFrameSideData *side_data = in->side_data[i]; - if (job->passthru_dynamic_hdr_metadata & HDR_10_PLUS && + if (job->passthru_dynamic_hdr_metadata & HB_HDR_DYNAMIC_METADATA_HDR10PLUS && side_data->type == AV_FRAME_DATA_DYNAMIC_HDR_PLUS) { uint8_t *payload = NULL; @@ -501,7 +501,7 @@ static int send(hb_work_object_t *w, hb_buffer_t *in) svt_add_metadata(headerPtr, EB_AV1_METADATA_TYPE_ITUT_T35, payload, playload_size); av_freep(&payload); } - else if (job->passthru_dynamic_hdr_metadata & DOVI && + else if (job->passthru_dynamic_hdr_metadata & HB_HDR_DYNAMIC_METADATA_DOVI && side_data->type == AV_FRAME_DATA_DOVI_RPU_BUFFER_T35) { svt_add_metadata(headerPtr, EB_AV1_METADATA_TYPE_ITUT_T35, side_data->data, side_data->size); diff --git a/libhb/encx265.c b/libhb/encx265.c index 0b15838ac6da..5a98f6eb89c3 100644 --- a/libhb/encx265.c +++ b/libhb/encx265.c @@ -493,7 +493,7 @@ int encx265Init(hb_work_object_t *w, hb_job_t *job) /* * Update and set Dolby Vision level */ - if (job->passthru_dynamic_hdr_metadata & DOVI) + if (job->passthru_dynamic_hdr_metadata & HB_HDR_DYNAMIC_METADATA_DOVI) { char dolbyVisionProfile[256]; snprintf(dolbyVisionProfile, sizeof(dolbyVisionProfile), @@ -713,7 +713,7 @@ static hb_buffer_t* x265_encode(hb_work_object_t *w, hb_buffer_t *in) for (int i = 0; i < in->nb_side_data; i++) { const AVFrameSideData *side_data = in->side_data[i]; - if (job->passthru_dynamic_hdr_metadata & HDR_10_PLUS && + if (job->passthru_dynamic_hdr_metadata & HB_HDR_DYNAMIC_METADATA_HDR10PLUS && side_data->type == AV_FRAME_DATA_DYNAMIC_HDR_PLUS) { uint8_t *payload = NULL; @@ -743,7 +743,7 @@ static hb_buffer_t* x265_encode(hb_work_object_t *w, hb_buffer_t *in) sei_payload->payloadType = USER_DATA_REGISTERED_ITU_T_T35; sei->numPayloads++; } - if (job->passthru_dynamic_hdr_metadata & DOVI && + if (job->passthru_dynamic_hdr_metadata & HB_HDR_DYNAMIC_METADATA_DOVI && side_data->type == AV_FRAME_DATA_DOVI_RPU_BUFFER) { x265_dolby_vision_rpu *rpu = &pic_in.rpu; diff --git a/libhb/handbrake/common.h b/libhb/handbrake/common.h index 79a787012d83..bc380613c154 100644 --- a/libhb/handbrake/common.h +++ b/libhb/handbrake/common.h @@ -371,6 +371,14 @@ struct hb_dovi_conf_s unsigned dv_bl_signal_compatibility_id; }; +typedef enum +{ + HB_HDR_DYNAMIC_METADATA_NONE = 0, + HB_HDR_DYNAMIC_METADATA_HDR10PLUS = 1 << 1, + HB_HDR_DYNAMIC_METADATA_DOVI = 1 << 2, + HB_HDR_DYNAMIC_METADATA_ALL = HB_HDR_DYNAMIC_METADATA_HDR10PLUS | HB_HDR_DYNAMIC_METADATA_DOVI +} hb_hdr_dynamic_metadata_mode_t; + int hb_str_ends_with(const char *base, const char *str); /******************************************************************************* @@ -437,6 +445,11 @@ int hb_video_quality_is_supported(uint32_t codec); int hb_video_bitrate_is_supported(uint32_t codec); int hb_video_multipass_is_supported(uint32_t codec, int constant_quality); +int hb_video_hdr_dynamic_metadata_is_supported(uint32_t codec, int hdr_dynamic_metadata, int profile); + +int hb_hdr_dynamic_metadata_get_from_name(const char *name); +const char* hb_hdr_dynamic_metadata_get_name(int hdr_dynamic_metadata); + int hb_video_encoder_is_supported(int encoder); int hb_video_encoder_get_count_of_analysis_passes(int encoder); int hb_video_encoder_pix_fmt_is_supported(int encoder, int pix_fmt, const char *profile); @@ -750,7 +763,7 @@ struct hb_job_s hb_ambient_viewing_environment_metadata_t ambient; hb_dovi_conf_t dovi; - enum {NONE = 0x0, ALL = 0x3, DOVI = 0x1, HDR_10_PLUS = 0x2} passthru_dynamic_hdr_metadata; + hb_hdr_dynamic_metadata_mode_t passthru_dynamic_hdr_metadata; hb_list_t * list_chapter; diff --git a/libhb/handbrake/preset_builtin.h b/libhb/handbrake/preset_builtin.h index 1a77a2719d20..f31a59532e6f 100644 --- a/libhb/handbrake/preset_builtin.h +++ b/libhb/handbrake/preset_builtin.h @@ -99,6 +99,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"9\",\n" " \"VideoProfile\": \"main\",\n" " \"VideoQSVDecode\": false,\n" @@ -206,6 +207,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"strong-intra-smoothing=0:rect=0:aq-mode=1:rd=4:psy-rd=0.75:psy-rdoq=4.0:rdoq-level=1:rskip=2\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"superfast\",\n" " \"VideoProfile\": \"main10\",\n" " \"VideoQSVDecode\": false,\n" @@ -312,6 +314,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"4.0\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"veryfast\",\n" " \"VideoProfile\": \"main\",\n" " \"VideoQSVDecode\": false,\n" @@ -418,6 +421,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"3.1\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"veryfast\",\n" " \"VideoProfile\": \"main\",\n" " \"VideoQSVDecode\": false,\n" @@ -524,6 +528,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"3.1\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"veryfast\",\n" " \"VideoProfile\": \"main\",\n" " \"VideoQSVDecode\": false,\n" @@ -630,6 +635,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"3.1\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"veryfast\",\n" " \"VideoProfile\": \"main\",\n" " \"VideoQSVDecode\": false,\n" @@ -737,6 +743,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"8\",\n" " \"VideoProfile\": \"main\",\n" " \"VideoQSVDecode\": false,\n" @@ -844,6 +851,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"strong-intra-smoothing=0:rect=0:aq-mode=1:rd=4:psy-rd=0.75:psy-rdoq=4.0:rdoq-level=1:rskip=2\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"faster\",\n" " \"VideoProfile\": \"main10\",\n" " \"VideoQSVDecode\": false,\n" @@ -950,6 +958,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"4.0\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"fast\",\n" " \"VideoProfile\": \"main\",\n" " \"VideoQSVDecode\": false,\n" @@ -1056,6 +1065,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"3.1\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"fast\",\n" " \"VideoProfile\": \"main\",\n" " \"VideoQSVDecode\": false,\n" @@ -1162,6 +1172,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"3.1\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"fast\",\n" " \"VideoProfile\": \"main\",\n" " \"VideoQSVDecode\": false,\n" @@ -1268,6 +1279,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"3.1\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"fast\",\n" " \"VideoProfile\": \"main\",\n" " \"VideoQSVDecode\": false,\n" @@ -1388,6 +1400,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"7\",\n" " \"VideoProfile\": \"main\",\n" " \"VideoQSVDecode\": false,\n" @@ -1508,6 +1521,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"strong-intra-smoothing=0:rect=0:aq-mode=1:rd=4:psy-rd=0.75:psy-rdoq=4.0:rdoq-level=1:rskip=2\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"main10\",\n" " \"VideoQSVDecode\": false,\n" @@ -1628,6 +1642,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"4.0\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"slow\",\n" " \"VideoProfile\": \"high\",\n" " \"VideoQSVDecode\": false,\n" @@ -1748,6 +1763,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"3.1\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"slow\",\n" " \"VideoProfile\": \"high\",\n" " \"VideoQSVDecode\": false,\n" @@ -1868,6 +1884,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"3.1\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"slow\",\n" " \"VideoProfile\": \"high\",\n" " \"VideoQSVDecode\": false,\n" @@ -1988,6 +2005,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"3.1\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"slow\",\n" " \"VideoProfile\": \"high\",\n" " \"VideoQSVDecode\": false,\n" @@ -2109,6 +2127,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"5\",\n" " \"VideoProfile\": \"main\",\n" " \"VideoQSVDecode\": false,\n" @@ -2230,6 +2249,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"strong-intra-smoothing=0:rect=0:aq-mode=1:rd=4:psy-rd=0.75:psy-rdoq=4.0:rdoq-level=1:rskip=2\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"slow\",\n" " \"VideoProfile\": \"main10\",\n" " \"VideoQSVDecode\": false,\n" @@ -2350,6 +2370,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"4.0\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"ref=5:bframes=5\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"veryslow\",\n" " \"VideoProfile\": \"high\",\n" " \"VideoQSVDecode\": false,\n" @@ -2470,6 +2491,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"3.1\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"ref=5:bframes=5\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"veryslow\",\n" " \"VideoProfile\": \"high\",\n" " \"VideoQSVDecode\": false,\n" @@ -2590,6 +2612,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"3.1\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"ref=5:bframes=5\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"veryslow\",\n" " \"VideoProfile\": \"high\",\n" " \"VideoQSVDecode\": false,\n" @@ -2710,6 +2733,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"3.1\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"ref=5:bframes=5\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"veryslow\",\n" " \"VideoProfile\": \"high\",\n" " \"VideoQSVDecode\": false,\n" @@ -2823,6 +2847,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"5.2\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"keyint=30:min-keyint=15:ref=1:bframes=2:b-pyramid=none\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"high\",\n" " \"VideoQSVDecode\": false,\n" @@ -2929,6 +2954,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"5.2\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"keyint=30:min-keyint=15:ref=1:bframes=2:b-pyramid=none\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"high\",\n" " \"VideoQSVDecode\": false,\n" @@ -3035,6 +3061,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"4.2\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"keyint=30:min-keyint=15:ref=1:bframes=2:b-pyramid=none\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"high\",\n" " \"VideoQSVDecode\": false,\n" @@ -3141,6 +3168,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"3.2\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"keyint=30:min-keyint=15:ref=1:bframes=2:b-pyramid=none\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"high\",\n" " \"VideoQSVDecode\": false,\n" @@ -3247,6 +3275,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"4.2\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"qcomp=0.5:aq-mode=2:aq-strength=0.8:bframes=2:b-adapt=2:b-pyramid=0\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"high\",\n" " \"VideoQSVDecode\": false,\n" @@ -3353,6 +3382,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"3.2\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"qcomp=0.5:aq-mode=2:aq-strength=0.8:bframes=2:b-adapt=2:b-pyramid=0\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"high\",\n" " \"VideoQSVDecode\": false,\n" @@ -3459,6 +3489,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"3.2\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"qcomp=0.5:aq-mode=2:aq-strength=0.8:bframes=2:b-adapt=2:b-pyramid=0\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"high\",\n" " \"VideoQSVDecode\": false,\n" @@ -3565,6 +3596,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"3.2\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"qcomp=0.5:aq-mode=2:aq-strength=0.8:bframes=2:b-adapt=2:b-pyramid=0\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"high\",\n" " \"VideoQSVDecode\": false,\n" @@ -3692,6 +3724,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"strong-intra-smoothing=0:rect=0:aq-mode=1:rd=4:psy-rd=0.75:psy-rdoq=4.0:rdoq-level=1:rskip=2\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"slow\",\n" " \"VideoProfile\": \"main10\",\n" " \"VideoQSVDecode\": false,\n" @@ -3812,6 +3845,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"4.0\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"main\",\n" " \"VideoQSVDecode\": false,\n" @@ -3918,6 +3952,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"3.1\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"high\",\n" " \"VideoQSVDecode\": false,\n" @@ -4024,6 +4059,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"4.0\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"main\",\n" " \"VideoQSVDecode\": false,\n" @@ -4130,6 +4166,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"3.1\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"main\",\n" " \"VideoQSVDecode\": false,\n" @@ -4236,6 +4273,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"3.0\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"main\",\n" " \"VideoQSVDecode\": false,\n" @@ -4342,6 +4380,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"3.0\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"main\",\n" " \"VideoQSVDecode\": false,\n" @@ -4462,6 +4501,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"strong-intra-smoothing=0:rect=0:aq-mode=1:rd=4:psy-rd=0.75:psy-rdoq=4.0:rdoq-level=1:rskip=2\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"slow\",\n" " \"VideoProfile\": \"main10\",\n" " \"VideoQSVDecode\": false,\n" @@ -4582,6 +4622,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"4.2\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"high\",\n" " \"VideoQSVDecode\": false,\n" @@ -4702,6 +4743,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"4.0\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"high\",\n" " \"VideoQSVDecode\": false,\n" @@ -4822,6 +4864,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"3.1\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"high\",\n" " \"VideoQSVDecode\": false,\n" @@ -4942,6 +4985,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"3.1\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"qpmin=4:cabac=0:ref=2:b-pyramid=none:weightb=0:weightp=0:vbv-maxrate=9500:vbv-bufsize=9500\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"high\",\n" " \"VideoQSVDecode\": false,\n" @@ -5062,6 +5106,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"strong-intra-smoothing=0:rect=0:aq-mode=1:rd=4:psy-rd=0.75:psy-rdoq=4.0:rdoq-level=1:rskip=2\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"slow\",\n" " \"VideoProfile\": \"main10\",\n" " \"VideoQSVDecode\": false,\n" @@ -5182,6 +5227,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"4.2\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"high\",\n" " \"VideoQSVDecode\": false,\n" @@ -5302,6 +5348,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"4.0\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"high\",\n" " \"VideoQSVDecode\": false,\n" @@ -5422,6 +5469,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"5.2\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"main\",\n" " \"VideoQSVDecode\": false,\n" @@ -5542,6 +5590,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"4.0\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"high\",\n" " \"VideoQSVDecode\": false,\n" @@ -5648,6 +5697,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"3.1\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"main\",\n" " \"VideoQSVDecode\": false,\n" @@ -5754,6 +5804,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"3.1\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"main\",\n" " \"VideoQSVDecode\": false,\n" @@ -5877,6 +5928,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"strong-intra-smoothing=0:rect=0:aq-mode=1:rd=4:psy-rd=0.75:psy-rdoq=4.0:rdoq-level=1:rskip=2\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"slow\",\n" " \"VideoProfile\": \"main10\",\n" " \"VideoQSVDecode\": false,\n" @@ -5997,6 +6049,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"4.0\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"high\",\n" " \"VideoQSVDecode\": false,\n" @@ -6117,6 +6170,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"3.1\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"main\",\n" " \"VideoQSVDecode\": false,\n" @@ -6223,6 +6277,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"3.1\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"main\",\n" " \"VideoQSVDecode\": false,\n" @@ -6329,6 +6384,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"3.1\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"main\",\n" " \"VideoQSVDecode\": false,\n" @@ -6449,6 +6505,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"4.0\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"high\",\n" " \"VideoQSVDecode\": false,\n" @@ -6560,6 +6617,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"8\",\n" " \"VideoProfile\": \"main\",\n" " \"VideoQSVDecode\": false,\n" @@ -6666,6 +6724,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"strong-intra-smoothing=0:rect=0:aq-mode=1:rd=4:psy-rd=0.75:psy-rdoq=4.0:rdoq-level=1:rskip=2\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"slow\",\n" " \"VideoProfile\": \"main10\",\n" " \"VideoQSVDecode\": false,\n" @@ -6772,6 +6831,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"strong-intra-smoothing=0:rect=0:aq-mode=1:rd=4:psy-rd=0.75:psy-rdoq=4.0:rdoq-level=1:rskip=2\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"slow\",\n" " \"VideoProfile\": \"main10\",\n" " \"VideoQSVDecode\": false,\n" @@ -6878,6 +6938,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"strong-intra-smoothing=0:rect=0:aq-mode=1:rd=4:psy-rd=0.75:psy-rdoq=4.0:rdoq-level=1:rskip=2\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"slow\",\n" " \"VideoProfile\": \"main10\",\n" " \"VideoQSVDecode\": false,\n" @@ -6984,6 +7045,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"strong-intra-smoothing=0:rect=0:aq-mode=1:rd=4:psy-rd=0.75:psy-rdoq=4.0:rdoq-level=1:rskip=2\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"slow\",\n" " \"VideoProfile\": \"main10\",\n" " \"VideoQSVDecode\": false,\n" @@ -7090,6 +7152,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"strong-intra-smoothing=0:rect=0:aq-mode=1:rd=4:psy-rd=0.75:psy-rdoq=4.0:rdoq-level=1:rskip=2\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"slow\",\n" " \"VideoProfile\": \"main10\",\n" " \"VideoQSVDecode\": false,\n" @@ -7196,6 +7259,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"5.2\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"main\",\n" " \"VideoQSVDecode\": false,\n" @@ -7302,6 +7366,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"4.0\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"main\",\n" " \"VideoQSVDecode\": false,\n" @@ -7408,6 +7473,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"3.1\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"main\",\n" " \"VideoQSVDecode\": false,\n" @@ -7514,6 +7580,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"3.1\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"main\",\n" " \"VideoQSVDecode\": false,\n" @@ -7620,6 +7687,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"3.1\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"main\",\n" " \"VideoQSVDecode\": false,\n" @@ -7724,6 +7792,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"auto\",\n" " \"VideoQSVDecode\": false,\n" @@ -7828,6 +7897,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"auto\",\n" " \"VideoQSVDecode\": false,\n" @@ -7932,6 +8002,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"auto\",\n" " \"VideoQSVDecode\": false,\n" @@ -8036,6 +8107,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"auto\",\n" " \"VideoQSVDecode\": false,\n" @@ -8140,6 +8212,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"auto\",\n" " \"VideoQSVDecode\": false,\n" @@ -8253,6 +8326,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": false,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"speed\",\n" " \"VideoProfile\": \"auto\",\n" " \"VideoQSVDecode\": true,\n" @@ -8359,6 +8433,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": false,\n" " \"VideoOptionExtra\": \"rc-lookahead=10\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"auto\",\n" " \"VideoQSVDecode\": false,\n" @@ -8465,6 +8540,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": false,\n" " \"VideoOptionExtra\": \"rc-lookahead=10\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"auto\",\n" " \"VideoQSVDecode\": false,\n" @@ -8571,6 +8647,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": false,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"speed\",\n" " \"VideoProfile\": \"auto\",\n" " \"VideoQSVDecode\": true,\n" @@ -8677,6 +8754,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": false,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"speed\",\n" " \"VideoProfile\": \"auto\",\n" " \"VideoQSVDecode\": true,\n" @@ -8783,6 +8861,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": false,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"balanced\",\n" " \"VideoProfile\": \"main\",\n" " \"VideoQSVDecode\": false,\n" @@ -8889,6 +8968,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": false,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"balanced\",\n" " \"VideoProfile\": \"main\",\n" " \"VideoQSVDecode\": false,\n" @@ -8995,6 +9075,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": false,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"balanced\",\n" " \"VideoProfile\": \"main\",\n" " \"VideoQSVDecode\": false,\n" @@ -9101,6 +9182,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": false,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"balanced\",\n" " \"VideoProfile\": \"main\",\n" " \"VideoQSVDecode\": false,\n" @@ -9207,6 +9289,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": false,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"speed\",\n" " \"VideoProfile\": \"auto\",\n" " \"VideoQSVDecode\": false,\n" @@ -9313,6 +9396,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": false,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"speed\",\n" " \"VideoProfile\": \"auto\",\n" " \"VideoQSVDecode\": false,\n" @@ -9426,6 +9510,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"keyint=12:min-keyint=1:ref=1:bframes=0:qcomp=0.8:aq-strength=0.5:dct-decimate=0:fast-pskip=0:deblock=-2,-2\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"fast\",\n" " \"VideoProfile\": \"high\",\n" " \"VideoQSVDecode\": false,\n" @@ -9532,6 +9617,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"keyint=12:min-keyint=1:ref=1:bframes=0:qcomp=0.8:aq-strength=0.5:dct-decimate=0:fast-pskip=0:deblock=-2,-2\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"fast\",\n" " \"VideoProfile\": \"high\",\n" " \"VideoQSVDecode\": false,\n" @@ -9638,6 +9724,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"keyint=1:min-keyint=1:ref=1:bframes=0:qcomp=0.8:aq-strength=0.5\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"superfast\",\n" " \"VideoProfile\": \"high\",\n" " \"VideoQSVDecode\": false,\n" @@ -9744,6 +9831,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"keyint=1:min-keyint=1:ref=1:bframes=0:qcomp=0.8:aq-strength=0.5\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"superfast\",\n" " \"VideoProfile\": \"high\",\n" " \"VideoQSVDecode\": false,\n" @@ -9863,6 +9951,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": true,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"preservation\",\n" " \"VideoProfile\": \"\",\n" " \"VideoQSVDecode\": false,\n" @@ -9984,6 +10073,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": false,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"auto\",\n" " \"VideoQSVDecode\": false,\n" @@ -10117,6 +10207,7 @@ const char hb_builtin_presets_json[] = " \"VideoLevel\": \"auto\",\n" " \"VideoMultiPass\": false,\n" " \"VideoOptionExtra\": \"\",\n" +" \"VideoPasshtruHDRDynamicMetadata\": \"all\",\n" " \"VideoPreset\": \"medium\",\n" " \"VideoProfile\": \"auto\",\n" " \"VideoQSVDecode\": false,\n" @@ -10128,7 +10219,7 @@ const char hb_builtin_presets_json[] = " \"x264Option\": \"\",\n" " \"x264UseAdvancedOptions\": false\n" " },\n" -" \"VersionMajor\": 59,\n" +" \"VersionMajor\": 60,\n" " \"VersionMicro\": 0,\n" " \"VersionMinor\": 0\n" " }\n" diff --git a/libhb/muxavformat.c b/libhb/muxavformat.c index 4f4155c4e5d0..ce8673075557 100644 --- a/libhb/muxavformat.c +++ b/libhb/muxavformat.c @@ -461,7 +461,7 @@ static int avformatInit( hb_mux_object_t * m ) sizeof(AVAmbientViewingEnvironment), 0); } - if (job->passthru_dynamic_hdr_metadata & DOVI) + if (job->passthru_dynamic_hdr_metadata & HB_HDR_DYNAMIC_METADATA_DOVI) { if (job->dovi.dv_profile == 5 && job->mux == HB_MUX_AV_MP4) { diff --git a/libhb/platform/macosx/encvt.c b/libhb/platform/macosx/encvt.c index f057cd04c0c4..37d59302e8e9 100644 --- a/libhb/platform/macosx/encvt.c +++ b/libhb/platform/macosx/encvt.c @@ -1637,7 +1637,7 @@ int encvt_init(hb_work_object_t *w, hb_job_t *job) // Read the actual level and tier and set // the Dolby Vision level and data limits - if (job->passthru_dynamic_hdr_metadata & DOVI) + if (job->passthru_dynamic_hdr_metadata & HB_HDR_DYNAMIC_METADATA_DOVI) { int level_idc, high_tier; hb_parse_h265_extradata(*w->extradata, &level_idc, &high_tier); @@ -1814,7 +1814,7 @@ static void insert_dynamic_metadata(hb_work_private_t *pv, CMSampleBufferRef sam } } - if (pv->job->passthru_dynamic_hdr_metadata & HDR_10_PLUS) + if (pv->job->passthru_dynamic_hdr_metadata & HB_HDR_DYNAMIC_METADATA_HDR10PLUS) { CFDataRef hdrPlus = CMGetAttachment(sampleBuffer, CFSTR("HB_HDR_PLUS"), NULL); if (hdrPlus != NULL) @@ -1833,7 +1833,7 @@ static void insert_dynamic_metadata(hb_work_private_t *pv, CMSampleBufferRef sam hb_nal_t nals[1]; size_t nals_count = 0; - if (pv->job->passthru_dynamic_hdr_metadata & DOVI) + if (pv->job->passthru_dynamic_hdr_metadata & HB_HDR_DYNAMIC_METADATA_DOVI) { CFDataRef rpu = CMGetAttachment(sampleBuffer, CFSTR("HB_DOVI_RPU"), NULL); if (rpu != NULL) diff --git a/libhb/preset.c b/libhb/preset.c index 8b5f16b1c52e..2e309f339212 100644 --- a/libhb/preset.c +++ b/libhb/preset.c @@ -2050,7 +2050,12 @@ int hb_preset_apply_video(const hb_dict_t *preset, hb_dict_t *job_dict) hb_value_xform(hb_dict_get(preset, "VideoTurboMultiPass"), HB_VALUE_TYPE_BOOL)); } - + + if ((value = hb_dict_get(preset, "VideoPasshtruHDRDynamicMetadata")) != NULL) + { + hb_dict_set(video_dict, "VideoPasshtruHDRDynamicMetadata", hb_value_dup(value)); + } + if ((value = hb_dict_get(preset, "VideoHWDecode")) != NULL) { hb_dict_set(video_dict, "HardwareDecode", hb_value_xform(value, HB_VALUE_TYPE_INT)); diff --git a/libhb/work.c b/libhb/work.c index 064817bbf592..149e1c73a8d9 100644 --- a/libhb/work.c +++ b/libhb/work.c @@ -699,7 +699,7 @@ void hb_display_job_info(hb_job_t *job) } } - if (job->passthru_dynamic_hdr_metadata & DOVI) + if (job->passthru_dynamic_hdr_metadata & HB_HDR_DYNAMIC_METADATA_DOVI) { hb_log(" + dolby vision configuration record: version: %d.%d, profile: %d, level: %d, rpu flag: %d, el flag: %d, bl flag: %d, compatibility id: %d", job->dovi.dv_version_major, @@ -712,7 +712,7 @@ void hb_display_job_info(hb_job_t *job) job->dovi.dv_bl_signal_compatibility_id); } - if (job->passthru_dynamic_hdr_metadata & HDR_10_PLUS) + if (job->passthru_dynamic_hdr_metadata & HB_HDR_DYNAMIC_METADATA_HDR10PLUS) { hb_log(" + hdr10+ dynamic metadata"); @@ -1510,26 +1510,17 @@ static void sanitize_dynamic_hdr_metadata_passthru(hb_job_t *job) if (hb_filter_find(list, HB_FILTER_ROTATE) != NULL || hb_filter_find(list, HB_FILTER_COLORSPACE) != NULL) { - job->passthru_dynamic_hdr_metadata = NONE; + job->passthru_dynamic_hdr_metadata = HB_HDR_DYNAMIC_METADATA_NONE; return; } - if (job->vcodec != HB_VCODEC_X265_10BIT && - job->vcodec != HB_VCODEC_VT_H265_10BIT && - job->vcodec != HB_VCODEC_SVT_AV1_10BIT) + if (hb_video_hdr_dynamic_metadata_is_supported(job->vcodec,HB_HDR_DYNAMIC_METADATA_HDR10PLUS, 0) == 0) { - job->passthru_dynamic_hdr_metadata &= ~HDR_10_PLUS; + job->passthru_dynamic_hdr_metadata &= ~HB_HDR_DYNAMIC_METADATA_HDR10PLUS; } - - if ((job->dovi.dv_profile != 5 && - job->dovi.dv_profile != 7 && - job->dovi.dv_profile != 8 && - job->dovi.dv_profile != 10) || - (job->vcodec != HB_VCODEC_X265_10BIT && - job->vcodec != HB_VCODEC_VT_H265_10BIT && - job->vcodec != HB_VCODEC_SVT_AV1_10BIT)) + if (hb_video_hdr_dynamic_metadata_is_supported(job->vcodec, HB_HDR_DYNAMIC_METADATA_DOVI, job->dovi.dv_profile) == 0) { - job->passthru_dynamic_hdr_metadata &= ~DOVI; + job->passthru_dynamic_hdr_metadata &= ~HB_HDR_DYNAMIC_METADATA_DOVI; } if ((job->dovi.dv_profile == 8 || job->dovi.dv_profile == 10) && @@ -1538,11 +1529,11 @@ static void sanitize_dynamic_hdr_metadata_passthru(hb_job_t *job) if (job->mastering.has_primaries == 0 && job->mastering.has_luminance == 0) { hb_log("work: missing mastering metadata, disabling Dolby Vision"); - job->passthru_dynamic_hdr_metadata &= ~DOVI; + job->passthru_dynamic_hdr_metadata &= ~HB_HDR_DYNAMIC_METADATA_DOVI; } } - if (job->passthru_dynamic_hdr_metadata & DOVI) + if (job->passthru_dynamic_hdr_metadata & HB_HDR_DYNAMIC_METADATA_DOVI) { #if HB_PROJECT_FEATURE_LIBDOVI int mode = 0; @@ -1626,7 +1617,7 @@ static void sanitize_dynamic_hdr_metadata_passthru(hb_job_t *job) free(settings); #else hb_log("work: libdovi not available, disabling Dolby Vision"); - job->passthru_dynamic_hdr_metadata &= ~DOVI; + job->passthru_dynamic_hdr_metadata &= ~HB_HDR_DYNAMIC_METADATA_DOVI; #endif } } @@ -1734,7 +1725,7 @@ static void do_job(hb_job_t *job) init.color_matrix = title->color_matrix; // Dolby Vision profile 5 requires full range // TODO: find a better way to handle this - init.color_range = job->passthru_dynamic_hdr_metadata & DOVI && + init.color_range = job->passthru_dynamic_hdr_metadata & HB_HDR_DYNAMIC_METADATA_DOVI && (job->dovi.dv_profile == 5 || (job->dovi.dv_profile == 10 && job->dovi.dv_bl_signal_compatibility_id == 0)) ? title->color_range : AVCOL_RANGE_MPEG; @@ -1828,7 +1819,7 @@ static void do_job(hb_job_t *job) hb_reduce(&job->vrate.num, &job->vrate.den, job->vrate.num, job->vrate.den); - if (job->passthru_dynamic_hdr_metadata & DOVI) + if (job->passthru_dynamic_hdr_metadata & HB_HDR_DYNAMIC_METADATA_DOVI) { // Dolby Vision level needs to be updated now that // the final width, height and frame rate is known diff --git a/macosx/HBJob+HBJobConversion.m b/macosx/HBJob+HBJobConversion.m index 87f73aab7a17..7183a376f2e0 100644 --- a/macosx/HBJob+HBJobConversion.m +++ b/macosx/HBJob+HBJobConversion.m @@ -154,6 +154,23 @@ - (hb_job_t *)hb_job } job->multipass = self.video.multiPass; + switch (self.video.passthruHDRDynamicMetadata) + { + case HBVideoHDRDynamicMetadataPassthruOff: + job->passthru_dynamic_hdr_metadata = HB_HDR_DYNAMIC_METADATA_NONE; + break; + case HBVideoHDRDynamicMetadataPassthruHDR10Plus: + job->passthru_dynamic_hdr_metadata = HB_HDR_DYNAMIC_METADATA_HDR10PLUS; + break; + case HBVideoHDRDynamicMetadataPassthruDolbyVision: + job->passthru_dynamic_hdr_metadata = HB_HDR_DYNAMIC_METADATA_DOVI; + break; + case HBVideoHDRDynamicMetadataPassthruAll: + default: + job->passthru_dynamic_hdr_metadata = HB_HDR_DYNAMIC_METADATA_ALL; + break; + } + if (hb_video_encoder_get_presets(self.video.encoder) != NULL) { // advanced x264/x265 options diff --git a/macosx/HBVideo.h b/macosx/HBVideo.h index cf856e732457..1140bc5192e5 100644 --- a/macosx/HBVideo.h +++ b/macosx/HBVideo.h @@ -21,6 +21,13 @@ typedef NS_ENUM(NSUInteger, HBVideoFrameRateMode) { HBVideoFrameRateModeCFR, }; +typedef NS_ENUM(NSUInteger, HBVideoHDRDynamicMetadataPassthru) { + HBVideoHDRDynamicMetadataPassthruOff, + HBVideoHDRDynamicMetadataPassthruHDR10Plus, + HBVideoHDRDynamicMetadataPassthruDolbyVision, + HBVideoHDRDynamicMetadataPassthruAll +}; + extern NSString * const HBVideoChangedNotification; /** @@ -40,6 +47,8 @@ extern NSString * const HBVideoChangedNotification; @property (nonatomic, readwrite) BOOL multiPass; @property (nonatomic, readwrite) BOOL turboMultiPass; +@property (nonatomic, readwrite) HBVideoHDRDynamicMetadataPassthru passthruHDRDynamicMetadata; + /** * Encoder specifics options */ diff --git a/macosx/HBVideo.m b/macosx/HBVideo.m index c8be453a34fd..b151467c4f96 100644 --- a/macosx/HBVideo.m +++ b/macosx/HBVideo.m @@ -31,11 +31,13 @@ @implementation HBVideo - (instancetype)initWithJob:(HBJob *)job { self = [super init]; - if (self) { + if (self) + { _encoder = HB_VCODEC_X264; _avgBitrate = 1000; _quality = 18.0; _qualityMaxValue = 51.0f; + _passthruHDRDynamicMetadata = HBVideoHDRDynamicMetadataPassthruAll; _job = job; _preset = @"medium"; @@ -479,6 +481,8 @@ - (instancetype)copyWithZone:(NSZone *)zone copy->_multiPass = _multiPass; copy->_turboMultiPass = _turboMultiPass; + copy->_passthruHDRDynamicMetadata = _passthruHDRDynamicMetadata; + copy->_preset = [_preset copy]; copy->_tune = [_tune copy]; copy->_profile = [_profile copy]; @@ -518,6 +522,8 @@ - (void)encodeWithCoder:(NSCoder *)coder encodeBool(_multiPass); encodeBool(_turboMultiPass); + encodeInteger(_passthruHDRDynamicMetadata); + encodeObject(_preset); encodeObject(_tune); encodeObject(_profile); @@ -546,6 +552,8 @@ - (instancetype)initWithCoder:(NSCoder *)decoder decodeBool(_multiPass); decodeBool(_turboMultiPass); + decodeInteger(_frameRateMode); if (_passthruHDRDynamicMetadata < HBVideoHDRDynamicMetadataPassthruOff || _passthruHDRDynamicMetadata > HBVideoHDRDynamicMetadataPassthruAll) { goto fail; } + decodeObjectOrFail(_preset, NSString); decodeObjectOrFail(_tune, NSString); decodeObjectOrFail(_profile, NSString); @@ -707,6 +715,23 @@ - (void)applyPreset:(HBPreset *)preset jobSettings:(NSDictionary *)settings // Turbo 1st pass for 2 Pass Encoding. self.turboMultiPass = [preset[@"VideoTurboMultiPass"] boolValue]; + if ([preset[@"VideoPasshtruHDRDynamicMetadata"] isEqualToString:@"off"]) + { + self.passthruHDRDynamicMetadata = HBVideoHDRDynamicMetadataPassthruOff; + } + else if ([preset[@"VideoPasshtruHDRDynamicMetadata"] isEqualToString:@"hdr10plus"]) + { + self.passthruHDRDynamicMetadata = HBVideoHDRDynamicMetadataPassthruHDR10Plus; + } + else if ([preset[@"VideoPasshtruHDRDynamicMetadata"] isEqualToString:@"dovi"]) + { + self.passthruHDRDynamicMetadata = HBVideoHDRDynamicMetadataPassthruDolbyVision; + } + else + { + self.passthruHDRDynamicMetadata = HBVideoHDRDynamicMetadataPassthruAll; + } + self.notificationsEnabled = YES; } @@ -763,6 +788,22 @@ - (void)writeToPreset:(HBMutablePreset *)preset preset[@"VideoMultiPass"] = @(self.multiPass); preset[@"VideoTurboMultiPass"] = @(self.turboMultiPass); + + switch (self.passthruHDRDynamicMetadata) + { + case HBVideoHDRDynamicMetadataPassthruOff: + preset[@"VideoPasshtruHDRDynamicMetadata"] = @"off"; + break; + case HBVideoHDRDynamicMetadataPassthruHDR10Plus: + preset[@"VideoPasshtruHDRDynamicMetadata"] = @"hdr10plus"; + break; + case HBVideoHDRDynamicMetadataPassthruDolbyVision: + preset[@"VideoPasshtruHDRDynamicMetadata"] = @"dolbyvision"; + break; + case HBVideoHDRDynamicMetadataPassthruAll: + preset[@"VideoPasshtruHDRDynamicMetadata"] = @"all"; + break; + } } @end diff --git a/preset/preset_builtin.json b/preset/preset_builtin.json index bf10aede1919..ad9f7d115576 100644 --- a/preset/preset_builtin.json +++ b/preset/preset_builtin.json @@ -108,6 +108,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": true, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -218,6 +219,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": true, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -327,6 +329,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": true, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -436,6 +439,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": true, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -545,6 +549,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": true, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -654,6 +659,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": true, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -764,6 +770,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": true, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -874,6 +881,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": true, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -983,6 +991,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": true, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -1092,6 +1101,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": true, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -1201,6 +1211,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": true, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -1310,6 +1321,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": true, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -1433,6 +1445,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -1556,6 +1569,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -1679,6 +1693,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -1802,6 +1817,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -1925,6 +1941,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -2048,6 +2065,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -2172,6 +2190,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -2296,6 +2315,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -2419,6 +2439,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -2542,6 +2563,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -2665,6 +2687,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -2788,6 +2811,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false } @@ -2904,6 +2928,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -3013,6 +3038,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -3122,6 +3148,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -3231,6 +3258,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -3340,6 +3368,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": true, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -3449,6 +3478,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": true, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -3558,6 +3588,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": true, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -3667,6 +3698,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": true, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false } @@ -3797,6 +3829,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -3920,6 +3953,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -4029,6 +4063,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -4138,6 +4173,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -4247,6 +4283,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -4356,6 +4393,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -4465,6 +4503,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -4588,6 +4627,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -4711,6 +4751,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -4834,6 +4875,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -4957,6 +4999,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -5080,6 +5123,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -5203,6 +5247,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -5326,6 +5371,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -5449,6 +5495,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -5570,6 +5617,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -5693,6 +5741,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -5802,6 +5851,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -5911,6 +5961,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -6037,6 +6088,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -6160,6 +6212,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -6283,6 +6336,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -6392,6 +6446,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -6501,6 +6556,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -6624,6 +6680,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false } @@ -6739,6 +6796,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -6848,6 +6906,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -6957,6 +7016,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -7066,6 +7126,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -7175,6 +7236,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -7284,6 +7346,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -7393,6 +7456,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -7502,6 +7566,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -7611,6 +7676,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -7720,6 +7786,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -7829,6 +7896,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -7937,6 +8005,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -8045,6 +8114,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -8153,6 +8223,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -8261,6 +8332,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -8369,6 +8441,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false } @@ -8485,6 +8558,7 @@ "VideoQSVDecode": true, "VideoMultiPass": false, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -8594,6 +8668,7 @@ "VideoQSVDecode": false, "VideoMultiPass": false, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -8703,6 +8778,7 @@ "VideoQSVDecode": false, "VideoMultiPass": false, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -8812,6 +8888,7 @@ "VideoQSVDecode": true, "VideoMultiPass": false, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -8921,6 +8998,7 @@ "VideoQSVDecode": true, "VideoMultiPass": false, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -9030,6 +9108,7 @@ "VideoQSVDecode": false, "VideoMultiPass": false, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -9139,6 +9218,7 @@ "VideoQSVDecode": false, "VideoMultiPass": false, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -9248,6 +9328,7 @@ "VideoQSVDecode": false, "VideoMultiPass": false, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -9357,6 +9438,7 @@ "VideoQSVDecode": false, "VideoMultiPass": false, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -9466,6 +9548,7 @@ "VideoQSVDecode": false, "VideoMultiPass": false, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -9575,6 +9658,7 @@ "VideoQSVDecode": false, "VideoMultiPass": false, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false } @@ -9691,6 +9775,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -9800,6 +9885,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -9909,6 +9995,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -10018,6 +10105,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false }, @@ -10138,6 +10226,7 @@ "VideoQSVDecode": false, "VideoMultiPass": true, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false } diff --git a/preset/preset_builtin.list b/preset/preset_builtin.list index 4d6b74b4c1e9..47f4b4968cb5 100644 --- a/preset/preset_builtin.list +++ b/preset/preset_builtin.list @@ -1,6 +1,6 @@
- + diff --git a/preset/preset_cli_default.json b/preset/preset_cli_default.json index 4fee1e198e36..815b3bd8b285 100644 --- a/preset/preset_cli_default.json +++ b/preset/preset_cli_default.json @@ -113,6 +113,7 @@ "VideoHWDecode": 0, "VideoMultiPass": false, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false } diff --git a/preset/preset_template.json b/preset/preset_template.json index 82302a4dece6..a030ea89eea3 100644 --- a/preset/preset_template.json +++ b/preset/preset_template.json @@ -123,6 +123,7 @@ "VideoHWDecode": 0, "VideoMultiPass": false, "VideoTurboMultiPass": false, + "VideoPasshtruHDRDynamicMetadata": "all", "x264Option": "", "x264UseAdvancedOptions": false } diff --git a/test/test.c b/test/test.c index 9d54d17cbf52..6e8c37d42a26 100644 --- a/test/test.c +++ b/test/test.c @@ -59,6 +59,7 @@ #define ROTATE_DEFAULT "angle=180:hflip=0" #define DEBLOCK_DEFAULT_PRESET "medium" #define COLORSPACE_DEFAULT_PRESET "bt709" +#define HDR_DYNAMIC_METADATA_DEFAULT_PRESET "all" /* Options */ static int debug = HB_DEBUG_ALL; @@ -211,6 +212,8 @@ static int qsv_decode = -1; #endif static int hw_decode = -1; static int keep_duplicate_titles = 0; +static int hdr_dynamic_metadata_disable = 0; +static char * hdr_dynamic_metadata = NULL; /* Exit cleanly on Ctrl-C */ static volatile hb_error_code done_error = HB_ERROR_NONE; @@ -1497,6 +1500,12 @@ static void ShowHelp(void) " timing if it's below that rate.\n" " If none of these flags are given, the default\n" " is --pfr when -r is given and --vfr otherwise\n" +" --hdr-dynamic-metadata \n" +" Set the kind of HDR dynamic metadata to preserve:\n" +" hdr10plus\n" +" dolbyvision\n" +" all\n" +" --no-hdr-dynamic-metadata Disable HDR dynamic metadata passthru\n" " --enable-hw-decoding \n" #if defined( __APPLE_CC__ ) " Use 'videotoolbox' to enable VideoToolbox \n" @@ -2234,8 +2243,9 @@ static int ParseOptions( int argc, char ** argv ) #define CROP_MODE 330 #define HW_DECODE 331 #define KEEP_DUPLICATE_TITLES 332 - #define MAX_DURATION 333 - + #define MAX_DURATION 333 + #define HDR_DYNAMIC_METADATA 334 + for( ;; ) { static struct option long_options[] = @@ -2254,9 +2264,13 @@ static int ParseOptions( int argc, char ** argv ) { "enable-qsv-decoding", no_argument, &qsv_decode, 1, }, #endif { "disable-hw-decoding", no_argument, &hw_decode, 0, }, - { "enable-hw-decoding", required_argument, NULL, HW_DECODE, }, + { "enable-hw-decoding", required_argument, NULL, HW_DECODE, }, + { "keep-duplicate-titles", no_argument, NULL, KEEP_DUPLICATE_TITLES }, + { "no-hdr-dynamic-metadata", no_argument, &hdr_dynamic_metadata_disable, 1 }, + { "hdr-dynamic-metadata", required_argument, NULL, HDR_DYNAMIC_METADATA }, + { "format", required_argument, NULL, 'f' }, { "input", required_argument, NULL, 'i' }, { "output", required_argument, NULL, 'o' }, @@ -3237,6 +3251,17 @@ static int ParseOptions( int argc, char ** argv ) case KEEP_DUPLICATE_TITLES: keep_duplicate_titles = 1; break; + case HDR_DYNAMIC_METADATA: + free(hdr_dynamic_metadata); + if (optarg != NULL) + { + hdr_dynamic_metadata = strdup(optarg); + } + else + { + hdr_dynamic_metadata = strdup(HDR_DYNAMIC_METADATA_DEFAULT_PRESET); + } + break; case ':': fprintf( stderr, "missing parameter (%s)\n", argv[cur_optind] ); return -1; @@ -3574,6 +3599,16 @@ static int ParseOptions( int argc, char ** argv ) } } + if (hdr_dynamic_metadata != NULL) + { + if (hdr_dynamic_metadata_disable) + { + fprintf(stderr, + "Incompatible options --hdr-dynamic-metadata and --no-hdr-dynamic-metadata\n"); + return -1; + } + } + return 0; } @@ -4380,6 +4415,14 @@ static hb_dict_t * PreparePreset(const char *preset_name) { hb_dict_set(preset, "VideoHWDecode", hb_value_int(hw_decode)); } + if (hdr_dynamic_metadata_disable) + { + hb_dict_set(preset, "VideoPasshtruHDRDynamicMetadata", hb_value_string("off")); + } + if (hdr_dynamic_metadata != NULL) + { + hb_dict_set(preset, "VideoPasshtruHDRDynamicMetadata", hb_value_string(hdr_dynamic_metadata)); + } if (maxWidth > 0) { hb_dict_set(preset, "PictureWidth", hb_value_int(maxWidth)); diff --git a/win/CS/HandBrake.Interop/Interop/Json/Presets/HBPreset.cs b/win/CS/HandBrake.Interop/Interop/Json/Presets/HBPreset.cs index f36b410180e0..20e42915cc57 100644 --- a/win/CS/HandBrake.Interop/Interop/Json/Presets/HBPreset.cs +++ b/win/CS/HandBrake.Interop/Interop/Json/Presets/HBPreset.cs @@ -396,6 +396,11 @@ public class HBPreset /// public bool VideoTurboMultiPass { get; set; } + /// + /// Gets or sets a value indicating which dynamic metadata formats to preserve. + /// + public string VideoPasshtruHDRDynamicMetadata { get; set; } + /// /// Gets or sets the x 264 option. /// diff --git a/win/CS/HandBrakeWPF/Services/Encode/Model/EncodeTask.cs b/win/CS/HandBrakeWPF/Services/Encode/Model/EncodeTask.cs index 3356fa7a4367..94033d81b75f 100644 --- a/win/CS/HandBrakeWPF/Services/Encode/Model/EncodeTask.cs +++ b/win/CS/HandBrakeWPF/Services/Encode/Model/EncodeTask.cs @@ -295,6 +295,8 @@ public EncodeTask(EncodeTask task) public bool TurboAnalysisPass { get; set; } + public string PasshtruHDRDynamicMetadata { get; set; } + public double? Framerate { get; set; } diff --git a/win/CS/HandBrakeWPF/Services/Presets/Factories/JsonPresetFactory.cs b/win/CS/HandBrakeWPF/Services/Presets/Factories/JsonPresetFactory.cs index c4a25e4dd516..b360554d13e4 100644 --- a/win/CS/HandBrakeWPF/Services/Presets/Factories/JsonPresetFactory.cs +++ b/win/CS/HandBrakeWPF/Services/Presets/Factories/JsonPresetFactory.cs @@ -283,6 +283,7 @@ public static Preset ImportPreset(HBPreset importedPreset) preset.Task.VideoBitrate = importedPreset.VideoAvgBitrate; preset.Task.MultiPass = importedPreset.VideoMultiPass; preset.Task.TurboAnalysisPass = importedPreset.VideoTurboMultiPass; + preset.Task.PasshtruHDRDynamicMetadata = importedPreset.VideoPasshtruHDRDynamicMetadata; preset.Task.ExtraAdvancedArguments = importedPreset.VideoOptionExtra; preset.Task.Quality = double.Parse(importedPreset.VideoQualitySlider.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture); preset.Task.VideoEncodeRateType = (VideoEncodeRateType)importedPreset.VideoQualityType; @@ -627,6 +628,7 @@ public static HBPreset CreateHbPreset(Preset export) preset.VideoAvgBitrate = export.Task.VideoBitrate ?? 0; preset.VideoColorMatrixCode = 0; // TODO not supported. preset.VideoTurboMultiPass = export.Task.TurboAnalysisPass; + preset.VideoPasshtruHDRDynamicMetadata = export.Task.PasshtruHDRDynamicMetadata; preset.VideoMultiPass = export.Task.MultiPass; // Unknown