Coverage Report

Created: 2026-02-26 06:25

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/work/libde265/libde265/vps.cc
Line
Count
Source
1
/*
2
 * H.265 video codec.
3
 * Copyright (c) 2013-2014 struktur AG, Dirk Farin <farin@struktur.de>
4
 *
5
 * This file is part of libde265.
6
 *
7
 * libde265 is free software: you can redistribute it and/or modify
8
 * it under the terms of the GNU Lesser General Public License as
9
 * published by the Free Software Foundation, either version 3 of
10
 * the License, or (at your option) any later version.
11
 *
12
 * libde265 is distributed in the hope that it will be useful,
13
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
 * GNU Lesser General Public License for more details.
16
 *
17
 * You should have received a copy of the GNU Lesser General Public License
18
 * along with libde265.  If not, see <http://www.gnu.org/licenses/>.
19
 */
20
21
#include "vps.h"
22
#include "util.h"
23
#include "decctx.h"
24
25
#include <assert.h>
26
27
28
void profile_data::set_defaults(enum profile_idc profile, int level_major, int level_minor)
29
0
{
30
0
  profile_present_flag = 1;
31
32
0
  profile_space = 0;
33
0
  tier_flag = 0;
34
0
  profile_idc = profile;
35
36
0
  for (int i=0;i<32;i++) {
37
0
    profile_compatibility_flag[i]=0;
38
0
  }
39
40
0
  switch (profile) {
41
0
  case Profile_Main:
42
0
    profile_compatibility_flag[Profile_Main]=1;
43
0
    profile_compatibility_flag[Profile_Main10]=1;
44
0
    break;
45
0
  case Profile_Main10:
46
0
    profile_compatibility_flag[Profile_Main10]=1;
47
0
    break;
48
0
  default:
49
0
    assert(0);
50
0
  }
51
52
0
  progressive_source_flag = 0;
53
0
  interlaced_source_flag  = 0;
54
0
  non_packed_constraint_flag = 0;
55
0
  frame_only_constraint_flag = 0;
56
57
58
  // --- level ---
59
60
0
  level_present_flag = 1;
61
0
  level_idc = level_major*30 + level_minor*3;
62
0
}
63
64
65
void video_parameter_set::set_defaults(enum profile_idc profile, int level_major, int level_minor)
66
0
{
67
0
  video_parameter_set_id = 0;
68
0
  vps_max_layers = 1; // always =1 in current version of standard
69
0
  vps_max_sub_layers = 1; // temporal sub-layers
70
0
  vps_temporal_id_nesting_flag = 1;
71
72
0
  profile_tier_level_.general.set_defaults(profile,level_major,level_minor);
73
74
0
  vps_sub_layer_ordering_info_present_flag = 0;
75
0
  layer[0].vps_max_dec_pic_buffering = 1;
76
0
  layer[0].vps_max_num_reorder_pics  = 0;
77
0
  layer[0].vps_max_latency_increase  = 0;
78
79
0
  vps_max_layer_id = 0;
80
0
  vps_num_layer_sets = 1;
81
82
0
  layer_id_included_flag.resize(vps_num_layer_sets);
83
84
85
  // --- timing info ---
86
87
0
  vps_timing_info_present_flag = 0;
88
0
  vps_num_units_in_tick = 0;
89
0
  vps_time_scale = 0;
90
0
  vps_poc_proportional_to_timing_flag = 0;
91
92
0
  vps_num_ticks_poc_diff_one = 0;
93
0
  vps_num_hrd_parameters = 0;
94
95
96
  // --- vps extension ---
97
98
0
  vps_extension_flag = 0;
99
0
}
100
101
102
de265_error video_parameter_set::read(error_queue* errqueue, bitreader* reader)
103
0
{
104
0
  int vlc;
105
106
0
  video_parameter_set_id = vlc = get_bits(reader, 4);
107
0
  if (vlc >= DE265_MAX_VPS_SETS) return DE265_ERROR_CODED_PARAMETER_OUT_OF_RANGE;
108
109
0
  skip_bits(reader, 2);
110
0
  vps_max_layers = vlc = get_bits(reader,6) +1;
111
0
  if (vlc > 63) return DE265_ERROR_CODED_PARAMETER_OUT_OF_RANGE; // vps_max_layers_minus1 (range 0...63)
112
113
0
  vps_max_sub_layers = vlc = get_bits(reader,3) +1;
114
0
  if (vlc >= MAX_TEMPORAL_SUBLAYERS) return DE265_ERROR_CODED_PARAMETER_OUT_OF_RANGE;
115
116
0
  vps_temporal_id_nesting_flag = get_bits(reader,1);
117
0
  skip_bits(reader, 16);
118
119
0
  profile_tier_level_.read(reader, vps_max_sub_layers);
120
121
  /*
122
    read_bit_rate_pic_rate_info(reader, &bit_rate_pic_rate_info,
123
    0, vps_max_sub_layers-1);
124
  */
125
126
0
  vps_sub_layer_ordering_info_present_flag = get_bits(reader,1);
127
  //assert(vps_max_sub_layers-1 < MAX_TEMPORAL_SUBLAYERS);
128
129
0
  int firstLayerRead = vps_sub_layer_ordering_info_present_flag ? 0 : (vps_max_sub_layers-1);
130
131
0
  for (int i=firstLayerRead;i<vps_max_sub_layers;i++) {
132
0
    layer[i].vps_max_dec_pic_buffering = get_uvlc(reader);
133
0
    layer[i].vps_max_num_reorder_pics  = get_uvlc(reader);
134
0
    layer[i].vps_max_latency_increase  = get_uvlc(reader);
135
136
0
if (layer[i].vps_max_dec_pic_buffering == UVLC_ERROR ||
137
0
    layer[i].vps_max_num_reorder_pics  == UVLC_ERROR ||
138
0
    layer[i].vps_max_latency_increase  == UVLC_ERROR) {
139
0
      return DE265_ERROR_CODED_PARAMETER_OUT_OF_RANGE;
140
0
    }
141
0
  }
142
143
0
  if (!vps_sub_layer_ordering_info_present_flag) {
144
0
    assert(firstLayerRead < MAX_TEMPORAL_SUBLAYERS);
145
146
0
    for (int i=0;i<firstLayerRead;i++) {
147
0
      layer[i].vps_max_dec_pic_buffering = layer[firstLayerRead].vps_max_dec_pic_buffering;
148
0
      layer[i].vps_max_num_reorder_pics  = layer[firstLayerRead].vps_max_num_reorder_pics;
149
0
      layer[i].vps_max_latency_increase  = layer[firstLayerRead].vps_max_latency_increase;
150
0
    }
151
0
  }
152
153
154
0
  vps_max_layer_id = get_bits(reader,6);
155
0
  vps_num_layer_sets = get_uvlc(reader);
156
157
0
  if (vps_num_layer_sets+1<0 ||
158
0
      vps_num_layer_sets+1>=1024 ||
159
0
      vps_num_layer_sets == UVLC_ERROR) {
160
0
    errqueue->add_warning(DE265_ERROR_CODED_PARAMETER_OUT_OF_RANGE, false);
161
0
    return DE265_ERROR_CODED_PARAMETER_OUT_OF_RANGE;
162
0
  }
163
0
  vps_num_layer_sets += 1;
164
165
0
  layer_id_included_flag.resize(vps_num_layer_sets);
166
167
0
  for (int i=1; i <= vps_num_layer_sets-1; i++)
168
0
    {
169
0
      layer_id_included_flag[i].resize(vps_max_layer_id+1);
170
171
0
      for (int j=0; j <= vps_max_layer_id; j++)
172
0
        {
173
0
          layer_id_included_flag[i][j] = get_bits(reader,1);
174
0
        }
175
0
    }
176
177
0
  vps_timing_info_present_flag = get_bits(reader,1);
178
179
0
  if (vps_timing_info_present_flag) {
180
0
    vps_num_units_in_tick = get_bits(reader,32);
181
0
    vps_time_scale        = get_bits(reader,32);
182
0
    vps_poc_proportional_to_timing_flag = get_bits(reader,1);
183
184
0
    if (vps_poc_proportional_to_timing_flag) {
185
0
      vps_num_ticks_poc_diff_one = get_uvlc(reader)+1;
186
0
      vps_num_hrd_parameters     = get_uvlc(reader);
187
188
0
      if (vps_num_hrd_parameters >= 1024 || vps_num_hrd_parameters < 0) {
189
0
        errqueue->add_warning(DE265_ERROR_CODED_PARAMETER_OUT_OF_RANGE, false);
190
0
        return DE265_ERROR_CODED_PARAMETER_OUT_OF_RANGE;
191
0
      }
192
193
0
      hrd_layer_set_idx .resize(vps_num_hrd_parameters);
194
0
      cprms_present_flag.resize(vps_num_hrd_parameters);
195
196
0
      for (int i=0; i<vps_num_hrd_parameters; i++) {
197
0
        hrd_layer_set_idx[i] = get_uvlc(reader);
198
199
0
        if (i > 0) {
200
0
          cprms_present_flag[i] = get_bits(reader,1);
201
0
        }
202
203
        //hrd_parameters(cprms_present_flag[i], vps_max_sub_layers_minus1)
204
205
0
        return DE265_OK; // TODO: decode hrd_parameters()
206
0
      }
207
0
    }
208
0
  }
209
210
0
  vps_extension_flag = get_bits(reader,1);
211
212
0
  if (vps_extension_flag) {
213
    /*
214
      while( more_rbsp_data() )
215
      vps_extension_data_flag u(1)
216
      rbsp_trailing_bits()
217
    */
218
0
  }
219
220
0
  return DE265_OK;
221
0
}
222
223
224
de265_error video_parameter_set::write(error_queue* errqueue, CABAC_encoder& out) const
225
0
{
226
0
  if (video_parameter_set_id >= DE265_MAX_VPS_SETS) return DE265_ERROR_CODED_PARAMETER_OUT_OF_RANGE;
227
0
  out.write_bits(video_parameter_set_id,4);
228
229
0
  out.write_bits(0x3,2);
230
0
  out.write_bits(vps_max_layers-1,6);
231
232
0
  if (vps_max_sub_layers >= MAX_TEMPORAL_SUBLAYERS) return DE265_ERROR_CODED_PARAMETER_OUT_OF_RANGE;
233
0
  out.write_bits(vps_max_sub_layers-1,3);
234
235
0
  out.write_bit(vps_temporal_id_nesting_flag);
236
0
  out.write_bits(0xFFFF, 16);
237
238
0
  profile_tier_level_.write(out, vps_max_sub_layers);
239
240
  /*
241
  read_bit_rate_pic_rate_info(reader, &bit_rate_pic_rate_info,
242
                              0, vps_max_sub_layers-1);
243
  */
244
245
0
  out.write_bit(vps_sub_layer_ordering_info_present_flag);
246
  //assert(vps_max_sub_layers-1 < MAX_TEMPORAL_SUBLAYERS);
247
248
0
  int firstLayerRead = vps_sub_layer_ordering_info_present_flag ? 0 : (vps_max_sub_layers-1);
249
250
0
  for (int i=firstLayerRead;i<vps_max_sub_layers;i++) {
251
0
    out.write_uvlc(layer[i].vps_max_dec_pic_buffering);
252
0
    out.write_uvlc(layer[i].vps_max_num_reorder_pics);
253
0
    out.write_uvlc(layer[i].vps_max_latency_increase);
254
0
  }
255
256
0
  if (vps_num_layer_sets<0 ||
257
0
      vps_num_layer_sets>=1024) {
258
0
    errqueue->add_warning(DE265_ERROR_CODED_PARAMETER_OUT_OF_RANGE, false);
259
0
    return DE265_ERROR_CODED_PARAMETER_OUT_OF_RANGE;
260
0
  }
261
262
0
  out.write_bits(vps_max_layer_id,6);
263
0
  out.write_uvlc(vps_num_layer_sets-1);
264
265
0
  for (int i=1; i <= vps_num_layer_sets-1; i++)
266
0
    for (int j=0; j <= vps_max_layer_id; j++)
267
0
      {
268
0
        out.write_bit(layer_id_included_flag[i][j]);
269
0
      }
270
271
0
  out.write_bit(vps_timing_info_present_flag);
272
273
0
  if (vps_timing_info_present_flag) {
274
0
    out.write_bits(vps_num_units_in_tick,32);
275
0
    out.write_bits(vps_time_scale       ,32);
276
0
    out.write_bit (vps_poc_proportional_to_timing_flag);
277
278
0
    if (vps_poc_proportional_to_timing_flag) {
279
0
      out.write_uvlc(vps_num_ticks_poc_diff_one-1);
280
0
      out.write_uvlc(vps_num_hrd_parameters);
281
282
0
      for (int i=0; i<vps_num_hrd_parameters; i++) {
283
0
        out.write_uvlc(hrd_layer_set_idx[i]);
284
285
0
        if (i > 0) {
286
0
          out.write_bit(cprms_present_flag[i]);
287
0
        }
288
289
        //hrd_parameters(cprms_present_flag[i], vps_max_sub_layers_minus1)
290
291
0
        return DE265_OK; // TODO: decode hrd_parameters()
292
0
      }
293
0
    }
294
0
  }
295
296
0
  out.write_bit(vps_extension_flag);
297
298
0
  if (vps_extension_flag) {
299
    /*
300
    while( more_rbsp_data() )
301
    vps_extension_data_flag u(1)
302
    rbsp_trailing_bits()
303
    */
304
0
  }
305
306
0
  return DE265_OK;
307
0
}
308
309
310
void profile_data::read(bitreader* reader)
311
0
{
312
0
  if (profile_present_flag) {
313
0
    profile_space = get_bits(reader,2);
314
0
    tier_flag = get_bits(reader,1);
315
0
    profile_idc = (enum profile_idc)get_bits(reader,5);
316
317
0
    for (int i=0; i<32; i++) {
318
0
      profile_compatibility_flag[i] = get_bits(reader,1);
319
0
    }
320
321
0
    progressive_source_flag = get_bits(reader,1);
322
0
    interlaced_source_flag  = get_bits(reader,1);
323
0
    non_packed_constraint_flag = get_bits(reader,1);
324
0
    frame_only_constraint_flag = get_bits(reader,1);
325
0
    skip_bits(reader,44);
326
0
  }
327
328
0
  if (level_present_flag) {
329
0
    level_idc = get_bits(reader,8);
330
0
  }
331
0
}
332
333
334
void profile_tier_level::read(bitreader* reader,
335
                              int max_sub_layers)
336
0
{
337
  // --- read the general profile ---
338
339
0
  general.profile_present_flag = true;
340
0
  general.level_present_flag = true;
341
0
  general.read(reader);
342
343
344
  // --- read the profile/levels of the sub-layers ---
345
346
0
  for (int i=0; i<max_sub_layers-1; i++)
347
0
    {
348
0
      sub_layer[i].profile_present_flag = get_bits(reader,1);
349
0
      sub_layer[i].level_present_flag   = get_bits(reader,1);
350
0
    }
351
352
0
  if (max_sub_layers > 1)
353
0
    {
354
0
      for (int i=max_sub_layers-1; i<8; i++)
355
0
        {
356
0
          skip_bits(reader,2);
357
0
        }
358
0
    }
359
360
0
  for (int i=0; i<max_sub_layers-1; i++)
361
0
    {
362
0
      sub_layer[i].read(reader);
363
0
    }
364
0
}
365
366
367
void profile_data::write(CABAC_encoder& out) const
368
0
{
369
0
  if (profile_present_flag)
370
0
    {
371
0
      out.write_bits(profile_space,2);
372
0
      out.write_bit (tier_flag);
373
0
      out.write_bits(profile_idc,5);
374
375
0
      for (int j=0; j<32; j++)
376
0
        {
377
0
          out.write_bit(profile_compatibility_flag[j]);
378
0
        }
379
380
0
      out.write_bit(progressive_source_flag);
381
0
      out.write_bit(interlaced_source_flag);
382
0
      out.write_bit(non_packed_constraint_flag);
383
0
      out.write_bit(frame_only_constraint_flag);
384
0
      out.skip_bits(44);
385
0
    }
386
387
0
  if (level_present_flag)
388
0
    {
389
0
      out.write_bits(level_idc,8);
390
0
    }
391
0
}
392
393
void profile_tier_level::write(CABAC_encoder& out, int max_sub_layers) const
394
0
{
395
0
  assert(general.profile_present_flag==true);
396
0
  assert(general.level_present_flag==true);
397
398
0
  general.write(out);
399
400
0
  for (int i=0; i<max_sub_layers-1; i++)
401
0
    {
402
0
      out.write_bit(sub_layer[i].profile_present_flag);
403
0
      out.write_bit(sub_layer[i].level_present_flag);
404
0
    }
405
406
0
  if (max_sub_layers > 1)
407
0
    {
408
0
      for (int i=max_sub_layers-1; i<8; i++)
409
0
        {
410
0
          out.skip_bits(2);
411
0
        }
412
0
    }
413
414
0
  for (int i=0; i<max_sub_layers-1; i++)
415
0
    {
416
0
      sub_layer[i].write(out);
417
0
    }
418
0
}
419
420
421
/*
422
void read_bit_rate_pic_rate_info(bitreader* reader,
423
                                 struct bit_rate_pic_rate_info* hdr,
424
                                 int TempLevelLow,
425
                                 int TempLevelHigh)
426
{
427
  for (int i=TempLevelLow; i<=TempLevelHigh; i++) {
428
429
    hdr->bit_rate_info_present_flag[i] = get_bits(reader,1);
430
    hdr->pic_rate_info_present_flag[i] = get_bits(reader,1);
431
432
    if (hdr->bit_rate_info_present_flag[i]) {
433
      hdr->avg_bit_rate[i] = get_bits(reader,16);
434
      hdr->max_bit_rate[i] = get_bits(reader,16);
435
    }
436
437
    if (hdr->pic_rate_info_present_flag[i]) {
438
      hdr->constant_pic_rate_idc[i] = get_bits(reader,2);
439
      hdr->avg_pic_rate[i] = get_bits(reader,16);
440
    }
441
  }
442
}
443
*/
444
445
446
447
0
#define LOG0(t) log2fh(fh, t)
448
0
#define LOG1(t,d) log2fh(fh, t,d)
449
0
#define LOG2(t,d1,d2) log2fh(fh, t,d1,d2)
450
0
#define LOG3(t,d1,d2,d3) log2fh(fh, t,d1,d2,d3)
451
452
void video_parameter_set::dump(int fd) const
453
0
{
454
0
  FILE* fh;
455
0
  if (fd==1) fh=stdout;
456
0
  else if (fd==2) fh=stderr;
457
0
  else { return; }
458
459
0
  LOG0("----------------- VPS -----------------\n");
460
0
  LOG1("video_parameter_set_id                : %d\n", video_parameter_set_id);
461
0
  LOG1("vps_max_layers                        : %d\n", vps_max_layers);
462
0
  LOG1("vps_max_sub_layers                    : %d\n", vps_max_sub_layers);
463
0
  LOG1("vps_temporal_id_nesting_flag          : %d\n", vps_temporal_id_nesting_flag);
464
465
0
  profile_tier_level_.dump(vps_max_sub_layers, fh);
466
  //dump_bit_rate_pic_rate_info(&bit_rate_pic_rate_info, 0, vps_max_sub_layers-1);
467
468
0
  LOG1("vps_sub_layer_ordering_info_present_flag : %d\n",
469
0
       vps_sub_layer_ordering_info_present_flag);
470
471
0
  if (vps_sub_layer_ordering_info_present_flag) {
472
0
    for (int i=0;i<vps_max_sub_layers;i++) {
473
0
      LOG2("layer %d: vps_max_dec_pic_buffering = %d\n",i,layer[i].vps_max_dec_pic_buffering);
474
0
      LOG1("         vps_max_num_reorder_pics  = %d\n",layer[i].vps_max_num_reorder_pics);
475
0
      LOG1("         vps_max_latency_increase  = %d\n",layer[i].vps_max_latency_increase);
476
0
    }
477
0
  }
478
0
  else {
479
0
    LOG1("layer (all): vps_max_dec_pic_buffering = %d\n",layer[0].vps_max_dec_pic_buffering);
480
0
    LOG1("             vps_max_num_reorder_pics  = %d\n",layer[0].vps_max_num_reorder_pics);
481
0
    LOG1("             vps_max_latency_increase  = %d\n",layer[0].vps_max_latency_increase);
482
0
  }
483
484
485
0
  LOG1("vps_max_layer_id   = %d\n", vps_max_layer_id);
486
0
  LOG1("vps_num_layer_sets = %d\n", vps_num_layer_sets);
487
488
0
  for (int i=1; i <= vps_num_layer_sets-1; i++)
489
0
    for (int j=0; j <= vps_max_layer_id; j++)
490
0
      {
491
0
        LOG3("layer_id_included_flag[%d][%d] = %d\n",i,j,
492
0
             int(layer_id_included_flag[i][j]));
493
0
      }
494
495
0
  LOG1("vps_timing_info_present_flag = %d\n",
496
0
       vps_timing_info_present_flag);
497
498
0
  if (vps_timing_info_present_flag) {
499
0
    LOG1("vps_num_units_in_tick = %d\n", vps_num_units_in_tick);
500
0
    LOG1("vps_time_scale        = %d\n", vps_time_scale);
501
0
    LOG1("vps_poc_proportional_to_timing_flag = %d\n", vps_poc_proportional_to_timing_flag);
502
503
0
    if (vps_poc_proportional_to_timing_flag) {
504
0
      LOG1("vps_num_ticks_poc_diff_one = %d\n", vps_num_ticks_poc_diff_one);
505
0
      LOG1("vps_num_hrd_parameters     = %d\n", vps_num_hrd_parameters);
506
507
0
      for (int i=0; i<vps_num_hrd_parameters; i++) {
508
0
        LOG2("hrd_layer_set_idx[%d] = %d\n", i, hrd_layer_set_idx[i]);
509
510
0
        if (i > 0) {
511
0
          LOG2("cprms_present_flag[%d] = %d\n", i, cprms_present_flag[i]);
512
0
        }
513
514
        //hrd_parameters(cprms_present_flag[i], vps_max_sub_layers_minus1)
515
516
0
        return; // TODO: decode hrd_parameters()
517
0
      }
518
0
    }
519
0
  }
520
521
0
  LOG1("vps_extension_flag = %d\n", vps_extension_flag);
522
0
}
523
524
525
static const char* profile_name(profile_idc p)
526
0
{
527
0
  switch (p) {
528
0
  case Profile_Main: return "Main";
529
0
  case Profile_Main10: return "Main10";
530
0
  case Profile_MainStillPicture: return "MainStillPicture";
531
0
  case Profile_FormatRangeExtensions: return "FormatRangeExtensions";
532
0
  default:
533
0
    return "(unknown)";
534
0
  }
535
0
}
536
537
538
void profile_data::dump(bool general, FILE* fh) const
539
0
{
540
0
  const char* prefix = (general ? "general" : "sub_layer");
541
542
0
  if (profile_present_flag) {
543
0
    LOG2("  %s_profile_space     : %d\n", prefix,profile_space);
544
0
    LOG2("  %s_tier_flag         : %d\n", prefix,tier_flag);
545
0
    LOG2("  %s_profile_idc       : %s\n", prefix, profile_name(profile_idc));
546
547
0
    LOG1("  %s_profile_compatibility_flags: ", prefix);
548
0
    for (int i=0; i<32; i++) {
549
0
      if (i) LOG0("*,");
550
0
      LOG1("*%d",profile_compatibility_flag[i]);
551
0
    }
552
0
    LOG0("*\n");
553
0
    LOG2("    %s_progressive_source_flag : %d\n",prefix,progressive_source_flag);
554
0
    LOG2("    %s_interlaced_source_flag : %d\n",prefix,interlaced_source_flag);
555
0
    LOG2("    %s_non_packed_constraint_flag : %d\n",prefix,non_packed_constraint_flag);
556
0
    LOG2("    %s_frame_only_constraint_flag : %d\n",prefix,frame_only_constraint_flag);
557
0
  }
558
559
0
  if (level_present_flag) {
560
0
    LOG3("  %s_level_idc         : %d (%4.2f)\n", prefix,level_idc, level_idc/30.0f);
561
0
  }
562
0
}
563
564
565
void profile_tier_level::dump(int max_sub_layers, FILE* fh) const
566
0
{
567
0
  general.dump(true, fh);
568
569
0
  for (int i=0; i<max_sub_layers-1; i++)
570
0
    {
571
0
      LOG1("  Profile/Tier/Level [Layer %d]\n",i);
572
0
      sub_layer[i].dump(false, fh);
573
0
    }
574
0
}
575
576
#undef LOG0
577
#undef LOG1
578
#undef LOG2
579
#undef LOG3
580
581
582
/*
583
void dump_bit_rate_pic_rate_info(struct bit_rate_pic_rate_info* hdr,
584
                                 int TempLevelLow,
585
                                 int TempLevelHigh)
586
{
587
  for (int i=TempLevelLow; i<=TempLevelHigh; i++) {
588
589
    LOG("  Bitrate [Layer %d]\n", i);
590
591
    if (hdr->bit_rate_info_present_flag[i]) {
592
      LOG("    avg_bit_rate : %d\n", hdr->avg_bit_rate[i]);
593
      LOG("    max_bit_rate : %d\n", hdr->max_bit_rate[i]);
594
    }
595
596
    if (hdr->pic_rate_info_present_flag[i]) {
597
      LOG("    constant_pic_rate_idc : %d\n", hdr->constant_pic_rate_idc[i]);
598
      LOG("    avg_pic_rate[i]       : %d\n", hdr->avg_pic_rate[i]);
599
    }
600
  }
601
}
602
*/