1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
/*! @file parameters.h
*
* @brief Declare a data structure for holding a table of parameters that is passed
* to the encoder during initialization.
*
* (C) Copyright 2018 GoPro Inc (http://gopro.com/).
*
* Licensed under either:
* - Apache License, Version 2.0, http://www.apache.org/licenses/LICENSE-2.0
* - MIT license, http://opensource.org/licenses/MIT
* at your option.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef PARAMETERS_H
#define PARAMETERS_H
#include "vc5_encoder.h"
/*!
@brief Function prototype for a decompositor
A decompositor is the opposite of an image composition operator:
It decomposes a frame into one or more frames.
For example, an interlaced frame can be decomposed into fields or two frames
arranged side-by-side within a single frame can be decomposed into individual
frames.
Each layer in an encoded sample may correspond to a separate input frame.
For convenience, the reference codec stores the input to the encoder in a
separate file with one frame per file if the encoded sample has a single layer.
To allow the reference encoder to store all of the input frames that are
encoded as separate layers in an encoded sample in a single file, multiple
frames are stored in the file (often using over-under frame packing). The
decomposer unpacks multiple frames in a single frame into individual frames
for encoding with one frame per layer.
*/
typedef CODEC_ERROR (* DECOMPOSITOR)(IMAGE *packed_image, IMAGE *image_array[], int frame_count);
/*!
@brief Declaration of a data structure for passing parameters to the encoder
The encoded dimensions are the width and height of the planes of pixels as
represented internally in the encoded sample. In the case where the planes
have different dimensions (for example YUV with 4:2:2 sampling), the first
encoded plane (corresponding to the luma plane, for example) is reported.
*/
typedef struct _encoder_parameters
{
uint32_t version; //!< Version number for this definition of the parameters
// BAYER_ORDERING bayer_ordering;
ENABLED_PARTS enabled_parts; //!< Parts of the VC-5 standard that are enabled
//! Data structure for the input frame dimensions and format
struct _input_parameters
{
DIMENSION width; //!< Width of the frames input to the encoder
DIMENSION height; //!< Height of the frames input to the encoder
PIXEL_FORMAT format; //!< Pixel format of the input frames
PRECISION precision; //!< Bits per component in the input image
} input; //!< Dimensions and format of the input frame
//! Data structure for the encoded representation of the image
struct _encoded_parameters
{
#if VC5_ENABLED_PART(VC5_PART_IMAGE_FORMATS)
DIMENSION width; //!< Width of the encoded frame
DIMENSION height; //!< Height of the encoded frame
IMAGE_FORMAT format; //!< Internal format of the encoded image
PRECISION precision; //!< Encoded precision of the image after scaling
#endif
//! Number of bits used to encode lowpass coefficients
PRECISION lowpass_precision;
} encoded; //!< Encoded frame dimensions and the encoded format
//! Array of quantization values indexed by the subband number
QUANT quant_table[MAX_SUBBAND_COUNT];
#if VC5_ENABLED_PART(VC5_PART_METADATA)
//! Metadata that controls decoding (currently not used)
METADATA metadata;
#endif
#if VC5_ENABLED_PART(VC5_PART_LAYERS)
int layer_count;
int progressive;
DECOMPOSITOR decompositor;
#endif
#if VC5_ENABLED_PART(VC5_PART_SECTIONS)
ENABLED_SECTIONS enabled_sections;
#endif
#if VC5_ENABLED_PART(VC5_PART_IMAGE_FORMATS)
// Definition of the pattern elements
DIMENSION pattern_width;
DIMENSION pattern_height;
DIMENSION components_per_sample;
//PRECISION max_bits_per_component;
#endif
//! Table for the order in which channels are encoded into the bitstream
CHANNEL channel_order_table[MAX_CHANNEL_COUNT];
//! Number of entries in the channel order table (may be less than the channel count)
int channel_order_count;
//! Flag that controls verbose output
bool verbose_flag;
gpr_allocator allocator;
GPR_RGB_RESOLUTION rgb_resolution;
gpr_rgb_gain rgb_gain;
} ENCODER_PARAMETERS;
#ifdef __cplusplus
extern "C" {
#endif
CODEC_ERROR InitEncoderParameters(ENCODER_PARAMETERS *parameters);
#ifdef __cplusplus
}
#endif
#endif // PARAMETERS_H
|