@@ -23,7 +23,7 @@ namespace audio_tools {
2323 */
2424
2525class HeaderParserMP3 {
26- // MPEG audio frame header fields parsed from 4 serialized bytes
26+ // / MPEG audio frame header fields parsed from 4 serialized bytes
2727 struct FrameHeader {
2828 static const unsigned int SERIALIZED_SIZE = 4 ;
2929
@@ -59,18 +59,18 @@ class HeaderParserMP3 {
5959 enum SpecialSampleRate { RESERVED = 0 };
6060
6161 // Parsed fields
62- MPEGVersionID AudioVersion = MPEGVersionID::INVALID;
63- LayerID Layer = LayerID::INVALID;
64- bool Protection = false ;
65- uint8_t BitrateIndex = 0 ; // 0..15
66- uint8_t SampleRateIndex = 0 ; // 0..3
67- bool Padding = false ;
68- bool Private = false ;
69- ChannelModeID ChannelMode = ChannelModeID::STEREO;
70- uint8_t ExtentionMode = 0 ; // 0..3
71- bool Copyright = false ;
72- bool Original = false ;
73- EmphasisID Emphasis = EmphasisID::NONE;
62+ MPEGVersionID audioVersion = MPEGVersionID::INVALID;
63+ LayerID layer = LayerID::INVALID;
64+ bool protection = false ;
65+ uint8_t bitrateIndex = 0 ; // 0..15
66+ uint8_t sampleRateIndex = 0 ; // 0..3
67+ bool padding = false ;
68+ bool isPrivate = false ;
69+ ChannelModeID channelMode = ChannelModeID::STEREO;
70+ uint8_t extensionMode = 0 ; // 0..3
71+ bool copyright = false ;
72+ bool original = false ;
73+ EmphasisID emphasis = EmphasisID::NONE;
7474
7575 // Decode 4 bytes into the fields above. Returns false if sync invalid.
7676 static bool decode (const uint8_t * b, FrameHeader& out) {
@@ -81,20 +81,20 @@ class HeaderParserMP3 {
8181 uint8_t b2 = b[2 ];
8282 uint8_t b3 = b[3 ];
8383
84- out.AudioVersion = static_cast <MPEGVersionID>((b1 >> 3 ) & 0x03 );
85- out.Layer = static_cast <LayerID>((b1 >> 1 ) & 0x03 );
86- out.Protection = !(b1 & 0x01 ); // 0 means protected (CRC present)
84+ out.audioVersion = static_cast <MPEGVersionID>((b1 >> 3 ) & 0x03 );
85+ out.layer = static_cast <LayerID>((b1 >> 1 ) & 0x03 );
86+ out.protection = !(b1 & 0x01 ); // 0 means protected (CRC present)
8787
88- out.BitrateIndex = (b2 >> 4 ) & 0x0F ;
89- out.SampleRateIndex = (b2 >> 2 ) & 0x03 ;
90- out.Padding = (b2 >> 1 ) & 0x01 ;
91- out.Private = (b2 & 0x01 ) != 0 ;
88+ out.bitrateIndex = (b2 >> 4 ) & 0x0F ;
89+ out.sampleRateIndex = (b2 >> 2 ) & 0x03 ;
90+ out.padding = (b2 >> 1 ) & 0x01 ;
91+ out.isPrivate = (b2 & 0x01 ) != 0 ;
9292
93- out.ChannelMode = static_cast <ChannelModeID>((b3 >> 6 ) & 0x03 );
94- out.ExtentionMode = (b3 >> 4 ) & 0x03 ;
95- out.Copyright = (b3 >> 3 ) & 0x01 ;
96- out.Original = (b3 >> 2 ) & 0x01 ;
97- out.Emphasis = static_cast <EmphasisID>(b3 & 0x03 );
93+ out.channelMode = static_cast <ChannelModeID>((b3 >> 6 ) & 0x03 );
94+ out.extensionMode = (b3 >> 4 ) & 0x03 ;
95+ out.copyright = (b3 >> 3 ) & 0x01 ;
96+ out.original = (b3 >> 2 ) & 0x01 ;
97+ out.emphasis = static_cast <EmphasisID>(b3 & 0x03 );
9898 return true ;
9999 }
100100
@@ -145,7 +145,7 @@ class HeaderParserMP3 {
145145 {0 , 4 , 8 , 12 , 16 , 20 , 24 , 28 , 32 , 36 , 40 , 44 , 48 , 52 , 56 , -1 },
146146 },
147147 };
148- signed char rate_byte = rateTable[(int )AudioVersion ][(int )Layer ][(int )BitrateIndex ];
148+ signed char rate_byte = rateTable[(int )audioVersion ][(int )layer ][(int )bitrateIndex ];
149149 if (rate_byte == -1 ) {
150150 LOGE (" Unsupported bitrate" );
151151 return 0 ;
@@ -166,14 +166,14 @@ class HeaderParserMP3 {
166166 {44100 , 48000 , 32000 , 0 },
167167 };
168168
169- return rateTable[(int )AudioVersion ][(int )SampleRateIndex ];
169+ return rateTable[(int )audioVersion ][(int )sampleRateIndex ];
170170 }
171171
172172 int getFrameLength () const {
173173 int sample_rate = getSampleRate ();
174174 if (sample_rate == 0 ) return 0 ;
175- int value = (AudioVersion == FrameHeader::MPEGVersionID::MPEG_1) ? 144 : 72 ;
176- return int ((value * getBitRate () / sample_rate) + (Padding ? 1 : 0 ));
175+ int value = (audioVersion == FrameHeader::MPEGVersionID::MPEG_1) ? 144 : 72 ;
176+ return int ((value * getBitRate () / sample_rate) + (padding ? 1 : 0 ));
177177 }
178178 };
179179
@@ -307,7 +307,7 @@ class HeaderParserMP3 {
307307 }
308308
309309 // Check if frame length is reasonable for the given bitrate
310- int expected_frame_size = (temp_header.AudioVersion == FrameHeader::MPEGVersionID::MPEG_1) ?
310+ int expected_frame_size = (temp_header.audioVersion == FrameHeader::MPEGVersionID::MPEG_1) ?
311311 (144 * temp_header.getBitRate () / temp_header.getSampleRate ()) :
312312 (72 * temp_header.getBitRate () / temp_header.getSampleRate ());
313313 if (abs (frame_len - expected_frame_size) > expected_frame_size * 0.1 ) { // Allow 10% variance
@@ -320,8 +320,8 @@ class HeaderParserMP3 {
320320 }
321321 } else {
322322 // Check consistency with first frame (sample rate, version, layer should match in CBR)
323- if (temp_header.AudioVersion != first_header.AudioVersion ||
324- temp_header.Layer != first_header.Layer ||
323+ if (temp_header.audioVersion != first_header.audioVersion ||
324+ temp_header.layer != first_header.layer ||
325325 temp_header.getSampleRate () != first_header.getSampleRate ()) {
326326 LOGD (" Frame parameters inconsistent at position %d" , current_pos);
327327 // This might be VBR, but continue validation
@@ -390,9 +390,9 @@ class HeaderParserMP3 {
390390 LOGI (" Frame size: %d" , getFrameLength ());
391391 LOGI (" Sample rate: %u" , getSampleRate ());
392392 LOGI (" Bit rate: %d" , getBitRate ());
393- LOGI (" Padding: %d" , getFrameHeader ().Padding );
394- LOGI (" Layer: %s (0x%x)" , getLayerStr (), (int )getFrameHeader ().Layer );
395- LOGI (" Version: %s (0x%x)" , getVersionStr (), (int )getFrameHeader ().AudioVersion );
393+ LOGI (" Padding: %d" , getFrameHeader ().padding );
394+ LOGI (" Layer: %s (0x%x)" , getLayerStr (), (int )getFrameHeader ().layer );
395+ LOGI (" Version: %s (0x%x)" , getVersionStr (), (int )getFrameHeader ().audioVersion );
396396 LOGI (" -------------------" );
397397 } else {
398398 LOGI (" MP3 validation: INVALID (frames: %d, consecutive: %d, size: %d)" ,
@@ -416,7 +416,7 @@ class HeaderParserMP3 {
416416 int getChannels () const {
417417 if (!frame_header_valid) return 0 ;
418418 // SINGLE = mono (1 channel), all others = stereo (2 channels)
419- return (header.ChannelMode == FrameHeader::ChannelModeID::SINGLE) ? 1 : 2 ;
419+ return (header.channelMode == FrameHeader::ChannelModeID::SINGLE) ? 1 : 2 ;
420420 }
421421
422422 // / Frame length from mp3 header
@@ -434,26 +434,26 @@ class HeaderParserMP3 {
434434
435435 // / Provides a string representation of the MPEG version
436436 const char * getVersionStr () const {
437- return header.AudioVersion == FrameHeader::MPEGVersionID::MPEG_1 ? " 1"
438- : header.AudioVersion == FrameHeader::MPEGVersionID::MPEG_2 ? " 2"
439- : header.AudioVersion == FrameHeader::MPEGVersionID::MPEG_2_5
437+ return header.audioVersion == FrameHeader::MPEGVersionID::MPEG_1 ? " 1"
438+ : header.audioVersion == FrameHeader::MPEGVersionID::MPEG_2 ? " 2"
439+ : header.audioVersion == FrameHeader::MPEGVersionID::MPEG_2_5
440440 ? " 2.5"
441441 : " INVALID" ;
442442 }
443443
444444 // / Provides a string representation of the MPEG layer
445445 const char * getLayerStr () const {
446- return header.Layer == FrameHeader::LayerID::LAYER_1 ? " 1"
447- : header.Layer == FrameHeader::LayerID::LAYER_2 ? " 2"
448- : header.Layer == FrameHeader::LayerID::LAYER_3 ? " 3"
446+ return header.layer == FrameHeader::LayerID::LAYER_1 ? " 1"
447+ : header.layer == FrameHeader::LayerID::LAYER_2 ? " 2"
448+ : header.layer == FrameHeader::LayerID::LAYER_3 ? " 3"
449449 : " INVALID" ;
450450 }
451451
452452 // / number of samples per mp3 frame
453453 int getSamplesPerFrame () {
454- if (header.Layer != FrameHeader::LayerID::LAYER_3) return 0 ;
454+ if (header.layer != FrameHeader::LayerID::LAYER_3) return 0 ;
455455 // samples for layer 3 are fixed
456- return header.AudioVersion == FrameHeader::MPEGVersionID::MPEG_1 ? 1152 : 576 ;
456+ return header.audioVersion == FrameHeader::MPEGVersionID::MPEG_1 ? 1152 : 576 ;
457457 }
458458
459459 // / playing time per frame in ms
@@ -648,12 +648,12 @@ class HeaderParserMP3 {
648648 };
649649
650650 FrameReason validateFrameHeader (const FrameHeader& header) {
651- if (header.AudioVersion == FrameHeader::MPEGVersionID::INVALID) {
651+ if (header.audioVersion == FrameHeader::MPEGVersionID::INVALID) {
652652 LOGI (" invalid mpeg version" );
653653 return FrameReason::INVALID_MPEG_VERSION;
654654 }
655655
656- if (header.Layer == FrameHeader::LayerID::INVALID) {
656+ if (header.layer == FrameHeader::LayerID::INVALID) {
657657 LOGI (" invalid layer" );
658658 return FrameReason::INVALID_LAYER;
659659 }
@@ -670,8 +670,8 @@ class HeaderParserMP3 {
670670
671671 // For Layer II there are some combinations of bitrate and mode which are
672672 // not allowed
673- if (header.Layer == FrameHeader::LayerID::LAYER_2) {
674- if (header.ChannelMode == FrameHeader::ChannelModeID::SINGLE) {
673+ if (header.layer == FrameHeader::LayerID::LAYER_2) {
674+ if (header.channelMode == FrameHeader::ChannelModeID::SINGLE) {
675675 if (header.getBitRate () >= 224000 ) {
676676 LOGI (" invalid bitrate >224000" );
677677 return FrameReason::INVALID_LAYER_II_BITRATE_AND_MODE;
@@ -689,7 +689,7 @@ class HeaderParserMP3 {
689689 }
690690 }
691691
692- if (header.Emphasis == FrameHeader::EmphasisID::INVALID) {
692+ if (header.emphasis == FrameHeader::EmphasisID::INVALID) {
693693 LOGI (" invalid Emphasis" );
694694 return FrameReason::INVALID_EMPHASIS;
695695 }
0 commit comments