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, \ | ||||