@@ -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,186 @@ 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+ auto RemainingBitsEnd = Data_BS_Remain ();
4330+ auto size = RemainingBitsBegin - RemainingBitsEnd;
4331+ Skip_BS ((8 - (size & 7 )) & 7 , " fill bits = 0" );
4332+
4333+ if (version >= 1 ) {
4334+ bool extloudspchgate;
4335+ if (loudrelgate) {
4336+ TEST_SB_SKIP ( " hrloudrelgate" );
4337+ Skip_S1 (3 , " hrloudrelgat" );
4338+ TEST_SB_END ();
4339+ }
4340+ if (loudspchgate) {
4341+ TEST_SB_SKIP ( " hrloudspchgate" );
4342+ Skip_S1 (3 , " hrloudspchgat" );
4343+ TEST_SB_END ();
4344+ }
4345+ if (loudstrm3se) {
4346+ TEST_SB_SKIP ( " hrloudstrm3se" );
4347+ Skip_S1 (3 , " hrloudstrm3s" );
4348+ TEST_SB_END ();
4349+ }
4350+ if (truepke) {
4351+ TEST_SB_SKIP ( " hrtruepke" );
4352+ Skip_S1 (3 , " hrtruepk" );
4353+ TEST_SB_END ();
4354+ }
4355+ TEST_SB_SKIP ( " hrtruepke" );
4356+ Skip_S1 (3 , " hrtruepk" );
4357+ TEST_SB_END ();
4358+ if (loudcorrdialgat)
4359+ Skip_S1 (3 , " loudcorrdialgattyp" );
4360+ if (loudrelgate == 0 ) {
4361+ TEST_SB_SKIP ( " extloudrelgate" );
4362+ Skip_S2 (11 , " extloudrelgat" );
4363+ TEST_SB_END ();
4364+ }
4365+ if (loudspchgate == 0 ) {
4366+ TEST_SB_GET (extloudspchgate, " extloudspchgate" );
4367+ Skip_S2 (11 , " extloudspchgat" );
4368+ TEST_SB_END ();
4369+ }
4370+ if (loudspchgate || extloudspchgate)
4371+ Skip_S1 (3 , " loudspchdialgattyp" );
4372+ if (loudstrm3se == 0 ) {
4373+ TEST_SB_SKIP ( " extloudstrm3se" );
4374+ Skip_S2 (11 , " extloudstrm3s" );
4375+ TEST_SB_END ();
4376+ }
4377+ if (truepke == 0 ) {
4378+ TEST_SB_SKIP ( " exttruepke" );
4379+ Skip_S2 (11 , " exttruepk" );
4380+ TEST_SB_END ();
4381+ }
4382+ TEST_SB_SKIP ( " maxloudstrm3se" );
4383+ Skip_S2 (11 , " maxloudstrm3s" );
4384+ TEST_SB_END ();
4385+ TEST_SB_SKIP ( " maxtruepke" );
4386+ Skip_S2 (11 , " maxtruepk" );
4387+ TEST_SB_END ();
4388+ TEST_SB_SKIP ( " lrae" );
4389+ Skip_S2 (10 , " lra" );
4390+ Skip_S1 (3 , " lrapractyp" );
4391+ TEST_SB_END ();
4392+ TEST_SB_SKIP ( " loudmntrye" );
4393+ Skip_S2 (11 , " loudmntry" );
4394+ TEST_SB_END ();
4395+ TEST_SB_SKIP ( " maxloudmntrye" );
4396+ Skip_S2 (11 , " maxloudmntry" );
4397+ TEST_SB_END ();
4398+ RemainingBitsEnd = Data_BS_Remain ();
4399+ size = RemainingBitsBegin - RemainingBitsEnd;
4400+ Skip_BS ((8 - (size & 7 )) & 7 , " fill bits = 0" );
4401+ }
4402+
4403+ Element_End0 ();
4404+
4405+ #endif // MEDIAINFO_TRACE
4406+ }
4407+
4408+ // ---------------------------------------------------------------------------
4409+ void File_Ac3::programme_information ()
4410+ {
4411+ Element_Begin1 (" programme_information" );
4412+ auto RemainingBitsBegin = Data_BS_Remain ();
4413+ int8u version;
4414+ Get_S1 (2 , version, " version" );
4415+ if (version == 0x3 ) {
4416+ int8u extended_version;
4417+ Get_S1 (4 , extended_version, " extended_version" );
4418+ version += extended_version;
4419+ }
4420+ TEST_SB_SKIP ( " activechane" );
4421+ Skip_S2 (16 , " activechan" );
4422+ TEST_SB_END ();
4423+ bool dmixtype;
4424+ Get_SB (dmixtype, " dmixtype" );
4425+ if (!dmixtype) {
4426+ TEST_SB_SKIP ( " upmixtype" );
4427+ Skip_S1 (4 , " upmixtyp" );
4428+ TEST_SB_END ();
4429+ }
4430+ else {
4431+ Skip_S1 (4 , " dmixtyp" );
4432+ }
4433+ TEST_SB_SKIP ( " preproinfoe" );
4434+ Skip_SB ( " suratten" );
4435+ Skip_SB ( " ph90filt" );
4436+ Skip_SB ( " lfefilt" );
4437+ Skip_S1 (2 , " lfemonlevcod" );
4438+ TEST_SB_END ();
4439+ TEST_SB_SKIP ( " drcprofinfoe" );
4440+ Get_S1 (3 , dynrngprof, " dynrngprof" ); Param_Info1 (AC3_dynrngprof_Get (dynrngprof));
4441+ Get_S1 (3 , comprprof, " comprprof" ); Param_Info1 (AC3_dynrngprof_Get (comprprof));
4442+ TEST_SB_END ();
4443+ TEST_SB_SKIP ( " specprocinfoe" );
4444+ Skip_S1 (3 , " specprocstartf" );
4445+ Skip_S1 (3 , " specprocendf" );
4446+ TEST_SB_END ();
4447+ TEST_SB_SKIP ( " chancplinfoe" );
4448+ Skip_S1 (5 , " chancplstartf" );
4449+ Skip_S1 (5 , " chancplendf" );
4450+ TEST_SB_END ();
4451+ TEST_SB_SKIP ( " enhncrnge" );
4452+ Skip_S1 (2 , " enhncrng" );
4453+ TEST_SB_END ();
4454+ auto RemainingBitsEnd = Data_BS_Remain ();
4455+ auto size = RemainingBitsBegin - RemainingBitsEnd;
4456+ Skip_BS ((8 - (size & 7 )) & 7 , " fill bits = 0" );
4457+ Element_End0 ();
4458+ }
4459+
42734460// ---------------------------------------------------------------------------
42744461void File_Ac3::object_audio_metadata_payload ()
42754462{
0 commit comments