1 /*
2  * Copyright (c) 2016 Neil Birkbeck <neil.birkbeck@gmail.com>
3  *
4  * This file is part of FFmpeg.
5  *
6  * FFmpeg is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * FFmpeg is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with FFmpeg; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 module ffmpeg.libavutil.mastering_display_metadata;
21 
22 import ffmpeg.libavutil;
23 
24 extern (C) @nogc nothrow:
25 
26 /**
27  * Mastering display metadata capable of representing the color volume of
28  * the display used to master the content (SMPTE 2086:2014).
29  *
30  * To be used as payload of a AVFrameSideData or AVPacketSideData with the
31  * appropriate type.
32  *
33  * @note The struct should be allocated with av_mastering_display_metadata_alloc()
34  *       and its size is not a part of the public ABI.
35  */
36 struct AVMasteringDisplayMetadata
37 {
38     /**
39      * CIE 1931 xy chromaticity coords of color primaries (r, g, b order).
40      */
41     AVRational[2][3] display_primaries;
42 
43     /**
44      * CIE 1931 xy chromaticity coords of white point.
45      */
46     AVRational[2] white_point;
47 
48     /**
49      * Min luminance of mastering display (cd/m^2).
50      */
51     AVRational min_luminance;
52 
53     /**
54      * Max luminance of mastering display (cd/m^2).
55      */
56     AVRational max_luminance;
57 
58     /**
59      * Flag indicating whether the display primaries (and white point) are set.
60      */
61     int has_primaries;
62 
63     /**
64      * Flag indicating whether the luminance (min_ and max_) have been set.
65      */
66     int has_luminance;
67 }
68 
69 /**
70  * Allocate an AVMasteringDisplayMetadata structure and set its fields to
71  * default values. The resulting struct can be freed using av_freep().
72  *
73  * @return An AVMasteringDisplayMetadata filled with default values or NULL
74  *         on failure.
75  */
76 AVMasteringDisplayMetadata* av_mastering_display_metadata_alloc ();
77 
78 /**
79  * Allocate a complete AVMasteringDisplayMetadata and add it to the frame.
80  *
81  * @param frame The frame which side data is added to.
82  *
83  * @return The AVMasteringDisplayMetadata structure to be filled by caller.
84  */
85 AVMasteringDisplayMetadata* av_mastering_display_metadata_create_side_data (AVFrame* frame);
86 
87 /**
88  * Content light level needed by to transmit HDR over HDMI (CTA-861.3).
89  *
90  * To be used as payload of a AVFrameSideData or AVPacketSideData with the
91  * appropriate type.
92  *
93  * @note The struct should be allocated with av_content_light_metadata_alloc()
94  *       and its size is not a part of the public ABI.
95  */
96 struct AVContentLightMetadata
97 {
98     /**
99      * Max content light level (cd/m^2).
100      */
101     uint MaxCLL;
102 
103     /**
104      * Max average light level per frame (cd/m^2).
105      */
106     uint MaxFALL;
107 }
108 
109 /**
110  * Allocate an AVContentLightMetadata structure and set its fields to
111  * default values. The resulting struct can be freed using av_freep().
112  *
113  * @return An AVContentLightMetadata filled with default values or NULL
114  *         on failure.
115  */
116 AVContentLightMetadata* av_content_light_metadata_alloc (size_t* size);
117 
118 /**
119  * Allocate a complete AVContentLightMetadata and add it to the frame.
120  *
121  * @param frame The frame which side data is added to.
122  *
123  * @return The AVContentLightMetadata structure to be filled by caller.
124  */
125 AVContentLightMetadata* av_content_light_metadata_create_side_data (AVFrame* frame);
126 
127 /* AVUTIL_MASTERING_DISPLAY_METADATA_H */