Skip to content

Commit

Permalink
inspect av1 timecode metadata
Browse files Browse the repository at this point in the history
  • Loading branch information
rbouqueau committed Dec 22, 2023
1 parent 128ca64 commit 8684dfb
Showing 1 changed file with 52 additions and 46 deletions.
98 changes: 52 additions & 46 deletions src/filters/inspect.c
Expand Up @@ -601,58 +601,61 @@ static u32 dump_udta_m2v(FILE *dump, u8 *data, u32 sei_size)
return 0;
}

static void dump_time_code(FILE *dump, GF_BitStream *bs)
static void dump_time_code(FILE *dump, GF_BitStream *bs, int i)
{
Bool full_timestamp_flag, discontinuity_flag, cnt_dropped_flag;
u8 counting_type;
u32 n_frames;
u32 time_offset_length, time_offset_value;
u32 seconds = 0, minutes = 0, hours = 0;

counting_type = gf_bs_read_int(bs, 5);
inspect_printf(dump, " counting_type_%d=\"%d\"", i, counting_type);
full_timestamp_flag = gf_bs_read_int(bs, 1);
inspect_printf(dump, " full_timestamp_flag_%d=\"%d\"", i, full_timestamp_flag);
discontinuity_flag = gf_bs_read_int(bs, 1);
inspect_printf(dump, " discontinuity_flag_%d=\"%d\"", i, discontinuity_flag);
cnt_dropped_flag = gf_bs_read_int(bs, 1);
inspect_printf(dump, " cnt_dropped_flag_%d=\"%d\"", i, cnt_dropped_flag);
n_frames = gf_bs_read_int(bs, 9);
if (full_timestamp_flag) {
seconds = gf_bs_read_int(bs, 6);
minutes = gf_bs_read_int(bs, 6);
hours = gf_bs_read_int(bs, 5);
} else {
Bool seconds_flag = gf_bs_read_int(bs, 1);
if (seconds_flag) {
seconds = gf_bs_read_int(bs, 6);
Bool minutes_flag = gf_bs_read_int(bs, 1);
if (minutes_flag) {
minutes = gf_bs_read_int(bs, 6);
Bool hours_flag = gf_bs_read_int(bs, 1);
if (hours_flag) {
hours = gf_bs_read_int(bs, 5);
}
}
}
}
inspect_printf(dump, " time_code_%d=\"%02d:%02d:%02d:%02d\"", i, hours, minutes, seconds, n_frames);
time_offset_length = gf_bs_read_int(bs, 5);
inspect_printf(dump, " time_offset_length_%d=\"%d\"", i, time_offset_length);
time_offset_value = 0;
if (time_offset_length > 0) {
time_offset_value = gf_bs_read_int(bs, time_offset_length);
}
inspect_printf(dump, " time_offset_value_%d=\"%d\"", i, time_offset_value);
}

static void dump_time_code_hevc(FILE *dump, GF_BitStream *bs)
{
u32 seconds = 0;
u32 minutes = 0;
u32 hours = 0;
u8 num_clock_ts = gf_bs_read_int(bs, 2);
inspect_printf(dump, " num_clock_ts=\"%d\"", num_clock_ts);
for (int i = 0; i < num_clock_ts; i++) {
Bool clock_timestamp_flag = gf_bs_read_int(bs, 1);
if (clock_timestamp_flag) {
Bool units_field_based_flag, full_timestamp_flag, discontinuity_flag, cnt_dropped_flag;
u8 counting_type;
u32 n_frames;
u32 time_offset_length, time_offset_value;

units_field_based_flag = gf_bs_read_int(bs, 1);
Bool units_field_based_flag = gf_bs_read_int(bs, 1);
inspect_printf(dump, " units_field_based_flag_%d=\"%d\"", i, units_field_based_flag);
counting_type = gf_bs_read_int(bs, 5);
inspect_printf(dump, " counting_type_%d=\"%d\"", i, counting_type);
full_timestamp_flag = gf_bs_read_int(bs, 1);
inspect_printf(dump, " full_timestamp_flag_%d=\"%d\"", i, full_timestamp_flag);
discontinuity_flag = gf_bs_read_int(bs, 1);
inspect_printf(dump, " discontinuity_flag_%d=\"%d\"", i, discontinuity_flag);
cnt_dropped_flag = gf_bs_read_int(bs, 1);
inspect_printf(dump, " cnt_dropped_flag_%d=\"%d\"", i, cnt_dropped_flag);
n_frames = gf_bs_read_int(bs, 9);
if (full_timestamp_flag) {
seconds = gf_bs_read_int(bs, 6);
minutes = gf_bs_read_int(bs, 6);
hours = gf_bs_read_int(bs, 5);
} else {
Bool seconds_flag = gf_bs_read_int(bs, 1);
if (seconds_flag) {
seconds = gf_bs_read_int(bs, 6);
Bool minutes_flag = gf_bs_read_int(bs, 1);
if (minutes_flag) {
minutes = gf_bs_read_int(bs, 6);
Bool hours_flag = gf_bs_read_int(bs, 1);
if (hours_flag) {
hours = gf_bs_read_int(bs, 5);
}
}
}
}
inspect_printf(dump, " time_code_%d=\"%02d:%02d:%02d:%02d\"", i, hours, minutes, seconds, n_frames);
time_offset_length = gf_bs_read_int(bs, 5);
inspect_printf(dump, " time_offset_length_%d=\"%d\"", i, time_offset_length);
time_offset_value = 0;
if (time_offset_length > 0) {
time_offset_value = gf_bs_read_int(bs, time_offset_length);
}
inspect_printf(dump, " time_offset_value_%d=\"%d\"", i, time_offset_value);
dump_time_code(dump, bs, i);
}
}
}
Expand Down Expand Up @@ -759,7 +762,7 @@ static void dump_sei(FILE *dump, GF_BitStream *bs, AVCState *avc, HEVCState *hev
} else if (sei_type == 1 && avc) {
dump_avc_pic_timing(dump, bs, avc);
} else if (sei_type == 136) {
dump_time_code(dump, bs);
dump_time_code_hevc(dump, bs);
} else if (sei_type == 4) {
i = dump_t35(dump, bs, sei_size);
while (i < sei_size) {
Expand Down Expand Up @@ -1589,6 +1592,9 @@ static u64 gf_inspect_dump_obu_internal(FILE *dump, AV1State *av1, u8 *obu_ptr,
u32 metadata_type = (u32)gf_av1_leb128_read(bs, NULL);
DUMP_OBU_INT2("metadata_type", metadata_type);
switch (metadata_type) {
case OBU_METADATA_TYPE_TIMECODE:
dump_time_code(dump, bs, 0);
break;
case OBU_METADATA_TYPE_ITUT_T35:
dump_t35(dump, bs, 0);
break;
Expand Down

0 comments on commit 8684dfb

Please sign in to comment.