@@ -1580,6 +1580,11 @@ void File_Ac3::Streams_Fill()
15801580 Fill_SetOptions (Stream_Audio, 0 , " lfeon" , " N NT" );
15811581 }
15821582 }
1583+
1584+ if (dynrngprof)
1585+ Fill (Stream_Audio, 0 , " dynrngprof" , AC3_dynrngprof_Get (dynrngprof));
1586+ if (comprprof)
1587+ Fill (Stream_Audio, 0 , " comprprof" , AC3_dynrngprof_Get (comprprof));
15831588 }
15841589
15851590 // TimeStamp
@@ -4164,6 +4169,8 @@ void File_Ac3::emdf_container()
41644169 Element_Begin1 (" emdf_payload_bytes" );
41654170 switch (emdf_payload_id)
41664171 {
4172+ case 1 : loudness_data (); break ;
4173+ case 2 : programme_information (); break ;
41674174 case 11 : object_audio_metadata_payload (); break ;
41684175 case 14 : joc (); break ;
41694176 default : Skip_BS (emdf_payload_size*8 , " (Unknown)" );
@@ -4270,6 +4277,180 @@ void File_Ac3::emdf_protection()
42704277 Element_End0 ();
42714278}
42724279
4280+ // ---------------------------------------------------------------------------
4281+ void File_Ac3::loudness_data ()
4282+ {
4283+ #if MEDIAINFO_TRACE
4284+
4285+ Element_Begin1 (" loudness_data" );
4286+ auto RemainingBitsBegin = Data_BS_Remain ();
4287+
4288+ int8u version, loudpractyp;
4289+ bool loudcorrdialgat{}, loudrelgate, loudspchgate, loudstrm3se, truepke;
4290+ Get_S1 (2 , version, " version" );
4291+ if (version == 0x3 ) {
4292+ int8u extended_version;
4293+ Get_S1 (4 , extended_version, " extended_version" );
4294+ version += extended_version;
4295+ }
4296+ TEST_SB_SKIP ( " dialchane" );
4297+ Skip_S1 (3 , " dialchan" );
4298+ TEST_SB_END ();
4299+ Get_S1 (4 , loudpractyp, " loudpractyp" );
4300+ if (loudpractyp != 0x0 ) {
4301+ Get_SB (loudcorrdialgat, " loudcorrdialgat" );
4302+ Skip_S1 (1 , " loudcorrtyp" );
4303+ }
4304+ TEST_SB_GET (loudrelgate, " loudrelgate" );
4305+ Skip_S1 (7 , " loudrelgat" );
4306+ TEST_SB_END ();
4307+ TEST_SB_GET (loudspchgate, " loudspchgate" );
4308+ Skip_S1 (7 , " loudspchgat" );
4309+ TEST_SB_END ();
4310+ TEST_SB_GET (loudstrm3se, " loudstrm3se" );
4311+ Skip_S1 (8 , " loudstrm3s" );
4312+ TEST_SB_END ();
4313+ TEST_SB_GET (truepke, " truepke" );
4314+ Skip_S1 (8 , " truepk" );
4315+ TEST_SB_END ();
4316+ TEST_SB_SKIP ( " dmixloudoffste" );
4317+ Skip_S1 (5 , " dmixloudoffst" );
4318+ TEST_SB_END ();
4319+ TEST_SB_SKIP ( " prgmbndye" );
4320+ bool prgmbndy_bit = 0 ;
4321+ while (prgmbndy_bit == 0 ) {
4322+ Get_SB (prgmbndy_bit, " prgmbndy_bit" );
4323+ }
4324+ Skip_SB ( " end_or_start" );
4325+ TEST_SB_SKIP ( " prgmbndyoffste" );
4326+ Skip_S2 (11 , " prgmbndyoffst" );
4327+ TEST_SB_END ();
4328+ TEST_SB_END ();
4329+ Skip_BS (Data_BS_Remain () & 7 , " fill bits = 0" );
4330+
4331+ if (version >= 1 ) {
4332+ bool extloudspchgate;
4333+ if (loudrelgate) {
4334+ TEST_SB_SKIP ( " hrloudrelgate" );
4335+ Skip_S1 (3 , " hrloudrelgat" );
4336+ TEST_SB_END ();
4337+ }
4338+ if (loudspchgate) {
4339+ TEST_SB_SKIP ( " hrloudspchgate" );
4340+ Skip_S1 (3 , " hrloudspchgat" );
4341+ TEST_SB_END ();
4342+ }
4343+ if (loudstrm3se) {
4344+ TEST_SB_SKIP ( " hrloudstrm3se" );
4345+ Skip_S1 (3 , " hrloudstrm3s" );
4346+ TEST_SB_END ();
4347+ }
4348+ if (truepke) {
4349+ TEST_SB_SKIP ( " hrtruepke" );
4350+ Skip_S1 (3 , " hrtruepk" );
4351+ TEST_SB_END ();
4352+ }
4353+ TEST_SB_SKIP ( " hrtruepke" );
4354+ Skip_S1 (3 , " hrtruepk" );
4355+ TEST_SB_END ();
4356+ if (loudcorrdialgat)
4357+ Skip_S1 (3 , " loudcorrdialgattyp" );
4358+ if (loudrelgate == 0 ) {
4359+ TEST_SB_SKIP ( " extloudrelgate" );
4360+ Skip_S2 (11 , " extloudrelgat" );
4361+ TEST_SB_END ();
4362+ }
4363+ if (loudspchgate == 0 ) {
4364+ TEST_SB_GET (extloudspchgate, " extloudspchgate" );
4365+ Skip_S2 (11 , " extloudspchgat" );
4366+ TEST_SB_END ();
4367+ }
4368+ if (loudspchgate || extloudspchgate)
4369+ Skip_S1 (3 , " loudspchdialgattyp" );
4370+ if (loudstrm3se == 0 ) {
4371+ TEST_SB_SKIP ( " extloudstrm3se" );
4372+ Skip_S2 (11 , " extloudstrm3s" );
4373+ TEST_SB_END ();
4374+ }
4375+ if (truepke == 0 ) {
4376+ TEST_SB_SKIP ( " exttruepke" );
4377+ Skip_S2 (11 , " exttruepk" );
4378+ TEST_SB_END ();
4379+ }
4380+ TEST_SB_SKIP ( " maxloudstrm3se" );
4381+ Skip_S2 (11 , " maxloudstrm3s" );
4382+ TEST_SB_END ();
4383+ TEST_SB_SKIP ( " maxtruepke" );
4384+ Skip_S2 (11 , " maxtruepk" );
4385+ TEST_SB_END ();
4386+ TEST_SB_SKIP ( " lrae" );
4387+ Skip_S2 (10 , " lra" );
4388+ Skip_S1 (3 , " lrapractyp" );
4389+ TEST_SB_END ();
4390+ TEST_SB_SKIP ( " loudmntrye" );
4391+ Skip_S2 (11 , " loudmntry" );
4392+ TEST_SB_END ();
4393+ TEST_SB_SKIP ( " maxloudmntrye" );
4394+ Skip_S2 (11 , " maxloudmntry" );
4395+ TEST_SB_END ();
4396+ Skip_BS (Data_BS_Remain () & 7 , " fill bits = 0" );
4397+ }
4398+
4399+ Element_End0 ();
4400+
4401+ #endif // MEDIAINFO_TRACE
4402+ }
4403+
4404+ // ---------------------------------------------------------------------------
4405+ void File_Ac3::programme_information ()
4406+ {
4407+ Element_Begin1 (" programme_information" );
4408+ auto RemainingBitsBegin = Data_BS_Remain ();
4409+ int8u version;
4410+ Get_S1 (2 , version, " version" );
4411+ if (version == 0x3 ) {
4412+ int8u extended_version;
4413+ Get_S1 (4 , extended_version, " extended_version" );
4414+ version += extended_version;
4415+ }
4416+ TEST_SB_SKIP ( " activechane" );
4417+ Skip_S2 (16 , " activechan" );
4418+ TEST_SB_END ();
4419+ bool dmixtype;
4420+ Get_SB (dmixtype, " dmixtype" );
4421+ if (!dmixtype) {
4422+ TEST_SB_SKIP ( " upmixtype" );
4423+ Skip_S1 (4 , " upmixtyp" );
4424+ TEST_SB_END ();
4425+ }
4426+ else {
4427+ Skip_S1 (4 , " dmixtyp" );
4428+ }
4429+ TEST_SB_SKIP ( " preproinfoe" );
4430+ Skip_SB ( " suratten" );
4431+ Skip_SB ( " ph90filt" );
4432+ Skip_SB ( " lfefilt" );
4433+ Skip_S1 (2 , " lfemonlevcod" );
4434+ TEST_SB_END ();
4435+ TEST_SB_SKIP ( " drcprofinfoe" );
4436+ Get_S1 (3 , dynrngprof, " dynrngprof" ); Param_Info1 (AC3_dynrngprof_Get (dynrngprof));
4437+ Get_S1 (3 , comprprof, " comprprof" ); Param_Info1 (AC3_dynrngprof_Get (comprprof));
4438+ TEST_SB_END ();
4439+ TEST_SB_SKIP ( " specprocinfoe" );
4440+ Skip_S1 (3 , " specprocstartf" );
4441+ Skip_S1 (3 , " specprocendf" );
4442+ TEST_SB_END ();
4443+ TEST_SB_SKIP ( " chancplinfoe" );
4444+ Skip_S1 (5 , " chancplstartf" );
4445+ Skip_S1 (5 , " chancplendf" );
4446+ TEST_SB_END ();
4447+ TEST_SB_SKIP ( " enhncrnge" );
4448+ Skip_S1 (2 , " enhncrng" );
4449+ TEST_SB_END ();
4450+ Skip_BS (Data_BS_Remain () & 7 , " fill bits = 0" );
4451+ Element_End0 ();
4452+ }
4453+
42734454// ---------------------------------------------------------------------------
42744455void File_Ac3::object_audio_metadata_payload ()
42754456{
0 commit comments