+static void dump_dovi_conf(void *ctx, const AVPacketSideData *sd)
+{
+ const AVDOVIDecoderConfigurationRecord *dovi =
+ (const AVDOVIDecoderConfigurationRecord *)sd->data;
+
+ av_log(ctx, AV_LOG_INFO, "version: %d.%d, profile: %d, level: %d, "
+ "rpu flag: %d, el flag: %d, bl flag: %d, compatibility id: %d",
+ dovi->dv_version_major, dovi->dv_version_minor,
+ dovi->dv_profile, dovi->dv_level,
+ dovi->rpu_present_flag,
+ dovi->el_present_flag,
+ dovi->bl_present_flag,
+ dovi->dv_bl_signal_compatibility_id);
+}
+
+static void dump_s12m_timecode(void *ctx, const AVStream *st, const AVPacketSideData *sd)
+{
+ const uint32_t *tc = (const uint32_t *)sd->data;
+
+ if ((sd->size != sizeof(uint32_t) * 4) || (tc[0] > 3)) {
+ av_log(ctx, AV_LOG_ERROR, "invalid data\n");
+ return;
+ }
+
+ for (int j = 1; j <= tc[0]; j++) {
+ char tcbuf[AV_TIMECODE_STR_SIZE];
+ av_timecode_make_smpte_tc_string2(tcbuf, st->avg_frame_rate, tc[j], 0, 0);
+ av_log(ctx, AV_LOG_INFO, "timecode - %s%s", tcbuf, j != tc[0] ? ", " : "");
+ }
+}
+
+static void dump_sidedata(void *ctx, const AVStream *st, const char *indent)