Skip to content

Commit c5ed93d

Browse files
committed
AC3: loudness_data and programme_information
1 parent 6547a41 commit c5ed93d

File tree

2 files changed

+185
-0
lines changed

2 files changed

+185
-0
lines changed

Source/MediaInfo/Audio/File_Ac3.cpp

Lines changed: 181 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,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
//---------------------------------------------------------------------------
42744455
void File_Ac3::object_audio_metadata_payload()
42754456
{

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)