MP3Internals.hh
资源名称:NETVIDEO.rar [点击查看]
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:4k
源码类别:
流媒体/Mpeg4/MP4
开发平台:
Visual C++
- /**********
- This library is free software; you can redistribute it and/or modify it under
- the terms of the GNU Lesser General Public License as published by the
- Free Software Foundation; either version 2.1 of the License, or (at your
- option) any later version. (See <http://www.gnu.org/copyleft/lesser.html>.)
- This library is distributed in the hope that it will be useful, but WITHOUT
- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
- more details.
- You should have received a copy of the GNU Lesser General Public License
- along with this library; if not, write to the Free Software Foundation, Inc.,
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- **********/
- // "liveMedia"
- // Copyright (c) 1996-2001 Live Networks, Inc. All rights reserved.
- // MP3 internal implementation details
- // C++ header
- #ifndef _MP3_INTERNALS_HH
- #define _MP3_INTERNALS_HH
- #ifndef _BOOLEAN_HH
- #include "Boolean.hh"
- #endif
- #ifndef _BIT_VECTOR_HH
- #include "BitVector.hh"
- #endif
- typedef struct MP3SideInfo {
- unsigned main_data_begin;
- unsigned private_bits;
- typedef struct gr_info_s {
- int scfsi;
- unsigned part2_3_length;
- unsigned big_values;
- unsigned global_gain;
- unsigned scalefac_compress;
- unsigned window_switching_flag;
- unsigned block_type;
- unsigned mixed_block_flag;
- unsigned table_select[3];
- unsigned region0_count;
- unsigned region1_count;
- unsigned subblock_gain[3];
- unsigned maxband[3];
- unsigned maxbandl;
- unsigned maxb;
- unsigned region1start;
- unsigned region2start;
- unsigned preflag;
- unsigned scalefac_scale;
- unsigned count1table_select;
- float *full_gain[3];
- float *pow2gain;
- } gr_info_s_t;
- struct {
- gr_info_s_t gr[2];
- } ch[2];
- } MP3SideInfo_t;
- #define SBLIMIT 32
- #define MAX_MP3_FRAME_SIZE 2500 /* also big enough for an 'ADU'ized frame */
- class MP3FrameParams {
- public:
- MP3FrameParams();
- ~MP3FrameParams();
- // 4-byte MPEG header:
- unsigned hdr;
- // a buffer that can be used to hold the rest of the frame:
- unsigned char frameBytes[MAX_MP3_FRAME_SIZE];
- // public parameters derived from the header
- void setParamsFromHeader(); // this sets them
- Boolean isMPEG2;
- unsigned layer; // currently only 3 is supported
- unsigned bitrate; // in kbps
- unsigned samplingFreq;
- Boolean isStereo;
- Boolean isFreeFormat;
- unsigned frameSize; // doesn't include the initial 4-byte header
- unsigned sideInfoSize;
- Boolean hasCRC;
- void setBytePointer(unsigned char const* restOfFrame,
- unsigned totNumBytes) {// called during setup
- bv.setup((unsigned char*)restOfFrame, 0, 8*totNumBytes);
- }
- // other, public parameters used when parsing input (perhaps get rid of)
- unsigned oldHdr, firstHdr;
- // Extract (unpack) the side info from the frame into a struct:
- void getSideInfo(MP3SideInfo& si);
- // The bit pointer used for reading data from frame data
- unsigned getBits(unsigned numBits) { return bv.getBits(numBits); }
- unsigned get1Bit() { return bv.get1Bit(); }
- private:
- BitVector bv;
- // other, private parameters derived from the header
- unsigned bitrateIndex;
- unsigned samplingFreqIndex;
- Boolean isMPEG2_5;
- Boolean padding;
- Boolean extension;
- unsigned mode;
- unsigned mode_ext;
- Boolean copyright;
- Boolean original;
- unsigned emphasis;
- unsigned stereo;
- private:
- unsigned computeSideInfoSize();
- };
- unsigned ComputeFrameSize(unsigned bitrate, unsigned samplingFreq,
- Boolean usePadding, Boolean isMPEG2,
- unsigned char layer);
- Boolean GetADUInfoFromMP3Frame(unsigned char const* framePtr,
- unsigned totFrameSize,
- unsigned& hdr, unsigned& frameSize,
- MP3SideInfo& sideInfo, unsigned& sideInfoSize,
- unsigned& backpointer, unsigned& aduSize);
- Boolean ZeroOutMP3SideInfo(unsigned char* framePtr, unsigned totFrameSize,
- unsigned newBackpointer);
- unsigned TranscodeMP3ADU(unsigned char const* fromPtr, unsigned fromSize,
- unsigned toBitrate,
- unsigned char* toPtr, unsigned toMaxSize,
- unsigned& availableBytesForBackpointer);
- // returns the size of the resulting ADU (0 on failure)
- #endif