Coverage Report

Created: 2026-04-01 07:42

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/ffmpeg/libavcodec/cbs_vp8_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(update_segmentation)(CodedBitstreamContext *ctx,
20
                                     CBSVP8BoolCodingRW *bool_coding_rw,
21
                                     VP8RawFrameHeader *current)
22
31.8k
{
23
31.8k
    bc_f(1, update_segment_map);
24
30.4k
    bc_f(1, update_segment_feature_data);
25
26
30.4k
    if (current->update_segment_feature_data) {
27
20.1k
        bc_f(1, segment_feature_mode);
28
        // quantizer
29
96.6k
        for (int i = 0; i < 4; i++) {
30
79.5k
            bc_b(segment_qp_update[i]);
31
79.5k
            if (current->segment_qp_update[i])
32
79.5k
                bc_ss(7, segment_qp[i], 1, i);
33
79.5k
        }
34
        // loop filter
35
80.3k
        for (int i = 0; i < 4; i++) {
36
64.9k
            bc_b(segment_loop_filter_level_update[i]);
37
63.7k
            if (current->segment_loop_filter_level_update[i])
38
63.7k
                bc_ss(6, segment_loop_filter_level[i], 1, i);
39
63.7k
        }
40
17.0k
    }
41
42
25.7k
    if (current->update_segment_map) {
43
41.7k
        for (int i = 0; i < 3; i++) {
44
31.4k
            bc_b(segment_probs_update[i]);
45
31.2k
            if (current->segment_probs_update[i])
46
31.2k
                bc_fs(8, segment_probs[i], 1, i);
47
31.2k
        }
48
10.6k
    }
49
50
25.2k
    return 0;
51
25.7k
}
52
53
static int FUNC(mode_ref_lf_deltas)(CodedBitstreamContext *ctx,
54
                                    CBSVP8BoolCodingRW *bool_coding_rw,
55
                                    VP8RawFrameHeader *current)
56
129k
{
57
129k
    bc_f(1, mode_ref_lf_delta_enable);
58
129k
    if (current->mode_ref_lf_delta_enable) {
59
43.4k
        bc_b(mode_ref_lf_delta_update);
60
43.4k
        if (current->mode_ref_lf_delta_update) {
61
            // ref_lf_deltas
62
102k
            for (int i = 0; i < 4; i++) {
63
82.4k
                bc_b(ref_lf_deltas_update[i]);
64
82.4k
                if (current->ref_lf_deltas_update[i])
65
82.4k
                    bc_ss(6, ref_lf_deltas[i], 1, i);
66
82.4k
            }
67
            // mode_lf_deltas
68
95.6k
            for (int i = 0; i < 4; i++) {
69
77.1k
                bc_b(mode_lf_deltas_update[i]);
70
76.6k
                if (current->mode_lf_deltas_update[i])
71
76.6k
                    bc_ss(6, mode_lf_deltas[i], 1, i);
72
76.6k
            }
73
19.5k
        }
74
43.4k
    }
75
76
126k
    return 0;
77
129k
}
78
79
static int FUNC(quantization_params)(CodedBitstreamContext *ctx,
80
                                     CBSVP8BoolCodingRW *bool_coding_rw,
81
                                     VP8RawFrameHeader *current)
82
126k
{
83
126k
    bc_f(7, base_qindex);
84
85
125k
    bc_b(y1dc_delta_q_present);
86
125k
    if (current->y1dc_delta_q_present)
87
125k
        bc_s(4, y1dc_delta_q);
88
89
124k
    bc_b(y2dc_delta_q_present);
90
124k
    if (current->y2dc_delta_q_present)
91
124k
        bc_s(4, y2dc_delta_q);
92
93
124k
    bc_b(y2ac_delta_q_present);
94
123k
    if (current->y2ac_delta_q_present)
95
123k
        bc_s(4, y2ac_delta_q);
96
97
121k
    bc_b(uvdc_delta_q_present);
98
117k
    if (current->uvdc_delta_q_present)
99
117k
        bc_s(4, uvdc_delta_q);
100
101
116k
    bc_b(uvac_delta_q_present);
102
116k
    if (current->uvac_delta_q_present)
103
116k
        bc_s(4, uvac_delta_q);
104
105
116k
    return 0;
106
116k
}
107
108
static int FUNC(update_token_probs)(CodedBitstreamContext *ctx,
109
                                    CBSVP8BoolCodingRW *bool_coding_rw,
110
                                    VP8RawFrameHeader *current)
111
112k
{
112
499k
    for (int i = 0; i < 4; ++i) {
113
3.57M
        for (int j = 0; j < 8; ++j) {
114
12.6M
            for (int k = 0; k < 3; ++k) {
115
114M
                for (int l = 0; l < 11; ++l) {
116
104M
                    bc_b_prob(ff_vp8_token_update_probs[i][j][k][l],
117
104M
                              coeff_prob_update[i][j][k][l]);
118
104M
                    if (current->coeff_prob_update[i][j][k][l])
119
104M
                        bc_fs(8, coeff_prob[i][j][k][l], 4, i, j, k, l);
120
104M
                }
121
9.53M
            }
122
3.18M
        }
123
410k
    }
124
125
88.8k
    return 0;
126
112k
}
127
128
static int FUNC(update_mv_probs)(CodedBitstreamContext *ctx,
129
                                 CBSVP8BoolCodingRW *bool_coding_rw,
130
                                 VP8RawFrameHeader *current)
131
66.4k
{
132
167k
    for (int i = 0; i < 2; ++i) {
133
2.20M
        for (int j = 0; j < 19; ++j) {
134
2.10M
            bc_b(mv_prob_update[i][j]);
135
2.09M
            if (current->mv_prob_update[i][j])
136
2.09M
                bc_fs(7, mv_prob[i][j], 2, i, j);
137
2.09M
        }
138
121k
    }
139
140
46.3k
    return 0;
141
66.4k
}
142
143
static int FUNC(frame_tag)(CodedBitstreamContext *ctx, RWContext *rw,
144
                           VP8RawFrameHeader *current)
145
393k
{
146
393k
    f(1, frame_type);
147
393k
    f(3, profile);
148
393k
    f(1, show_frame);
149
393k
    f(19, first_partition_length_in_bytes);
150
151
369k
    if (current->frame_type == VP8_KEY_FRAME) {
152
228k
        fixed(8, start_code_0, VP8_START_CODE_0);
153
1.97k
        fixed(8, start_code_1, VP8_START_CODE_1);
154
1.40k
        fixed(8, start_code_2, VP8_START_CODE_2);
155
156
1.39k
        f(14, width);
157
1.39k
        f(2, horizontal_scale);
158
1.39k
        f(14, height);
159
1.39k
        f(2, vertical_scale);
160
1.39k
    }
161
162
142k
    return 0;
163
369k
}
164
165
static int FUNC(frame_header)(CodedBitstreamContext *ctx,
166
                              CBSVP8BoolCodingRW *bool_coding_rw,
167
                              VP8RawFrameHeader *current)
168
142k
{
169
142k
    if (current->frame_type == VP8_KEY_FRAME) {
170
1.39k
        bc_f(1, color_space);
171
1.14k
        bc_f(1, clamping_type);
172
1.14k
    }
173
174
142k
    bc_f(1, segmentation_enable);
175
140k
    if (current->segmentation_enable)
176
31.8k
        CHECK(FUNC(update_segmentation)(ctx, bool_coding_rw, current));
177
178
133k
    bc_f(1, loop_filter_type);
179
133k
    bc_f(6, loop_filter_level);
180
131k
    bc_f(3, loop_filter_sharpness);
181
182
129k
    CHECK(FUNC(mode_ref_lf_deltas)(ctx, bool_coding_rw, current));
183
184
126k
    bc_f(2, log2_token_partitions);
185
186
126k
    CHECK(FUNC(quantization_params)(ctx, bool_coding_rw, current));
187
188
116k
    if (current->frame_type != VP8_KEY_FRAME) {
189
115k
        bc_f(1, refresh_golden_frame);
190
115k
        bc_f(1, refresh_alternate_frame);
191
114k
        if (!current->refresh_golden_frame)
192
114k
            bc_f(2, copy_buffer_to_golden);
193
114k
        if (!current->refresh_alternate_frame)
194
114k
            bc_f(2, copy_buffer_to_alternate);
195
113k
        bc_f(1, ref_frame_sign_bias_golden);
196
113k
        bc_f(1, ref_frame_sign_bias_alternate);
197
113k
    }
198
113k
    bc_f(1, refresh_entropy_probs);
199
113k
    if (current->frame_type != VP8_KEY_FRAME)
200
113k
        bc_f(1, refresh_last_frame);
201
202
112k
    CHECK(FUNC(update_token_probs)(ctx, bool_coding_rw, current));
203
204
88.8k
    bc_f(1, mb_no_skip_coeff);
205
88.7k
    if (current->mb_no_skip_coeff)
206
88.7k
        bc_f(8, prob_skip_false);
207
208
87.8k
    if (current->frame_type != VP8_KEY_FRAME) {
209
87.1k
        bc_f(8, prob_intra);
210
86.4k
        bc_f(8, prob_last);
211
85.6k
        bc_f(8, prob_golden);
212
213
        // intra_16x16_prob
214
72.5k
        bc_b(intra_16x16_prob_update);
215
71.9k
        if (current->intra_16x16_prob_update)
216
158k
            for (int i = 0; i < 4; i++)
217
128k
                bc_fs(8, intra_16x16_prob[i], 1, i);
218
219
        // intra_chroma_prob
220
68.0k
        bc_b(intra_chrome_prob_update);
221
67.5k
        if (current->intra_chrome_prob_update)
222
101k
            for (int i = 0; i < 3; i++)
223
76.5k
                bc_fs(8, intra_chrome_prob[i], 1, i);
224
225
66.4k
        CHECK(FUNC(update_mv_probs)(ctx, bool_coding_rw, current));
226
66.4k
    }
227
228
47.0k
    return 0;
229
87.8k
}
230
231
static int FUNC(uncompressed_header)(CodedBitstreamContext *ctx, RWContext *rw,
232
                                     VP8RawFrame *current)
233
393k
{
234
393k
    HEADER("Frame");
235
236
393k
    CHECK(FUNC(frame_tag)(ctx, rw, &current->header));
237
238
142k
    return 0;
239
393k
}
240
241
static int FUNC(compressed_header)(CodedBitstreamContext *ctx,
242
                                   CBSVP8BoolCodingRW *bool_coding_rw,
243
                                   VP8RawFrame *current)
244
142k
{
245
142k
    CHECK(FUNC(frame_header)(ctx, bool_coding_rw, &current->header));
246
247
47.0k
    return 0;
248
142k
}