mastering_display_metadata.c (3073B)
1 /** 2 * Copyright (c) 2016 Neil Birkbeck <neil.birkbeck@gmail.com> 3 * 4 * This file is part of FFmpeg. 5 * 6 * FFmpeg is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2.1 of the License, or (at your option) any later version. 10 * 11 * FFmpeg is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with FFmpeg; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 */ 20 21 #include <stddef.h> 22 #include <stdint.h> 23 #include <string.h> 24 25 #include "mastering_display_metadata.h" 26 #include "mem.h" 27 28 static void get_defaults(AVMasteringDisplayMetadata *mastering) 29 { 30 for (int i = 0; i < 3; i++) 31 for (int j = 0; j < 2; j++) 32 mastering->display_primaries[i][j] = (AVRational) { 0, 1 }; 33 mastering->white_point[0] = 34 mastering->white_point[1] = 35 mastering->min_luminance = 36 mastering->max_luminance = (AVRational) { 0, 1 }; 37 } 38 39 AVMasteringDisplayMetadata *av_mastering_display_metadata_alloc(void) 40 { 41 return av_mastering_display_metadata_alloc_size(NULL); 42 } 43 44 AVMasteringDisplayMetadata *av_mastering_display_metadata_alloc_size(size_t *size) 45 { 46 AVMasteringDisplayMetadata *mastering = av_mallocz(sizeof(AVMasteringDisplayMetadata)); 47 if (!mastering) 48 return NULL; 49 50 get_defaults(mastering); 51 52 if (size) 53 *size = sizeof(*mastering); 54 55 return mastering; 56 } 57 58 AVMasteringDisplayMetadata *av_mastering_display_metadata_create_side_data(AVFrame *frame) 59 { 60 AVFrameSideData *side_data = av_frame_new_side_data(frame, 61 AV_FRAME_DATA_MASTERING_DISPLAY_METADATA, 62 sizeof(AVMasteringDisplayMetadata)); 63 if (!side_data) 64 return NULL; 65 66 memset(side_data->data, 0, sizeof(AVMasteringDisplayMetadata)); 67 get_defaults((AVMasteringDisplayMetadata *)side_data->data); 68 69 return (AVMasteringDisplayMetadata *)side_data->data; 70 } 71 72 AVContentLightMetadata *av_content_light_metadata_alloc(size_t *size) 73 { 74 AVContentLightMetadata *metadata = av_mallocz(sizeof(AVContentLightMetadata)); 75 76 if (size) 77 *size = sizeof(*metadata); 78 79 return metadata; 80 } 81 82 AVContentLightMetadata *av_content_light_metadata_create_side_data(AVFrame *frame) 83 { 84 AVFrameSideData *side_data = av_frame_new_side_data(frame, 85 AV_FRAME_DATA_CONTENT_LIGHT_LEVEL, 86 sizeof(AVContentLightMetadata)); 87 if (!side_data) 88 return NULL; 89 90 memset(side_data->data, 0, sizeof(AVContentLightMetadata)); 91 92 return (AVContentLightMetadata *)side_data->data; 93 }