@ -244,6 +244,11 @@ static const char *get_frame_side_data_type(const void *data)
return av_x_if_null ( av_frame_side_data_name ( sd - > type ) , " unknown " ) ;
}
static const char * get_raw_string_type ( const void * data )
{
return data ;
}
static struct section sections [ ] = {
[ SECTION_ID_CHAPTERS ] = { SECTION_ID_CHAPTERS , " chapters " , SECTION_FLAG_IS_ARRAY , { SECTION_ID_CHAPTER , - 1 } } ,
[ SECTION_ID_CHAPTER ] = { SECTION_ID_CHAPTER , " chapter " , 0 , { SECTION_ID_CHAPTER_TAGS , - 1 } } ,
@ -258,10 +263,10 @@ static struct section sections[] = {
[ SECTION_ID_FRAME_SIDE_DATA ] = { SECTION_ID_FRAME_SIDE_DATA , " side_data " , SECTION_FLAG_HAS_VARIABLE_FIELDS | SECTION_FLAG_HAS_TYPE , { SECTION_ID_FRAME_SIDE_DATA_TIMECODE_LIST , SECTION_ID_FRAME_SIDE_DATA_COMPONENT_LIST , - 1 } , . unique_name = " frame_side_data " , . element_name = " side_datum " , . get_type = get_frame_side_data_type } ,
[ SECTION_ID_FRAME_SIDE_DATA_TIMECODE_LIST ] = { SECTION_ID_FRAME_SIDE_DATA_TIMECODE_LIST , " timecodes " , SECTION_FLAG_IS_ARRAY , { SECTION_ID_FRAME_SIDE_DATA_TIMECODE , - 1 } } ,
[ SECTION_ID_FRAME_SIDE_DATA_TIMECODE ] = { SECTION_ID_FRAME_SIDE_DATA_TIMECODE , " timecode " , 0 , { - 1 } } ,
[ SECTION_ID_FRAME_SIDE_DATA_COMPONENT_LIST ] = { SECTION_ID_FRAME_SIDE_DATA_COMPONENT_LIST , " components " , SECTION_FLAG_IS_ARRAY , { SECTION_ID_FRAME_SIDE_DATA_COMPONENT , - 1 } } ,
[ SECTION_ID_FRAME_SIDE_DATA_COMPONENT ] = { SECTION_ID_FRAME_SIDE_DATA_COMPONENT , " component " , 0 , { SECTION_ID_FRAME_SIDE_DATA_PIECE_LIST , - 1 } } ,
[ SECTION_ID_FRAME_SIDE_DATA_PIECE_LIST ] = { SECTION_ID_FRAME_SIDE_DATA_PIECE_LIST , " pieces " , SECTION_FLAG_IS_ARRAY , { SECTION_ID_FRAME_SIDE_DATA_PIECE , - 1 } } ,
[ SECTION_ID_FRAME_SIDE_DATA_PIECE ] = { SECTION_ID_FRAME_SIDE_DATA_PIECE , " piece " , 0 , { - 1 } } ,
[ SECTION_ID_FRAME_SIDE_DATA_COMPONENT_LIST ] = { SECTION_ID_FRAME_SIDE_DATA_COMPONENT_LIST , " components " , SECTION_FLAG_IS_ARRAY , { SECTION_ID_FRAME_SIDE_DATA_COMPONENT , - 1 } , . element_name = " component " , . unique_name = " frame_side_data_components " } ,
[ SECTION_ID_FRAME_SIDE_DATA_COMPONENT ] = { SECTION_ID_FRAME_SIDE_DATA_COMPONENT , " component " , SECTION_FLAG_HAS_VARIABLE_FIELDS | SECTION_FLAG_HAS_TYPE , { SECTION_ID_FRAME_SIDE_DATA_PIECE_LIST , - 1 } , . unique_name = " frame_side_data_component " , . element_name = " component_entry " , . get_type = get_raw_string_type } ,
[ SECTION_ID_FRAME_SIDE_DATA_PIECE_LIST ] = { SECTION_ID_FRAME_SIDE_DATA_PIECE_LIST , " pieces " , SECTION_FLAG_IS_ARRAY , { SECTION_ID_FRAME_SIDE_DATA_PIECE , - 1 } , . element_name = " piece " } ,
[ SECTION_ID_FRAME_SIDE_DATA_PIECE ] = { SECTION_ID_FRAME_SIDE_DATA_PIECE , " piece " , SECTION_FLAG_HAS_VARIABLE_FIELDS | SECTION_FLAG_HAS_TYPE , { - 1 } , . element_name = " piece_entry " , . get_type = get_raw_string_type } ,
[ SECTION_ID_FRAME_LOGS ] = { SECTION_ID_FRAME_LOGS , " logs " , SECTION_FLAG_IS_ARRAY , { SECTION_ID_FRAME_LOG , - 1 } } ,
[ SECTION_ID_FRAME_LOG ] = { SECTION_ID_FRAME_LOG , " log " , 0 , { - 1 } , } ,
[ SECTION_ID_LIBRARY_VERSIONS ] = { SECTION_ID_LIBRARY_VERSIONS , " library_versions " , SECTION_FLAG_IS_ARRAY , { SECTION_ID_LIBRARY_VERSION , - 1 } } ,
@ -2063,14 +2068,29 @@ static void print_dovi_metadata(WriterContext *w, const AVDOVIMetadata *dovi)
for ( int c = 0 ; c < 3 ; c + + ) {
const AVDOVIReshapingCurve * curve = & mapping - > curves [ c ] ;
writer_print_section_header ( w , NULL , SECTION_ID_FRAME_SIDE_DATA_COMPONENT ) ;
writer_print_section_header ( w , " Reshaping curve " , SECTION_ID_FRAME_SIDE_DATA_COMPONENT ) ;
print_list_fmt ( " pivots " , " % " PRIu16 , curve - > num_pivots , 1 , curve - > pivots [ idx ] ) ;
writer_print_section_header ( w , NULL , SECTION_ID_FRAME_SIDE_DATA_PIECE_LIST ) ;
for ( int i = 0 ; i < curve - > num_pivots - 1 ; i + + ) {
AVBPrint piece_buf ;
av_bprint_init ( & piece_buf , 0 , AV_BPRINT_SIZE_AUTOMATIC ) ;
switch ( curve - > mapping_idc [ i ] ) {
case AV_DOVI_MAPPING_POLYNOMIAL :
av_bprintf ( & piece_buf , " Polynomial " ) ;
break ;
case AV_DOVI_MAPPING_MMR :
av_bprintf ( & piece_buf , " MMR " ) ;
break ;
default :
av_bprintf ( & piece_buf , " Unknown " ) ;
break ;
}
av_bprintf ( & piece_buf , " mapping " ) ;
writer_print_section_header ( w , NULL , SECTION_ID_FRAME_SIDE_DATA_PIECE ) ;
writer_print_section_header ( w , piece_buf . str , SECTION_ID_FRAME_SIDE_DATA_PIECE ) ;
print_int ( " mapping_idc " , curve - > mapping_idc [ i ] ) ;
switch ( curve - > mapping_idc [ i ] ) {
case AV_DOVI_MAPPING_POLYNOMIAL :