|
|
|
@@ -84,32 +84,35 @@ static int decode_picture_timing(H264SEIPictureTiming *h, GetBitContext *gb, |
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
|
|
|
|
num_clock_ts = sei_num_clock_ts_table[h->pic_struct]; |
|
|
|
|
|
|
|
for (i = 0; i < num_clock_ts; i++) { |
|
|
|
if (get_bits(gb, 1)) { /* clock_timestamp_flag */ |
|
|
|
if (get_bits(gb, 1)) { /* clock_timestamp_flag */ |
|
|
|
unsigned int full_timestamp_flag; |
|
|
|
|
|
|
|
unsigned int counting_type, cnt_dropped_flag; |
|
|
|
h->ct_type |= 1 << get_bits(gb, 2); |
|
|
|
skip_bits(gb, 1); /* nuit_field_based_flag */ |
|
|
|
skip_bits(gb, 5); /* counting_type */ |
|
|
|
skip_bits(gb, 1); /* nuit_field_based_flag */ |
|
|
|
counting_type = get_bits(gb, 5); /* counting_type */ |
|
|
|
full_timestamp_flag = get_bits(gb, 1); |
|
|
|
skip_bits(gb, 1); /* discontinuity_flag */ |
|
|
|
skip_bits(gb, 1); /* cnt_dropped_flag */ |
|
|
|
skip_bits(gb, 8); /* n_frames */ |
|
|
|
skip_bits(gb, 1); /* discontinuity_flag */ |
|
|
|
cnt_dropped_flag = get_bits(gb, 1); /* cnt_dropped_flag */ |
|
|
|
if (cnt_dropped_flag && counting_type > 1 && counting_type < 7) |
|
|
|
h->tc_dropframe = 1; |
|
|
|
h->tc_frames = get_bits(gb, 8); /* n_frames */ |
|
|
|
if (full_timestamp_flag) { |
|
|
|
skip_bits(gb, 6); /* seconds_value 0..59 */ |
|
|
|
skip_bits(gb, 6); /* minutes_value 0..59 */ |
|
|
|
skip_bits(gb, 5); /* hours_value 0..23 */ |
|
|
|
h->fulltc_received = 1; |
|
|
|
h->tc_seconds = get_bits(gb, 6); /* seconds_value 0..59 */ |
|
|
|
h->tc_minutes = get_bits(gb, 6); /* minutes_value 0..59 */ |
|
|
|
h->tc_hours = get_bits(gb, 5); /* hours_value 0..23 */ |
|
|
|
} else { |
|
|
|
if (get_bits(gb, 1)) { /* seconds_flag */ |
|
|
|
skip_bits(gb, 6); /* seconds_value range 0..59 */ |
|
|
|
if (get_bits(gb, 1)) { /* minutes_flag */ |
|
|
|
skip_bits(gb, 6); /* minutes_value 0..59 */ |
|
|
|
if (get_bits(gb, 1)) /* hours_flag */ |
|
|
|
skip_bits(gb, 5); /* hours_value 0..23 */ |
|
|
|
if (get_bits(gb, 1)) { /* seconds_flag */ |
|
|
|
h->tc_seconds = get_bits(gb, 6); |
|
|
|
if (get_bits(gb, 1)) { /* minutes_flag */ |
|
|
|
h->tc_minutes = get_bits(gb, 6); |
|
|
|
if (get_bits(gb, 1)) /* hours_flag */ |
|
|
|
h->tc_minutes = get_bits(gb, 5); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (sps->time_offset_length > 0) |
|
|
|
skip_bits(gb, |
|
|
|
sps->time_offset_length); /* time_offset */ |
|
|
|
|