FFmpeg
libavcodec
cbs_vp9.h
Go to the documentation of this file.
1
/*
2
* This file is part of FFmpeg.
3
*
4
* FFmpeg is free software; you can redistribute it and/or
5
* modify it under the terms of the GNU Lesser General Public
6
* License as published by the Free Software Foundation; either
7
* version 2.1 of the License, or (at your option) any later version.
8
*
9
* FFmpeg is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
* Lesser General Public License for more details.
13
*
14
* You should have received a copy of the GNU Lesser General Public
15
* License along with FFmpeg; if not, write to the Free Software
16
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
*/
18
19
#ifndef AVCODEC_CBS_VP9_H
20
#define AVCODEC_CBS_VP9_H
21
22
#include <stddef.h>
23
#include <stdint.h>
24
25
#include "
cbs.h
"
26
27
28
// Miscellaneous constants (section 3).
29
enum
{
30
VP9_REFS_PER_FRAME
= 3,
31
32
VP9_MIN_TILE_WIDTH_B64
= 4,
33
VP9_MAX_TILE_WIDTH_B64
= 64,
34
35
VP9_NUM_REF_FRAMES
= 8,
36
VP9_MAX_REF_FRAMES
= 4,
37
38
VP9_MAX_SEGMENTS
= 8,
39
VP9_SEG_LVL_MAX
= 4,
40
};
41
42
// Frame types (section 7.2).
43
enum
{
44
VP9_KEY_FRAME
= 0,
45
VP9_NON_KEY_FRAME
= 1,
46
};
47
48
// Frame sync bytes (section 7.2.1).
49
enum
{
50
VP9_FRAME_SYNC_0
= 0x49,
51
VP9_FRAME_SYNC_1
= 0x83,
52
VP9_FRAME_SYNC_2
= 0x42,
53
};
54
55
// Color space values (section 7.2.2).
56
enum
{
57
VP9_CS_UNKNOWN
= 0,
58
VP9_CS_BT_601
= 1,
59
VP9_CS_BT_709
= 2,
60
VP9_CS_SMPTE_170
= 3,
61
VP9_CS_SMPTE_240
= 4,
62
VP9_CS_BT_2020
= 5,
63
VP9_CS_RESERVED
= 6,
64
VP9_CS_RGB
= 7,
65
};
66
67
// Reference frame types (section 7.4.12).
68
enum
{
69
VP9_INTRA_FRAME
= 0,
70
VP9_LAST_FRAME
= 1,
71
VP9_GOLDEN_FRAME
= 2,
72
VP9_ALTREF_FRAME
= 3,
73
};
74
75
// Superframe properties (section B.3).
76
enum
{
77
VP9_MAX_FRAMES_IN_SUPERFRAME
= 8,
78
79
VP9_SUPERFRAME_MARKER
= 6,
80
};
81
82
83
typedef
struct
VP9RawFrameHeader
{
84
uint8_t
frame_marker
;
85
uint8_t
profile_low_bit
;
86
uint8_t
profile_high_bit
;
87
88
uint8_t
show_existing_frame
;
89
uint8_t
frame_to_show_map_idx
;
90
91
uint8_t
frame_type
;
92
uint8_t
show_frame
;
93
uint8_t
error_resilient_mode
;
94
95
// Color config.
96
uint8_t
ten_or_twelve_bit
;
97
uint8_t
color_space
;
98
uint8_t
color_range
;
99
uint8_t
subsampling_x
;
100
uint8_t
subsampling_y
;
101
102
uint8_t
refresh_frame_flags
;
103
104
uint8_t
intra_only
;
105
uint8_t
reset_frame_context
;
106
107
uint8_t
ref_frame_idx
[
VP9_REFS_PER_FRAME
];
108
uint8_t
ref_frame_sign_bias
[
VP9_MAX_REF_FRAMES
];
109
110
uint8_t
allow_high_precision_mv
;
111
112
uint8_t
refresh_frame_context
;
113
uint8_t
frame_parallel_decoding_mode
;
114
115
uint8_t
frame_context_idx
;
116
117
// Frame/render size.
118
uint8_t
found_ref
[
VP9_REFS_PER_FRAME
];
119
uint16_t
frame_width_minus_1
;
120
uint16_t
frame_height_minus_1
;
121
uint8_t
render_and_frame_size_different
;
122
uint16_t
render_width_minus_1
;
123
uint16_t
render_height_minus_1
;
124
125
// Interpolation filter.
126
uint8_t
is_filter_switchable
;
127
uint8_t
raw_interpolation_filter_type
;
128
129
// Loop filter params.
130
uint8_t
loop_filter_level
;
131
uint8_t
loop_filter_sharpness
;
132
uint8_t
loop_filter_delta_enabled
;
133
uint8_t
loop_filter_delta_update
;
134
uint8_t
update_ref_delta
[
VP9_MAX_REF_FRAMES
];
135
int8_t
loop_filter_ref_deltas
[
VP9_MAX_REF_FRAMES
];
136
uint8_t
update_mode_delta
[2];
137
int8_t
loop_filter_mode_deltas
[2];
138
139
// Quantization params.
140
uint8_t
base_q_idx
;
141
int8_t
delta_q_y_dc
;
142
int8_t
delta_q_uv_dc
;
143
int8_t
delta_q_uv_ac
;
144
145
// Segmentation params.
146
uint8_t
segmentation_enabled
;
147
uint8_t
segmentation_update_map
;
148
uint8_t
segmentation_tree_probs
[7];
149
uint8_t
segmentation_temporal_update
;
150
uint8_t
segmentation_pred_prob
[3];
151
uint8_t
segmentation_update_data
;
152
uint8_t
segmentation_abs_or_delta_update
;
153
uint8_t
feature_enabled
[
VP9_MAX_SEGMENTS
][
VP9_SEG_LVL_MAX
];
154
uint8_t
feature_value
[
VP9_MAX_SEGMENTS
][
VP9_SEG_LVL_MAX
];
155
uint8_t
feature_sign
[
VP9_MAX_SEGMENTS
][
VP9_SEG_LVL_MAX
];
156
157
// Tile info.
158
uint8_t
tile_cols_log2
;
159
uint8_t
tile_rows_log2
;
160
161
uint16_t
header_size_in_bytes
;
162
}
VP9RawFrameHeader
;
163
164
typedef
struct
VP9RawFrame
{
165
VP9RawFrameHeader
header
;
166
167
uint8_t *
data
;
168
AVBufferRef
*
data_ref
;
169
size_t
data_size
;
170
}
VP9RawFrame
;
171
172
typedef
struct
VP9RawSuperframeIndex
{
173
uint8_t
superframe_marker
;
174
uint8_t
bytes_per_framesize_minus_1
;
175
uint8_t
frames_in_superframe_minus_1
;
176
uint32_t
frame_sizes
[
VP9_MAX_FRAMES_IN_SUPERFRAME
];
177
}
VP9RawSuperframeIndex
;
178
179
typedef
struct
VP9RawSuperframe
{
180
VP9RawFrame
frames
[
VP9_MAX_FRAMES_IN_SUPERFRAME
];
181
VP9RawSuperframeIndex
index
;
182
}
VP9RawSuperframe
;
183
184
typedef
struct
VP9ReferenceFrameState
{
185
int
frame_width
;
// RefFrameWidth
186
int
frame_height
;
// RefFrameHeight
187
int
subsampling_x
;
// RefSubsamplingX
188
int
subsampling_y
;
// RefSubsamplingY
189
int
bit_depth
;
// RefBitDepth
190
}
VP9ReferenceFrameState
;
191
192
typedef
struct
CodedBitstreamVP9Context
{
193
int
profile
;
194
195
// Frame dimensions in 8x8 mode info blocks.
196
uint16_t
mi_cols
;
197
uint16_t
mi_rows
;
198
// Frame dimensions in 64x64 superblocks.
199
uint16_t
sb64_cols
;
200
uint16_t
sb64_rows
;
201
202
int
frame_width
;
203
int
frame_height
;
204
205
uint8_t
subsampling_x
;
206
uint8_t
subsampling_y
;
207
int
bit_depth
;
208
209
VP9ReferenceFrameState
ref
[
VP9_NUM_REF_FRAMES
];
210
}
CodedBitstreamVP9Context
;
211
212
213
#endif
/* AVCODEC_CBS_VP9_H */
VP9RawFrameHeader::show_frame
uint8_t show_frame
Definition:
cbs_vp9.h:92
VP9RawFrameHeader::intra_only
uint8_t intra_only
Definition:
cbs_vp9.h:104
VP9RawFrame::data_size
size_t data_size
Definition:
cbs_vp9.h:169
VP9RawFrameHeader::ref_frame_idx
uint8_t ref_frame_idx[VP9_REFS_PER_FRAME]
Definition:
cbs_vp9.h:107
VP9_CS_SMPTE_170
@ VP9_CS_SMPTE_170
Definition:
cbs_vp9.h:60
VP9RawFrameHeader::delta_q_uv_dc
int8_t delta_q_uv_dc
Definition:
cbs_vp9.h:142
VP9RawFrameHeader::loop_filter_mode_deltas
int8_t loop_filter_mode_deltas[2]
Definition:
cbs_vp9.h:137
CodedBitstreamVP9Context::frame_width
int frame_width
Definition:
cbs_vp9.h:202
VP9_CS_BT_601
@ VP9_CS_BT_601
Definition:
cbs_vp9.h:58
VP9RawFrameHeader::header_size_in_bytes
uint16_t header_size_in_bytes
Definition:
cbs_vp9.h:161
VP9RawFrameHeader::tile_rows_log2
uint8_t tile_rows_log2
Definition:
cbs_vp9.h:159
VP9_CS_RESERVED
@ VP9_CS_RESERVED
Definition:
cbs_vp9.h:63
VP9RawFrameHeader::profile_high_bit
uint8_t profile_high_bit
Definition:
cbs_vp9.h:86
VP9RawFrameHeader::error_resilient_mode
uint8_t error_resilient_mode
Definition:
cbs_vp9.h:93
VP9RawFrameHeader::frame_context_idx
uint8_t frame_context_idx
Definition:
cbs_vp9.h:115
CodedBitstreamVP9Context::sb64_rows
uint16_t sb64_rows
Definition:
cbs_vp9.h:200
VP9RawSuperframeIndex::frame_sizes
uint32_t frame_sizes[VP9_MAX_FRAMES_IN_SUPERFRAME]
Definition:
cbs_vp9.h:176
VP9RawSuperframe
Definition:
cbs_vp9.h:179
VP9RawFrameHeader::render_and_frame_size_different
uint8_t render_and_frame_size_different
Definition:
cbs_vp9.h:121
cbs.h
VP9_MAX_TILE_WIDTH_B64
@ VP9_MAX_TILE_WIDTH_B64
Definition:
cbs_vp9.h:33
VP9RawFrameHeader::raw_interpolation_filter_type
uint8_t raw_interpolation_filter_type
Definition:
cbs_vp9.h:127
VP9RawFrameHeader::frame_to_show_map_idx
uint8_t frame_to_show_map_idx
Definition:
cbs_vp9.h:89
VP9_NUM_REF_FRAMES
@ VP9_NUM_REF_FRAMES
Definition:
cbs_vp9.h:35
CodedBitstreamVP9Context::ref
VP9ReferenceFrameState ref[VP9_NUM_REF_FRAMES]
Definition:
cbs_vp9.h:209
VP9RawFrameHeader::subsampling_y
uint8_t subsampling_y
Definition:
cbs_vp9.h:100
VP9_MAX_SEGMENTS
@ VP9_MAX_SEGMENTS
Definition:
cbs_vp9.h:38
VP9RawFrame::data_ref
AVBufferRef * data_ref
Definition:
cbs_vp9.h:168
VP9_GOLDEN_FRAME
@ VP9_GOLDEN_FRAME
Definition:
cbs_vp9.h:71
VP9_FRAME_SYNC_0
@ VP9_FRAME_SYNC_0
Definition:
cbs_vp9.h:50
VP9RawFrameHeader::frame_height_minus_1
uint16_t frame_height_minus_1
Definition:
cbs_vp9.h:120
VP9_REFS_PER_FRAME
@ VP9_REFS_PER_FRAME
Definition:
cbs_vp9.h:30
VP9RawFrameHeader::render_height_minus_1
uint16_t render_height_minus_1
Definition:
cbs_vp9.h:123
VP9ReferenceFrameState::subsampling_y
int subsampling_y
Definition:
cbs_vp9.h:188
VP9RawFrameHeader::subsampling_x
uint8_t subsampling_x
Definition:
cbs_vp9.h:99
VP9_INTRA_FRAME
@ VP9_INTRA_FRAME
Definition:
cbs_vp9.h:69
VP9RawFrameHeader::found_ref
uint8_t found_ref[VP9_REFS_PER_FRAME]
Definition:
cbs_vp9.h:118
VP9RawSuperframe::frames
VP9RawFrame frames[VP9_MAX_FRAMES_IN_SUPERFRAME]
Definition:
cbs_vp9.h:180
VP9ReferenceFrameState
Definition:
cbs_vp9.h:184
VP9ReferenceFrameState::subsampling_x
int subsampling_x
Definition:
cbs_vp9.h:187
VP9RawFrameHeader::segmentation_tree_probs
uint8_t segmentation_tree_probs[7]
Definition:
cbs_vp9.h:148
VP9RawFrameHeader::ten_or_twelve_bit
uint8_t ten_or_twelve_bit
Definition:
cbs_vp9.h:96
VP9RawFrameHeader
Definition:
cbs_vp9.h:83
CodedBitstreamVP9Context::mi_rows
uint16_t mi_rows
Definition:
cbs_vp9.h:197
VP9RawSuperframeIndex::frames_in_superframe_minus_1
uint8_t frames_in_superframe_minus_1
Definition:
cbs_vp9.h:175
VP9RawFrameHeader::refresh_frame_context
uint8_t refresh_frame_context
Definition:
cbs_vp9.h:112
CodedBitstreamVP9Context::mi_cols
uint16_t mi_cols
Definition:
cbs_vp9.h:196
VP9RawFrameHeader::show_existing_frame
uint8_t show_existing_frame
Definition:
cbs_vp9.h:88
CodedBitstreamVP9Context::subsampling_y
uint8_t subsampling_y
Definition:
cbs_vp9.h:206
VP9RawSuperframeIndex
Definition:
cbs_vp9.h:172
VP9_FRAME_SYNC_2
@ VP9_FRAME_SYNC_2
Definition:
cbs_vp9.h:52
VP9RawFrameHeader::feature_value
uint8_t feature_value[VP9_MAX_SEGMENTS][VP9_SEG_LVL_MAX]
Definition:
cbs_vp9.h:154
VP9_KEY_FRAME
@ VP9_KEY_FRAME
Definition:
cbs_vp9.h:44
VP9RawSuperframeIndex::bytes_per_framesize_minus_1
uint8_t bytes_per_framesize_minus_1
Definition:
cbs_vp9.h:174
VP9RawFrameHeader::profile_low_bit
uint8_t profile_low_bit
Definition:
cbs_vp9.h:85
VP9RawFrameHeader::ref_frame_sign_bias
uint8_t ref_frame_sign_bias[VP9_MAX_REF_FRAMES]
Definition:
cbs_vp9.h:108
VP9RawFrame
Definition:
cbs_vp9.h:164
VP9RawFrameHeader::delta_q_y_dc
int8_t delta_q_y_dc
Definition:
cbs_vp9.h:141
VP9RawFrameHeader::frame_marker
uint8_t frame_marker
Definition:
cbs_vp9.h:84
VP9RawFrameHeader::segmentation_temporal_update
uint8_t segmentation_temporal_update
Definition:
cbs_vp9.h:149
VP9RawFrameHeader::segmentation_update_map
uint8_t segmentation_update_map
Definition:
cbs_vp9.h:147
VP9RawFrame::header
VP9RawFrameHeader header
Definition:
cbs_vp9.h:165
VP9_NON_KEY_FRAME
@ VP9_NON_KEY_FRAME
Definition:
cbs_vp9.h:45
VP9_FRAME_SYNC_1
@ VP9_FRAME_SYNC_1
Definition:
cbs_vp9.h:51
VP9RawFrameHeader::loop_filter_ref_deltas
int8_t loop_filter_ref_deltas[VP9_MAX_REF_FRAMES]
Definition:
cbs_vp9.h:135
CodedBitstreamVP9Context::bit_depth
int bit_depth
Definition:
cbs_vp9.h:207
CodedBitstreamVP9Context::profile
int profile
Definition:
cbs_vp9.h:193
VP9RawFrameHeader::frame_parallel_decoding_mode
uint8_t frame_parallel_decoding_mode
Definition:
cbs_vp9.h:113
VP9RawFrameHeader::feature_sign
uint8_t feature_sign[VP9_MAX_SEGMENTS][VP9_SEG_LVL_MAX]
Definition:
cbs_vp9.h:155
CodedBitstreamVP9Context
Definition:
cbs_vp9.h:192
VP9_MAX_REF_FRAMES
@ VP9_MAX_REF_FRAMES
Definition:
cbs_vp9.h:36
VP9RawFrameHeader::is_filter_switchable
uint8_t is_filter_switchable
Definition:
cbs_vp9.h:126
VP9RawFrameHeader::feature_enabled
uint8_t feature_enabled[VP9_MAX_SEGMENTS][VP9_SEG_LVL_MAX]
Definition:
cbs_vp9.h:153
VP9RawFrameHeader::segmentation_abs_or_delta_update
uint8_t segmentation_abs_or_delta_update
Definition:
cbs_vp9.h:152
CodedBitstreamVP9Context::subsampling_x
uint8_t subsampling_x
Definition:
cbs_vp9.h:205
VP9RawFrameHeader::delta_q_uv_ac
int8_t delta_q_uv_ac
Definition:
cbs_vp9.h:143
VP9_MIN_TILE_WIDTH_B64
@ VP9_MIN_TILE_WIDTH_B64
Definition:
cbs_vp9.h:32
VP9RawFrameHeader::color_range
uint8_t color_range
Definition:
cbs_vp9.h:98
VP9RawFrameHeader::tile_cols_log2
uint8_t tile_cols_log2
Definition:
cbs_vp9.h:158
VP9RawFrameHeader::segmentation_pred_prob
uint8_t segmentation_pred_prob[3]
Definition:
cbs_vp9.h:150
VP9RawFrameHeader::base_q_idx
uint8_t base_q_idx
Definition:
cbs_vp9.h:140
CodedBitstreamVP9Context::frame_height
int frame_height
Definition:
cbs_vp9.h:203
VP9RawFrameHeader::reset_frame_context
uint8_t reset_frame_context
Definition:
cbs_vp9.h:105
VP9RawFrameHeader::frame_type
uint8_t frame_type
Definition:
cbs_vp9.h:91
VP9_CS_SMPTE_240
@ VP9_CS_SMPTE_240
Definition:
cbs_vp9.h:61
VP9ReferenceFrameState::frame_width
int frame_width
Definition:
cbs_vp9.h:185
VP9RawFrame::data
uint8_t * data
Definition:
cbs_vp9.h:167
VP9RawFrameHeader::loop_filter_sharpness
uint8_t loop_filter_sharpness
Definition:
cbs_vp9.h:131
VP9_SUPERFRAME_MARKER
@ VP9_SUPERFRAME_MARKER
Definition:
cbs_vp9.h:79
VP9RawFrameHeader::update_ref_delta
uint8_t update_ref_delta[VP9_MAX_REF_FRAMES]
Definition:
cbs_vp9.h:134
VP9_SEG_LVL_MAX
@ VP9_SEG_LVL_MAX
Definition:
cbs_vp9.h:39
VP9RawFrameHeader::frame_width_minus_1
uint16_t frame_width_minus_1
Definition:
cbs_vp9.h:119
VP9RawSuperframe::index
VP9RawSuperframeIndex index
Definition:
cbs_vp9.h:181
VP9RawSuperframeIndex::superframe_marker
uint8_t superframe_marker
Definition:
cbs_vp9.h:173
VP9RawFrameHeader::render_width_minus_1
uint16_t render_width_minus_1
Definition:
cbs_vp9.h:122
VP9RawFrameHeader::color_space
uint8_t color_space
Definition:
cbs_vp9.h:97
VP9_LAST_FRAME
@ VP9_LAST_FRAME
Definition:
cbs_vp9.h:70
VP9RawFrameHeader::segmentation_enabled
uint8_t segmentation_enabled
Definition:
cbs_vp9.h:146
AVBufferRef
A reference to a data buffer.
Definition:
buffer.h:82
VP9RawFrameHeader::segmentation_update_data
uint8_t segmentation_update_data
Definition:
cbs_vp9.h:151
VP9RawFrameHeader::loop_filter_delta_enabled
uint8_t loop_filter_delta_enabled
Definition:
cbs_vp9.h:132
CodedBitstreamVP9Context::sb64_cols
uint16_t sb64_cols
Definition:
cbs_vp9.h:199
VP9_CS_BT_2020
@ VP9_CS_BT_2020
Definition:
cbs_vp9.h:62
VP9RawFrameHeader::update_mode_delta
uint8_t update_mode_delta[2]
Definition:
cbs_vp9.h:136
VP9_CS_BT_709
@ VP9_CS_BT_709
Definition:
cbs_vp9.h:59
VP9RawFrameHeader::allow_high_precision_mv
uint8_t allow_high_precision_mv
Definition:
cbs_vp9.h:110
VP9ReferenceFrameState::frame_height
int frame_height
Definition:
cbs_vp9.h:186
VP9RawFrameHeader::loop_filter_delta_update
uint8_t loop_filter_delta_update
Definition:
cbs_vp9.h:133
VP9_MAX_FRAMES_IN_SUPERFRAME
@ VP9_MAX_FRAMES_IN_SUPERFRAME
Definition:
cbs_vp9.h:77
VP9RawFrameHeader::loop_filter_level
uint8_t loop_filter_level
Definition:
cbs_vp9.h:130
VP9_CS_RGB
@ VP9_CS_RGB
Definition:
cbs_vp9.h:64
VP9RawFrameHeader::refresh_frame_flags
uint8_t refresh_frame_flags
Definition:
cbs_vp9.h:102
VP9_ALTREF_FRAME
@ VP9_ALTREF_FRAME
Definition:
cbs_vp9.h:72
VP9ReferenceFrameState::bit_depth
int bit_depth
Definition:
cbs_vp9.h:189
VP9_CS_UNKNOWN
@ VP9_CS_UNKNOWN
Definition:
cbs_vp9.h:57
Generated on Thu Apr 18 2024 22:41:44 for FFmpeg by
1.8.17