@@ -789,6 +789,7 @@ namespace Elements
789
789
const int64u moov_trak_mdia_minf_stbl_stsd_mebx_keys=0x6B657973 ;
790
790
const int64u moov_trak_mdia_minf_stbl_stsd_mebx_keys_PHDR=0x50484452 ;
791
791
const int64u moov_trak_mdia_minf_stbl_stsd_mebx_keys_PHDR_keyd=0x6B657964 ;
792
+ const int64u moov_trak_mdia_minf_stbl_stsd_mett=0x6D657474 ;
792
793
const int64u moov_trak_mdia_minf_stbl_stsd_mp4a=0x6D703461 ;
793
794
const int64u moov_trak_mdia_minf_stbl_stsd_mp4s=0x6D703473 ;
794
795
const int64u moov_trak_mdia_minf_stbl_stsd_mp4v=0x6D703476 ;
@@ -5724,8 +5725,44 @@ void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_tx3g_ftab()
5724
5725
void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxx ()
5725
5726
{
5726
5727
// Parsing
5727
- Skip_B6 ( " Reserved" );
5728
- Skip_B2 ( " Data reference index" );
5728
+ string CodecIDAddition;
5729
+ if (StreamKind_Last==Stream_Max)
5730
+ {
5731
+ switch (Element_Code)
5732
+ {
5733
+ case Elements::moov_trak_mdia_minf_stbl_stsd_mett:
5734
+ {
5735
+ string mime_format;
5736
+ Element_Name (" Metadata" );
5737
+ Skip_String (SizeUpTo0 (), " content_encoding" );
5738
+ Skip_B1 ( " zero" );
5739
+ Get_String (SizeUpTo0 (), CodecIDAddition, " mime_format" );
5740
+ Skip_B1 ( " zero" );
5741
+ break ;
5742
+ }
5743
+ default :
5744
+ {
5745
+ auto NotAscii=false ;
5746
+ if (Element_Size>=6 )
5747
+ {
5748
+ for (auto Current=Buffer+Buffer_Offset, End=Current+6 ; Current<End; Current++)
5749
+ {
5750
+ if (!IsAsciiLower (*Current) && !IsAsciiUpper (*Current))
5751
+ NotAscii=true ;
5752
+ }
5753
+ }
5754
+ if (Element_Size<6 || !NotAscii)
5755
+ {
5756
+ Skip_XX (Element_Size, " (Unknown)" );
5757
+ }
5758
+ }
5759
+ }
5760
+ }
5761
+ if (!Element_Offset)
5762
+ {
5763
+ Skip_B6 ( " Reserved" );
5764
+ Skip_B2 ( " Data reference index" );
5765
+ }
5729
5766
5730
5767
// Test of buggy files
5731
5768
if (StreamKind_Last==Stream_Other && Element_Code==0x61766331 ) // "avc1"
@@ -5767,7 +5804,7 @@ void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxx()
5767
5804
case Stream_Video : moov_trak_mdia_minf_stbl_stsd_xxxxVideo (); break ;
5768
5805
case Stream_Audio : moov_trak_mdia_minf_stbl_stsd_xxxxSound (); break ;
5769
5806
case Stream_Text : moov_trak_mdia_minf_stbl_stsd_xxxxText (); break ;
5770
- default : moov_trak_mdia_minf_stbl_stsd_xxxxOthers ();
5807
+ default : moov_trak_mdia_minf_stbl_stsd_xxxxOthers (CodecIDAddition );
5771
5808
}
5772
5809
5773
5810
if (Element_IsWaitingForMoreData ())
@@ -6633,7 +6670,7 @@ void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxxVideo()
6633
6670
}
6634
6671
6635
6672
// ---------------------------------------------------------------------------
6636
- void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxxOthers ()
6673
+ void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxxOthers (const string& CodecIDAddition )
6637
6674
{
6638
6675
switch (Element_Code)
6639
6676
{
@@ -6646,6 +6683,11 @@ void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxxOthers()
6646
6683
if (Element_Code)
6647
6684
{
6648
6685
CodecID_Fill (Ztring ().From_CC4 ((int32u)Element_Code), StreamKind_Last, StreamPos_Last, InfoCodecID_Format_Mpeg4);
6686
+ if (!CodecIDAddition.empty ())
6687
+ {
6688
+ auto CodecID=Retrieve (Stream_Other, StreamPos_Last, Other_CodecID).To_UTF8 ();
6689
+ Fill (Stream_Other, StreamPos_Last, Other_CodecID, CodecID+' -' +CodecIDAddition, true , true );
6690
+ }
6649
6691
}
6650
6692
6651
6693
FILLING_BEGIN ();
0 commit comments