#include <MP3Internals.hh>
Collaboration diagram for MP3FrameParams:

Public Member Functions | |
| MP3FrameParams () | |
| ~MP3FrameParams () | |
| void | setParamsFromHeader () |
| void | setBytePointer (unsigned char const *restOfFrame, unsigned totNumBytes) |
| void | getSideInfo (MP3SideInfo &si) |
| unsigned | getBits (unsigned numBits) |
| unsigned | get1Bit () |
Data Fields | |
| unsigned | hdr |
| unsigned char | frameBytes [MAX_MP3_FRAME_SIZE] |
| Boolean | isMPEG2 |
| unsigned | layer |
| unsigned | bitrate |
| unsigned | samplingFreq |
| Boolean | isStereo |
| Boolean | isFreeFormat |
| unsigned | frameSize |
| unsigned | sideInfoSize |
| Boolean | hasCRC |
| unsigned | oldHdr |
| unsigned | firstHdr |
Private Member Functions | |
| unsigned | computeSideInfoSize () |
Private Attributes | |
| BitVector | bv |
| unsigned | bitrateIndex |
| unsigned | samplingFreqIndex |
| Boolean | isMPEG2_5 |
| Boolean | padding |
| Boolean | extension |
| unsigned | mode |
| unsigned | mode_ext |
| Boolean | copyright |
| Boolean | original |
| unsigned | emphasis |
| unsigned | stereo |
Definition at line 66 of file MP3Internals.hh.
| MP3FrameParams::MP3FrameParams | ( | ) |
Definition at line 99 of file MP3Internals.cpp.
References False, firstHdr, i_slen2, n_slen2, oldHdr, and True.
00100 : bv(frameBytes, 0, sizeof frameBytes) /* by default */ { 00101 oldHdr = firstHdr = 0; 00102 00103 static Boolean doneInit = False; 00104 if (doneInit) return; 00105 00106 int i,j,k,l; 00107 00108 for (i=0;i<5;i++) { 00109 for (j=0;j<6;j++) { 00110 for (k=0;k<6;k++) { 00111 int n = k + j * 6 + i * 36; 00112 i_slen2[n] = i|(j<<3)|(k<<6)|(3<<12); 00113 } 00114 } 00115 } 00116 for (i=0;i<4;i++) { 00117 for (j=0;j<4;j++) { 00118 for (k=0;k<4;k++) { 00119 int n = k + j * 4 + i * 16; 00120 i_slen2[n+180] = i|(j<<3)|(k<<6)|(4<<12); 00121 } 00122 } 00123 } 00124 for (i=0;i<4;i++) { 00125 for (j=0;j<3;j++) { 00126 int n = j + i * 3; 00127 i_slen2[n+244] = i|(j<<3) | (5<<12); 00128 n_slen2[n+500] = i|(j<<3) | (2<<12) | (1<<15); 00129 } 00130 } 00131 00132 for (i=0;i<5;i++) { 00133 for (j=0;j<5;j++) { 00134 for (k=0;k<4;k++) { 00135 for (l=0;l<4;l++) { 00136 int n = l + k * 4 + j * 16 + i * 80; 00137 n_slen2[n] = i|(j<<3)|(k<<6)|(l<<9)|(0<<12); 00138 } 00139 } 00140 } 00141 } 00142 for (i=0;i<5;i++) { 00143 for (j=0;j<5;j++) { 00144 for (k=0;k<4;k++) { 00145 int n = k + j * 4 + i * 20; 00146 n_slen2[n+400] = i|(j<<3)|(k<<6)|(1<<12); 00147 } 00148 } 00149 } 00150 doneInit = True; 00151 }
| MP3FrameParams::~MP3FrameParams | ( | ) |
| void MP3FrameParams::setParamsFromHeader | ( | ) |
Definition at line 156 of file MP3Internals.cpp.
References bitrate, bitrateIndex, ComputeFrameSize(), computeSideInfoSize(), copyright, emphasis, extension, frameSize, hasCRC, hdr, isFreeFormat, isMPEG2, isMPEG2_5, isStereo, layer, live_freqs, live_tabsel, mode, mode_ext, MPG_MD_MONO, original, padding, samplingFreq, samplingFreqIndex, sideInfoSize, and stereo.
Referenced by MP3StreamState::findNextFrame(), GetADUInfoFromMP3Frame(), MPEG1or2AudioStreamParser::parse(), TranscodeMP3ADU(), and ZeroOutMP3SideInfo().
00156 { 00157 if (hdr & (1<<20)) { 00158 isMPEG2 = (hdr & (1<<19)) ? 0x0 : 0x1; 00159 isMPEG2_5 = 0; 00160 } 00161 else { 00162 isMPEG2 = 1; 00163 isMPEG2_5 = 1; 00164 } 00165 00166 layer = 4-((hdr>>17)&3); 00167 if (layer == 4) layer = 3; // layer==4 is not allowed 00168 bitrateIndex = ((hdr>>12)&0xf); 00169 00170 if (isMPEG2_5) { 00171 samplingFreqIndex = ((hdr>>10)&0x3) + 6; 00172 } else { 00173 samplingFreqIndex = ((hdr>>10)&0x3) + (isMPEG2*3); 00174 } 00175 00176 hasCRC = (hdr & 0x10000) == 0; 00177 00178 padding = ((hdr>>9)&0x1); 00179 extension = ((hdr>>8)&0x1); 00180 mode = ((hdr>>6)&0x3); 00181 mode_ext = ((hdr>>4)&0x3); 00182 copyright = ((hdr>>3)&0x1); 00183 original = ((hdr>>2)&0x1); 00184 emphasis = hdr & 0x3; 00185 00186 stereo = (mode == MPG_MD_MONO) ? 1 : 2; 00187 00188 if (((hdr>>10)&0x3) == 0x3) { 00189 #ifdef DEBUG_ERRORS 00190 fprintf(stderr,"Stream error - hdr: 0x%08x\n", hdr); 00191 #endif 00192 } 00193 00194 bitrate = live_tabsel[isMPEG2][layer-1][bitrateIndex]; 00195 samplingFreq = live_freqs[samplingFreqIndex]; 00196 isStereo = (stereo > 1); 00197 isFreeFormat = (bitrateIndex == 0); 00198 frameSize 00199 = ComputeFrameSize(bitrate, samplingFreq, padding, isMPEG2, layer); 00200 sideInfoSize = computeSideInfoSize(); 00201 }
| void MP3FrameParams::setBytePointer | ( | unsigned char const * | restOfFrame, | |
| unsigned | totNumBytes | |||
| ) | [inline] |
Definition at line 89 of file MP3Internals.hh.
References bv, and BitVector::setup().
Referenced by MP3StreamState::findNextFrame(), GetADUInfoFromMP3Frame(), and ZeroOutMP3SideInfo().
00090 {// called during setup 00091 bv.setup((unsigned char*)restOfFrame, 0, 8*totNumBytes); 00092 }
| void MP3FrameParams::getSideInfo | ( | MP3SideInfo & | si | ) |
Definition at line 514 of file MP3Internals.cpp.
References getBits(), getSideInfo1(), getSideInfo2(), hasCRC, isMPEG2, mode, mode_ext, MPG_MD_JOINT_STEREO, samplingFreqIndex, and stereo.
Referenced by GetADUInfoFromMP3Frame(), and ZeroOutMP3SideInfo().
00514 { 00515 // First skip over the CRC if present: 00516 if (hasCRC) getBits(16); 00517 00518 int single = -1; 00519 int ms_stereo; 00520 int sfreq = samplingFreqIndex; 00521 00522 if (stereo == 1) { 00523 single = 0; 00524 } 00525 00526 ms_stereo = (mode == MPG_MD_JOINT_STEREO) && (mode_ext & 0x2); 00527 00528 if (isMPEG2) { 00529 getSideInfo2(*this, si, stereo, ms_stereo, sfreq, single); 00530 } else { 00531 getSideInfo1(*this, si, stereo, ms_stereo, sfreq, single); 00532 } 00533 }
| unsigned MP3FrameParams::getBits | ( | unsigned | numBits | ) | [inline] |
Definition at line 101 of file MP3Internals.hh.
References bv, and BitVector::getBits().
Referenced by getSideInfo(), getSideInfo1(), and getSideInfo2().
| unsigned MP3FrameParams::get1Bit | ( | ) | [inline] |
Definition at line 102 of file MP3Internals.hh.
References bv, and BitVector::get1Bit().
Referenced by getSideInfo1(), and getSideInfo2().
| unsigned MP3FrameParams::computeSideInfoSize | ( | ) | [private] |
Definition at line 203 of file MP3Internals.cpp.
References hasCRC, isMPEG2, isStereo, and size.
Referenced by setParamsFromHeader().
00203 { 00204 unsigned size; 00205 00206 if (isMPEG2) { 00207 size = isStereo ? 17 : 9; 00208 } else { 00209 size = isStereo ? 32 : 17; 00210 } 00211 00212 if (hasCRC) { 00213 size += 2; 00214 } 00215 00216 return size; 00217 }
| unsigned MP3FrameParams::hdr |
Definition at line 72 of file MP3Internals.hh.
Referenced by MP3StreamState::findNextFrame(), MP3StreamState::findNextHeader(), GetADUInfoFromMP3Frame(), MPEG1or2AudioStreamParser::parse(), MP3StreamState::readFrame(), setParamsFromHeader(), TranscodeMP3ADU(), and ZeroOutMP3SideInfo().
| unsigned char MP3FrameParams::frameBytes[MAX_MP3_FRAME_SIZE] |
Definition at line 79 of file MP3Internals.hh.
Referenced by assignADUBackpointer(), computeSideInfoSize(), MP3StreamState::currentFramePlayTime(), getSideInfo(), PutMP3SideInfoIntoFrame(), setParamsFromHeader(), and TranscodeMP3ADU().
| unsigned MP3FrameParams::layer |
Definition at line 80 of file MP3Internals.hh.
Referenced by GetADUInfoFromMP3Frame(), and setParamsFromHeader().
| unsigned MP3FrameParams::bitrate |
| unsigned MP3FrameParams::samplingFreq |
Definition at line 82 of file MP3Internals.hh.
Referenced by MP3StreamState::currentFramePlayTime(), and setParamsFromHeader().
Definition at line 83 of file MP3Internals.hh.
Referenced by computeSideInfoSize(), PutMP3SideInfoIntoFrame(), and setParamsFromHeader().
| unsigned MP3FrameParams::frameSize |
Definition at line 85 of file MP3Internals.hh.
Referenced by assignADUBackpointer(), MP3StreamState::checkForXingHeader(), MP3StreamState::filePlayTime(), GetADUInfoFromMP3Frame(), MPEG1or2AudioStreamParser::parse(), MP3StreamState::readFrame(), setParamsFromHeader(), and TranscodeMP3ADU().
| unsigned MP3FrameParams::sideInfoSize |
Definition at line 86 of file MP3Internals.hh.
Referenced by assignADUBackpointer(), MP3StreamState::checkForXingHeader(), GetADUInfoFromMP3Frame(), PutMP3SideInfoIntoFrame(), setParamsFromHeader(), TranscodeMP3ADU(), and ZeroOutMP3SideInfo().
Definition at line 87 of file MP3Internals.hh.
Referenced by computeSideInfoSize(), getSideInfo(), PutMP3SideInfoIntoFrame(), and setParamsFromHeader().
| unsigned MP3FrameParams::oldHdr |
Definition at line 95 of file MP3Internals.hh.
Referenced by MP3StreamState::findNextFrame(), and MP3FrameParams().
| unsigned MP3FrameParams::firstHdr |
Definition at line 95 of file MP3Internals.hh.
Referenced by MP3StreamState::findNextFrame(), and MP3FrameParams().
BitVector MP3FrameParams::bv [private] |
Definition at line 105 of file MP3Internals.hh.
Referenced by get1Bit(), getBits(), PutMP3SideInfoIntoFrame(), putSideInfo1(), putSideInfo2(), and setBytePointer().
unsigned MP3FrameParams::bitrateIndex [private] |
unsigned MP3FrameParams::samplingFreqIndex [private] |
Definition at line 109 of file MP3Internals.hh.
Referenced by getSideInfo(), and setParamsFromHeader().
Boolean MP3FrameParams::isMPEG2_5 [private] |
Boolean MP3FrameParams::padding [private] |
Boolean MP3FrameParams::extension [private] |
unsigned MP3FrameParams::mode [private] |
Definition at line 113 of file MP3Internals.hh.
Referenced by getSideInfo(), and setParamsFromHeader().
unsigned MP3FrameParams::mode_ext [private] |
Definition at line 114 of file MP3Internals.hh.
Referenced by getSideInfo(), and setParamsFromHeader().
Boolean MP3FrameParams::copyright [private] |
Boolean MP3FrameParams::original [private] |
unsigned MP3FrameParams::emphasis [private] |
unsigned MP3FrameParams::stereo [private] |
Definition at line 118 of file MP3Internals.hh.
Referenced by getSideInfo(), putSideInfo1(), putSideInfo2(), and setParamsFromHeader().
1.5.2