mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
lavu: add support for Content Light Level side metadata
As found in HEVC. Signed-off-by: James Almer <jamrial@gmail.com>
This commit is contained in:
parent
2a512f86c1
commit
b378f5bd64
@ -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, \
|
||||||
|
Loading…
Reference in New Issue
Block a user