History

swscale/utils: read HDR mastering metadata from AVFrame

Niklas Haas committed 1 year ago

Commit 7432fa11 parent 5b21b7f1 file · +25 −0Browse files

Unified · Split

libswscale/utils.c+25−0
@@ -46,6 +46,7 @@ · 45 unmodified lines
4646 #include "libavutil/imgutils.h"
4747 #include "libavutil/intreadwrite.h"
4848 #include "libavutil/libm.h"
49+#include "libavutil/mastering_display_metadata.h"
4950 #include "libavutil/mathematics.h"
5051 #include "libavutil/mem.h"
5152 #include "libavutil/opt.h"
@@ -2655,6 +2656,7 @@ SwsFormat ff_fmt_from_frame(const AVFrame *frame, int field) · 2603 unmodified lines
26552656 {
26562657 const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(frame->format);
26572658 const AVColorPrimariesDesc *primaries;
2659+ AVFrameSideData *sd;
26582660
26592661 SwsFormat fmt = {
26602662 .width = frame->width,
@@ -2727,6 +2729,29 @@ SwsFormat ff_fmt_from_frame(const AVFrame *frame, int field) · 66 unmodified lines
27272729 if (primaries)
27282730 fmt.color.gamut = primaries->prim;
27292731
2732+ if ((sd = av_frame_get_side_data(frame, AV_FRAME_DATA_MASTERING_DISPLAY_METADATA))) {
2733+ const AVMasteringDisplayMetadata *mdm = (const AVMasteringDisplayMetadata *) sd->data;
2734+ if (mdm->has_luminance) {
2735+ fmt.color.min_luma = mdm->min_luminance;
2736+ fmt.color.max_luma = mdm->max_luminance;
2737+ }
2738+
2739+ if (mdm->has_primaries) {
2740+ /* Ignore mastering display white point as it has no bearance on
2741+ * the underlying content */
2742+ fmt.color.gamut.r.x = mdm->display_primaries[0][0];
2743+ fmt.color.gamut.r.y = mdm->display_primaries[0][1];
2744+ fmt.color.gamut.g.x = mdm->display_primaries[1][0];
2745+ fmt.color.gamut.g.y = mdm->display_primaries[1][1];
2746+ fmt.color.gamut.b.x = mdm->display_primaries[2][0];
2747+ fmt.color.gamut.b.y = mdm->display_primaries[2][1];
2748+ }
2749+ }
2750+
2751+ /* PQ is always scaled down to absolute zero, so ignore mastering metadata */
2752+ if (fmt.color.trc == AVCOL_TRC_SMPTE2084)
2753+ fmt.color.min_luma = av_make_q(0, 1);
2754+
27302755 return fmt;
27312756 }
27322757

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t