@ -1270,7 +1270,7 @@ static int mkv_write_tracks(AVFormatContext *s)
static int mkv_write_chapters ( AVFormatContext * s )
{
MatroskaMuxContext * mkv = s - > priv_data ;
AVIOContext * pb = s - > pb ;
AVIOContext * dyn_cp , * pb = s - > pb ;
ebml_master chapters , editionentry ;
AVRational scale = { 1 , 1E9 } ;
int i , ret ;
@ -1281,10 +1281,12 @@ static int mkv_write_chapters(AVFormatContext *s)
ret = mkv_add_seekhead_entry ( mkv - > main_seekhead , MATROSKA_ID_CHAPTERS , avio_tell ( pb ) ) ;
if ( ret < 0 ) return ret ;
chapters = start_ebml_master ( pb , MATROSKA_ID_CHAPTERS , 0 ) ;
editionentry = start_ebml_master ( pb , MATROSKA_ID_EDITIONENTRY , 0 ) ;
put_ebml_uint ( pb , MATROSKA_ID_EDITIONFLAGDEFAULT , 1 ) ;
put_ebml_uint ( pb , MATROSKA_ID_EDITIONFLAGHIDDEN , 0 ) ;
ret = start_ebml_master_crc32 ( pb , & dyn_cp , & chapters , MATROSKA_ID_CHAPTERS , 0 ) ;
if ( ret < 0 ) return ret ;
editionentry = start_ebml_master ( dyn_cp , MATROSKA_ID_EDITIONENTRY , 0 ) ;
put_ebml_uint ( dyn_cp , MATROSKA_ID_EDITIONFLAGDEFAULT , 1 ) ;
put_ebml_uint ( dyn_cp , MATROSKA_ID_EDITIONFLAGHIDDEN , 0 ) ;
for ( i = 0 ; i < s - > nb_chapters ; i + + ) {
ebml_master chapteratom , chapterdisplay ;
AVChapter * c = s - > chapters [ i ] ;
@ -1298,22 +1300,22 @@ static int mkv_write_chapters(AVFormatContext *s)
return AVERROR_INVALIDDATA ;
}
chapteratom = start_ebml_master ( pb , MATROSKA_ID_CHAPTERATOM , 0 ) ;
put_ebml_uint ( pb , MATROSKA_ID_CHAPTERUID , c - > id + mkv - > chapter_id_offset ) ;
put_ebml_uint ( pb , MATROSKA_ID_CHAPTERTIMESTART , chapterstart ) ;
put_ebml_uint ( pb , MATROSKA_ID_CHAPTERTIMEEND , chapterend ) ;
put_ebml_uint ( pb , MATROSKA_ID_CHAPTERFLAGHIDDEN , 0 ) ;
put_ebml_uint ( pb , MATROSKA_ID_CHAPTERFLAGENABLED , 1 ) ;
chapteratom = start_ebml_master ( dyn_c p, MATROSKA_ID_CHAPTERATOM , 0 ) ;
put_ebml_uint ( dyn_c p, MATROSKA_ID_CHAPTERUID , c - > id + mkv - > chapter_id_offset ) ;
put_ebml_uint ( dyn_c p, MATROSKA_ID_CHAPTERTIMESTART , chapterstart ) ;
put_ebml_uint ( dyn_c p, MATROSKA_ID_CHAPTERTIMEEND , chapterend ) ;
put_ebml_uint ( dyn_c p, MATROSKA_ID_CHAPTERFLAGHIDDEN , 0 ) ;
put_ebml_uint ( dyn_c p, MATROSKA_ID_CHAPTERFLAGENABLED , 1 ) ;
if ( ( t = av_dict_get ( c - > metadata , " title " , NULL , 0 ) ) ) {
chapterdisplay = start_ebml_master ( pb , MATROSKA_ID_CHAPTERDISPLAY , 0 ) ;
put_ebml_string ( pb , MATROSKA_ID_CHAPSTRING , t - > value ) ;
put_ebml_string ( pb , MATROSKA_ID_CHAPLANG , " und " ) ;
end_ebml_master ( pb , chapterdisplay ) ;
chapterdisplay = start_ebml_master ( dyn_c p, MATROSKA_ID_CHAPTERDISPLAY , 0 ) ;
put_ebml_string ( dyn_c p, MATROSKA_ID_CHAPSTRING , t - > value ) ;
put_ebml_string ( dyn_c p, MATROSKA_ID_CHAPLANG , " und " ) ;
end_ebml_master ( dyn_c p, chapterdisplay ) ;
}
end_ebml_master ( pb , chapteratom ) ;
end_ebml_master ( dyn_c p, chapteratom ) ;
}
end_ebml_master ( pb , editionentry ) ;
end_ebml_master ( pb , chapters ) ;
end_ebml_master ( dyn_c p, editionentry ) ;
end_ebml_master_crc32 ( pb , & dyn_cp , mkv , chapters ) ;
mkv - > wrote_chapters = 1 ;
return 0 ;