mirror of https://github.com/FFmpeg/FFmpeg.git
Adding mastering display metadata struct to avutil. The mastering display metadata contains information about the mastering display color volume (SMPTE 2086:2014). This info comes from HEVC in the SEI_TYPE_MASTERING_DISPLAY_INFO and is soon to be included in MKV: https://mailarchive.ietf.org/arch/search/?email_list=cellar&gbt=1&index=sZyfPTM-QY69P-0omfOIiTN622o so it is similar to SEI FPA / stereo_mode in MKV and as such this patch follows how AVStereo3D is implemented. I'll add support to HEVC in a follow-up (and MKV when spec is approved). Signed-off-by: Neil Birkbeck <neil.birkbeck@gmail.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>pull/278/head
parent
22f64c2324
commit
d91718107c
5 changed files with 139 additions and 2 deletions
@ -0,0 +1,43 @@ |
||||
/**
|
||||
* Copyright (c) 2016 Neil Birkbeck <neil.birkbeck@gmail.com> |
||||
* |
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
#include <stdint.h> |
||||
#include <string.h> |
||||
|
||||
#include "mastering_display_metadata.h" |
||||
#include "mem.h" |
||||
|
||||
AVMasteringDisplayMetadata *av_mastering_display_metadata_alloc(void) |
||||
{ |
||||
return av_mallocz(sizeof(AVMasteringDisplayMetadata)); |
||||
} |
||||
|
||||
AVMasteringDisplayMetadata *av_mastering_display_metadata_create_side_data(AVFrame *frame) |
||||
{ |
||||
AVFrameSideData *side_data = av_frame_new_side_data(frame, |
||||
AV_FRAME_DATA_MASTERING_DISPLAY_METADATA, |
||||
sizeof(AVMasteringDisplayMetadata)); |
||||
if (!side_data) |
||||
return NULL; |
||||
|
||||
memset(side_data->data, 0, sizeof(AVMasteringDisplayMetadata)); |
||||
|
||||
return (AVMasteringDisplayMetadata *)side_data->data; |
||||
} |
@ -0,0 +1,87 @@ |
||||
/**
|
||||
* Copyright (c) 2016 Neil Birkbeck <neil.birkbeck@gmail.com> |
||||
* |
||||
* This file is part of FFmpeg. |
||||
* |
||||
* FFmpeg is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU Lesser General Public |
||||
* License as published by the Free Software Foundation; either |
||||
* version 2.1 of the License, or (at your option) any later version. |
||||
* |
||||
* FFmpeg is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
* Lesser General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Lesser General Public |
||||
* License along with FFmpeg; if not, write to the Free Software |
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
*/ |
||||
|
||||
#ifndef AVUTIL_MASTERING_DISPLAY_METADATA_H |
||||
#define AVUTIL_MASTERING_DISPLAY_METADATA_H |
||||
|
||||
#include "frame.h" |
||||
|
||||
/**
|
||||
* Mastering display metadata capable of representing the color volume of |
||||
* the display used to master the content (SMPTE 2086:2014). |
||||
* |
||||
* To be used as payload of a AVFrameSideData or AVPacketSideData with the |
||||
* appropriate type. |
||||
* |
||||
* @note The struct should be allocated with av_mastering_display_metadata_alloc() |
||||
* and its size is not a part of the public ABI. |
||||
*/ |
||||
typedef struct AVMasteringDisplayMetadata { |
||||
/**
|
||||
* CIE 1931 xy chromaticity coords of color primaries (r, g, b order). |
||||
*/ |
||||
float display_primaries[3][2]; |
||||
|
||||
/**
|
||||
* CIE 1931 xy chromaticity coords of white point. |
||||
*/ |
||||
float white_point[2]; |
||||
|
||||
/**
|
||||
* Min luminance of mastering display (cd/m^2). |
||||
*/ |
||||
float min_luminance; |
||||
|
||||
/**
|
||||
* Max luminance of mastering display (cd/m^2). |
||||
*/ |
||||
float max_luminance; |
||||
|
||||
/**
|
||||
* Flag indicating whether the display primaries (and white point) are set. |
||||
*/ |
||||
int has_primaries; |
||||
|
||||
/**
|
||||
* Flag indicating whether the luminance (min_ and max_) have been set. |
||||
*/ |
||||
int has_luminance; |
||||
|
||||
} AVMasteringDisplayMetadata; |
||||
|
||||
/**
|
||||
* Allocate an AVMasteringDisplayMetadata structure and set its fields to |
||||
* default values. The resulting struct can be freed using av_freep(). |
||||
* |
||||
* @return An AVMasteringDisplayMetadata filled with default values or NULL |
||||
* on failure. |
||||
*/ |
||||
AVMasteringDisplayMetadata *av_mastering_display_metadata_alloc(void); |
||||
|
||||
/**
|
||||
* Allocate a complete AVMasteringDisplayMetadata and add it to the frame. |
||||
* |
||||
* @param frame The frame which side data is added to. |
||||
* |
||||
* @return The AVMasteringDisplayMetadata structure to be filled by caller. |
||||
*/ |
||||
AVMasteringDisplayMetadata *av_mastering_display_metadata_create_side_data(AVFrame *frame); |
||||
|
||||
#endif /* AVUTIL_MASTERING_DISPLAY_METADATA_H */ |
Loading…
Reference in new issue