As found in HEVC. Signed-off-by: James Almer <jamrial@gmail.com>tags/n3.4
@@ -15,6 +15,11 @@ libavutil: 2015-08-28 | |||||
API changes, most recent first: | API changes, most recent first: | ||||
2016-04-06 - xxxxxxx - lavu 55.60.100 - mastering_display_metadata.h | |||||
Add AV_FRAME_DATA_CONTENT_LIGHT_LEVEL value, av_content_light_metadata_alloc() | |||||
and av_content_light_metadata_create_side_data() API, and AVContentLightMetadata | |||||
type to export content light level video properties. | |||||
2017-03-31 - xxxxxxx - lavu 55.57.100 - spherical.h | 2017-03-31 - xxxxxxx - lavu 55.57.100 - spherical.h | ||||
Add av_spherical_projection_name(). | Add av_spherical_projection_name(). | ||||
Add av_spherical_from_name(). | Add av_spherical_from_name(). | ||||
@@ -772,6 +772,7 @@ const char *av_frame_side_data_name(enum AVFrameSideDataType type) | |||||
case AV_FRAME_DATA_SKIP_SAMPLES: return "Skip samples"; | case AV_FRAME_DATA_SKIP_SAMPLES: return "Skip samples"; | ||||
case AV_FRAME_DATA_AUDIO_SERVICE_TYPE: return "Audio service type"; | case AV_FRAME_DATA_AUDIO_SERVICE_TYPE: return "Audio service type"; | ||||
case AV_FRAME_DATA_MASTERING_DISPLAY_METADATA: return "Mastering display metadata"; | case AV_FRAME_DATA_MASTERING_DISPLAY_METADATA: return "Mastering display metadata"; | ||||
case AV_FRAME_DATA_CONTENT_LIGHT_LEVEL: return "Content light level metadata"; | |||||
case AV_FRAME_DATA_GOP_TIMECODE: return "GOP timecode"; | case AV_FRAME_DATA_GOP_TIMECODE: return "GOP timecode"; | ||||
} | } | ||||
return NULL; | return NULL; | ||||
@@ -127,6 +127,12 @@ enum AVFrameSideDataType { | |||||
* libavutil/spherical.h. | * libavutil/spherical.h. | ||||
*/ | */ | ||||
AV_FRAME_DATA_SPHERICAL, | AV_FRAME_DATA_SPHERICAL, | ||||
/** | |||||
* Content light level (based on CTA-861.3). This payload contains data in | |||||
* the form of the AVContentLightMetadata struct. | |||||
*/ | |||||
AV_FRAME_DATA_CONTENT_LIGHT_LEVEL, | |||||
}; | }; | ||||
enum AVActiveFormatDescription { | enum AVActiveFormatDescription { | ||||
@@ -41,3 +41,26 @@ AVMasteringDisplayMetadata *av_mastering_display_metadata_create_side_data(AVFra | |||||
return (AVMasteringDisplayMetadata *)side_data->data; | return (AVMasteringDisplayMetadata *)side_data->data; | ||||
} | } | ||||
AVContentLightMetadata *av_content_light_metadata_alloc(size_t *size) | |||||
{ | |||||
AVContentLightMetadata *metadata = av_mallocz(sizeof(AVContentLightMetadata)); | |||||
if (size) | |||||
*size = sizeof(*metadata); | |||||
return metadata; | |||||
} | |||||
AVContentLightMetadata *av_content_light_metadata_create_side_data(AVFrame *frame) | |||||
{ | |||||
AVFrameSideData *side_data = av_frame_new_side_data(frame, | |||||
AV_FRAME_DATA_CONTENT_LIGHT_LEVEL, | |||||
sizeof(AVContentLightMetadata)); | |||||
if (!side_data) | |||||
return NULL; | |||||
memset(side_data->data, 0, sizeof(AVContentLightMetadata)); | |||||
return (AVContentLightMetadata *)side_data->data; | |||||
} |
@@ -86,4 +86,43 @@ AVMasteringDisplayMetadata *av_mastering_display_metadata_alloc(void); | |||||
*/ | */ | ||||
AVMasteringDisplayMetadata *av_mastering_display_metadata_create_side_data(AVFrame *frame); | AVMasteringDisplayMetadata *av_mastering_display_metadata_create_side_data(AVFrame *frame); | ||||
/** | |||||
* Content light level needed by to transmit HDR over HDMI (CTA-861.3). | |||||
* | |||||
* To be used as payload of a AVFrameSideData or AVPacketSideData with the | |||||
* appropriate type. | |||||
* | |||||
* @note The struct should be allocated with av_content_light_metadata_alloc() | |||||
* and its size is not a part of the public ABI. | |||||
*/ | |||||
typedef struct AVContentLightMetadata { | |||||
/** | |||||
* Max content light level (cd/m^2). | |||||
*/ | |||||
unsigned MaxCLL; | |||||
/** | |||||
* Max average light level per frame (cd/m^2). | |||||
*/ | |||||
unsigned MaxFALL; | |||||
} AVContentLightMetadata; | |||||
/** | |||||
* Allocate an AVContentLightMetadata structure and set its fields to | |||||
* default values. The resulting struct can be freed using av_freep(). | |||||
* | |||||
* @return An AVContentLightMetadata filled with default values or NULL | |||||
* on failure. | |||||
*/ | |||||
AVContentLightMetadata *av_content_light_metadata_alloc(size_t *size); | |||||
/** | |||||
* Allocate a complete AVContentLightMetadata and add it to the frame. | |||||
* | |||||
* @param frame The frame which side data is added to. | |||||
* | |||||
* @return The AVContentLightMetadata structure to be filled by caller. | |||||
*/ | |||||
AVContentLightMetadata *av_content_light_metadata_create_side_data(AVFrame *frame); | |||||
#endif /* AVUTIL_MASTERING_DISPLAY_METADATA_H */ | #endif /* AVUTIL_MASTERING_DISPLAY_METADATA_H */ |
@@ -79,7 +79,7 @@ | |||||
*/ | */ | ||||
#define LIBAVUTIL_VERSION_MAJOR 55 | #define LIBAVUTIL_VERSION_MAJOR 55 | ||||
#define LIBAVUTIL_VERSION_MINOR 59 | |||||
#define LIBAVUTIL_VERSION_MINOR 60 | |||||
#define LIBAVUTIL_VERSION_MICRO 100 | #define LIBAVUTIL_VERSION_MICRO 100 | ||||
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ | #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ | ||||