Coverage Report

Created: 2026-05-23 07:06

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/ffmpeg/libavcodec/cbs_lcevc_syntax_template.c
Line
Count
Source
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
static int FUNC(byte_alignment)(CodedBitstreamContext *ctx, RWContext *rw)
20
1.35M
{
21
1.35M
    int err;
22
23
    // ISO/IEC 23094-2:2021/FDAM 1:2023(E) 7.3.12
24
1.35M
    while (byte_alignment(rw) != 0)
25
5.91k
        fixed(1, alignment_bit_equal_to_zero, 0);
26
27
1.35M
    return 0;
28
1.35M
}
cbs_lcevc.c:cbs_lcevc_read_byte_alignment
Line
Count
Source
20
460k
{
21
460k
    int err;
22
23
    // ISO/IEC 23094-2:2021/FDAM 1:2023(E) 7.3.12
24
462k
    while (byte_alignment(rw) != 0)
25
3.46k
        fixed(1, alignment_bit_equal_to_zero, 0);
26
27
459k
    return 0;
28
460k
}
cbs_lcevc.c:cbs_lcevc_write_byte_alignment
Line
Count
Source
20
893k
{
21
893k
    int err;
22
23
    // ISO/IEC 23094-2:2021/FDAM 1:2023(E) 7.3.12
24
895k
    while (byte_alignment(rw) != 0)
25
2.44k
        fixed(1, alignment_bit_equal_to_zero, 0);
26
27
893k
    return 0;
28
893k
}
29
30
static int FUNC(rbsp_trailing_bits)(CodedBitstreamContext *ctx, RWContext *rw)
31
10.9k
{
32
10.9k
    int err;
33
34
10.9k
    fixed(1, rbsp_stop_one_bit, 1);
35
82.9k
    while (byte_alignment(rw) != 0)
36
72.5k
        fixed(1, rbsp_alignment_zero_bit, 0);
37
38
10.3k
    return 0;
39
10.3k
}
cbs_lcevc.c:cbs_lcevc_read_rbsp_trailing_bits
Line
Count
Source
31
7.22k
{
32
7.22k
    int err;
33
34
7.22k
    fixed(1, rbsp_stop_one_bit, 1);
35
52.9k
    while (byte_alignment(rw) != 0)
36
46.3k
        fixed(1, rbsp_alignment_zero_bit, 0);
37
38
6.62k
    return 0;
39
6.62k
}
cbs_lcevc.c:cbs_lcevc_write_rbsp_trailing_bits
Line
Count
Source
31
3.75k
{
32
3.75k
    int err;
33
34
3.75k
    fixed(1, rbsp_stop_one_bit, 1);
35
30.0k
    while (byte_alignment(rw) != 0)
36
26.2k
        fixed(1, rbsp_alignment_zero_bit, 0);
37
38
3.75k
    return 0;
39
3.75k
}
40
41
static int FUNC(nal_unit_header)(CodedBitstreamContext *ctx, RWContext *rw,
42
                                 LCEVCRawNALUnitHeader *current,
43
                                 uint32_t valid_type_mask)
44
42.9k
{
45
42.9k
    int err;
46
47
42.9k
    fixed(1, forbidden_zero_bit, 0);
48
42.9k
    fixed(1, forbidden_one_bit, 1);
49
42.9k
    ub(5, nal_unit_type);
50
51
42.9k
    if (!(1 << current->nal_unit_type & valid_type_mask)) {
52
0
        av_log(ctx->log_ctx, AV_LOG_ERROR, "Invalid NAL unit type %d.\n",
53
0
               current->nal_unit_type);
54
0
        return AVERROR_INVALIDDATA;
55
0
    }
56
57
42.9k
    ub(9, reserved_flag);
58
59
42.5k
    return 0;
60
42.9k
}
cbs_lcevc.c:cbs_lcevc_read_nal_unit_header
Line
Count
Source
44
37.9k
{
45
37.9k
    int err;
46
47
37.9k
    fixed(1, forbidden_zero_bit, 0);
48
37.9k
    fixed(1, forbidden_one_bit, 1);
49
37.9k
    ub(5, nal_unit_type);
50
51
37.9k
    if (!(1 << current->nal_unit_type & valid_type_mask)) {
52
0
        av_log(ctx->log_ctx, AV_LOG_ERROR, "Invalid NAL unit type %d.\n",
53
0
               current->nal_unit_type);
54
0
        return AVERROR_INVALIDDATA;
55
0
    }
56
57
37.9k
    ub(9, reserved_flag);
58
59
37.5k
    return 0;
60
37.9k
}
cbs_lcevc.c:cbs_lcevc_write_nal_unit_header
Line
Count
Source
44
4.99k
{
45
4.99k
    int err;
46
47
4.99k
    fixed(1, forbidden_zero_bit, 0);
48
4.99k
    fixed(1, forbidden_one_bit, 1);
49
4.99k
    ub(5, nal_unit_type);
50
51
4.99k
    if (!(1 << current->nal_unit_type & valid_type_mask)) {
52
0
        av_log(ctx->log_ctx, AV_LOG_ERROR, "Invalid NAL unit type %d.\n",
53
0
               current->nal_unit_type);
54
0
        return AVERROR_INVALIDDATA;
55
0
    }
56
57
4.99k
    ub(9, reserved_flag);
58
59
4.99k
    return 0;
60
4.99k
}
61
62
LCEVC_BLOCK_FUNC(global_config, (CodedBitstreamContext *ctx, RWContext *rw,
63
                                 LCEVCRawGlobalConfig *current,
64
                                 LCEVCProcessBlockState *state,
65
                                 int nal_unit_type))
66
44.2k
{
67
44.2k
    CodedBitstreamLCEVCContext *priv = ctx->priv_data;
68
44.2k
    int err;
69
70
44.2k
    HEADER("Global Config");
71
72
44.2k
    flag(processed_planes_type_flag);
73
43.9k
    ub(6, resolution_type);
74
43.9k
    ub(1, transform_type);
75
43.9k
    ub(2, chroma_sampling_type);
76
43.7k
    ub(2, base_depth_type);
77
43.7k
    ub(2, enhancement_depth_type);
78
43.7k
    flag(temporal_step_width_modifier_signalled_flag);
79
43.7k
    flag(predicted_residual_mode_flag);
80
43.7k
    flag(temporal_tile_intra_signalling_enabled_flag);
81
42.9k
    flag(temporal_enabled_flag);
82
42.9k
    ub(3, upsample_type);
83
42.9k
    flag(level1_filtering_signalled_flag);
84
42.9k
    ub(2, scaling_mode_level1);
85
42.9k
    ub(2, scaling_mode_level2);
86
42.6k
    ub(2, tile_dimensions_type);
87
42.6k
    ub(2, user_data_enabled);
88
42.6k
    flag(level1_depth_flag);
89
42.6k
    flag(chroma_step_width_flag);
90
91
42.6k
    if (current->processed_planes_type_flag) {
92
27.9k
        ub(4, planes_type);
93
27.7k
        ub(4, reserved_zeros_4bit);
94
27.7k
    } else
95
14.6k
        infer(planes_type, 0);
96
97
42.4k
    if (current->temporal_step_width_modifier_signalled_flag) {
98
29.0k
        ub(8, temporal_step_width_modifier);
99
29.0k
    }
100
101
42.1k
    if (current->upsample_type == 4) {
102
5.82k
        ub(16, upsampler_coeff1);
103
5.33k
        ub(16, upsampler_coeff2);
104
5.13k
        ub(16, upsampler_coeff3);
105
4.89k
        ub(16, upsampler_coeff4);
106
4.89k
    }
107
108
40.9k
    if (current->level1_filtering_signalled_flag) {
109
9.72k
        ub(4, level1_filtering_first_coefficient);
110
9.48k
        ub(4, level1_filtering_second_coefficient);
111
9.48k
    }
112
113
40.7k
    if (current->tile_dimensions_type > 0) {
114
16.6k
        if (current->tile_dimensions_type == 3) {
115
8.96k
            ub(16, custom_tile_width);
116
8.54k
            ub(16, custom_tile_height);
117
8.54k
        }
118
15.5k
        ub(5, reserved_zeros_5bit);
119
15.2k
        flag(compression_type_entropy_enabled_per_tile_flag);
120
15.2k
        ub(2, compression_type_size_per_tile);
121
15.2k
    }
122
123
39.3k
    if (current->resolution_type == 63) {
124
5.70k
        ub(16, custom_resolution_width);
125
5.14k
        ub(16, custom_resolution_height);
126
5.14k
    }
127
38.5k
    if (current->chroma_step_width_flag) {
128
13.8k
        ub(8, chroma_step_width_multiplier);
129
24.6k
    } else {
130
24.6k
        infer(chroma_step_width_multiplier, 64);
131
24.6k
    }
132
133
38.3k
    av_refstruct_replace(&priv->gc, current);
134
135
38.3k
    return 0;
136
38.5k
}
cbs_lcevc.c:cbs_lcevc_read_global_config
Line
Count
Source
66
26.2k
{
67
26.2k
    CodedBitstreamLCEVCContext *priv = ctx->priv_data;
68
26.2k
    int err;
69
70
26.2k
    HEADER("Global Config");
71
72
26.2k
    flag(processed_planes_type_flag);
73
25.8k
    ub(6, resolution_type);
74
25.8k
    ub(1, transform_type);
75
25.8k
    ub(2, chroma_sampling_type);
76
25.6k
    ub(2, base_depth_type);
77
25.6k
    ub(2, enhancement_depth_type);
78
25.6k
    flag(temporal_step_width_modifier_signalled_flag);
79
25.6k
    flag(predicted_residual_mode_flag);
80
25.6k
    flag(temporal_tile_intra_signalling_enabled_flag);
81
24.9k
    flag(temporal_enabled_flag);
82
24.9k
    ub(3, upsample_type);
83
24.9k
    flag(level1_filtering_signalled_flag);
84
24.9k
    ub(2, scaling_mode_level1);
85
24.9k
    ub(2, scaling_mode_level2);
86
24.5k
    ub(2, tile_dimensions_type);
87
24.5k
    ub(2, user_data_enabled);
88
24.5k
    flag(level1_depth_flag);
89
24.5k
    flag(chroma_step_width_flag);
90
91
24.5k
    if (current->processed_planes_type_flag) {
92
14.9k
        ub(4, planes_type);
93
14.7k
        ub(4, reserved_zeros_4bit);
94
14.7k
    } else
95
9.63k
        infer(planes_type, 0);
96
97
24.3k
    if (current->temporal_step_width_modifier_signalled_flag) {
98
14.6k
        ub(8, temporal_step_width_modifier);
99
14.6k
    }
100
101
24.1k
    if (current->upsample_type == 4) {
102
3.04k
        ub(16, upsampler_coeff1);
103
2.55k
        ub(16, upsampler_coeff2);
104
2.35k
        ub(16, upsampler_coeff3);
105
2.11k
        ub(16, upsampler_coeff4);
106
2.11k
    }
107
108
22.9k
    if (current->level1_filtering_signalled_flag) {
109
7.28k
        ub(4, level1_filtering_first_coefficient);
110
7.03k
        ub(4, level1_filtering_second_coefficient);
111
7.03k
    }
112
113
22.7k
    if (current->tile_dimensions_type > 0) {
114
10.5k
        if (current->tile_dimensions_type == 3) {
115
6.39k
            ub(16, custom_tile_width);
116
5.96k
            ub(16, custom_tile_height);
117
5.96k
        }
118
9.51k
        ub(5, reserved_zeros_5bit);
119
9.20k
        flag(compression_type_entropy_enabled_per_tile_flag);
120
9.20k
        ub(2, compression_type_size_per_tile);
121
9.20k
    }
122
123
21.3k
    if (current->resolution_type == 63) {
124
4.41k
        ub(16, custom_resolution_width);
125
3.86k
        ub(16, custom_resolution_height);
126
3.86k
    }
127
20.4k
    if (current->chroma_step_width_flag) {
128
10.1k
        ub(8, chroma_step_width_multiplier);
129
10.3k
    } else {
130
10.3k
        infer(chroma_step_width_multiplier, 64);
131
10.3k
    }
132
133
20.2k
    av_refstruct_replace(&priv->gc, current);
134
135
20.2k
    return 0;
136
20.4k
}
cbs_lcevc.c:cbs_lcevc_write_global_config
Line
Count
Source
66
18.0k
{
67
18.0k
    CodedBitstreamLCEVCContext *priv = ctx->priv_data;
68
18.0k
    int err;
69
70
18.0k
    HEADER("Global Config");
71
72
18.0k
    flag(processed_planes_type_flag);
73
18.0k
    ub(6, resolution_type);
74
18.0k
    ub(1, transform_type);
75
18.0k
    ub(2, chroma_sampling_type);
76
18.0k
    ub(2, base_depth_type);
77
18.0k
    ub(2, enhancement_depth_type);
78
18.0k
    flag(temporal_step_width_modifier_signalled_flag);
79
18.0k
    flag(predicted_residual_mode_flag);
80
18.0k
    flag(temporal_tile_intra_signalling_enabled_flag);
81
18.0k
    flag(temporal_enabled_flag);
82
18.0k
    ub(3, upsample_type);
83
18.0k
    flag(level1_filtering_signalled_flag);
84
18.0k
    ub(2, scaling_mode_level1);
85
18.0k
    ub(2, scaling_mode_level2);
86
18.0k
    ub(2, tile_dimensions_type);
87
18.0k
    ub(2, user_data_enabled);
88
18.0k
    flag(level1_depth_flag);
89
18.0k
    flag(chroma_step_width_flag);
90
91
18.0k
    if (current->processed_planes_type_flag) {
92
12.9k
        ub(4, planes_type);
93
12.9k
        ub(4, reserved_zeros_4bit);
94
12.9k
    } else
95
5.03k
        infer(planes_type, 0);
96
97
18.0k
    if (current->temporal_step_width_modifier_signalled_flag) {
98
14.4k
        ub(8, temporal_step_width_modifier);
99
14.4k
    }
100
101
18.0k
    if (current->upsample_type == 4) {
102
2.77k
        ub(16, upsampler_coeff1);
103
2.77k
        ub(16, upsampler_coeff2);
104
2.77k
        ub(16, upsampler_coeff3);
105
2.77k
        ub(16, upsampler_coeff4);
106
2.77k
    }
107
108
18.0k
    if (current->level1_filtering_signalled_flag) {
109
2.44k
        ub(4, level1_filtering_first_coefficient);
110
2.44k
        ub(4, level1_filtering_second_coefficient);
111
2.44k
    }
112
113
18.0k
    if (current->tile_dimensions_type > 0) {
114
6.06k
        if (current->tile_dimensions_type == 3) {
115
2.57k
            ub(16, custom_tile_width);
116
2.57k
            ub(16, custom_tile_height);
117
2.57k
        }
118
6.06k
        ub(5, reserved_zeros_5bit);
119
6.06k
        flag(compression_type_entropy_enabled_per_tile_flag);
120
6.06k
        ub(2, compression_type_size_per_tile);
121
6.06k
    }
122
123
18.0k
    if (current->resolution_type == 63) {
124
1.28k
        ub(16, custom_resolution_width);
125
1.28k
        ub(16, custom_resolution_height);
126
1.28k
    }
127
18.0k
    if (current->chroma_step_width_flag) {
128
3.75k
        ub(8, chroma_step_width_multiplier);
129
14.2k
    } else {
130
14.2k
        infer(chroma_step_width_multiplier, 64);
131
14.2k
    }
132
133
18.0k
    av_refstruct_replace(&priv->gc, current);
134
135
18.0k
    return 0;
136
18.0k
}
137
138
LCEVC_BLOCK_FUNC(sequence_config, (CodedBitstreamContext *ctx, RWContext *rw,
139
                                   LCEVCRawSequenceConfig *current,
140
                                   LCEVCProcessBlockState *state,
141
                                   int nal_unit_type))
142
432k
{
143
432k
    CodedBitstreamLCEVCContext *priv = ctx->priv_data;
144
432k
    int err;
145
146
432k
    HEADER("Sequence Config");
147
148
432k
    ub(4, profile_idc);
149
430k
    ub(4, level_idc);
150
430k
    ub(2, sublevel_idc);
151
429k
    flag(conformance_window_flag);
152
429k
    ub(5, reserved_zeros_5bit);
153
154
429k
    if (current->profile_idc == 15 || current->level_idc == 15) {
155
135k
        ub(3, profile_idc);
156
135k
        ub(4, level_idc);
157
135k
        ub(1, reserved_zeros_1bit);
158
135k
    }
159
429k
    if (current->conformance_window_flag == 1) {
160
142k
        mb(conf_win_left_offset);
161
142k
        mb(conf_win_right_offset);
162
141k
        mb(conf_win_top_offset);
163
141k
        mb(conf_win_bottom_offset);
164
141k
    }
165
166
428k
    av_refstruct_replace(&priv->sc, current);
167
168
428k
    return 0;
169
429k
}
cbs_lcevc.c:cbs_lcevc_read_sequence_config
Line
Count
Source
142
190k
{
143
190k
    CodedBitstreamLCEVCContext *priv = ctx->priv_data;
144
190k
    int err;
145
146
190k
    HEADER("Sequence Config");
147
148
190k
    ub(4, profile_idc);
149
188k
    ub(4, level_idc);
150
188k
    ub(2, sublevel_idc);
151
186k
    flag(conformance_window_flag);
152
186k
    ub(5, reserved_zeros_5bit);
153
154
186k
    if (current->profile_idc == 15 || current->level_idc == 15) {
155
51.0k
        ub(3, profile_idc);
156
50.7k
        ub(4, level_idc);
157
50.7k
        ub(1, reserved_zeros_1bit);
158
50.7k
    }
159
186k
    if (current->conformance_window_flag == 1) {
160
52.6k
        mb(conf_win_left_offset);
161
52.2k
        mb(conf_win_right_offset);
162
51.6k
        mb(conf_win_top_offset);
163
51.4k
        mb(conf_win_bottom_offset);
164
51.4k
    }
165
166
185k
    av_refstruct_replace(&priv->sc, current);
167
168
185k
    return 0;
169
186k
}
cbs_lcevc.c:cbs_lcevc_write_sequence_config
Line
Count
Source
142
242k
{
143
242k
    CodedBitstreamLCEVCContext *priv = ctx->priv_data;
144
242k
    int err;
145
146
242k
    HEADER("Sequence Config");
147
148
242k
    ub(4, profile_idc);
149
242k
    ub(4, level_idc);
150
242k
    ub(2, sublevel_idc);
151
242k
    flag(conformance_window_flag);
152
242k
    ub(5, reserved_zeros_5bit);
153
154
242k
    if (current->profile_idc == 15 || current->level_idc == 15) {
155
84.5k
        ub(3, profile_idc);
156
84.5k
        ub(4, level_idc);
157
84.5k
        ub(1, reserved_zeros_1bit);
158
84.5k
    }
159
242k
    if (current->conformance_window_flag == 1) {
160
90.0k
        mb(conf_win_left_offset);
161
90.0k
        mb(conf_win_right_offset);
162
90.0k
        mb(conf_win_top_offset);
163
90.0k
        mb(conf_win_bottom_offset);
164
90.0k
    }
165
166
242k
    av_refstruct_replace(&priv->sc, current);
167
168
242k
    return 0;
169
242k
}
170
171
LCEVC_BLOCK_FUNC(picture_config, (CodedBitstreamContext *ctx, RWContext *rw,
172
                                  LCEVCRawPictureConfig *current,
173
                                  LCEVCProcessBlockState *state,
174
                                  int nal_unit_type))
175
252k
{
176
252k
    CodedBitstreamLCEVCContext *priv = ctx->priv_data;
177
252k
    int nlayers, err;
178
179
252k
    HEADER("Picture Config");
180
181
252k
    if (!priv->gc)
182
601
        return AVERROR_INVALIDDATA;
183
184
251k
    flag(no_enhancement_bit_flag);
185
251k
    if (current->no_enhancement_bit_flag == 0) {
186
157k
        ub(3, quant_matrix_mode);
187
157k
        flag(dequant_offset_signalled_flag);
188
157k
        flag(picture_type_bit_flag);
189
157k
        flag(temporal_refresh_bit_flag);
190
157k
        flag(step_width_sublayer1_enabled_flag);
191
157k
        ub(15, step_width_sublayer2);
192
157k
        flag(dithering_control_flag);
193
157k
        priv->dithering_control_flag = current->dithering_control_flag;
194
157k
        infer(temporal_signalling_present_flag, priv->gc->temporal_enabled_flag &&
195
157k
                                                !current->temporal_refresh_bit_flag);
196
157k
    } else {
197
93.3k
        infer(quant_matrix_mode, 0);
198
93.3k
        infer(dequant_offset_signalled_flag, 0);
199
93.3k
        ub(4, reserved_zeros_4bit);
200
93.3k
        flag(picture_type_bit_flag);
201
93.3k
        flag(temporal_refresh_bit_flag);
202
93.3k
        infer(step_width_sublayer1_enabled_flag, 0);
203
93.3k
        infer(dithering_control_flag, nal_unit_type == LCEVC_IDR_NUT
204
55.5k
                                     ? 0
205
55.5k
                                     : priv->dithering_control_flag);
206
55.3k
        priv->dithering_control_flag = current->dithering_control_flag;
207
93.0k
        flag(temporal_signalling_present_flag);
208
55.3k
    }
209
210
250k
    if (current->picture_type_bit_flag == 1) {
211
10.3k
        flag(field_type_bit_flag);
212
10.0k
        ub(7, reserved_zeros_7bit);
213
10.0k
    }
214
215
250k
    if (current->step_width_sublayer1_enabled_flag == 1) {
216
9.55k
        ub(15, step_width_sublayer1);
217
9.24k
        flag(level1_filtering_enabled_flag);
218
9.24k
    } else
219
240k
        infer(level1_filtering_enabled_flag, 0);
220
221
249k
    nlayers = priv->gc->transform_type ? 16 : 4;
222
249k
    if (current->quant_matrix_mode == 2 ||
223
242k
        current->quant_matrix_mode == 3 ||
224
240k
        current->quant_matrix_mode == 5) {
225
134k
        for (int layer_idx = 0; layer_idx < nlayers; layer_idx++)
226
124k
            ubs(8, qm_coefficient_0[layer_idx], 1, layer_idx);
227
9.90k
    }
228
229
249k
    if (current->quant_matrix_mode == 4 || current->quant_matrix_mode == 5) {
230
19.3k
        for (int layer_idx = 0; layer_idx < nlayers; layer_idx++)
231
17.5k
            ubs(8, qm_coefficient_1[layer_idx], 1, layer_idx);
232
1.94k
    }
233
234
249k
    if (current->dequant_offset_signalled_flag) {
235
2.20k
        flag(dequant_offset_mode_flag);
236
1.98k
        ub(7, dequant_offset);
237
1.98k
    }
238
239
248k
    if (current->dithering_control_flag == 1) {
240
234k
        ub(2, dithering_type);
241
233k
        ub(1, reserverd_zero);
242
233k
        if (current->dithering_type != 0) {
243
230k
            ub(5, dithering_strength);
244
230k
        } else {
245
3.09k
            ub(5, reserved_zeros_5bit);
246
3.09k
        }
247
233k
    }
248
249
248k
    av_refstruct_replace(&priv->pc, current);
250
248k
    av_refstruct_replace(&current->gc, priv->gc);
251
252
248k
    return 0;
253
248k
}
cbs_lcevc.c:cbs_lcevc_read_picture_config
Line
Count
Source
175
98.9k
{
176
98.9k
    CodedBitstreamLCEVCContext *priv = ctx->priv_data;
177
98.9k
    int nlayers, err;
178
179
98.9k
    HEADER("Picture Config");
180
181
98.9k
    if (!priv->gc)
182
393
        return AVERROR_INVALIDDATA;
183
184
98.5k
    flag(no_enhancement_bit_flag);
185
98.3k
    if (current->no_enhancement_bit_flag == 0) {
186
60.5k
        ub(3, quant_matrix_mode);
187
60.5k
        flag(dequant_offset_signalled_flag);
188
60.5k
        flag(picture_type_bit_flag);
189
60.5k
        flag(temporal_refresh_bit_flag);
190
60.5k
        flag(step_width_sublayer1_enabled_flag);
191
60.5k
        ub(15, step_width_sublayer2);
192
60.3k
        flag(dithering_control_flag);
193
60.3k
        priv->dithering_control_flag = current->dithering_control_flag;
194
60.3k
        infer(temporal_signalling_present_flag, priv->gc->temporal_enabled_flag &&
195
60.3k
                                                !current->temporal_refresh_bit_flag);
196
60.3k
    } else {
197
37.7k
        infer(quant_matrix_mode, 0);
198
37.7k
        infer(dequant_offset_signalled_flag, 0);
199
37.7k
        ub(4, reserved_zeros_4bit);
200
37.7k
        flag(picture_type_bit_flag);
201
37.7k
        flag(temporal_refresh_bit_flag);
202
37.7k
        infer(step_width_sublayer1_enabled_flag, 0);
203
37.7k
        infer(dithering_control_flag, nal_unit_type == LCEVC_IDR_NUT
204
37.7k
                                     ? 0
205
37.7k
                                     : priv->dithering_control_flag);
206
37.7k
        priv->dithering_control_flag = current->dithering_control_flag;
207
37.7k
        flag(temporal_signalling_present_flag);
208
37.7k
    }
209
210
98.1k
    if (current->picture_type_bit_flag == 1) {
211
4.67k
        flag(field_type_bit_flag);
212
4.41k
        ub(7, reserved_zeros_7bit);
213
4.41k
    }
214
215
97.8k
    if (current->step_width_sublayer1_enabled_flag == 1) {
216
3.87k
        ub(15, step_width_sublayer1);
217
3.56k
        flag(level1_filtering_enabled_flag);
218
3.56k
    } else
219
93.9k
        infer(level1_filtering_enabled_flag, 0);
220
221
97.5k
    nlayers = priv->gc->transform_type ? 16 : 4;
222
97.5k
    if (current->quant_matrix_mode == 2 ||
223
94.7k
        current->quant_matrix_mode == 3 ||
224
94.0k
        current->quant_matrix_mode == 5) {
225
51.0k
        for (int layer_idx = 0; layer_idx < nlayers; layer_idx++)
226
47.4k
            ubs(8, qm_coefficient_0[layer_idx], 1, layer_idx);
227
4.03k
    }
228
229
97.1k
    if (current->quant_matrix_mode == 4 || current->quant_matrix_mode == 5) {
230
8.75k
        for (int layer_idx = 0; layer_idx < nlayers; layer_idx++)
231
8.03k
            ubs(8, qm_coefficient_1[layer_idx], 1, layer_idx);
232
931
    }
233
234
96.9k
    if (current->dequant_offset_signalled_flag) {
235
1.08k
        flag(dequant_offset_mode_flag);
236
862
        ub(7, dequant_offset);
237
862
    }
238
239
96.7k
    if (current->dithering_control_flag == 1) {
240
88.5k
        ub(2, dithering_type);
241
88.3k
        ub(1, reserverd_zero);
242
88.3k
        if (current->dithering_type != 0) {
243
86.7k
            ub(5, dithering_strength);
244
86.7k
        } else {
245
1.59k
            ub(5, reserved_zeros_5bit);
246
1.59k
        }
247
88.3k
    }
248
249
96.5k
    av_refstruct_replace(&priv->pc, current);
250
96.5k
    av_refstruct_replace(&current->gc, priv->gc);
251
252
96.5k
    return 0;
253
96.7k
}
cbs_lcevc.c:cbs_lcevc_write_picture_config
Line
Count
Source
175
153k
{
176
153k
    CodedBitstreamLCEVCContext *priv = ctx->priv_data;
177
153k
    int nlayers, err;
178
179
153k
    HEADER("Picture Config");
180
181
153k
    if (!priv->gc)
182
208
        return AVERROR_INVALIDDATA;
183
184
152k
    flag(no_enhancement_bit_flag);
185
152k
    if (current->no_enhancement_bit_flag == 0) {
186
97.2k
        ub(3, quant_matrix_mode);
187
97.2k
        flag(dequant_offset_signalled_flag);
188
97.2k
        flag(picture_type_bit_flag);
189
97.2k
        flag(temporal_refresh_bit_flag);
190
97.2k
        flag(step_width_sublayer1_enabled_flag);
191
97.2k
        ub(15, step_width_sublayer2);
192
97.2k
        flag(dithering_control_flag);
193
97.2k
        priv->dithering_control_flag = current->dithering_control_flag;
194
97.2k
        infer(temporal_signalling_present_flag, priv->gc->temporal_enabled_flag &&
195
97.2k
                                                !current->temporal_refresh_bit_flag);
196
97.2k
    } else {
197
55.5k
        infer(quant_matrix_mode, 0);
198
55.5k
        infer(dequant_offset_signalled_flag, 0);
199
55.5k
        ub(4, reserved_zeros_4bit);
200
55.5k
        flag(picture_type_bit_flag);
201
55.5k
        flag(temporal_refresh_bit_flag);
202
55.5k
        infer(step_width_sublayer1_enabled_flag, 0);
203
55.5k
        infer(dithering_control_flag, nal_unit_type == LCEVC_IDR_NUT
204
55.5k
                                     ? 0
205
55.5k
                                     : priv->dithering_control_flag);
206
55.3k
        priv->dithering_control_flag = current->dithering_control_flag;
207
55.3k
        flag(temporal_signalling_present_flag);
208
55.3k
    }
209
210
152k
    if (current->picture_type_bit_flag == 1) {
211
5.65k
        flag(field_type_bit_flag);
212
5.65k
        ub(7, reserved_zeros_7bit);
213
5.65k
    }
214
215
152k
    if (current->step_width_sublayer1_enabled_flag == 1) {
216
5.67k
        ub(15, step_width_sublayer1);
217
5.67k
        flag(level1_filtering_enabled_flag);
218
5.67k
    } else
219
146k
        infer(level1_filtering_enabled_flag, 0);
220
221
152k
    nlayers = priv->gc->transform_type ? 16 : 4;
222
152k
    if (current->quant_matrix_mode == 2 ||
223
147k
        current->quant_matrix_mode == 3 ||
224
146k
        current->quant_matrix_mode == 5) {
225
83.0k
        for (int layer_idx = 0; layer_idx < nlayers; layer_idx++)
226
77.2k
            ubs(8, qm_coefficient_0[layer_idx], 1, layer_idx);
227
5.86k
    }
228
229
152k
    if (current->quant_matrix_mode == 4 || current->quant_matrix_mode == 5) {
230
10.5k
        for (int layer_idx = 0; layer_idx < nlayers; layer_idx++)
231
9.53k
            ubs(8, qm_coefficient_1[layer_idx], 1, layer_idx);
232
1.01k
    }
233
234
152k
    if (current->dequant_offset_signalled_flag) {
235
1.12k
        flag(dequant_offset_mode_flag);
236
1.12k
        ub(7, dequant_offset);
237
1.12k
    }
238
239
152k
    if (current->dithering_control_flag == 1) {
240
145k
        ub(2, dithering_type);
241
145k
        ub(1, reserverd_zero);
242
145k
        if (current->dithering_type != 0) {
243
144k
            ub(5, dithering_strength);
244
144k
        } else {
245
1.50k
            ub(5, reserved_zeros_5bit);
246
1.50k
        }
247
145k
    }
248
249
152k
    av_refstruct_replace(&priv->pc, current);
250
152k
    av_refstruct_replace(&current->gc, priv->gc);
251
252
152k
    return 0;
253
152k
}
254
255
LCEVC_BLOCK_FUNC(encoded_data, (CodedBitstreamContext *ctx, RWContext *rw,
256
                                LCEVCRawEncodedData *current,
257
                                LCEVCProcessBlockState *state,
258
                                int nal_unit_type))
259
1.35M
{
260
1.35M
    CodedBitstreamLCEVCContext *priv = ctx->priv_data;
261
1.35M
    int nplanes, nlayers, err;
262
#ifdef READ
263
    int start = get_bits_count(rw);
264
#endif
265
266
1.35M
    HEADER("Encoded Data");
267
268
1.35M
    if (!priv->gc || !priv->pc)
269
1.33k
        return AVERROR_INVALIDDATA;
270
271
1.35M
    nplanes = priv->gc->planes_type ? 3 : 1;
272
1.35M
    nlayers = priv->gc->transform_type ? 16 : 4;
273
2.72M
    for (int plane_idx = 0; plane_idx < nplanes; plane_idx++) {
274
1.36M
        if (priv->pc->no_enhancement_bit_flag == 0) {
275
1.20M
            for (int level_idx = 1; level_idx <= 2; level_idx++) {
276
4.00M
                for (int layer_idx = 0; layer_idx < nlayers; layer_idx++) {
277
3.20M
                    ubs(1, surfaces_entropy_enabled_flag[plane_idx][level_idx][layer_idx], 3, plane_idx, level_idx, layer_idx);
278
3.20M
                    ubs(1, surfaces_rle_only_flag[plane_idx][level_idx][layer_idx], 3, plane_idx, level_idx, layer_idx);
279
3.20M
                }
280
801k
            }
281
400k
        }
282
1.36M
        if (priv->pc->temporal_signalling_present_flag == 1) {
283
1.80k
            ubs(1, temporal_surfaces_entropy_enabled_flag[plane_idx], 1, plane_idx);
284
1.56k
            ubs(1, temporal_surfaces_rle_only_flag[plane_idx], 1, plane_idx);
285
1.56k
        }
286
1.36M
    }
287
288
1.35M
    CHECK(FUNC(byte_alignment)(ctx, rw));
289
290
#ifdef READ
291
459k
    if (!ff_cbs_h2645_read_more_rbsp_data(rw))
292
713
        return AVERROR_INVALIDDATA;
293
294
458k
    int pos = get_bits_count(rw) - start;
295
458k
    int len = state->payload_size;
296
297
458k
    current->header_size = pos / 8;
298
458k
    current->data_size = len - pos / 8;
299
458k
    skip_bits_long(rw, current->data_size * 8);
300
#else
301
893k
    err = ff_cbs_h2645_write_slice_data(ctx, rw, current->data,
302
893k
                                     current->data_size, 0);
303
893k
    if (err < 0)
304
0
        return err;
305
893k
#endif
306
307
893k
    av_refstruct_replace(&current->sc, priv->sc);
308
893k
    av_refstruct_replace(&current->gc, priv->gc);
309
893k
    av_refstruct_replace(&current->pc, priv->pc);
310
311
893k
    return 0;
312
893k
}
cbs_lcevc.c:cbs_lcevc_read_encoded_data
Line
Count
Source
259
462k
{
260
462k
    CodedBitstreamLCEVCContext *priv = ctx->priv_data;
261
462k
    int nplanes, nlayers, err;
262
462k
#ifdef READ
263
462k
    int start = get_bits_count(rw);
264
462k
#endif
265
266
462k
    HEADER("Encoded Data");
267
268
462k
    if (!priv->gc || !priv->pc)
269
933
        return AVERROR_INVALIDDATA;
270
271
461k
    nplanes = priv->gc->planes_type ? 3 : 1;
272
461k
    nlayers = priv->gc->transform_type ? 16 : 4;
273
926k
    for (int plane_idx = 0; plane_idx < nplanes; plane_idx++) {
274
466k
        if (priv->pc->no_enhancement_bit_flag == 0) {
275
1.18M
            for (int level_idx = 1; level_idx <= 2; level_idx++) {
276
3.95M
                for (int layer_idx = 0; layer_idx < nlayers; layer_idx++) {
277
3.16M
                    ubs(1, surfaces_entropy_enabled_flag[plane_idx][level_idx][layer_idx], 3, plane_idx, level_idx, layer_idx);
278
3.16M
                    ubs(1, surfaces_rle_only_flag[plane_idx][level_idx][layer_idx], 3, plane_idx, level_idx, layer_idx);
279
3.16M
                }
280
791k
            }
281
395k
        }
282
466k
        if (priv->pc->temporal_signalling_present_flag == 1) {
283
1.24k
            ubs(1, temporal_surfaces_entropy_enabled_flag[plane_idx], 1, plane_idx);
284
1.01k
            ubs(1, temporal_surfaces_rle_only_flag[plane_idx], 1, plane_idx);
285
1.01k
        }
286
466k
    }
287
288
460k
    CHECK(FUNC(byte_alignment)(ctx, rw));
289
290
459k
#ifdef READ
291
459k
    if (!ff_cbs_h2645_read_more_rbsp_data(rw))
292
713
        return AVERROR_INVALIDDATA;
293
294
458k
    int pos = get_bits_count(rw) - start;
295
458k
    int len = state->payload_size;
296
297
458k
    current->header_size = pos / 8;
298
458k
    current->data_size = len - pos / 8;
299
458k
    skip_bits_long(rw, current->data_size * 8);
300
#else
301
    err = ff_cbs_h2645_write_slice_data(ctx, rw, current->data,
302
                                     current->data_size, 0);
303
    if (err < 0)
304
        return err;
305
#endif
306
307
458k
    av_refstruct_replace(&current->sc, priv->sc);
308
458k
    av_refstruct_replace(&current->gc, priv->gc);
309
458k
    av_refstruct_replace(&current->pc, priv->pc);
310
311
458k
    return 0;
312
459k
}
cbs_lcevc.c:cbs_lcevc_write_encoded_data
Line
Count
Source
259
893k
{
260
893k
    CodedBitstreamLCEVCContext *priv = ctx->priv_data;
261
893k
    int nplanes, nlayers, err;
262
#ifdef READ
263
    int start = get_bits_count(rw);
264
#endif
265
266
893k
    HEADER("Encoded Data");
267
268
893k
    if (!priv->gc || !priv->pc)
269
398
        return AVERROR_INVALIDDATA;
270
271
893k
    nplanes = priv->gc->planes_type ? 3 : 1;
272
893k
    nlayers = priv->gc->transform_type ? 16 : 4;
273
1.79M
    for (int plane_idx = 0; plane_idx < nplanes; plane_idx++) {
274
900k
        if (priv->pc->no_enhancement_bit_flag == 0) {
275
14.8k
            for (int level_idx = 1; level_idx <= 2; level_idx++) {
276
53.4k
                for (int layer_idx = 0; layer_idx < nlayers; layer_idx++) {
277
43.5k
                    ubs(1, surfaces_entropy_enabled_flag[plane_idx][level_idx][layer_idx], 3, plane_idx, level_idx, layer_idx);
278
43.5k
                    ubs(1, surfaces_rle_only_flag[plane_idx][level_idx][layer_idx], 3, plane_idx, level_idx, layer_idx);
279
43.5k
                }
280
9.89k
            }
281
4.94k
        }
282
900k
        if (priv->pc->temporal_signalling_present_flag == 1) {
283
552
            ubs(1, temporal_surfaces_entropy_enabled_flag[plane_idx], 1, plane_idx);
284
552
            ubs(1, temporal_surfaces_rle_only_flag[plane_idx], 1, plane_idx);
285
552
        }
286
900k
    }
287
288
893k
    CHECK(FUNC(byte_alignment)(ctx, rw));
289
290
#ifdef READ
291
    if (!ff_cbs_h2645_read_more_rbsp_data(rw))
292
        return AVERROR_INVALIDDATA;
293
294
    int pos = get_bits_count(rw) - start;
295
    int len = state->payload_size;
296
297
    current->header_size = pos / 8;
298
    current->data_size = len - pos / 8;
299
    skip_bits_long(rw, current->data_size * 8);
300
#else
301
893k
    err = ff_cbs_h2645_write_slice_data(ctx, rw, current->data,
302
893k
                                     current->data_size, 0);
303
893k
    if (err < 0)
304
0
        return err;
305
893k
#endif
306
307
893k
    av_refstruct_replace(&current->sc, priv->sc);
308
893k
    av_refstruct_replace(&current->gc, priv->gc);
309
893k
    av_refstruct_replace(&current->pc, priv->pc);
310
311
893k
    return 0;
312
893k
}
313
314
static int FUNC(sei_payload)(CodedBitstreamContext *ctx, RWContext *rw,
315
                             LCEVCRawSEI *current, int payload_size)
316
270k
{
317
270k
    SEIRawMessage *message = &current->message;
318
270k
    int sei_type;
319
270k
    int i, err;
320
321
270k
    ub(8, payload_type);
322
323
269k
    if (current->payload_type == 1)
324
17.4k
        sei_type = SEI_TYPE_MASTERING_DISPLAY_COLOUR_VOLUME;
325
252k
    else if (current->payload_type == 2)
326
55.8k
        sei_type = SEI_TYPE_CONTENT_LIGHT_LEVEL_INFO;
327
196k
    else if (current->payload_type == 4)
328
5.38k
        sei_type = SEI_TYPE_USER_DATA_REGISTERED_ITU_T_T35;
329
190k
    else if (current->payload_type == 5)
330
5.95k
        sei_type = SEI_TYPE_USER_DATA_UNREGISTERED;
331
184k
    else {
332
184k
        uint8_t *data;
333
334
#ifdef READ
335
        current->payload_size = payload_size;
336
69.5k
        allocate(current->payload_ref, current->payload_size);
337
69.5k
        current->payload = current->payload_ref;
338
#else
339
115k
        allocate(current->payload, current->payload_size);
340
115k
#endif
341
115k
        data = current->payload;
342
343
652k
        for (i = 0; i < current->payload_size; i++)
344
467k
            xu(8, reserved_sei_message_payload_byte[i], data[i], 0, 255, 1, i);
345
346
184k
        return 0;
347
115k
    }
348
349
84.6k
    message->payload_type = sei_type;
350
84.6k
    message->payload_size = payload_size;
351
352
84.6k
    CHECK(FUNC_SEI(message)(ctx, rw, message));
353
354
81.8k
    return 0;
355
84.6k
}
cbs_lcevc.c:cbs_lcevc_read_sei_payload
Line
Count
Source
316
135k
{
317
135k
    SEIRawMessage *message = &current->message;
318
135k
    int sei_type;
319
135k
    int i, err;
320
321
135k
    ub(8, payload_type);
322
323
135k
    if (current->payload_type == 1)
324
6.91k
        sei_type = SEI_TYPE_MASTERING_DISPLAY_COLOUR_VOLUME;
325
128k
    else if (current->payload_type == 2)
326
52.4k
        sei_type = SEI_TYPE_CONTENT_LIGHT_LEVEL_INFO;
327
75.9k
    else if (current->payload_type == 4)
328
2.68k
        sei_type = SEI_TYPE_USER_DATA_REGISTERED_ITU_T_T35;
329
73.3k
    else if (current->payload_type == 5)
330
3.78k
        sei_type = SEI_TYPE_USER_DATA_UNREGISTERED;
331
69.5k
    else {
332
69.5k
        uint8_t *data;
333
334
69.5k
#ifdef READ
335
69.5k
        current->payload_size = payload_size;
336
69.5k
        allocate(current->payload_ref, current->payload_size);
337
69.5k
        current->payload = current->payload_ref;
338
#else
339
        allocate(current->payload, current->payload_size);
340
#endif
341
69.5k
        data = current->payload;
342
343
297k
        for (i = 0; i < current->payload_size; i++)
344
227k
            xu(8, reserved_sei_message_payload_byte[i], data[i], 0, 255, 1, i);
345
346
69.5k
        return 0;
347
69.5k
    }
348
349
65.8k
    message->payload_type = sei_type;
350
65.8k
    message->payload_size = payload_size;
351
352
65.8k
    CHECK(FUNC_SEI(message)(ctx, rw, message));
353
354
63.0k
    return 0;
355
65.8k
}
cbs_lcevc.c:cbs_lcevc_write_sei_payload
Line
Count
Source
316
134k
{
317
134k
    SEIRawMessage *message = &current->message;
318
134k
    int sei_type;
319
134k
    int i, err;
320
321
134k
    ub(8, payload_type);
322
323
134k
    if (current->payload_type == 1)
324
10.5k
        sei_type = SEI_TYPE_MASTERING_DISPLAY_COLOUR_VOLUME;
325
123k
    else if (current->payload_type == 2)
326
3.41k
        sei_type = SEI_TYPE_CONTENT_LIGHT_LEVEL_INFO;
327
120k
    else if (current->payload_type == 4)
328
2.69k
        sei_type = SEI_TYPE_USER_DATA_REGISTERED_ITU_T_T35;
329
117k
    else if (current->payload_type == 5)
330
2.16k
        sei_type = SEI_TYPE_USER_DATA_UNREGISTERED;
331
115k
    else {
332
115k
        uint8_t *data;
333
334
#ifdef READ
335
        current->payload_size = payload_size;
336
        allocate(current->payload_ref, current->payload_size);
337
        current->payload = current->payload_ref;
338
#else
339
115k
        allocate(current->payload, current->payload_size);
340
115k
#endif
341
115k
        data = current->payload;
342
343
355k
        for (i = 0; i < current->payload_size; i++)
344
239k
            xu(8, reserved_sei_message_payload_byte[i], data[i], 0, 255, 1, i);
345
346
115k
        return 0;
347
115k
    }
348
349
18.8k
    message->payload_type = sei_type;
350
18.8k
    message->payload_size = payload_size;
351
352
18.8k
    CHECK(FUNC_SEI(message)(ctx, rw, message));
353
354
18.8k
    return 0;
355
18.8k
}
356
357
static int FUNC(vui_parameters)(CodedBitstreamContext *ctx, RWContext *rw,
358
                                LCEVCRawVUI *current)
359
195k
{
360
195k
    int err;
361
362
195k
    HEADER("VUI Parameters");
363
364
195k
    flag(aspect_ratio_info_present_flag);
365
195k
    if (current->aspect_ratio_info_present_flag) {
366
5.03k
        ub(8, aspect_ratio_idc);
367
368
4.77k
        if (current->aspect_ratio_idc == 255) {
369
1.05k
            ub(16, sar_width);
370
861
            ub(16, sar_height);
371
861
        }
372
190k
    } else {
373
190k
        infer(aspect_ratio_idc, 0);
374
190k
    }
375
376
194k
    flag(overscan_info_present_flag);
377
194k
    if (current->overscan_info_present_flag)
378
194k
        flag(overscan_appropriate_flag);
379
191k
    else
380
191k
        infer(overscan_appropriate_flag, 0);
381
382
194k
    flag(video_signal_type_present_flag);
383
194k
    if (current->video_signal_type_present_flag) {
384
6.33k
        u(3, video_format, 0, 5);
385
6.07k
        flag(video_full_range_flag);
386
6.07k
        flag(colour_description_present_flag);
387
5.08k
        if (current->colour_description_present_flag) {
388
1.52k
            ub(8, colour_primaries);
389
1.27k
            ub(8, transfer_characteristics);
390
1.05k
            ub(8, matrix_coefficients);
391
3.55k
        } else {
392
3.55k
            infer(colour_primaries, 2);
393
3.55k
            infer(transfer_characteristics, 2);
394
3.55k
            infer(matrix_coefficients, 2);
395
1.45k
        }
396
187k
    } else {
397
187k
        infer(video_format, 5);
398
187k
        infer(video_full_range_flag, 0);
399
187k
        infer(colour_description_present_flag, 0);
400
187k
        infer(colour_primaries, 2);
401
187k
        infer(transfer_characteristics, 2);
402
187k
        infer(matrix_coefficients, 2);
403
118k
    }
404
192k
    flag(chroma_loc_info_present_flag);
405
192k
    if (current->chroma_loc_info_present_flag) {
406
185k
        ue(chroma_sample_loc_type_top_field, 0, 5);
407
184k
        ue(chroma_sample_loc_type_bottom_field, 0, 5);
408
184k
    } else {
409
6.66k
        infer(chroma_sample_loc_type_top_field, 0);
410
6.66k
        infer(chroma_sample_loc_type_bottom_field, 0);
411
3.44k
    }
412
413
190k
    return 0;
414
192k
}
cbs_lcevc.c:cbs_lcevc_read_vui_parameters
Line
Count
Source
359
75.5k
{
360
75.5k
    int err;
361
362
75.5k
    HEADER("VUI Parameters");
363
364
75.5k
    flag(aspect_ratio_info_present_flag);
365
75.3k
    if (current->aspect_ratio_info_present_flag) {
366
3.75k
        ub(8, aspect_ratio_idc);
367
368
3.49k
        if (current->aspect_ratio_idc == 255) {
369
835
            ub(16, sar_width);
370
637
            ub(16, sar_height);
371
637
        }
372
71.5k
    } else {
373
71.5k
        infer(aspect_ratio_idc, 0);
374
71.5k
    }
375
376
74.5k
    flag(overscan_info_present_flag);
377
74.5k
    if (current->overscan_info_present_flag)
378
74.5k
        flag(overscan_appropriate_flag);
379
72.5k
    else
380
72.5k
        infer(overscan_appropriate_flag, 0);
381
382
74.5k
    flag(video_signal_type_present_flag);
383
74.5k
    if (current->video_signal_type_present_flag) {
384
4.64k
        u(3, video_format, 0, 5);
385
4.38k
        flag(video_full_range_flag);
386
4.38k
        flag(colour_description_present_flag);
387
3.39k
        if (current->colour_description_present_flag) {
388
1.29k
            ub(8, colour_primaries);
389
1.03k
            ub(8, transfer_characteristics);
390
817
            ub(8, matrix_coefficients);
391
2.10k
        } else {
392
2.10k
            infer(colour_primaries, 2);
393
2.10k
            infer(transfer_characteristics, 2);
394
2.10k
            infer(matrix_coefficients, 2);
395
2.10k
        }
396
69.9k
    } else {
397
69.9k
        infer(video_format, 5);
398
69.9k
        infer(video_full_range_flag, 0);
399
69.9k
        infer(colour_description_present_flag, 0);
400
69.9k
        infer(colour_primaries, 2);
401
69.9k
        infer(transfer_characteristics, 2);
402
69.9k
        infer(matrix_coefficients, 2);
403
69.9k
    }
404
72.6k
    flag(chroma_loc_info_present_flag);
405
72.3k
    if (current->chroma_loc_info_present_flag) {
406
69.1k
        ue(chroma_sample_loc_type_top_field, 0, 5);
407
68.5k
        ue(chroma_sample_loc_type_bottom_field, 0, 5);
408
68.5k
    } else {
409
3.22k
        infer(chroma_sample_loc_type_top_field, 0);
410
3.22k
        infer(chroma_sample_loc_type_bottom_field, 0);
411
3.22k
    }
412
413
71.2k
    return 0;
414
72.3k
}
cbs_lcevc.c:cbs_lcevc_write_vui_parameters
Line
Count
Source
359
119k
{
360
119k
    int err;
361
362
119k
    HEADER("VUI Parameters");
363
364
119k
    flag(aspect_ratio_info_present_flag);
365
119k
    if (current->aspect_ratio_info_present_flag) {
366
1.27k
        ub(8, aspect_ratio_idc);
367
368
1.27k
        if (current->aspect_ratio_idc == 255) {
369
224
            ub(16, sar_width);
370
224
            ub(16, sar_height);
371
224
        }
372
118k
    } else {
373
118k
        infer(aspect_ratio_idc, 0);
374
118k
    }
375
376
119k
    flag(overscan_info_present_flag);
377
119k
    if (current->overscan_info_present_flag)
378
119k
        flag(overscan_appropriate_flag);
379
119k
    else
380
119k
        infer(overscan_appropriate_flag, 0);
381
382
119k
    flag(video_signal_type_present_flag);
383
119k
    if (current->video_signal_type_present_flag) {
384
1.69k
        u(3, video_format, 0, 5);
385
1.69k
        flag(video_full_range_flag);
386
1.69k
        flag(colour_description_present_flag);
387
1.69k
        if (current->colour_description_present_flag) {
388
236
            ub(8, colour_primaries);
389
236
            ub(8, transfer_characteristics);
390
236
            ub(8, matrix_coefficients);
391
1.45k
        } else {
392
1.45k
            infer(colour_primaries, 2);
393
1.45k
            infer(transfer_characteristics, 2);
394
1.45k
            infer(matrix_coefficients, 2);
395
1.45k
        }
396
118k
    } else {
397
118k
        infer(video_format, 5);
398
118k
        infer(video_full_range_flag, 0);
399
118k
        infer(colour_description_present_flag, 0);
400
118k
        infer(colour_primaries, 2);
401
118k
        infer(transfer_characteristics, 2);
402
118k
        infer(matrix_coefficients, 2);
403
118k
    }
404
119k
    flag(chroma_loc_info_present_flag);
405
119k
    if (current->chroma_loc_info_present_flag) {
406
116k
        ue(chroma_sample_loc_type_top_field, 0, 5);
407
116k
        ue(chroma_sample_loc_type_bottom_field, 0, 5);
408
116k
    } else {
409
3.44k
        infer(chroma_sample_loc_type_top_field, 0);
410
3.44k
        infer(chroma_sample_loc_type_bottom_field, 0);
411
3.44k
    }
412
413
119k
    return 0;
414
119k
}
415
416
LCEVC_BLOCK_FUNC(additional_info, (CodedBitstreamContext *ctx, RWContext *rw,
417
                                   LCEVCRawAdditionalInfo *current,
418
                                   LCEVCProcessBlockState *state,
419
                                   int nal_unit_type))
420
5.36M
{
421
5.36M
    int i, err;
422
423
5.36M
    HEADER("Additional Info");
424
425
5.36M
    ub(8, additional_info_type);
426
427
5.36M
    if (current->additional_info_type == LCEVC_ADDITIONAL_INFO_TYPE_SEI) {
428
270k
        CHECK(FUNC(sei_payload)(ctx, rw, &current->sei, state->payload_size - 2));
429
5.09M
    } else if (current->additional_info_type == LCEVC_ADDITIONAL_INFO_TYPE_VUI)
430
195k
        CHECK(FUNC(vui_parameters)(ctx, rw, &current->vui));
431
4.89M
    else {
432
4.89M
        uint8_t *data;
433
434
#ifdef READ
435
        current->payload_size = state->payload_size - 1;
436
1.79M
        allocate(current->payload_ref, current->payload_size);
437
1.79M
        current->payload = current->payload_ref;
438
#else
439
3.09M
        allocate(current->payload, current->payload_size);
440
3.09M
#endif
441
3.09M
        data = current->payload;
442
443
27.9M
        for (i = 0; i < current->payload_size; i++)
444
23.0M
            xu(8, additional_info_byte[i], data[i], 0, 255, 1, i);
445
3.09M
    }
446
447
5.35M
    return 0;
448
5.36M
}
cbs_lcevc.c:cbs_lcevc_read_additional_info
Line
Count
Source
420
2.01M
{
421
2.01M
    int i, err;
422
423
2.01M
    HEADER("Additional Info");
424
425
2.01M
    ub(8, additional_info_type);
426
427
2.01M
    if (current->additional_info_type == LCEVC_ADDITIONAL_INFO_TYPE_SEI) {
428
135k
        CHECK(FUNC(sei_payload)(ctx, rw, &current->sei, state->payload_size - 2));
429
1.87M
    } else if (current->additional_info_type == LCEVC_ADDITIONAL_INFO_TYPE_VUI)
430
75.5k
        CHECK(FUNC(vui_parameters)(ctx, rw, &current->vui));
431
1.79M
    else {
432
1.79M
        uint8_t *data;
433
434
1.79M
#ifdef READ
435
1.79M
        current->payload_size = state->payload_size - 1;
436
1.79M
        allocate(current->payload_ref, current->payload_size);
437
1.79M
        current->payload = current->payload_ref;
438
#else
439
        allocate(current->payload, current->payload_size);
440
#endif
441
1.79M
        data = current->payload;
442
443
10.2M
        for (i = 0; i < current->payload_size; i++)
444
8.43M
            xu(8, additional_info_byte[i], data[i], 0, 255, 1, i);
445
1.79M
    }
446
447
2.00M
    return 0;
448
2.01M
}
cbs_lcevc.c:cbs_lcevc_write_additional_info
Line
Count
Source
420
3.35M
{
421
3.35M
    int i, err;
422
423
3.35M
    HEADER("Additional Info");
424
425
3.35M
    ub(8, additional_info_type);
426
427
3.35M
    if (current->additional_info_type == LCEVC_ADDITIONAL_INFO_TYPE_SEI) {
428
134k
        CHECK(FUNC(sei_payload)(ctx, rw, &current->sei, state->payload_size - 2));
429
3.21M
    } else if (current->additional_info_type == LCEVC_ADDITIONAL_INFO_TYPE_VUI)
430
119k
        CHECK(FUNC(vui_parameters)(ctx, rw, &current->vui));
431
3.09M
    else {
432
3.09M
        uint8_t *data;
433
434
#ifdef READ
435
        current->payload_size = state->payload_size - 1;
436
        allocate(current->payload_ref, current->payload_size);
437
        current->payload = current->payload_ref;
438
#else
439
3.09M
        allocate(current->payload, current->payload_size);
440
3.09M
#endif
441
3.09M
        data = current->payload;
442
443
17.7M
        for (i = 0; i < current->payload_size; i++)
444
14.6M
            xu(8, additional_info_byte[i], data[i], 0, 255, 1, i);
445
3.09M
    }
446
447
3.35M
    return 0;
448
3.35M
}
449
450
LCEVC_BLOCK_FUNC(filler, (CodedBitstreamContext *ctx, RWContext *rw,
451
                          LCEVCRawFiller *current,
452
                          LCEVCProcessBlockState *state,
453
                          int nal_unit_type))
454
348k
{
455
348k
    int err;
456
457
348k
    HEADER("Filler");
458
459
460
#ifdef READ
461
260k
    while (show_bits(rw, 8) == 0xaa) {
462
2.40k
        fixed(8, filler_byte, 0xaa);
463
1.66k
        ++current->filler_size;
464
1.66k
    }
465
257k
    if (state->payload_size != current->filler_size)
466
729
        return AVERROR_INVALIDDATA;
467
468
#else
469
91.1k
    for (int i = 0; i < current->filler_size; i++)
470
1.33k
        fixed(8, filler_byte, 0xaa);
471
89.8k
#endif
472
473
346k
    return 0;
474
257k
}
cbs_lcevc.c:cbs_lcevc_read_filler
Line
Count
Source
454
258k
{
455
258k
    int err;
456
457
258k
    HEADER("Filler");
458
459
460
258k
#ifdef READ
461
260k
    while (show_bits(rw, 8) == 0xaa) {
462
2.40k
        fixed(8, filler_byte, 0xaa);
463
1.66k
        ++current->filler_size;
464
1.66k
    }
465
257k
    if (state->payload_size != current->filler_size)
466
729
        return AVERROR_INVALIDDATA;
467
468
#else
469
    for (int i = 0; i < current->filler_size; i++)
470
        fixed(8, filler_byte, 0xaa);
471
#endif
472
473
256k
    return 0;
474
257k
}
cbs_lcevc.c:cbs_lcevc_write_filler
Line
Count
Source
454
89.8k
{
455
89.8k
    int err;
456
457
89.8k
    HEADER("Filler");
458
459
460
#ifdef READ
461
    while (show_bits(rw, 8) == 0xaa) {
462
        fixed(8, filler_byte, 0xaa);
463
        ++current->filler_size;
464
    }
465
    if (state->payload_size != current->filler_size)
466
        return AVERROR_INVALIDDATA;
467
468
#else
469
91.1k
    for (int i = 0; i < current->filler_size; i++)
470
1.33k
        fixed(8, filler_byte, 0xaa);
471
89.8k
#endif
472
473
89.8k
    return 0;
474
89.8k
}
475
476
static int FUNC(process_block)(CodedBitstreamContext *ctx, RWContext *rw,
477
                               LCEVCRawProcessBlock *current,
478
                               int nal_unit_type)
479
25.7M
{
480
25.7M
    const LCEVCProcessBlockTypeDescriptor *desc;
481
25.7M
    int err, i;
482
483
25.7M
    desc = ff_cbs_lcevc_process_block_find_type(ctx, current->payload_type);
484
25.7M
    if (desc) {
485
7.79M
        LCEVCProcessBlockState state = {
486
7.79M
            .payload_type      = current->payload_type,
487
7.79M
            .payload_size      = current->payload_size,
488
7.79M
            .extension_present = current->extension_bit_length > 0,
489
7.79M
        };
490
7.79M
        int start_position, current_position, bits_written;
491
492
#ifdef READ
493
3.04M
        CHECK(ff_cbs_lcevc_alloc_process_block_payload(current, desc));
494
3.04M
#endif
495
496
7.79M
        start_position = bit_position(rw);
497
498
7.79M
        CHECK(desc->READWRITE(ctx, rw, current->payload, &state, nal_unit_type));
499
500
7.76M
        current_position = bit_position(rw);
501
7.76M
        bits_written = current_position - start_position;
502
503
7.76M
        if (byte_alignment(rw) || state.extension_present ||
504
7.26M
            bits_written < 8 * current->payload_size) {
505
1.49M
            size_t bits_left;
506
507
#ifdef READ
508
            GetBitContext tmp = *rw;
509
            int trailing_bits, trailing_zero_bits;
510
511
            bits_left = 8 * current->payload_size - bits_written;
512
280k
            if (bits_left > 8)
513
272k
                skip_bits_long(&tmp, bits_left - 8);
514
280k
            trailing_bits = get_bits(&tmp, FFMIN(bits_left, 8));
515
280k
            if (trailing_bits == 0) {
516
                // The trailing bits must contain a payload_bit_equal_to_one, so
517
                // they can't all be zero.
518
1.24k
                return AVERROR_INVALIDDATA;
519
1.24k
            }
520
279k
            trailing_zero_bits = ff_ctz(trailing_bits);
521
            current->extension_bit_length =
522
                bits_left - 1 - trailing_zero_bits;
523
#endif
524
525
1.48M
            if (current->extension_bit_length > 0) {
526
710k
                allocate(current->extension_data,
527
710k
                         (current->extension_bit_length + 7) / 8);
528
529
710k
                bits_left = current->extension_bit_length;
530
14.0M
                for (i = 0; bits_left > 0; i++) {
531
13.3M
                    int length = FFMIN(bits_left, 8);
532
13.3M
                    xu(length, reserved_payload_extension_data,
533
13.3M
                       current->extension_data[i],
534
13.3M
                       0, MAX_UINT_BITS(length), 0);
535
13.3M
                    bits_left -= length;
536
13.3M
                }
537
710k
            }
538
539
1.48M
            fixed(1, payload_bit_equal_to_one, 1);
540
7.43M
            while (byte_alignment(rw))
541
5.94M
                fixed(1, payload_bit_equal_to_zero, 0);
542
1.48M
        }
543
544
#ifdef WRITE
545
4.74M
        current->payload_size = (put_bits_count(rw) - start_position) / 8;
546
4.74M
#endif
547
17.9M
    } else {
548
17.9M
        uint8_t *data;
549
550
#ifdef READ
551
7.84M
        allocate(current->payload_ref, current->payload_size);
552
7.84M
        current->payload = current->payload_ref;
553
#else
554
10.0M
        allocate(current->payload, current->payload_size);
555
10.0M
#endif
556
10.0M
        data = current->payload;
557
558
47.7M
        for (i = 0; i < current->payload_size; i++)
559
29.7M
            xu(8, payload_byte[i], data[i], 0, 255, 1, i);
560
10.0M
    }
561
562
25.7M
    return 0;
563
25.7M
}
cbs_lcevc.c:cbs_lcevc_read_process_block
Line
Count
Source
479
10.8M
{
480
10.8M
    const LCEVCProcessBlockTypeDescriptor *desc;
481
10.8M
    int err, i;
482
483
10.8M
    desc = ff_cbs_lcevc_process_block_find_type(ctx, current->payload_type);
484
10.8M
    if (desc) {
485
3.04M
        LCEVCProcessBlockState state = {
486
3.04M
            .payload_type      = current->payload_type,
487
3.04M
            .payload_size      = current->payload_size,
488
3.04M
            .extension_present = current->extension_bit_length > 0,
489
3.04M
        };
490
3.04M
        int start_position, current_position, bits_written;
491
492
3.04M
#ifdef READ
493
3.04M
        CHECK(ff_cbs_lcevc_alloc_process_block_payload(current, desc));
494
3.04M
#endif
495
496
3.04M
        start_position = bit_position(rw);
497
498
3.04M
        CHECK(desc->READWRITE(ctx, rw, current->payload, &state, nal_unit_type));
499
500
3.02M
        current_position = bit_position(rw);
501
3.02M
        bits_written = current_position - start_position;
502
503
3.02M
        if (byte_alignment(rw) || state.extension_present ||
504
2.95M
            bits_written < 8 * current->payload_size) {
505
280k
            size_t bits_left;
506
507
280k
#ifdef READ
508
280k
            GetBitContext tmp = *rw;
509
280k
            int trailing_bits, trailing_zero_bits;
510
511
280k
            bits_left = 8 * current->payload_size - bits_written;
512
280k
            if (bits_left > 8)
513
272k
                skip_bits_long(&tmp, bits_left - 8);
514
280k
            trailing_bits = get_bits(&tmp, FFMIN(bits_left, 8));
515
280k
            if (trailing_bits == 0) {
516
                // The trailing bits must contain a payload_bit_equal_to_one, so
517
                // they can't all be zero.
518
1.24k
                return AVERROR_INVALIDDATA;
519
1.24k
            }
520
279k
            trailing_zero_bits = ff_ctz(trailing_bits);
521
279k
            current->extension_bit_length =
522
279k
                bits_left - 1 - trailing_zero_bits;
523
279k
#endif
524
525
279k
            if (current->extension_bit_length > 0) {
526
279k
                allocate(current->extension_data,
527
279k
                         (current->extension_bit_length + 7) / 8);
528
529
279k
                bits_left = current->extension_bit_length;
530
5.70M
                for (i = 0; bits_left > 0; i++) {
531
5.42M
                    int length = FFMIN(bits_left, 8);
532
5.42M
                    xu(length, reserved_payload_extension_data,
533
5.42M
                       current->extension_data[i],
534
5.42M
                       0, MAX_UINT_BITS(length), 0);
535
5.42M
                    bits_left -= length;
536
5.42M
                }
537
279k
            }
538
539
279k
            fixed(1, payload_bit_equal_to_one, 1);
540
511k
            while (byte_alignment(rw))
541
231k
                fixed(1, payload_bit_equal_to_zero, 0);
542
279k
        }
543
544
#ifdef WRITE
545
        current->payload_size = (put_bits_count(rw) - start_position) / 8;
546
#endif
547
7.84M
    } else {
548
7.84M
        uint8_t *data;
549
550
7.84M
#ifdef READ
551
7.84M
        allocate(current->payload_ref, current->payload_size);
552
7.84M
        current->payload = current->payload_ref;
553
#else
554
        allocate(current->payload, current->payload_size);
555
#endif
556
7.84M
        data = current->payload;
557
558
19.3M
        for (i = 0; i < current->payload_size; i++)
559
11.5M
            xu(8, payload_byte[i], data[i], 0, 255, 1, i);
560
7.84M
    }
561
562
10.8M
    return 0;
563
10.8M
}
cbs_lcevc.c:cbs_lcevc_write_process_block
Line
Count
Source
479
14.8M
{
480
14.8M
    const LCEVCProcessBlockTypeDescriptor *desc;
481
14.8M
    int err, i;
482
483
14.8M
    desc = ff_cbs_lcevc_process_block_find_type(ctx, current->payload_type);
484
14.8M
    if (desc) {
485
4.74M
        LCEVCProcessBlockState state = {
486
4.74M
            .payload_type      = current->payload_type,
487
4.74M
            .payload_size      = current->payload_size,
488
4.74M
            .extension_present = current->extension_bit_length > 0,
489
4.74M
        };
490
4.74M
        int start_position, current_position, bits_written;
491
492
#ifdef READ
493
        CHECK(ff_cbs_lcevc_alloc_process_block_payload(current, desc));
494
#endif
495
496
4.74M
        start_position = bit_position(rw);
497
498
4.74M
        CHECK(desc->READWRITE(ctx, rw, current->payload, &state, nal_unit_type));
499
500
4.74M
        current_position = bit_position(rw);
501
4.74M
        bits_written = current_position - start_position;
502
503
4.74M
        if (byte_alignment(rw) || state.extension_present ||
504
4.31M
            bits_written < 8 * current->payload_size) {
505
1.21M
            size_t bits_left;
506
507
#ifdef READ
508
            GetBitContext tmp = *rw;
509
            int trailing_bits, trailing_zero_bits;
510
511
            bits_left = 8 * current->payload_size - bits_written;
512
            if (bits_left > 8)
513
                skip_bits_long(&tmp, bits_left - 8);
514
            trailing_bits = get_bits(&tmp, FFMIN(bits_left, 8));
515
            if (trailing_bits == 0) {
516
                // The trailing bits must contain a payload_bit_equal_to_one, so
517
                // they can't all be zero.
518
                return AVERROR_INVALIDDATA;
519
            }
520
            trailing_zero_bits = ff_ctz(trailing_bits);
521
            current->extension_bit_length =
522
                bits_left - 1 - trailing_zero_bits;
523
#endif
524
525
1.21M
            if (current->extension_bit_length > 0) {
526
431k
                allocate(current->extension_data,
527
431k
                         (current->extension_bit_length + 7) / 8);
528
529
431k
                bits_left = current->extension_bit_length;
530
8.39M
                for (i = 0; bits_left > 0; i++) {
531
7.96M
                    int length = FFMIN(bits_left, 8);
532
7.96M
                    xu(length, reserved_payload_extension_data,
533
7.96M
                       current->extension_data[i],
534
7.96M
                       0, MAX_UINT_BITS(length), 0);
535
7.96M
                    bits_left -= length;
536
7.96M
                }
537
431k
            }
538
539
1.21M
            fixed(1, payload_bit_equal_to_one, 1);
540
6.91M
            while (byte_alignment(rw))
541
5.70M
                fixed(1, payload_bit_equal_to_zero, 0);
542
1.21M
        }
543
544
4.74M
#ifdef WRITE
545
4.74M
        current->payload_size = (put_bits_count(rw) - start_position) / 8;
546
4.74M
#endif
547
10.0M
    } else {
548
10.0M
        uint8_t *data;
549
550
#ifdef READ
551
        allocate(current->payload_ref, current->payload_size);
552
        current->payload = current->payload_ref;
553
#else
554
10.0M
        allocate(current->payload, current->payload_size);
555
10.0M
#endif
556
10.0M
        data = current->payload;
557
558
28.3M
        for (i = 0; i < current->payload_size; i++)
559
18.2M
            xu(8, payload_byte[i], data[i], 0, 255, 1, i);
560
10.0M
    }
561
562
14.8M
    return 0;
563
14.8M
}
564
565
static int FUNC(process_block_list)(CodedBitstreamContext *ctx, RWContext *rw,
566
                                    LCEVCRawProcessBlockList *current,
567
                                    int nal_unit_type)
568
42.5k
{
569
42.5k
    LCEVCRawProcessBlock *block;
570
42.5k
    int err, k;
571
572
#ifdef READ
573
10.8M
    for (k = 0;; k++) {
574
10.8M
        int payload_size_type;
575
10.8M
        int payload_type;
576
10.8M
        uint32_t payload_size;
577
10.8M
        uint32_t tmp;
578
10.8M
        GetBitContext payload_gbc;
579
580
10.8M
        HEADER("Process Block");
581
582
10.8M
        xu(3, payload_size_type, tmp, 0, MAX_UINT_BITS(3), 0);
583
10.8M
        payload_size_type = tmp;
584
10.8M
        xu(5, payload_type, tmp, 0, MAX_UINT_BITS(5), 0);
585
10.8M
        payload_type = tmp;
586
587
10.8M
        if (payload_size_type == 6) {
588
358
            av_log(ctx->log_ctx, AV_LOG_ERROR, "payload_size_type == 6\n");
589
358
            return AVERROR_INVALIDDATA;
590
358
        }
591
592
10.8M
        payload_size = payload_size_type;
593
10.8M
        if (payload_size_type == 7)
594
263k
            xmb(custom_byte_size, payload_size);
595
596
        // There must be space remaining for the payload
597
10.8M
        if (payload_size > get_bits_left(rw) / 8) {
598
1.58k
            av_log(ctx->log_ctx, AV_LOG_ERROR,
599
1.58k
                   "Invalid process block: payload_size too large "
600
1.58k
                   "(%"PRIu32" bytes).\n", payload_size);
601
1.58k
            return AVERROR_INVALIDDATA;
602
1.58k
        }
603
10.8M
        CHECK(init_get_bits(&payload_gbc, rw->buffer,
604
10.8M
                            get_bits_count(rw) + 8 * payload_size));
605
10.8M
        skip_bits_long(&payload_gbc, get_bits_count(rw));
606
607
10.8M
        CHECK(ff_cbs_lcevc_list_add(current, -1));
608
10.8M
        block = &current->blocks[k];
609
610
10.8M
        block->payload_type = payload_type;
611
10.8M
        block->payload_size = payload_size;
612
613
10.8M
        CHECK(FUNC(process_block)(ctx, &payload_gbc, block, nal_unit_type));
614
615
10.8M
        skip_bits_long(rw, 8 * payload_size);
616
617
10.8M
        if (!ff_cbs_h2645_read_more_rbsp_data(rw))
618
7.22k
            break;
619
10.8M
    }
620
#else
621
7.42M
    for (k = 0; k < current->nb_blocks; k++) {
622
7.41M
        PutBitContext start_state;
623
7.41M
        uint32_t tmp;
624
7.41M
        int trace, i;
625
626
        block = &current->blocks[k];
627
628
        // We write the payload twice in order to find the size. Trace
629
        // output is switched off for the first write.
630
        trace = ctx->trace_enable;
631
        ctx->trace_enable = 0;
632
633
        start_state = *rw;
634
22.2M
        for (i = 0; i < 2; i++) {
635
14.8M
            *rw = start_state;
636
637
14.8M
            tmp = FFMIN(block->payload_size, 7);
638
14.8M
            if (tmp == 6)
639
1.49k
                tmp = 7;
640
14.8M
            xu(3, payload_size_type, tmp, 0, 7, 0);
641
14.8M
            xu(5, payload_type, block->payload_type, 0, MAX_UINT_BITS(5), 0);
642
643
14.8M
            if (tmp == 7)
644
314k
                xmb(custom_byte_size, block->payload_size);
645
646
14.8M
            err = FUNC(process_block)(ctx, rw, block, nal_unit_type);
647
14.8M
            ctx->trace_enable = trace;
648
14.8M
            if (err < 0)
649
1.24k
                return err;
650
14.8M
        }
651
7.41M
    }
652
3.75k
#endif
653
654
10.9k
    return 0;
655
42.5k
}
cbs_lcevc.c:cbs_lcevc_read_process_block_list
Line
Count
Source
568
37.5k
{
569
37.5k
    LCEVCRawProcessBlock *block;
570
37.5k
    int err, k;
571
572
37.5k
#ifdef READ
573
10.8M
    for (k = 0;; k++) {
574
10.8M
        int payload_size_type;
575
10.8M
        int payload_type;
576
10.8M
        uint32_t payload_size;
577
10.8M
        uint32_t tmp;
578
10.8M
        GetBitContext payload_gbc;
579
580
10.8M
        HEADER("Process Block");
581
582
10.8M
        xu(3, payload_size_type, tmp, 0, MAX_UINT_BITS(3), 0);
583
10.8M
        payload_size_type = tmp;
584
10.8M
        xu(5, payload_type, tmp, 0, MAX_UINT_BITS(5), 0);
585
10.8M
        payload_type = tmp;
586
587
10.8M
        if (payload_size_type == 6) {
588
358
            av_log(ctx->log_ctx, AV_LOG_ERROR, "payload_size_type == 6\n");
589
358
            return AVERROR_INVALIDDATA;
590
358
        }
591
592
10.8M
        payload_size = payload_size_type;
593
10.8M
        if (payload_size_type == 7)
594
263k
            xmb(custom_byte_size, payload_size);
595
596
        // There must be space remaining for the payload
597
10.8M
        if (payload_size > get_bits_left(rw) / 8) {
598
1.58k
            av_log(ctx->log_ctx, AV_LOG_ERROR,
599
1.58k
                   "Invalid process block: payload_size too large "
600
1.58k
                   "(%"PRIu32" bytes).\n", payload_size);
601
1.58k
            return AVERROR_INVALIDDATA;
602
1.58k
        }
603
10.8M
        CHECK(init_get_bits(&payload_gbc, rw->buffer,
604
10.8M
                            get_bits_count(rw) + 8 * payload_size));
605
10.8M
        skip_bits_long(&payload_gbc, get_bits_count(rw));
606
607
10.8M
        CHECK(ff_cbs_lcevc_list_add(current, -1));
608
10.8M
        block = &current->blocks[k];
609
610
10.8M
        block->payload_type = payload_type;
611
10.8M
        block->payload_size = payload_size;
612
613
10.8M
        CHECK(FUNC(process_block)(ctx, &payload_gbc, block, nal_unit_type));
614
615
10.8M
        skip_bits_long(rw, 8 * payload_size);
616
617
10.8M
        if (!ff_cbs_h2645_read_more_rbsp_data(rw))
618
7.22k
            break;
619
10.8M
    }
620
#else
621
    for (k = 0; k < current->nb_blocks; k++) {
622
        PutBitContext start_state;
623
        uint32_t tmp;
624
        int trace, i;
625
626
        block = &current->blocks[k];
627
628
        // We write the payload twice in order to find the size. Trace
629
        // output is switched off for the first write.
630
        trace = ctx->trace_enable;
631
        ctx->trace_enable = 0;
632
633
        start_state = *rw;
634
        for (i = 0; i < 2; i++) {
635
            *rw = start_state;
636
637
            tmp = FFMIN(block->payload_size, 7);
638
            if (tmp == 6)
639
                tmp = 7;
640
            xu(3, payload_size_type, tmp, 0, 7, 0);
641
            xu(5, payload_type, block->payload_type, 0, MAX_UINT_BITS(5), 0);
642
643
            if (tmp == 7)
644
                xmb(custom_byte_size, block->payload_size);
645
646
            err = FUNC(process_block)(ctx, rw, block, nal_unit_type);
647
            ctx->trace_enable = trace;
648
            if (err < 0)
649
                return err;
650
        }
651
    }
652
#endif
653
654
7.22k
    return 0;
655
37.5k
}
cbs_lcevc.c:cbs_lcevc_write_process_block_list
Line
Count
Source
568
4.99k
{
569
4.99k
    LCEVCRawProcessBlock *block;
570
4.99k
    int err, k;
571
572
#ifdef READ
573
    for (k = 0;; k++) {
574
        int payload_size_type;
575
        int payload_type;
576
        uint32_t payload_size;
577
        uint32_t tmp;
578
        GetBitContext payload_gbc;
579
580
        HEADER("Process Block");
581
582
        xu(3, payload_size_type, tmp, 0, MAX_UINT_BITS(3), 0);
583
        payload_size_type = tmp;
584
        xu(5, payload_type, tmp, 0, MAX_UINT_BITS(5), 0);
585
        payload_type = tmp;
586
587
        if (payload_size_type == 6) {
588
            av_log(ctx->log_ctx, AV_LOG_ERROR, "payload_size_type == 6\n");
589
            return AVERROR_INVALIDDATA;
590
        }
591
592
        payload_size = payload_size_type;
593
        if (payload_size_type == 7)
594
            xmb(custom_byte_size, payload_size);
595
596
        // There must be space remaining for the payload
597
        if (payload_size > get_bits_left(rw) / 8) {
598
            av_log(ctx->log_ctx, AV_LOG_ERROR,
599
                   "Invalid process block: payload_size too large "
600
                   "(%"PRIu32" bytes).\n", payload_size);
601
            return AVERROR_INVALIDDATA;
602
        }
603
        CHECK(init_get_bits(&payload_gbc, rw->buffer,
604
                            get_bits_count(rw) + 8 * payload_size));
605
        skip_bits_long(&payload_gbc, get_bits_count(rw));
606
607
        CHECK(ff_cbs_lcevc_list_add(current, -1));
608
        block = &current->blocks[k];
609
610
        block->payload_type = payload_type;
611
        block->payload_size = payload_size;
612
613
        CHECK(FUNC(process_block)(ctx, &payload_gbc, block, nal_unit_type));
614
615
        skip_bits_long(rw, 8 * payload_size);
616
617
        if (!ff_cbs_h2645_read_more_rbsp_data(rw))
618
            break;
619
    }
620
#else
621
7.42M
    for (k = 0; k < current->nb_blocks; k++) {
622
7.41M
        PutBitContext start_state;
623
7.41M
        uint32_t tmp;
624
7.41M
        int trace, i;
625
626
7.41M
        block = &current->blocks[k];
627
628
        // We write the payload twice in order to find the size. Trace
629
        // output is switched off for the first write.
630
7.41M
        trace = ctx->trace_enable;
631
7.41M
        ctx->trace_enable = 0;
632
633
7.41M
        start_state = *rw;
634
22.2M
        for (i = 0; i < 2; i++) {
635
14.8M
            *rw = start_state;
636
637
14.8M
            tmp = FFMIN(block->payload_size, 7);
638
14.8M
            if (tmp == 6)
639
1.49k
                tmp = 7;
640
14.8M
            xu(3, payload_size_type, tmp, 0, 7, 0);
641
14.8M
            xu(5, payload_type, block->payload_type, 0, MAX_UINT_BITS(5), 0);
642
643
14.8M
            if (tmp == 7)
644
314k
                xmb(custom_byte_size, block->payload_size);
645
646
14.8M
            err = FUNC(process_block)(ctx, rw, block, nal_unit_type);
647
14.8M
            ctx->trace_enable = trace;
648
14.8M
            if (err < 0)
649
1.24k
                return err;
650
14.8M
        }
651
7.41M
    }
652
3.75k
#endif
653
654
3.75k
    return 0;
655
4.99k
}
656
657
static int FUNC(nal)(CodedBitstreamContext *ctx, RWContext *rw,
658
                     LCEVCRawNAL *current, int nal_unit_type)
659
42.9k
{
660
42.9k
    int err;
661
662
42.9k
    if (nal_unit_type == LCEVC_NON_IDR_NUT)
663
24.9k
        HEADER("Non IDR");
664
17.9k
    else
665
17.9k
        HEADER("IDR");
666
667
42.9k
    CHECK(FUNC(nal_unit_header)(ctx, rw, &current->nal_unit_header,
668
42.9k
                                (1 << LCEVC_IDR_NUT) | (1 << LCEVC_NON_IDR_NUT)));
669
670
42.5k
    CHECK(FUNC(process_block_list) (ctx, rw, &current->process_block_list,
671
42.5k
                                    current->nal_unit_header.nal_unit_type));
672
673
10.9k
    CHECK(FUNC(rbsp_trailing_bits)(ctx, rw));
674
675
10.3k
    return 0;
676
10.9k
}
cbs_lcevc.c:cbs_lcevc_read_nal
Line
Count
Source
659
37.9k
{
660
37.9k
    int err;
661
662
37.9k
    if (nal_unit_type == LCEVC_NON_IDR_NUT)
663
21.2k
        HEADER("Non IDR");
664
16.6k
    else
665
16.6k
        HEADER("IDR");
666
667
37.9k
    CHECK(FUNC(nal_unit_header)(ctx, rw, &current->nal_unit_header,
668
37.9k
                                (1 << LCEVC_IDR_NUT) | (1 << LCEVC_NON_IDR_NUT)));
669
670
37.5k
    CHECK(FUNC(process_block_list) (ctx, rw, &current->process_block_list,
671
37.5k
                                    current->nal_unit_header.nal_unit_type));
672
673
7.22k
    CHECK(FUNC(rbsp_trailing_bits)(ctx, rw));
674
675
6.62k
    return 0;
676
7.22k
}
cbs_lcevc.c:cbs_lcevc_write_nal
Line
Count
Source
659
4.99k
{
660
4.99k
    int err;
661
662
4.99k
    if (nal_unit_type == LCEVC_NON_IDR_NUT)
663
3.66k
        HEADER("Non IDR");
664
1.32k
    else
665
1.32k
        HEADER("IDR");
666
667
4.99k
    CHECK(FUNC(nal_unit_header)(ctx, rw, &current->nal_unit_header,
668
4.99k
                                (1 << LCEVC_IDR_NUT) | (1 << LCEVC_NON_IDR_NUT)));
669
670
4.99k
    CHECK(FUNC(process_block_list) (ctx, rw, &current->process_block_list,
671
4.99k
                                    current->nal_unit_header.nal_unit_type));
672
673
3.75k
    CHECK(FUNC(rbsp_trailing_bits)(ctx, rw));
674
675
3.75k
    return 0;
676
3.75k
}