Browse Source

lavu: add support for Content Light Level side metadata

As found in HEVC.

Signed-off-by: James Almer <jamrial@gmail.com>
tags/n3.4
Steve Lhomme James Almer 8 years ago
parent
commit
b378f5bd64
6 changed files with 75 additions and 1 deletions
  1. +5
    -0
      doc/APIchanges
  2. +1
    -0
      libavutil/frame.c
  3. +6
    -0
      libavutil/frame.h
  4. +23
    -0
      libavutil/mastering_display_metadata.c
  5. +39
    -0
      libavutil/mastering_display_metadata.h
  6. +1
    -1
      libavutil/version.h

+ 5
- 0
doc/APIchanges View File

@@ -15,6 +15,11 @@ libavutil: 2015-08-28

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
Add av_spherical_projection_name().
Add av_spherical_from_name().


+ 1
- 0
libavutil/frame.c View File

@@ -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_AUDIO_SERVICE_TYPE: return "Audio service type";
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";
}
return NULL;


+ 6
- 0
libavutil/frame.h View File

@@ -127,6 +127,12 @@ enum AVFrameSideDataType {
* libavutil/spherical.h.
*/
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 {


+ 23
- 0
libavutil/mastering_display_metadata.c View File

@@ -41,3 +41,26 @@ AVMasteringDisplayMetadata *av_mastering_display_metadata_create_side_data(AVFra

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;
}

+ 39
- 0
libavutil/mastering_display_metadata.h View File

@@ -86,4 +86,43 @@ AVMasteringDisplayMetadata *av_mastering_display_metadata_alloc(void);
*/
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 */

+ 1
- 1
libavutil/version.h View File

@@ -79,7 +79,7 @@
*/

#define LIBAVUTIL_VERSION_MAJOR 55
#define LIBAVUTIL_VERSION_MINOR 59
#define LIBAVUTIL_VERSION_MINOR 60
#define LIBAVUTIL_VERSION_MICRO 100

#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \


Loading…
Cancel
Save