FFmpeg
dovi_rpu.h
Go to the documentation of this file.
1 /*
2  * Dolby Vision RPU decoder
3  *
4  * Copyright (C) 2021 Jan Ekström
5  * Copyright (C) 2021 Niklas Haas
6  *
7  * This file is part of FFmpeg.
8  *
9  * FFmpeg is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Lesser General Public
11  * License as published by the Free Software Foundation; either
12  * version 2.1 of the License, or (at your option) any later version.
13  *
14  * FFmpeg is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17  * Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with FFmpeg; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22  */
23 
24 #ifndef AVCODEC_DOVI_RPU_H
25 #define AVCODEC_DOVI_RPU_H
26 
27 #include "libavutil/dovi_meta.h"
28 #include "libavutil/frame.h"
29 
30 #define DOVI_MAX_DM_ID 15
31 typedef struct DOVIContext {
32  void *logctx;
33 
34  /**
35  * Currently active RPU data header, updates on every dovi_rpu_parse().
36  */
38 
39  /**
40  * Currently active data mappings, or NULL. Points into memory owned by the
41  * corresponding rpu/vdr_ref, which becomes invalid on the next call to
42  * dovi_rpu_parse.
43  */
46 
47  /**
48  * Private fields internal to dovi_rpu.c
49  */
51  uint8_t dv_profile;
52 
53 } DOVIContext;
54 
56 
57 /**
58  * Completely reset a DOVIContext, preserving only logctx.
59  */
61 
62 /**
63  * Partially reset the internal state. Resets per-frame state while preserving
64  * fields parsed from the configuration record.
65  */
67 
68 /**
69  * Read the contents of an AVDOVIDecoderConfigurationRecord (usually provided
70  * by stream side data) and update internal state accordingly.
71  */
73 
74 /**
75  * Parse the contents of a Dovi RPU NAL and update the parsed values in the
76  * DOVIContext struct.
77  *
78  * Returns 0 or an error code.
79  */
80 int ff_dovi_rpu_parse(DOVIContext *s, const uint8_t *rpu, size_t rpu_size);
81 
82 /**
83  * Attach the decoded AVDOVIMetadata as side data to an AVFrame.
84  */
86 
87 #endif /* AVCODEC_DOVI_RPU_H */
ff_dovi_ctx_replace
int ff_dovi_ctx_replace(DOVIContext *s, const DOVIContext *s0)
Definition: dovi_rpu.c:64
DOVI_MAX_DM_ID
#define DOVI_MAX_DM_ID
Definition: dovi_rpu.h:30
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:317
AVDOVIRpuDataHeader
Dolby Vision RPU data header.
Definition: dovi_meta.h:76
DOVIContext
Definition: dovi_rpu.h:31
DOVIContext::dv_profile
uint8_t dv_profile
Definition: dovi_rpu.h:51
ff_dovi_rpu_parse
int ff_dovi_rpu_parse(DOVIContext *s, const uint8_t *rpu, size_t rpu_size)
Parse the contents of a Dovi RPU NAL and update the parsed values in the DOVIContext struct.
Definition: dovi_rpu.c:194
s
#define s(width, name)
Definition: cbs_vp9.c:257
DOVIContext::mapping
const AVDOVIDataMapping * mapping
Currently active data mappings, or NULL.
Definition: dovi_rpu.h:44
DOVIContext::vdr_ref
AVBufferRef * vdr_ref[DOVI_MAX_DM_ID+1]
Private fields internal to dovi_rpu.c.
Definition: dovi_rpu.h:50
DOVIContext::color
const AVDOVIColorMetadata * color
Definition: dovi_rpu.h:45
ff_dovi_attach_side_data
int ff_dovi_attach_side_data(DOVIContext *s, AVFrame *frame)
Attach the decoded AVDOVIMetadata as side data to an AVFrame.
Definition: dovi_rpu.c:91
ff_dovi_ctx_flush
void ff_dovi_ctx_flush(DOVIContext *s)
Partially reset the internal state.
Definition: dovi_rpu.c:53
frame.h
DOVIContext::header
AVDOVIRpuDataHeader header
Currently active RPU data header, updates on every dovi_rpu_parse().
Definition: dovi_rpu.h:37
frame
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
Definition: filter_design.txt:264
dovi_meta.h
AVDOVIColorMetadata
Dolby Vision RPU colorspace metadata parameters.
Definition: dovi_meta.h:157
DOVIContext::logctx
void * logctx
Definition: dovi_rpu.h:32
AVBufferRef
A reference to a data buffer.
Definition: buffer.h:82
s0
#define s0
Definition: regdef.h:37
ff_dovi_update_cfg
void ff_dovi_update_cfg(DOVIContext *s, const AVDOVIDecoderConfigurationRecord *cfg)
Read the contents of an AVDOVIDecoderConfigurationRecord (usually provided by stream side data) and u...
Definition: dovi_rpu.c:83
AVDOVIDataMapping
Dolby Vision RPU data mapping parameters.
Definition: dovi_meta.h:139
AVDOVIDecoderConfigurationRecord
Definition: dovi_meta.h:52
ff_dovi_ctx_unref
void ff_dovi_ctx_unref(DOVIContext *s)
Completely reset a DOVIContext, preserving only logctx.
Definition: dovi_rpu.c:43