Coverage Report

Created: 2025-08-28 07:12

/src/ffmpeg/libavcodec/cbs_mpeg2_syntax_template.c
Line
Count
Source (jump to first uncovered line)
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(sequence_header)(CodedBitstreamContext *ctx, RWContext *rw,
20
                                 MPEG2RawSequenceHeader *current)
21
29.5k
{
22
29.5k
    CodedBitstreamMPEG2Context *mpeg2 = ctx->priv_data;
23
29.5k
    int err, i;
24
25
29.5k
    HEADER("Sequence Header");
26
27
29.5k
    ui(8,  sequence_header_code);
28
29
29.5k
    uir(12, horizontal_size_value);
30
19.2k
    uir(12, vertical_size_value);
31
32
17.3k
    mpeg2->horizontal_size = current->horizontal_size_value;
33
17.3k
    mpeg2->vertical_size   = current->vertical_size_value;
34
35
17.3k
    uir(4, aspect_ratio_information);
36
16.1k
    uir(4, frame_rate_code);
37
15.7k
    ui(18, bit_rate_value);
38
39
11.3k
    marker_bit();
40
41
8.72k
    ui(10, vbv_buffer_size_value);
42
8.33k
    ui(1,  constrained_parameters_flag);
43
44
8.33k
    ui(1, load_intra_quantiser_matrix);
45
8.33k
    if (current->load_intra_quantiser_matrix) {
46
187k
        for (i = 0; i < 64; i++)
47
185k
            uirs(8, intra_quantiser_matrix[i], 1, i);
48
3.84k
    }
49
50
7.05k
    ui(1, load_non_intra_quantiser_matrix);
51
7.05k
    if (current->load_non_intra_quantiser_matrix) {
52
152k
        for (i = 0; i < 64; i++)
53
150k
            uirs(8, non_intra_quantiser_matrix[i], 1, i);
54
3.00k
    }
55
56
6.23k
    return 0;
57
7.05k
}
cbs_mpeg2.c:cbs_mpeg2_read_sequence_header
Line
Count
Source
21
27.3k
{
22
27.3k
    CodedBitstreamMPEG2Context *mpeg2 = ctx->priv_data;
23
27.3k
    int err, i;
24
25
27.3k
    HEADER("Sequence Header");
26
27
27.3k
    ui(8,  sequence_header_code);
28
29
27.3k
    uir(12, horizontal_size_value);
30
17.0k
    uir(12, vertical_size_value);
31
32
15.1k
    mpeg2->horizontal_size = current->horizontal_size_value;
33
15.1k
    mpeg2->vertical_size   = current->vertical_size_value;
34
35
15.1k
    uir(4, aspect_ratio_information);
36
13.9k
    uir(4, frame_rate_code);
37
13.5k
    ui(18, bit_rate_value);
38
39
9.11k
    marker_bit();
40
41
6.53k
    ui(10, vbv_buffer_size_value);
42
6.14k
    ui(1,  constrained_parameters_flag);
43
44
6.14k
    ui(1, load_intra_quantiser_matrix);
45
6.14k
    if (current->load_intra_quantiser_matrix) {
46
141k
        for (i = 0; i < 64; i++)
47
139k
            uirs(8, intra_quantiser_matrix[i], 1, i);
48
3.13k
    }
49
50
4.86k
    ui(1, load_non_intra_quantiser_matrix);
51
4.86k
    if (current->load_non_intra_quantiser_matrix) {
52
104k
        for (i = 0; i < 64; i++)
53
103k
            uirs(8, non_intra_quantiser_matrix[i], 1, i);
54
2.26k
    }
55
56
4.04k
    return 0;
57
4.86k
}
cbs_mpeg2.c:cbs_mpeg2_write_sequence_header
Line
Count
Source
21
2.18k
{
22
2.18k
    CodedBitstreamMPEG2Context *mpeg2 = ctx->priv_data;
23
2.18k
    int err, i;
24
25
2.18k
    HEADER("Sequence Header");
26
27
2.18k
    ui(8,  sequence_header_code);
28
29
2.18k
    uir(12, horizontal_size_value);
30
2.18k
    uir(12, vertical_size_value);
31
32
2.18k
    mpeg2->horizontal_size = current->horizontal_size_value;
33
2.18k
    mpeg2->vertical_size   = current->vertical_size_value;
34
35
2.18k
    uir(4, aspect_ratio_information);
36
2.18k
    uir(4, frame_rate_code);
37
2.18k
    ui(18, bit_rate_value);
38
39
2.18k
    marker_bit();
40
41
2.18k
    ui(10, vbv_buffer_size_value);
42
2.18k
    ui(1,  constrained_parameters_flag);
43
44
2.18k
    ui(1, load_intra_quantiser_matrix);
45
2.18k
    if (current->load_intra_quantiser_matrix) {
46
46.4k
        for (i = 0; i < 64; i++)
47
45.7k
            uirs(8, intra_quantiser_matrix[i], 1, i);
48
715
    }
49
50
2.18k
    ui(1, load_non_intra_quantiser_matrix);
51
2.18k
    if (current->load_non_intra_quantiser_matrix) {
52
48.3k
        for (i = 0; i < 64; i++)
53
47.6k
            uirs(8, non_intra_quantiser_matrix[i], 1, i);
54
744
    }
55
56
2.18k
    return 0;
57
2.18k
}
58
59
static int FUNC(user_data)(CodedBitstreamContext *ctx, RWContext *rw,
60
                           MPEG2RawUserData *current)
61
811k
{
62
811k
    size_t k;
63
811k
    int err;
64
65
811k
    HEADER("User Data");
66
67
811k
    ui(8, user_data_start_code);
68
69
#ifdef READ
70
424k
    k = get_bits_left(rw);
71
424k
    av_assert0(k % 8 == 0);
72
424k
    current->user_data_length = k /= 8;
73
424k
    if (k > 0) {
74
9.01k
        current->user_data_ref = av_buffer_allocz(k + AV_INPUT_BUFFER_PADDING_SIZE);
75
9.01k
        if (!current->user_data_ref)
76
0
            return AVERROR(ENOMEM);
77
9.01k
        current->user_data = current->user_data_ref->data;
78
9.01k
    }
79
424k
#endif
80
81
9.66M
    for (k = 0; k < current->user_data_length; k++)
82
8.85M
        uis(8, user_data[k], 1, k);
83
84
811k
    return 0;
85
811k
}
cbs_mpeg2.c:cbs_mpeg2_read_user_data
Line
Count
Source
61
424k
{
62
424k
    size_t k;
63
424k
    int err;
64
65
424k
    HEADER("User Data");
66
67
424k
    ui(8, user_data_start_code);
68
69
424k
#ifdef READ
70
424k
    k = get_bits_left(rw);
71
424k
    av_assert0(k % 8 == 0);
72
424k
    current->user_data_length = k /= 8;
73
424k
    if (k > 0) {
74
9.01k
        current->user_data_ref = av_buffer_allocz(k + AV_INPUT_BUFFER_PADDING_SIZE);
75
9.01k
        if (!current->user_data_ref)
76
0
            return AVERROR(ENOMEM);
77
9.01k
        current->user_data = current->user_data_ref->data;
78
9.01k
    }
79
424k
#endif
80
81
4.97M
    for (k = 0; k < current->user_data_length; k++)
82
4.55M
        uis(8, user_data[k], 1, k);
83
84
424k
    return 0;
85
424k
}
cbs_mpeg2.c:cbs_mpeg2_write_user_data
Line
Count
Source
61
387k
{
62
387k
    size_t k;
63
387k
    int err;
64
65
387k
    HEADER("User Data");
66
67
387k
    ui(8, user_data_start_code);
68
69
#ifdef READ
70
    k = get_bits_left(rw);
71
    av_assert0(k % 8 == 0);
72
    current->user_data_length = k /= 8;
73
    if (k > 0) {
74
        current->user_data_ref = av_buffer_allocz(k + AV_INPUT_BUFFER_PADDING_SIZE);
75
        if (!current->user_data_ref)
76
            return AVERROR(ENOMEM);
77
        current->user_data = current->user_data_ref->data;
78
    }
79
#endif
80
81
4.68M
    for (k = 0; k < current->user_data_length; k++)
82
4.29M
        uis(8, user_data[k], 1, k);
83
84
387k
    return 0;
85
387k
}
86
87
static int FUNC(sequence_extension)(CodedBitstreamContext *ctx, RWContext *rw,
88
                                    MPEG2RawSequenceExtension *current)
89
18.1k
{
90
18.1k
    CodedBitstreamMPEG2Context *mpeg2 = ctx->priv_data;
91
18.1k
    int err;
92
93
18.1k
    HEADER("Sequence Extension");
94
95
18.1k
    ui(8,  profile_and_level_indication);
96
17.6k
    ui(1,  progressive_sequence);
97
17.6k
    ui(2,  chroma_format);
98
17.6k
    ui(2,  horizontal_size_extension);
99
11.0k
    ui(2,  vertical_size_extension);
100
101
11.0k
    mpeg2->horizontal_size = (mpeg2->horizontal_size & 0xfff) |
102
11.0k
        current->horizontal_size_extension << 12;
103
11.0k
    mpeg2->vertical_size = (mpeg2->vertical_size & 0xfff) |
104
11.0k
        current->vertical_size_extension << 12;
105
11.0k
    mpeg2->progressive_sequence = current->progressive_sequence;
106
107
11.0k
    ui(12, bit_rate_extension);
108
10.7k
    marker_bit();
109
9.46k
    ui(8,  vbv_buffer_size_extension);
110
8.47k
    ui(1,  low_delay);
111
8.14k
    ui(2,  frame_rate_extension_n);
112
8.14k
    ui(5,  frame_rate_extension_d);
113
114
8.14k
    return 0;
115
8.14k
}
cbs_mpeg2.c:cbs_mpeg2_read_sequence_extension
Line
Count
Source
89
17.4k
{
90
17.4k
    CodedBitstreamMPEG2Context *mpeg2 = ctx->priv_data;
91
17.4k
    int err;
92
93
17.4k
    HEADER("Sequence Extension");
94
95
17.4k
    ui(8,  profile_and_level_indication);
96
16.9k
    ui(1,  progressive_sequence);
97
16.9k
    ui(2,  chroma_format);
98
16.9k
    ui(2,  horizontal_size_extension);
99
10.4k
    ui(2,  vertical_size_extension);
100
101
10.4k
    mpeg2->horizontal_size = (mpeg2->horizontal_size & 0xfff) |
102
10.4k
        current->horizontal_size_extension << 12;
103
10.4k
    mpeg2->vertical_size = (mpeg2->vertical_size & 0xfff) |
104
10.4k
        current->vertical_size_extension << 12;
105
10.4k
    mpeg2->progressive_sequence = current->progressive_sequence;
106
107
10.4k
    ui(12, bit_rate_extension);
108
10.1k
    marker_bit();
109
8.85k
    ui(8,  vbv_buffer_size_extension);
110
7.85k
    ui(1,  low_delay);
111
7.52k
    ui(2,  frame_rate_extension_n);
112
7.52k
    ui(5,  frame_rate_extension_d);
113
114
7.52k
    return 0;
115
7.52k
}
cbs_mpeg2.c:cbs_mpeg2_write_sequence_extension
Line
Count
Source
89
619
{
90
619
    CodedBitstreamMPEG2Context *mpeg2 = ctx->priv_data;
91
619
    int err;
92
93
619
    HEADER("Sequence Extension");
94
95
619
    ui(8,  profile_and_level_indication);
96
619
    ui(1,  progressive_sequence);
97
619
    ui(2,  chroma_format);
98
619
    ui(2,  horizontal_size_extension);
99
619
    ui(2,  vertical_size_extension);
100
101
619
    mpeg2->horizontal_size = (mpeg2->horizontal_size & 0xfff) |
102
619
        current->horizontal_size_extension << 12;
103
619
    mpeg2->vertical_size = (mpeg2->vertical_size & 0xfff) |
104
619
        current->vertical_size_extension << 12;
105
619
    mpeg2->progressive_sequence = current->progressive_sequence;
106
107
619
    ui(12, bit_rate_extension);
108
619
    marker_bit();
109
619
    ui(8,  vbv_buffer_size_extension);
110
619
    ui(1,  low_delay);
111
619
    ui(2,  frame_rate_extension_n);
112
619
    ui(5,  frame_rate_extension_d);
113
114
619
    return 0;
115
619
}
116
117
static int FUNC(sequence_display_extension)(CodedBitstreamContext *ctx, RWContext *rw,
118
                                            MPEG2RawSequenceDisplayExtension *current)
119
8.20k
{
120
8.20k
    int err;
121
122
8.20k
    HEADER("Sequence Display Extension");
123
124
8.20k
    ui(3, video_format);
125
126
8.20k
    ui(1, colour_description);
127
8.20k
    if (current->colour_description) {
128
#ifdef READ
129
14.4k
#define READ_AND_PATCH(name) do { \
130
14.4k
        ui(8, name); \
131
14.4k
        if (current->name == 0) { \
132
3.04k
            current->name = 2; \
133
3.04k
            av_log(ctx->log_ctx, AV_LOG_WARNING, "%s in a sequence display " \
134
3.04k
                   "extension had the invalid value 0. Setting it to 2 " \
135
3.04k
                   "(meaning unknown) instead.\n", #name); \
136
3.04k
        } \
137
12.9k
    } while (0)
138
5.42k
        READ_AND_PATCH(colour_primaries);
139
4.84k
        READ_AND_PATCH(transfer_characteristics);
140
4.16k
        READ_AND_PATCH(matrix_coefficients);
141
4.16k
#undef READ_AND_PATCH
142
#else
143
840
        uir(8, colour_primaries);
144
840
        uir(8, transfer_characteristics);
145
840
        uir(8, matrix_coefficients);
146
840
#endif
147
1.94k
    } else {
148
1.94k
        infer(colour_primaries,         2);
149
1.94k
        infer(transfer_characteristics, 2);
150
1.94k
        infer(matrix_coefficients,      2);
151
1.94k
    }
152
153
6.71k
    ui(14, display_horizontal_size);
154
5.86k
    marker_bit();
155
5.07k
    ui(14, display_vertical_size);
156
157
4.59k
    return 0;
158
5.07k
}
cbs_mpeg2.c:cbs_mpeg2_read_sequence_display_extension
Line
Count
Source
119
7.02k
{
120
7.02k
    int err;
121
122
7.02k
    HEADER("Sequence Display Extension");
123
124
7.02k
    ui(3, video_format);
125
126
7.02k
    ui(1, colour_description);
127
7.02k
    if (current->colour_description) {
128
5.42k
#ifdef READ
129
5.42k
#define READ_AND_PATCH(name) do { \
130
5.42k
        ui(8, name); \
131
5.42k
        if (current->name == 0) { \
132
5.42k
            current->name = 2; \
133
5.42k
            av_log(ctx->log_ctx, AV_LOG_WARNING, "%s in a sequence display " \
134
5.42k
                   "extension had the invalid value 0. Setting it to 2 " \
135
5.42k
                   "(meaning unknown) instead.\n", #name); \
136
5.42k
        } \
137
5.42k
    } while (0)
138
5.42k
        READ_AND_PATCH(colour_primaries);
139
4.84k
        READ_AND_PATCH(transfer_characteristics);
140
4.16k
        READ_AND_PATCH(matrix_coefficients);
141
4.16k
#undef READ_AND_PATCH
142
#else
143
        uir(8, colour_primaries);
144
        uir(8, transfer_characteristics);
145
        uir(8, matrix_coefficients);
146
#endif
147
4.16k
    } else {
148
1.60k
        infer(colour_primaries,         2);
149
1.60k
        infer(transfer_characteristics, 2);
150
1.60k
        infer(matrix_coefficients,      2);
151
1.60k
    }
152
153
5.53k
    ui(14, display_horizontal_size);
154
4.68k
    marker_bit();
155
3.89k
    ui(14, display_vertical_size);
156
157
3.41k
    return 0;
158
3.89k
}
cbs_mpeg2.c:cbs_mpeg2_write_sequence_display_extension
Line
Count
Source
119
1.18k
{
120
1.18k
    int err;
121
122
1.18k
    HEADER("Sequence Display Extension");
123
124
1.18k
    ui(3, video_format);
125
126
1.18k
    ui(1, colour_description);
127
1.18k
    if (current->colour_description) {
128
#ifdef READ
129
#define READ_AND_PATCH(name) do { \
130
        ui(8, name); \
131
        if (current->name == 0) { \
132
            current->name = 2; \
133
            av_log(ctx->log_ctx, AV_LOG_WARNING, "%s in a sequence display " \
134
                   "extension had the invalid value 0. Setting it to 2 " \
135
                   "(meaning unknown) instead.\n", #name); \
136
        } \
137
    } while (0)
138
        READ_AND_PATCH(colour_primaries);
139
        READ_AND_PATCH(transfer_characteristics);
140
        READ_AND_PATCH(matrix_coefficients);
141
#undef READ_AND_PATCH
142
#else
143
840
        uir(8, colour_primaries);
144
840
        uir(8, transfer_characteristics);
145
840
        uir(8, matrix_coefficients);
146
840
#endif
147
840
    } else {
148
342
        infer(colour_primaries,         2);
149
342
        infer(transfer_characteristics, 2);
150
342
        infer(matrix_coefficients,      2);
151
342
    }
152
153
1.18k
    ui(14, display_horizontal_size);
154
1.18k
    marker_bit();
155
1.18k
    ui(14, display_vertical_size);
156
157
1.18k
    return 0;
158
1.18k
}
159
160
static int FUNC(group_of_pictures_header)(CodedBitstreamContext *ctx, RWContext *rw,
161
                                          MPEG2RawGroupOfPicturesHeader *current)
162
2.90k
{
163
2.90k
    int err;
164
165
2.90k
    HEADER("Group of Pictures Header");
166
167
2.90k
    ui(8,  group_start_code);
168
169
2.90k
    ui(25, time_code);
170
2.34k
    ui(1,  closed_gop);
171
2.34k
    ui(1,  broken_link);
172
173
2.34k
    return 0;
174
2.34k
}
cbs_mpeg2.c:cbs_mpeg2_read_group_of_pictures_header
Line
Count
Source
162
2.63k
{
163
2.63k
    int err;
164
165
2.63k
    HEADER("Group of Pictures Header");
166
167
2.63k
    ui(8,  group_start_code);
168
169
2.63k
    ui(25, time_code);
170
2.07k
    ui(1,  closed_gop);
171
2.07k
    ui(1,  broken_link);
172
173
2.07k
    return 0;
174
2.07k
}
cbs_mpeg2.c:cbs_mpeg2_write_group_of_pictures_header
Line
Count
Source
162
272
{
163
272
    int err;
164
165
272
    HEADER("Group of Pictures Header");
166
167
272
    ui(8,  group_start_code);
168
169
272
    ui(25, time_code);
170
272
    ui(1,  closed_gop);
171
272
    ui(1,  broken_link);
172
173
272
    return 0;
174
272
}
175
176
static int FUNC(extra_information)(CodedBitstreamContext *ctx, RWContext *rw,
177
                                   MPEG2RawExtraInformation *current,
178
                                   const char *element_name, const char *marker_name)
179
103k
{
180
103k
    int err;
181
103k
    size_t k;
182
#ifdef READ
183
    GetBitContext start = *rw;
184
    uint8_t bit;
185
186
5.79M
    for (k = 0; nextbits(1, 1, bit); k++)
187
5.69M
        skip_bits(rw, 1 + 8);
188
    current->extra_information_length = k;
189
99.0k
    if (k > 0) {
190
26.7k
        *rw = start;
191
26.7k
        current->extra_information_ref =
192
26.7k
            av_buffer_allocz(k + AV_INPUT_BUFFER_PADDING_SIZE);
193
26.7k
        if (!current->extra_information_ref)
194
0
            return AVERROR(ENOMEM);
195
26.7k
        current->extra_information = current->extra_information_ref->data;
196
26.7k
    }
197
99.0k
#endif
198
199
11.4M
    for (k = 0; k < current->extra_information_length; k++) {
200
11.3M
        bit(marker_name, 1);
201
11.3M
        xuia(8, element_name,
202
11.3M
             current->extra_information[k], 0, 255, 1, k);
203
11.3M
    }
204
205
100k
    bit(marker_name, 0);
206
207
99.7k
    return 0;
208
100k
}
cbs_mpeg2.c:cbs_mpeg2_read_extra_information
Line
Count
Source
179
99.0k
{
180
99.0k
    int err;
181
99.0k
    size_t k;
182
99.0k
#ifdef READ
183
99.0k
    GetBitContext start = *rw;
184
99.0k
    uint8_t bit;
185
186
5.79M
    for (k = 0; nextbits(1, 1, bit); k++)
187
5.69M
        skip_bits(rw, 1 + 8);
188
99.0k
    current->extra_information_length = k;
189
99.0k
    if (k > 0) {
190
26.7k
        *rw = start;
191
26.7k
        current->extra_information_ref =
192
26.7k
            av_buffer_allocz(k + AV_INPUT_BUFFER_PADDING_SIZE);
193
26.7k
        if (!current->extra_information_ref)
194
0
            return AVERROR(ENOMEM);
195
26.7k
        current->extra_information = current->extra_information_ref->data;
196
26.7k
    }
197
99.0k
#endif
198
199
5.79M
    for (k = 0; k < current->extra_information_length; k++) {
200
5.69M
        bit(marker_name, 1);
201
5.69M
        xuia(8, element_name,
202
5.69M
             current->extra_information[k], 0, 255, 1, k);
203
5.69M
    }
204
205
96.0k
    bit(marker_name, 0);
206
207
95.0k
    return 0;
208
96.0k
}
cbs_mpeg2.c:cbs_mpeg2_write_extra_information
Line
Count
Source
179
4.70k
{
180
4.70k
    int err;
181
4.70k
    size_t k;
182
#ifdef READ
183
    GetBitContext start = *rw;
184
    uint8_t bit;
185
186
    for (k = 0; nextbits(1, 1, bit); k++)
187
        skip_bits(rw, 1 + 8);
188
    current->extra_information_length = k;
189
    if (k > 0) {
190
        *rw = start;
191
        current->extra_information_ref =
192
            av_buffer_allocz(k + AV_INPUT_BUFFER_PADDING_SIZE);
193
        if (!current->extra_information_ref)
194
            return AVERROR(ENOMEM);
195
        current->extra_information = current->extra_information_ref->data;
196
    }
197
#endif
198
199
5.63M
    for (k = 0; k < current->extra_information_length; k++) {
200
5.62M
        bit(marker_name, 1);
201
5.62M
        xuia(8, element_name,
202
5.62M
             current->extra_information[k], 0, 255, 1, k);
203
5.62M
    }
204
205
4.70k
    bit(marker_name, 0);
206
207
4.70k
    return 0;
208
4.70k
}
209
210
static int FUNC(picture_header)(CodedBitstreamContext *ctx, RWContext *rw,
211
                                MPEG2RawPictureHeader *current)
212
36.7k
{
213
36.7k
    int err;
214
215
36.7k
    HEADER("Picture Header");
216
217
36.7k
    ui(8,  picture_start_code);
218
219
36.7k
    ui(10, temporal_reference);
220
34.3k
    uir(3, picture_coding_type);
221
19.6k
    ui(16, vbv_delay);
222
223
17.6k
    if (current->picture_coding_type == 2 ||
224
17.6k
        current->picture_coding_type == 3) {
225
4.78k
        ui(1, full_pel_forward_vector);
226
4.78k
        ui(3, forward_f_code);
227
4.78k
    }
228
229
15.9k
    if (current->picture_coding_type == 3) {
230
1.11k
        ui(1, full_pel_backward_vector);
231
1.11k
        ui(3, backward_f_code);
232
1.11k
    }
233
234
15.9k
    CHECK(FUNC(extra_information)(ctx, rw, &current->extra_information_picture,
235
15.9k
                                  "extra_information_picture[k]", "extra_bit_picture"));
236
237
15.2k
    return 0;
238
15.9k
}
cbs_mpeg2.c:cbs_mpeg2_read_picture_header
Line
Count
Source
212
35.7k
{
213
35.7k
    int err;
214
215
35.7k
    HEADER("Picture Header");
216
217
35.7k
    ui(8,  picture_start_code);
218
219
35.7k
    ui(10, temporal_reference);
220
33.3k
    uir(3, picture_coding_type);
221
18.7k
    ui(16, vbv_delay);
222
223
16.6k
    if (current->picture_coding_type == 2 ||
224
16.6k
        current->picture_coding_type == 3) {
225
4.30k
        ui(1, full_pel_forward_vector);
226
4.30k
        ui(3, forward_f_code);
227
4.30k
    }
228
229
15.0k
    if (current->picture_coding_type == 3) {
230
881
        ui(1, full_pel_backward_vector);
231
881
        ui(3, backward_f_code);
232
881
    }
233
234
15.0k
    CHECK(FUNC(extra_information)(ctx, rw, &current->extra_information_picture,
235
15.0k
                                  "extra_information_picture[k]", "extra_bit_picture"));
236
237
14.3k
    return 0;
238
15.0k
}
cbs_mpeg2.c:cbs_mpeg2_write_picture_header
Line
Count
Source
212
955
{
213
955
    int err;
214
215
955
    HEADER("Picture Header");
216
217
955
    ui(8,  picture_start_code);
218
219
955
    ui(10, temporal_reference);
220
955
    uir(3, picture_coding_type);
221
955
    ui(16, vbv_delay);
222
223
955
    if (current->picture_coding_type == 2 ||
224
955
        current->picture_coding_type == 3) {
225
481
        ui(1, full_pel_forward_vector);
226
481
        ui(3, forward_f_code);
227
481
    }
228
229
955
    if (current->picture_coding_type == 3) {
230
233
        ui(1, full_pel_backward_vector);
231
233
        ui(3, backward_f_code);
232
233
    }
233
234
955
    CHECK(FUNC(extra_information)(ctx, rw, &current->extra_information_picture,
235
955
                                  "extra_information_picture[k]", "extra_bit_picture"));
236
237
955
    return 0;
238
955
}
239
240
static int FUNC(picture_coding_extension)(CodedBitstreamContext *ctx, RWContext *rw,
241
                                          MPEG2RawPictureCodingExtension *current)
242
11.2k
{
243
11.2k
    CodedBitstreamMPEG2Context *mpeg2 = ctx->priv_data;
244
11.2k
    int err;
245
246
11.2k
    HEADER("Picture Coding Extension");
247
248
11.2k
    uir(4, f_code[0][0]);
249
10.9k
    uir(4, f_code[0][1]);
250
10.3k
    uir(4, f_code[1][0]);
251
9.81k
    uir(4, f_code[1][1]);
252
253
8.98k
    ui(2, intra_dc_precision);
254
8.98k
    ui(2, picture_structure);
255
8.98k
    ui(1, top_field_first);
256
8.67k
    ui(1, frame_pred_frame_dct);
257
8.67k
    ui(1, concealment_motion_vectors);
258
8.67k
    ui(1, q_scale_type);
259
8.67k
    ui(1, intra_vlc_format);
260
8.67k
    ui(1, alternate_scan);
261
8.67k
    ui(1, repeat_first_field);
262
8.67k
    ui(1, chroma_420_type);
263
8.67k
    ui(1, progressive_frame);
264
265
8.09k
    if (mpeg2->progressive_sequence) {
266
3.80k
        if (current->repeat_first_field) {
267
1.86k
            if (current->top_field_first)
268
792
                mpeg2->number_of_frame_centre_offsets = 3;
269
1.07k
            else
270
1.07k
                mpeg2->number_of_frame_centre_offsets = 2;
271
1.94k
        } else {
272
1.94k
            mpeg2->number_of_frame_centre_offsets = 1;
273
1.94k
        }
274
4.28k
    } else {
275
4.28k
        if (current->picture_structure == 1 || // Top field.
276
4.28k
            current->picture_structure == 2) { // Bottom field.
277
1.99k
            mpeg2->number_of_frame_centre_offsets = 1;
278
2.28k
        } else {
279
2.28k
            if (current->repeat_first_field)
280
1.28k
                mpeg2->number_of_frame_centre_offsets = 3;
281
1.00k
            else
282
1.00k
                mpeg2->number_of_frame_centre_offsets = 2;
283
2.28k
        }
284
4.28k
    }
285
286
8.09k
    ui(1, composite_display_flag);
287
8.09k
    if (current->composite_display_flag) {
288
3.79k
        ui(1, v_axis);
289
3.79k
        ui(3, field_sequence);
290
3.79k
        ui(1, sub_carrier);
291
3.79k
        ui(7, burst_amplitude);
292
3.54k
        ui(8, sub_carrier_phase);
293
3.54k
    }
294
295
7.36k
    return 0;
296
8.09k
}
cbs_mpeg2.c:cbs_mpeg2_read_picture_coding_extension
Line
Count
Source
242
9.31k
{
243
9.31k
    CodedBitstreamMPEG2Context *mpeg2 = ctx->priv_data;
244
9.31k
    int err;
245
246
9.31k
    HEADER("Picture Coding Extension");
247
248
9.31k
    uir(4, f_code[0][0]);
249
9.02k
    uir(4, f_code[0][1]);
250
8.42k
    uir(4, f_code[1][0]);
251
7.90k
    uir(4, f_code[1][1]);
252
253
7.06k
    ui(2, intra_dc_precision);
254
7.06k
    ui(2, picture_structure);
255
7.06k
    ui(1, top_field_first);
256
6.76k
    ui(1, frame_pred_frame_dct);
257
6.76k
    ui(1, concealment_motion_vectors);
258
6.76k
    ui(1, q_scale_type);
259
6.76k
    ui(1, intra_vlc_format);
260
6.76k
    ui(1, alternate_scan);
261
6.76k
    ui(1, repeat_first_field);
262
6.76k
    ui(1, chroma_420_type);
263
6.76k
    ui(1, progressive_frame);
264
265
6.17k
    if (mpeg2->progressive_sequence) {
266
3.13k
        if (current->repeat_first_field) {
267
1.42k
            if (current->top_field_first)
268
581
                mpeg2->number_of_frame_centre_offsets = 3;
269
841
            else
270
841
                mpeg2->number_of_frame_centre_offsets = 2;
271
1.70k
        } else {
272
1.70k
            mpeg2->number_of_frame_centre_offsets = 1;
273
1.70k
        }
274
3.13k
    } else {
275
3.04k
        if (current->picture_structure == 1 || // Top field.
276
3.04k
            current->picture_structure == 2) { // Bottom field.
277
1.49k
            mpeg2->number_of_frame_centre_offsets = 1;
278
1.55k
        } else {
279
1.55k
            if (current->repeat_first_field)
280
869
                mpeg2->number_of_frame_centre_offsets = 3;
281
682
            else
282
682
                mpeg2->number_of_frame_centre_offsets = 2;
283
1.55k
        }
284
3.04k
    }
285
286
6.17k
    ui(1, composite_display_flag);
287
6.17k
    if (current->composite_display_flag) {
288
3.11k
        ui(1, v_axis);
289
3.11k
        ui(3, field_sequence);
290
3.11k
        ui(1, sub_carrier);
291
3.11k
        ui(7, burst_amplitude);
292
2.87k
        ui(8, sub_carrier_phase);
293
2.87k
    }
294
295
5.45k
    return 0;
296
6.17k
}
cbs_mpeg2.c:cbs_mpeg2_write_picture_coding_extension
Line
Count
Source
242
1.91k
{
243
1.91k
    CodedBitstreamMPEG2Context *mpeg2 = ctx->priv_data;
244
1.91k
    int err;
245
246
1.91k
    HEADER("Picture Coding Extension");
247
248
1.91k
    uir(4, f_code[0][0]);
249
1.91k
    uir(4, f_code[0][1]);
250
1.91k
    uir(4, f_code[1][0]);
251
1.91k
    uir(4, f_code[1][1]);
252
253
1.91k
    ui(2, intra_dc_precision);
254
1.91k
    ui(2, picture_structure);
255
1.91k
    ui(1, top_field_first);
256
1.91k
    ui(1, frame_pred_frame_dct);
257
1.91k
    ui(1, concealment_motion_vectors);
258
1.91k
    ui(1, q_scale_type);
259
1.91k
    ui(1, intra_vlc_format);
260
1.91k
    ui(1, alternate_scan);
261
1.91k
    ui(1, repeat_first_field);
262
1.91k
    ui(1, chroma_420_type);
263
1.91k
    ui(1, progressive_frame);
264
265
1.91k
    if (mpeg2->progressive_sequence) {
266
676
        if (current->repeat_first_field) {
267
442
            if (current->top_field_first)
268
211
                mpeg2->number_of_frame_centre_offsets = 3;
269
231
            else
270
231
                mpeg2->number_of_frame_centre_offsets = 2;
271
442
        } else {
272
234
            mpeg2->number_of_frame_centre_offsets = 1;
273
234
        }
274
1.24k
    } else {
275
1.24k
        if (current->picture_structure == 1 || // Top field.
276
1.24k
            current->picture_structure == 2) { // Bottom field.
277
502
            mpeg2->number_of_frame_centre_offsets = 1;
278
738
        } else {
279
738
            if (current->repeat_first_field)
280
419
                mpeg2->number_of_frame_centre_offsets = 3;
281
319
            else
282
319
                mpeg2->number_of_frame_centre_offsets = 2;
283
738
        }
284
1.24k
    }
285
286
1.91k
    ui(1, composite_display_flag);
287
1.91k
    if (current->composite_display_flag) {
288
678
        ui(1, v_axis);
289
678
        ui(3, field_sequence);
290
678
        ui(1, sub_carrier);
291
678
        ui(7, burst_amplitude);
292
678
        ui(8, sub_carrier_phase);
293
678
    }
294
295
1.91k
    return 0;
296
1.91k
}
297
298
static int FUNC(quant_matrix_extension)(CodedBitstreamContext *ctx, RWContext *rw,
299
                                        MPEG2RawQuantMatrixExtension *current)
300
13.2k
{
301
13.2k
    int err, i;
302
303
13.2k
    HEADER("Quant Matrix Extension");
304
305
13.2k
    ui(1, load_intra_quantiser_matrix);
306
13.2k
    if (current->load_intra_quantiser_matrix) {
307
114k
        for (i = 0; i < 64; i++)
308
113k
            uirs(8, intra_quantiser_matrix[i], 1, i);
309
3.83k
    }
310
311
11.0k
    ui(1, load_non_intra_quantiser_matrix);
312
11.0k
    if (current->load_non_intra_quantiser_matrix) {
313
125k
        for (i = 0; i < 64; i++)
314
123k
            uirs(8, non_intra_quantiser_matrix[i], 1, i);
315
2.56k
    }
316
317
10.1k
    ui(1, load_chroma_intra_quantiser_matrix);
318
10.1k
    if (current->load_chroma_intra_quantiser_matrix) {
319
129k
        for (i = 0; i < 64; i++)
320
128k
            uirs(8, intra_quantiser_matrix[i], 1, i);
321
2.83k
    }
322
323
9.27k
    ui(1, load_chroma_non_intra_quantiser_matrix);
324
9.27k
    if (current->load_chroma_non_intra_quantiser_matrix) {
325
133k
        for (i = 0; i < 64; i++)
326
131k
            uirs(8, chroma_non_intra_quantiser_matrix[i], 1, i);
327
3.58k
    }
328
329
7.64k
    return 0;
330
9.27k
}
cbs_mpeg2.c:cbs_mpeg2_read_quant_matrix_extension
Line
Count
Source
300
9.81k
{
301
9.81k
    int err, i;
302
303
9.81k
    HEADER("Quant Matrix Extension");
304
305
9.81k
    ui(1, load_intra_quantiser_matrix);
306
9.81k
    if (current->load_intra_quantiser_matrix) {
307
68.6k
        for (i = 0; i < 64; i++)
308
67.7k
            uirs(8, intra_quantiser_matrix[i], 1, i);
309
3.12k
    }
310
311
7.55k
    ui(1, load_non_intra_quantiser_matrix);
312
7.55k
    if (current->load_non_intra_quantiser_matrix) {
313
72.9k
        for (i = 0; i < 64; i++)
314
72.0k
            uirs(8, non_intra_quantiser_matrix[i], 1, i);
315
1.76k
    }
316
317
6.71k
    ui(1, load_chroma_intra_quantiser_matrix);
318
6.71k
    if (current->load_chroma_intra_quantiser_matrix) {
319
81.7k
        for (i = 0; i < 64; i++)
320
80.5k
            uirs(8, intra_quantiser_matrix[i], 1, i);
321
2.08k
    }
322
323
5.80k
    ui(1, load_chroma_non_intra_quantiser_matrix);
324
5.80k
    if (current->load_chroma_non_intra_quantiser_matrix) {
325
76.4k
        for (i = 0; i < 64; i++)
326
75.4k
            uirs(8, chroma_non_intra_quantiser_matrix[i], 1, i);
327
2.69k
    }
328
329
4.17k
    return 0;
330
5.80k
}
cbs_mpeg2.c:cbs_mpeg2_write_quant_matrix_extension
Line
Count
Source
300
3.47k
{
301
3.47k
    int err, i;
302
303
3.47k
    HEADER("Quant Matrix Extension");
304
305
3.47k
    ui(1, load_intra_quantiser_matrix);
306
3.47k
    if (current->load_intra_quantiser_matrix) {
307
46.2k
        for (i = 0; i < 64; i++)
308
45.5k
            uirs(8, intra_quantiser_matrix[i], 1, i);
309
712
    }
310
311
3.47k
    ui(1, load_non_intra_quantiser_matrix);
312
3.47k
    if (current->load_non_intra_quantiser_matrix) {
313
52.1k
        for (i = 0; i < 64; i++)
314
51.3k
            uirs(8, non_intra_quantiser_matrix[i], 1, i);
315
802
    }
316
317
3.47k
    ui(1, load_chroma_intra_quantiser_matrix);
318
3.47k
    if (current->load_chroma_intra_quantiser_matrix) {
319
48.2k
        for (i = 0; i < 64; i++)
320
47.4k
            uirs(8, intra_quantiser_matrix[i], 1, i);
321
742
    }
322
323
3.47k
    ui(1, load_chroma_non_intra_quantiser_matrix);
324
3.47k
    if (current->load_chroma_non_intra_quantiser_matrix) {
325
57.3k
        for (i = 0; i < 64; i++)
326
56.4k
            uirs(8, chroma_non_intra_quantiser_matrix[i], 1, i);
327
882
    }
328
329
3.47k
    return 0;
330
3.47k
}
331
332
static int FUNC(picture_display_extension)(CodedBitstreamContext *ctx, RWContext *rw,
333
                                           MPEG2RawPictureDisplayExtension *current)
334
4.67k
{
335
4.67k
    CodedBitstreamMPEG2Context *mpeg2 = ctx->priv_data;
336
4.67k
    int err, i;
337
338
4.67k
    HEADER("Picture Display Extension");
339
340
7.70k
    for (i = 0; i < mpeg2->number_of_frame_centre_offsets; i++) {
341
4.65k
        sis(16, frame_centre_horizontal_offset[i], 1, i);
342
4.21k
        marker_bit();
343
3.72k
        sis(16, frame_centre_vertical_offset[i],   1, i);
344
3.48k
        marker_bit();
345
3.48k
    }
346
347
3.05k
    return 0;
348
4.67k
}
cbs_mpeg2.c:cbs_mpeg2_read_picture_display_extension
Line
Count
Source
334
3.59k
{
335
3.59k
    CodedBitstreamMPEG2Context *mpeg2 = ctx->priv_data;
336
3.59k
    int err, i;
337
338
3.59k
    HEADER("Picture Display Extension");
339
340
5.43k
    for (i = 0; i < mpeg2->number_of_frame_centre_offsets; i++) {
341
3.46k
        sis(16, frame_centre_horizontal_offset[i], 1, i);
342
3.02k
        marker_bit();
343
2.53k
        sis(16, frame_centre_vertical_offset[i],   1, i);
344
2.29k
        marker_bit();
345
2.29k
    }
346
347
1.97k
    return 0;
348
3.59k
}
cbs_mpeg2.c:cbs_mpeg2_write_picture_display_extension
Line
Count
Source
334
1.07k
{
335
1.07k
    CodedBitstreamMPEG2Context *mpeg2 = ctx->priv_data;
336
1.07k
    int err, i;
337
338
1.07k
    HEADER("Picture Display Extension");
339
340
2.26k
    for (i = 0; i < mpeg2->number_of_frame_centre_offsets; i++) {
341
1.19k
        sis(16, frame_centre_horizontal_offset[i], 1, i);
342
1.19k
        marker_bit();
343
1.19k
        sis(16, frame_centre_vertical_offset[i],   1, i);
344
1.19k
        marker_bit();
345
1.19k
    }
346
347
1.07k
    return 0;
348
1.07k
}
349
350
static int FUNC(extension_data)(CodedBitstreamContext *ctx, RWContext *rw,
351
                                MPEG2RawExtensionData *current)
352
56.4k
{
353
56.4k
    int err;
354
355
56.4k
    HEADER("Extension Data");
356
357
56.4k
    ui(8, extension_start_code);
358
56.4k
    ui(4, extension_start_code_identifier);
359
360
56.1k
    switch (current->extension_start_code_identifier) {
361
18.1k
    case MPEG2_EXTENSION_SEQUENCE:
362
18.1k
        return FUNC(sequence_extension)
363
18.1k
            (ctx, rw, &current->data.sequence);
364
8.20k
    case MPEG2_EXTENSION_SEQUENCE_DISPLAY:
365
8.20k
        return FUNC(sequence_display_extension)
366
8.20k
            (ctx, rw, &current->data.sequence_display);
367
13.2k
    case MPEG2_EXTENSION_QUANT_MATRIX:
368
13.2k
        return FUNC(quant_matrix_extension)
369
13.2k
            (ctx, rw, &current->data.quant_matrix);
370
4.67k
    case MPEG2_EXTENSION_PICTURE_DISPLAY:
371
4.67k
        return FUNC(picture_display_extension)
372
4.67k
            (ctx, rw, &current->data.picture_display);
373
11.2k
    case MPEG2_EXTENSION_PICTURE_CODING:
374
11.2k
        return FUNC(picture_coding_extension)
375
11.2k
            (ctx, rw, &current->data.picture_coding);
376
687
    default:
377
687
        av_log(ctx->log_ctx, AV_LOG_ERROR, "Extension ID %d not supported.\n",
378
687
               current->extension_start_code_identifier);
379
687
        return AVERROR_PATCHWELCOME;
380
56.1k
    }
381
56.1k
}
cbs_mpeg2.c:cbs_mpeg2_read_extension_data
Line
Count
Source
352
48.2k
{
353
48.2k
    int err;
354
355
48.2k
    HEADER("Extension Data");
356
357
48.2k
    ui(8, extension_start_code);
358
48.2k
    ui(4, extension_start_code_identifier);
359
360
47.9k
    switch (current->extension_start_code_identifier) {
361
17.4k
    case MPEG2_EXTENSION_SEQUENCE:
362
17.4k
        return FUNC(sequence_extension)
363
17.4k
            (ctx, rw, &current->data.sequence);
364
7.02k
    case MPEG2_EXTENSION_SEQUENCE_DISPLAY:
365
7.02k
        return FUNC(sequence_display_extension)
366
7.02k
            (ctx, rw, &current->data.sequence_display);
367
9.81k
    case MPEG2_EXTENSION_QUANT_MATRIX:
368
9.81k
        return FUNC(quant_matrix_extension)
369
9.81k
            (ctx, rw, &current->data.quant_matrix);
370
3.59k
    case MPEG2_EXTENSION_PICTURE_DISPLAY:
371
3.59k
        return FUNC(picture_display_extension)
372
3.59k
            (ctx, rw, &current->data.picture_display);
373
9.31k
    case MPEG2_EXTENSION_PICTURE_CODING:
374
9.31k
        return FUNC(picture_coding_extension)
375
9.31k
            (ctx, rw, &current->data.picture_coding);
376
687
    default:
377
687
        av_log(ctx->log_ctx, AV_LOG_ERROR, "Extension ID %d not supported.\n",
378
687
               current->extension_start_code_identifier);
379
687
        return AVERROR_PATCHWELCOME;
380
47.9k
    }
381
47.9k
}
cbs_mpeg2.c:cbs_mpeg2_write_extension_data
Line
Count
Source
352
8.26k
{
353
8.26k
    int err;
354
355
8.26k
    HEADER("Extension Data");
356
357
8.26k
    ui(8, extension_start_code);
358
8.26k
    ui(4, extension_start_code_identifier);
359
360
8.26k
    switch (current->extension_start_code_identifier) {
361
619
    case MPEG2_EXTENSION_SEQUENCE:
362
619
        return FUNC(sequence_extension)
363
619
            (ctx, rw, &current->data.sequence);
364
1.18k
    case MPEG2_EXTENSION_SEQUENCE_DISPLAY:
365
1.18k
        return FUNC(sequence_display_extension)
366
1.18k
            (ctx, rw, &current->data.sequence_display);
367
3.47k
    case MPEG2_EXTENSION_QUANT_MATRIX:
368
3.47k
        return FUNC(quant_matrix_extension)
369
3.47k
            (ctx, rw, &current->data.quant_matrix);
370
1.07k
    case MPEG2_EXTENSION_PICTURE_DISPLAY:
371
1.07k
        return FUNC(picture_display_extension)
372
1.07k
            (ctx, rw, &current->data.picture_display);
373
1.91k
    case MPEG2_EXTENSION_PICTURE_CODING:
374
1.91k
        return FUNC(picture_coding_extension)
375
1.91k
            (ctx, rw, &current->data.picture_coding);
376
0
    default:
377
0
        av_log(ctx->log_ctx, AV_LOG_ERROR, "Extension ID %d not supported.\n",
378
0
               current->extension_start_code_identifier);
379
0
        return AVERROR_PATCHWELCOME;
380
8.26k
    }
381
8.26k
}
382
383
static int FUNC(slice_header)(CodedBitstreamContext *ctx, RWContext *rw,
384
                              MPEG2RawSliceHeader *current)
385
135k
{
386
135k
    CodedBitstreamMPEG2Context *mpeg2 = ctx->priv_data;
387
135k
    int err;
388
389
135k
    HEADER("Slice Header");
390
391
135k
    ui(8, slice_vertical_position);
392
393
135k
    if (mpeg2->vertical_size > 2800)
394
39.9k
        ui(3, slice_vertical_position_extension);
395
133k
    if (mpeg2->scalable) {
396
0
        if (mpeg2->scalable_mode == 0)
397
0
            ui(7, priority_breakpoint);
398
0
    }
399
400
133k
    uir(5, quantiser_scale_code);
401
402
88.8k
    if (nextbits(1, 1, current->slice_extension_flag)) {
403
41.9k
        ui(1, slice_extension_flag);
404
41.9k
        ui(1, intra_slice);
405
41.9k
        ui(1, slice_picture_id_enable);
406
41.9k
        ui(6, slice_picture_id);
407
41.9k
    }
408
409
87.7k
    CHECK(FUNC(extra_information)(ctx, rw, &current->extra_information_slice,
410
87.7k
                                  "extra_information_slice[k]", "extra_bit_slice"));
411
412
84.4k
    return 0;
413
87.7k
}
cbs_mpeg2.c:cbs_mpeg2_read_slice_header
Line
Count
Source
385
131k
{
386
131k
    CodedBitstreamMPEG2Context *mpeg2 = ctx->priv_data;
387
131k
    int err;
388
389
131k
    HEADER("Slice Header");
390
391
131k
    ui(8, slice_vertical_position);
392
393
131k
    if (mpeg2->vertical_size > 2800)
394
39.1k
        ui(3, slice_vertical_position_extension);
395
129k
    if (mpeg2->scalable) {
396
0
        if (mpeg2->scalable_mode == 0)
397
0
            ui(7, priority_breakpoint);
398
0
    }
399
400
129k
    uir(5, quantiser_scale_code);
401
402
85.1k
    if (nextbits(1, 1, current->slice_extension_flag)) {
403
40.6k
        ui(1, slice_extension_flag);
404
40.6k
        ui(1, intra_slice);
405
40.6k
        ui(1, slice_picture_id_enable);
406
40.6k
        ui(6, slice_picture_id);
407
40.6k
    }
408
409
83.9k
    CHECK(FUNC(extra_information)(ctx, rw, &current->extra_information_slice,
410
83.9k
                                  "extra_information_slice[k]", "extra_bit_slice"));
411
412
80.7k
    return 0;
413
83.9k
}
cbs_mpeg2.c:cbs_mpeg2_write_slice_header
Line
Count
Source
385
3.75k
{
386
3.75k
    CodedBitstreamMPEG2Context *mpeg2 = ctx->priv_data;
387
3.75k
    int err;
388
389
3.75k
    HEADER("Slice Header");
390
391
3.75k
    ui(8, slice_vertical_position);
392
393
3.75k
    if (mpeg2->vertical_size > 2800)
394
721
        ui(3, slice_vertical_position_extension);
395
3.75k
    if (mpeg2->scalable) {
396
0
        if (mpeg2->scalable_mode == 0)
397
0
            ui(7, priority_breakpoint);
398
0
    }
399
400
3.75k
    uir(5, quantiser_scale_code);
401
402
3.75k
    if (nextbits(1, 1, current->slice_extension_flag)) {
403
1.28k
        ui(1, slice_extension_flag);
404
1.28k
        ui(1, intra_slice);
405
1.28k
        ui(1, slice_picture_id_enable);
406
1.28k
        ui(6, slice_picture_id);
407
1.28k
    }
408
409
3.75k
    CHECK(FUNC(extra_information)(ctx, rw, &current->extra_information_slice,
410
3.75k
                                  "extra_information_slice[k]", "extra_bit_slice"));
411
412
3.75k
    return 0;
413
3.75k
}
414
415
static int FUNC(sequence_end)(CodedBitstreamContext *ctx, RWContext *rw,
416
                              MPEG2RawSequenceEnd *current)
417
1.50k
{
418
1.50k
    int err;
419
420
1.50k
    HEADER("Sequence End");
421
422
1.50k
    ui(8, sequence_end_code);
423
424
1.50k
    return 0;
425
1.50k
}
cbs_mpeg2.c:cbs_mpeg2_read_sequence_end
Line
Count
Source
417
1.27k
{
418
1.27k
    int err;
419
420
1.27k
    HEADER("Sequence End");
421
422
1.27k
    ui(8, sequence_end_code);
423
424
1.27k
    return 0;
425
1.27k
}
cbs_mpeg2.c:cbs_mpeg2_write_sequence_end
Line
Count
Source
417
229
{
418
229
    int err;
419
420
229
    HEADER("Sequence End");
421
422
229
    ui(8, sequence_end_code);
423
424
229
    return 0;
425
229
}