⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gsmamr_encoder_wrapper.h

📁 实现3GPP的GSM中AMR语音的CODECS。
💻 H
字号:
/* ------------------------------------------------------------------ * Copyright (C) 2008 PacketVideo * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * *      http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. * See the License for the specific language governing permissions * and limitations under the License. * ------------------------------------------------------------------- *//****************************************************************************************Portions of this file are derived from the following 3GPP standard:    3GPP TS 26.073    ANSI-C code for the Adaptive Multi-Rate (AMR) speech codec    Available from http://www.3gpp.org(C) 2004, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TTA, TTC)Permission to distribute, modify and use this file under the standard licenseterms listed above has been obtained from the copyright holder.****************************************************************************************/#ifndef __GSMAMR_ENCODER_WRAPPER_H__#define __GSMAMR_ENCODER_WRAPPER_H__//----------------------------------------------------------------------------// INCLUDES//----------------------------------------------------------------------------#include "oscl_base.h"class TInputAudioStream{    public:        // Pointer to buffer containing the audio samples.        // The application is required to allocate this buffer.        uint8* iSampleBuffer;        // Number of samples in bytes contained in iSampleBuffer        int32 iSampleLength;        // Mode of operation (the same as bit rate)        // For example, "GSM_AMR_4_75" (for 4.75 kbps) for GSM-AMR        int32 iMode;        // Start time when samples were taken        uint32 iStartTime;        // End time when samples were taken        uint32 iStopTime;};class TOutputAudioStream{    public:        // Pointer to buffer containing encoded audio samples        uint8* iBitStreamBuffer;        // Number of sample frames encoded and are contained in the buffer        int32 iNumSampleFrames;        // Size in bytes of each encoded sample frame;        // This variable may point to an array if the sample frame sizes are        // variable. For example:        //    iSampleFrameSize[0] = 23   (frame size of frame #1)        //    iSampleFrameSize[1] = 12   (frame size of frame #2)        //    . . .        //    iSampleFrameSize[iNumSampleFrames] = 10 (frame size of last frame)        int32* iSampleFrameSize;        // Start time of the encoded samples contained in the bit stream buffer        uint32 iStartTime;        // Stop time of encoded samples contained in the bit stream buffer        uint32 iStopTime;};class TEncodeProperties{    public:        // /////////////////////////////////////////////        // Input stream properties (uncompressed audio)        // /////////////////////////////////////////////        enum EInterleaveMode        {            EINTERLEAVE_LR,        // interleaved left-right            EGROUPED_LR,           // non-interleaved left-right            ENUM_INTERLEAVE_MODES  // number of modes supported        };        // DESCRIPTION: Number of bits per sample. For example, set it to "16"        //              bits for PCM.        // USAGE:       The authoring application is required to fill this in.        //              The CAEI uses the value for encoding.        int32 iInBitsPerSample;        // DESCRIPTION: Sampling rate of the input samples in Hz.        //              For example, set it to "22050" Hz.        // USAGE:       The authoring application is required to fill this in.        //              If sampling rate is not known until CAEI is initialized,        //              use '0'. The CAEI uses the value for encoding.        uint32 iInSamplingRate;        // DESCRIPTION: Clock rate or time scale to be used for the input timestamps        //              (ticks per secs). For example, "22050" ticks/sec.        // USAGE:       The authoring application is required to fill this in.        //              If sampling rate is not known until CAEI is initialized,        //              use '0'. The CAEI uses the value for encoding.        uint32 iInClockRate;        // DESCRIPTION: Number of input channels:1=Mono,2=Stereo.(Mono uses 1 channel;        //              Stereo uses 2 channels).        // USAGE:       The authoring application is required to fill this in.        //              The CAEI uses the value for encoding.        uint8 iInNumChannels;        // DESCRIPTION: Whether to interleave or not the multi-channel input samples:        //              EINTERLEAVE_LR  = LRLRLRLRLR    (interleaved left-right)        //              EGROUPED_LR = LLLLLL...RRRRRR   (non-interleaved left-right)        // USAGE:       The authoring application is required to fill this in.        //              The CAEI uses the value for encoding.        EInterleaveMode iInInterleaveMode;        // DESCRIPTION: Desired Sampling rate for a given bitrate combination:        //              For example, set it to "16000" Hz if the encoding 16kbps        //              mono/stereo or 24 kbps stereo        // USAGE:       The authoring application is required to fill this in.        //              The CAEI uses the value for encoding.        uint32 iDesiredSamplingRate;    public:        // ////////////////////////////////////////////        // Output stream properties (compressed audio)        // ////////////////////////////////////////////        // DESCRIPTION: Mode of operation (the same as bit rate). For example,        //              "GSM_AMR_4_75" (for 4.75 kbps).        // USAGE:       The authoring application is required to fill this in.        //              The CAEI uses the value to configure the codec library.        int32 iMode;        // DESCRIPTION: Bit order format:        //              TRUE  = MSB..................LSB        //                       d7 d6 d5 d4 d3 d2 d1 d0        //              FALSE = MSB..................LSB        //                      d0 d1 d2 d3 d4 d5 d6 d7        // USAGE:       The authoring application is required to fill this in.        //              The CAEI will use the value to setup the codec library.        bool iBitStreamFormatIf2;        // DESCRIPTION: Audio object type for the output bitstream; only applies        //              to AAC codec        // USAGE:       The application is required to fill this in.        //              The CADI will use the value to setup the codec library.        int32 iAudioObjectType;        // DESCRIPTION: Final sampling frequency used when encoding in Hz.        //              For example, "44100" Hz.        // USAGE:       If the input sampling rate is not appropriate (e.g.,        //              the codec requires a different sampling frequency),        //              the CAEI will fill this in with the final sampling        //              rate. The CAEI will perform resampling if the        //              input sampling frequency is not the same as the output        //              sampling frequency.        uint32 iOutSamplingRate;        // DESCRIPTION: Number of output channels:1=Mono,2=Stereo. (Mono uses 1        //              channel; Stereo uses 2 channels).        // USAGE:       The CAEI will fill this in if it needs to convert        //              the input samples to what is required by the codec.        uint8 iOutNumChannels;        // DESCRIPTION: Clock rate or time scale used for the timestamps (ticks per secs)        //              For example, "8000" ticks/sec.        // USAGE:       The CAEI will fill this in if the input data will be        //              resampled.        uint32 iOutClockRate;};/****   This class encodes audio samples using the GSM-AMR algorithm.**   This codec operates on a 20-msec frame duration corresponding to 160**   samples at the sampling frequency of 8000 samples/sec. The size of a frame**   is 320 bytes. For each 20-ms frame, a bit-rate of 4.75, 5.15, 5.90, 6.70,**   7.40, 7.95, 10.2, or 12.2 kbits/sec can be produced.****   Sample usage:**   ------------**       // create a GSM-AMR encoder object**       CGsmAmrEncoder* myAppEncoder = OSCL_NEW(CGsmAmrEncoder, ());**       // set input parameters**       TEncodeProperties myProps;**       myProps.iInSamplingRate = 8000;**       myProps.iInBitsPerSample = 16;**       myProps.iOutBitRate = CGsmAmrEncoder::GSM_AMR_12_2;**       myAppEncoder->InitializeEncoder(myProps, 2000);****       // encode a sample block**       myAppEncoder->Encode(myInput, myOutput);**//       // done encoding so cleanup**       myAppEncoder->CleanupEncoder();**       OSCL_DELETE(myAppEncoder);***/class CPvGsmAmrEncoder{    public:        //! Constructor -- creates a GSM-AMR encoder object        OSCL_IMPORT_REF CPvGsmAmrEncoder();        //! Destructor -- destroys the GSM-AMR encoder object        OSCL_IMPORT_REF ~CPvGsmAmrEncoder();        /**        *  This function initializes the GSM-AMR encoder.        * @param "aMaxOutputBufferSize" "the maximum buffer size for the output buffer when Encode() gets called"        * @param "aProps" "TEncodeProperties based pointer for the input encoding setting. if aProps=NULL, then        *		 default settings will be set"        * @return 0 for the correct operation, and -1 for the wrong operation        */        OSCL_IMPORT_REF int32 InitializeEncoder(int32 aMaxOutputBufferSize,                                                TEncodeProperties* aProps = NULL);        /**        *  This function initializes the GSM-AMR encoder.        * @param "aInStream" "TInputAudioStream based reference object that contains the input buffer and buffer size and timestamp info"        * @param "aOutStream" "TOutputAudioStream based reference object that contains the output buffer for compressed data        * @return 0 for the correct operation, and -1 for the wrong operation        */        OSCL_IMPORT_REF int32 Encode(TInputAudioStream& aInStream,                                     TOutputAudioStream& aOutStream);        /**        *  This function cleans up the encoder workspace when done encoding.        */        OSCL_IMPORT_REF int32 CleanupEncoder();    public:        // GSM AMR modes        // ** values should be the same as the Mode enum specified by AMR library        enum GSM_AMR_MODES        {            GSM_AMR_4_75,            GSM_AMR_5_15,            GSM_AMR_5_90,            GSM_AMR_6_70,            GSM_AMR_7_40,            GSM_AMR_7_95,            GSM_AMR_10_2,            GSM_AMR_12_2,            GSM_AMR_DTX,            GSM_AMR_N_MODES      /* number of (SPC) modes */        };    private:        /**        *  This inline function checks whether the specified mode is valid or not.        * @param "aMode" "input the current mode to be used in encoding"        * @return true for the valid mode, and false for the wrong mode        */        inline bool IsModeValid(int32 aMode)        {            return((aMode < GSM_AMR_N_MODES) && (aMode >= 0));        }    private:        // GSM AMR encoder state variables        void* iEncState;        void* iSidState;        // contains the current mode of GSM AMR        GSM_AMR_MODES iGsmAmrMode;        // last mode used        int32 iLastModeUsed;        // number of samples per frame (granulity)        int32 iNumSamplesPerFrame;        // number of bytes per sample        int32 iBytesPerSample;        // maximum size allowed for output buffer        int32 iMaxOutputBufferSize;        // bit stream format        int32 iBitStreamFormatIf2;};typedef enum{    GSMAMR_ENC_NO_ERROR					= 0,    GSMAMR_ENC_NO_MEMORY_ERROR			= -1,    GSMAMR_ENC_CODEC_INIT_FAILURE		= -2,    GSMAMR_ENC_CODEC_NOT_INITIALIZED	= -3,    GSMAMR_ENC_INVALID_PARAM			= -4,    GSMAMR_ENC_INVALID_MODE				= -5,    GSMAMR_ENC_CODEC_ENCODE_FAILURE		= -6,    GSMAMR_ENC_MEMORY_OVERFLOW			= -7} GSMAMR_ENC_STATUS;#endif  // __GSMAMR_ENCODER_WRAPPER_H__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -