FFmpeg
dovi_meta.c
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2020 Jun Zhao<barryjzhao@tencent.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 <string.h>
22 
23 #include "dovi_meta.h"
24 #include "mem.h"
25 
27 {
30  if (!dovi)
31  return NULL;
32 
33  if (size)
34  *size = sizeof(*dovi);
35 
36  return dovi;
37 }
38 
39 typedef struct AVDOVIMetadataInternal {
46 
48 {
50  if (!dovi)
51  return NULL;
52 
53  if (size)
54  *size = sizeof(*dovi);
55 
56  dovi->metadata = (struct AVDOVIMetadata) {
58  .mapping_offset = offsetof(AVDOVIMetadataInternal, mapping),
59  .color_offset = offsetof(AVDOVIMetadataInternal, color),
60  .ext_block_offset = offsetof(AVDOVIMetadataInternal, ext_blocks),
61  .ext_block_size = sizeof(AVDOVIDmData),
62  };
63 
64  return &dovi->metadata;
65 }
66 
68 {
69  for (int i = 0; i < data->num_ext_blocks; i++) {
71  if (ext->level == level)
72  return ext;
73  }
74 
75  return NULL;
76 }
level
uint8_t level
Definition: svq3.c:205
AVDOVIMetadataInternal
Definition: dovi_meta.c:39
color
Definition: vf_paletteuse.c:512
AV_DOVI_MAX_EXT_BLOCKS
#define AV_DOVI_MAX_EXT_BLOCKS
Definition: dovi_meta.h:338
av_dovi_get_ext
static av_always_inline AVDOVIDmData * av_dovi_get_ext(const AVDOVIMetadata *data, int index)
Definition: dovi_meta.h:360
AVDOVIMetadataInternal::color
AVDOVIColorMetadata color
Definition: dovi_meta.c:43
data
const char data[16]
Definition: mxf.c:148
AVDOVIRpuDataHeader
Dolby Vision RPU data header.
Definition: dovi_meta.h:78
av_dovi_alloc
AVDOVIDecoderConfigurationRecord * av_dovi_alloc(size_t *size)
Allocate a AVDOVIDecoderConfigurationRecord structure and initialize its fields to default values.
Definition: dovi_meta.c:26
AVDOVIDmData
Dolby Vision metadata extension block.
Definition: dovi_meta.h:297
av_dovi_find_level
AVDOVIDmData * av_dovi_find_level(const AVDOVIMetadata *data, uint8_t level)
Find an extension block with a given level, or NULL.
Definition: dovi_meta.c:67
AVDOVIMetadataInternal::mapping
AVDOVIDataMapping mapping
Definition: dovi_meta.c:42
AVDOVIMetadata
Combined struct representing a combination of header, mapping and color metadata, for attaching to fr...
Definition: dovi_meta.h:324
NULL
#define NULL
Definition: coverity.c:32
AVDOVIMetadataInternal::metadata
AVDOVIMetadata metadata
Definition: dovi_meta.c:40
AVDOVIMetadataInternal::ext_blocks
AVDOVIDmData ext_blocks[AV_DOVI_MAX_EXT_BLOCKS]
Definition: dovi_meta.c:44
AVDOVIMetadata::header_offset
size_t header_offset
Offset in bytes from the beginning of this structure at which the respective structs start.
Definition: dovi_meta.h:329
size
int size
Definition: twinvq_data.h:10344
av_dovi_metadata_alloc
AVDOVIMetadata * av_dovi_metadata_alloc(size_t *size)
Allocate an AVDOVIMetadata structure and initialize its fields to default values.
Definition: dovi_meta.c:47
AVDOVIMetadataInternal::header
AVDOVIRpuDataHeader header
Definition: dovi_meta.c:41
header
static const uint8_t header[24]
Definition: sdr2.c:68
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:256
av_mallocz
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
Definition: mem.c:256
dovi_meta.h
AVDOVIColorMetadata
Dolby Vision RPU colorspace metadata parameters.
Definition: dovi_meta.h:160
AVDOVIDmData::level
uint8_t level
Definition: dovi_meta.h:298
mem.h
AVDOVIDataMapping
Dolby Vision RPU data mapping parameters.
Definition: dovi_meta.h:141
AVDOVIDecoderConfigurationRecord
Definition: dovi_meta.h:54