diff options
author | Kacper Michajłow <kasper93@gmail.com> | 2023-08-29 10:21:35 +0200 |
---|---|---|
committer | Niklas Haas <github-daiK1o@haasn.dev> | 2023-08-29 20:58:44 +0200 |
commit | 3cf71fd7c7f5d4052b67ebdf11ff416a9beffbeb (patch) | |
tree | e327c7bad2b0a5168c4f178286170ea5081decfd /player | |
parent | 38ac67308bfd40340182cd3a8d4d0ae8700773db (diff) | |
download | mpv-3cf71fd7c7f5d4052b67ebdf11ff416a9beffbeb.tar.bz2 mpv-3cf71fd7c7f5d4052b67ebdf11ff416a9beffbeb.tar.xz |
command: add hdr-metadata property
Diffstat (limited to 'player')
-rw-r--r-- | player/command.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/player/command.c b/player/command.c index 200696b7af..008bc593a2 100644 --- a/player/command.c +++ b/player/command.c @@ -2664,6 +2664,40 @@ out: return ret; } +static int mp_property_hdr_metadata(void *ctx, struct m_property *prop, + int action, void *arg) +{ + MPContext *mpctx = ctx; + if (!mpctx->video_out) + return M_PROPERTY_UNAVAILABLE; + + struct mp_hdr_metadata data; + if (vo_control(mpctx->video_out, VOCTRL_HDR_METADATA, &data) != VO_TRUE) + return M_PROPERTY_UNAVAILABLE; + + bool has_hdr10 = data.max_luma; + bool has_hdr10plus = data.scene_avg && (data.scene_max[0] || + data.scene_max[1] || + data.scene_max[2]); + bool has_cie_y = data.max_pq_y && data.avg_pq_y; + + struct m_sub_property props[] = { + {"min-luma", SUB_PROP_FLOAT(data.min_luma), .unavailable = !has_hdr10}, + {"max-luma", SUB_PROP_FLOAT(data.max_luma), .unavailable = !has_hdr10}, + {"max-cll", SUB_PROP_FLOAT(data.max_cll), .unavailable = !has_hdr10}, + {"max-fall", SUB_PROP_FLOAT(data.max_fall), .unavailable = !has_hdr10}, + {"scene-max-r", SUB_PROP_FLOAT(data.scene_max[0]), .unavailable = !has_hdr10plus}, + {"scene-max-g", SUB_PROP_FLOAT(data.scene_max[1]), .unavailable = !has_hdr10plus}, + {"scene-max-b", SUB_PROP_FLOAT(data.scene_max[2]), .unavailable = !has_hdr10plus}, + {"scene-avg", SUB_PROP_FLOAT(data.scene_avg), .unavailable = !has_hdr10plus}, + {"max-pq-y", SUB_PROP_FLOAT(data.max_pq_y), .unavailable = !has_cie_y}, + {"avg-pq-y", SUB_PROP_FLOAT(data.avg_pq_y), .unavailable = !has_cie_y}, + {0} + }; + + return m_property_read_sub(props, action, arg); +} + static int mp_property_perf_info(void *ctx, struct m_property *p, int action, void *arg) { @@ -3934,6 +3968,7 @@ static const struct m_property mp_properties_base[] = { {"current-window-scale", mp_property_current_window_scale}, {"vo-configured", mp_property_vo_configured}, {"vo-passes", mp_property_vo_passes}, + {"hdr-metadata", mp_property_hdr_metadata}, {"perf-info", mp_property_perf_info}, {"current-vo", mp_property_vo}, {"container-fps", mp_property_fps}, |