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

📄 mp3dec_own.h

📁 audio-video-codecs.rar语音编解码器
💻 H
字号:
/*//////////////////////////////////////////////////////////////////////////////
//
//                  INTEL CORPORATION PROPRIETARY INFORMATION
//     This software is supplied under the terms of a license agreement or
//     nondisclosure agreement with Intel Corporation and may not be copied
//     or disclosed except in accordance with the terms of that agreement.
//          Copyright(c) 2006-2007 Intel Corporation. All Rights Reserved.
//
*/

#ifndef __MP3DEC_OWN_H__
#define __MP3DEC_OWN_H__

#include "ippac.h"
#include "ippdc.h"
#include "ipps.h"
#include "mp3_own.h"
#include "mp3dec.h"
#include "mp3dec_huftabs.h"
#include "bstream.h"
#include "vm_debug.h"

#ifdef __cplusplus
extern "C" {
#endif

#define NUM_CHANNELS 5
#define MAINDATABUFSIZE (2 * 56000)

typedef Ipp16s sampleshort[2][576];

typedef struct {
    Ipp16s l[23];    /* [sb] */
    Ipp16s s[3][13]; /* [window][sb] */
} sScaleFactors;

typedef struct
{
    Ipp32s linbits;
    void   *phuftable;
} sHuffmanTable;

typedef struct {
    IppMP3FrameHeader header;
    IppMP3FrameHeader header_good;
    Ipp32s mpg25, mpg25_good;

    Ipp32s stereo;
    Ipp32s intensity;
    Ipp32s ms_stereo;
    Ipp32s MP3nSlots;
    Ipp32u *crc_ptr, crc, crc_check;
    Ipp32s crc_nbits, crc_offset;

    mp3_mc_header mc_header;
    Ipp32s mc_tc_sbgr_select;
    Ipp32s mc_dyn_cross_on;
    Ipp32s mc_dyn_cross_LR;
    Ipp32s mc_prediction_on;
    Ipp32s mc_channel;
    Ipp32s mc_alloc_bits;
    Ipp32s mc_dyn_cross_bits;
    Ipp32s mc_pred_mode;
    Ipp32s mc_tc_allocation;
    Ipp32s mc_tc_alloc[12];
    Ipp32s mc_dyn_cross_mode[12];
    Ipp32s mc_dyn_second_stereo[12];
    Ipp32s mc_prediction[8];
    Ipp32s mc_predsi[8][6];
    Ipp32s mc_pred_coeff[8][6][3];
    Ipp32s mc_delay_comp[8][6];
    Ipp32s mc_lfe_alloc;
    Ipp32s mc_lfe_scf;
    Ipp32s mc_lfe_spl[12];
    Ipp32s mc_lfe_filter_off;
/*
 * SIDE INFO
 */
    Ipp32u si_main_data_begin;
    Ipp32u si_private_bits;
    Ipp32u si_part23Len[2][2];
    Ipp32u si_bigVals[2][2];
    Ipp16s si_globGain[2][2];
    Ipp32u si_sfCompress[2][2];
    Ipp32u si_winSwitch[2][2];
    Ipp32u si_blockType[2][2];
    Ipp32u si_mixedBlock[2][2];
    Ipp32u si_pTableSelect[2][2][3];
    Ipp16s si_pSubBlkGain[2][2][3];
    Ipp32u si_reg0Cnt[2][2];
    Ipp32u si_reg1Cnt[2][2];
    Ipp32u si_preFlag[2][2];
    Ipp32u si_sfScale[2][2];
    Ipp32u si_cnt1TabSel[2][2];
    Ipp32u si_scfsi[2];
    Ipp32s s_len[4];
    Ipp32s blocknumber;
    Ipp32s blocktypenumber;
/*
 * END OF SIDE INFO
 */

    sampleshort *smpl_xs;       // out of huffman

    sScaleFactors ScaleFactors[2];
    sHuffmanTable huff_table[34];
    Ipp32s part2_start;

    sBitsreamBuffer m_StreamData;
    sBitsreamBuffer m_MainData;

    Ipp32s non_zero[2];
    Ipp16s *m_pOutSamples;

    Ipp32s decodedBytes;

    Ipp32s MAINDATASIZE;

    Ipp16s allocation[NUM_CHANNELS][32];
    Ipp16s scfsi[NUM_CHANNELS][32];
    Ipp16s scalefactor[NUM_CHANNELS][3][32];
    Ipp16s scalefactor_l1[2][32];
    Ipp32s sample[NUM_CHANNELS][32][36];
    Ipp32s *nbal_alloc_table;
    Ipp8u *alloc_table;
    Ipp32s jsbound;
    Ipp32s sblimit;

    Ipp32s m_layer;

    Ipp32s m_nBitrate;
    Ipp32s m_frame_num;
    Ipp32s m_bInit;

    Ipp32s id3_size;
    Ipp32u *start_ptr;
    Ipp32s start_offset;
    Ipp32s synchro_mode;
} MP3Dec_com;

typedef Ipp32s ssfBandIndex_l[23];
typedef Ipp32s ssfBandIndex_s[14];

extern Ipp8u mp3dec_nr_of_sfb[6][3][4];
extern ssfBandIndex_l mp3dec_sfBandIndex_l[3][3];
extern ssfBandIndex_s mp3dec_sfBandIndex_s[3][3];

MP3Status mp3decGetSize_com(Ipp32s *size);
MP3Status mp3decUpdateMemMap_com(MP3Dec_com *state, Ipp32s shift);
MP3Status mp3decInit_com(MP3Dec_com *state_ptr, void *mem);

MP3Status mp3decClose_com(MP3Dec_com *state);
MP3Status mp3decReset_com(MP3Dec_com *state);

Ipp32s mp3dec_audio_data_LayerI(MP3Dec_com *state);
Ipp32s mp3dec_audio_data_LayerII(MP3Dec_com *state);

Ipp32s mp3dec_initialize_huffman(sHuffmanTable *huff_table, Ipp8u *mem, Ipp32s *size);
Ipp32s mp3idec_initialize_huffman(sHuffmanTable *huff_table, Ipp8u *mem, Ipp32s *size);

Ipp32s mp3dec_Huffmancodebits(MP3Dec_com *state, Ipp32s gr, Ipp32s ch);
Ipp32s mp3idec_Huffmancodebits(MP3Dec_com *state, Ipp32s gr, Ipp32s ch);

Ipp32s mp3dec_GetScaleFactorsL3(MP3Dec_com *state, Ipp32s gr, Ipp32s ch);
Ipp32s mp3dec_GetScaleFactorsL3_LSF(MP3Dec_com *state, Ipp32s ch);

Ipp32s mp3dec_audio_data_LayerIII(MP3Dec_com *state);
Ipp32s mp3dec_audio_data_LSF_LayerIII(MP3Dec_com *state);

Ipp32s mp3dec_ReadMainData(MP3Dec_com *state);
MP3Status  mp3dec_GetSynch(MP3Dec_com *state);
MP3Status mp3dec_ReceiveBuffer(sBitsreamBuffer *m_StreamData, void *in_GetPointer, Ipp32s in_GetDataSize);
MP3Status mp3dec_GetID3Len(Ipp8u *in, Ipp32s inDataSize, MP3Dec_com *state);
MP3Status mp3dec_SkipID3(Ipp32s inDataSize, Ipp32s *skipped, MP3Dec_com *state);

void mp3dec_CRC_start(MP3Dec_com *state);
void mp3dec_CRC_update(MP3Dec_com *state, Ipp32u *crc);

void mp3dec_mc_header(MP3Dec_com *state);
void mp3dec_mc_params(MP3Dec_com *state);
void mp3dec_mc_composite_status_info(MP3Dec_com *state);
void mp3dec_mc_audio_data_l2(MP3Dec_com *state);
void mp3dec_mc_decode_scale_l2(MP3Dec_com *state);
void mp3dec_mc_decode_sample_l2 (MP3Dec_com *state);

#ifdef __cplusplus
}
#endif

#endif

⌨️ 快捷键说明

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