Skip to content

Commit 375d8b8

Browse files
committed
AC3: loudness_data and programme_information
1 parent 54cffc1 commit 375d8b8

File tree

2 files changed

+191
-0
lines changed

2 files changed

+191
-0
lines changed

Source/MediaInfo/Audio/File_Ac3.cpp

Lines changed: 187 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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
//---------------------------------------------------------------------------
42744461
void File_Ac3::object_audio_metadata_payload()
42754462
{

Source/MediaInfo/Audio/File_Ac3.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ private :
7676
void emdf_container();
7777
void emdf_payload_config();
7878
void emdf_protection();
79+
void loudness_data();
80+
void programme_information();
7981
void object_audio_metadata_payload();
8082
void program_assignment();
8183
void joc();
@@ -182,6 +184,8 @@ private :
182184
int8u substreams_Count;
183185
int8u joc_complexity_index_Container;
184186
int8u joc_complexity_index_Stream;
187+
int8u dynrngprof{};
188+
int8u comprprof{};
185189
bool lfeon_Max[8][9];
186190
bool dxc3_Parsed;
187191
bool HD_MajorSync_Parsed;

0 commit comments

Comments
 (0)