mirror of
https://code.videolan.org/videolan/vlc
synced 2024-09-28 23:09:59 +02:00
libplacebo: forward HDR10+ metadata to libplacebo
Fairly straightforward as libplacebo currently ignores most metadata fields and only cares about the OOTF (bezier anchors) and global scene brightness/average measurements.
This commit is contained in:
parent
5f7a8c04ce
commit
ab9b509df6
@ -259,6 +259,12 @@ static void PictureRender(vout_display_t *vd, picture_t *pic,
|
||||
pl_icc_profile_compute_signature(&img.profile);
|
||||
}
|
||||
|
||||
struct vlc_ancillary *hdrplus = picture_GetAncillary(pic, VLC_ANCILLARY_ID_HDR10PLUS);
|
||||
if (hdrplus) {
|
||||
vlc_video_hdr_dynamic_metadata_t *hdm = vlc_ancillary_GetData(hdrplus);
|
||||
vlc_placebo_HdrMetadata(hdm, &img.color.hdr);
|
||||
}
|
||||
|
||||
// Upload the image data for each plane
|
||||
struct pl_plane_data data[4];
|
||||
if (!vlc_placebo_PlaneData(pic, data, NULL)) {
|
||||
|
@ -452,6 +452,28 @@ struct pl_color_repr vlc_placebo_ColorRepr(const video_format_t *fmt)
|
||||
};
|
||||
}
|
||||
|
||||
void vlc_placebo_HdrMetadata(const vlc_video_hdr_dynamic_metadata_t *src,
|
||||
struct pl_hdr_metadata *dst)
|
||||
{
|
||||
#if PL_API_VER >= 242
|
||||
for (size_t i = 0; i < ARRAY_SIZE(dst->scene_max); i++)
|
||||
dst->scene_max[i] = src->maxscl[i];
|
||||
dst->scene_avg = src->average_maxrgb;
|
||||
|
||||
if (src->tone_mapping_flag) {
|
||||
static_assert(sizeof(dst->ootf.anchors) == sizeof(src->bezier_curve_anchors), "array mismatch");
|
||||
memcpy(dst->ootf.anchors, src->bezier_curve_anchors, sizeof(dst->ootf.anchors));
|
||||
dst->ootf.num_anchors = src->num_bezier_anchors;
|
||||
dst->ootf.target_luma = src->targeted_luminance;
|
||||
dst->ootf.knee_x = src->knee_point_x;
|
||||
dst->ootf.knee_y = src->knee_point_y;
|
||||
}
|
||||
#else
|
||||
(void) src;
|
||||
(void) dst;
|
||||
#endif
|
||||
}
|
||||
|
||||
#if PL_API_VER >= 185
|
||||
void vlc_placebo_DoviMetadata(const vlc_video_dovi_metadata_t *src,
|
||||
struct pl_dovi_metadata *dst)
|
||||
|
@ -38,6 +38,10 @@ struct pl_color_space vlc_placebo_ColorSpace(const video_format_t *);
|
||||
struct pl_color_repr vlc_placebo_ColorRepr(const video_format_t *);
|
||||
enum pl_chroma_location vlc_placebo_ChromaLoc(const video_format_t *);
|
||||
|
||||
// Map HDR10+ metadata struct (on supported version of libplacebo)
|
||||
void vlc_placebo_HdrMetadata(const vlc_video_hdr_dynamic_metadata_t *src,
|
||||
struct pl_hdr_metadata *dst);
|
||||
|
||||
#if PL_API_VER >= 185
|
||||
// Map raw dolby vision metadata struct
|
||||
void vlc_placebo_DoviMetadata(const vlc_video_dovi_metadata_t *src,
|
||||
|
Loading…
Reference in New Issue
Block a user