亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? audiocontrol.c

?? 瑞星微公司RK27XX系列芯片的SDK開發(fā)包
?? C
?? 第 1 頁 / 共 3 頁
字號:
//1音頻控制部分
#include "include.h"
//#include <stdlib.h>

//080520,huangsl,修改包含路徑,用于 PC仿真編譯,保留.
#include "..\application\audio\buffer\buffer.h"
#include "..\application\audio\include\file_access.h"
#include "..\application\audio\include\audio_globals.h"
#include "AudioControl.h"
#include "..\application\AudioWin\AudioWin.h"
#include "..\Effect\effect.h"
#include "slist.h"
#include "Holdonplay.h"
#include "VideoCodecs.h"

//Add for Real Video&Audio Synz. by Vincent Hisung,Nov 24,2007
extern INT64S real_timer_tick;
extern unsigned short RV_SkipFrameEn;
int isFirstDec = 0;
short * FirstOutBuf = NULL;
unsigned long AudioLastRepeatMode = Audio_AllRepeat;
//播放音樂后如果再進有音頻的游戲,音頻播放的模式會臨時改成只播放一次,退出游戲再恢復原來的模式。

extern unsigned long nSamplesPlayed;
extern MY_FILE * pRawFileCache;
extern MY_FILE * pRawFileCache2;
extern BufferState sPlayBuffer;
extern BufferState sRecordBuffer;
extern REG_AUDIOCONFIG* pAudioRegKey;
extern WINDOW* pAudioWin;
extern UINT16 Audio_PMU[];
extern UINT8 AviOpenTrackFlag;

extern int OpenTrack(void);
extern void CloseTrack(void);
extern tEffect EQ;
BOOLEAN AudioStop(UINT16 ReqType);

MY_FILE * outF;

//UINT32 Codec_Samples_Num=0;
INT16U AudioPlayState = Audio_State_Stop;
ALIGN(64) AudioInOut_Type AudioIOBuf;
//int num_fra=0;
//MY_FILE *outfile;
//MY_FILE *outfile2;
//MY_FILE *gFileHandleOfTest;
//int    gCurrentDisk;
//int    g_Part_ID;
unsigned char CodecMode, BasicMode, VisualMode;
unsigned char CurrentCodec;
unsigned int PlaySamplingRate, PlayBitrate;
//unsigned int CurrentFileNum;
//unsigned int TotalMusicFileNum;
//unsigned int PlaylistFileNum;
//unsigned short PlaySec;
//unsigned char CHECK_TIMER_INT;
//unsigned char CHECK_TIMER_BATTERY;
//unsigned char MenuCDSync;
//unsigned char SpeedVal;
unsigned int  SampleRate;
unsigned char ABFlag;
//unsigned int ABMusic[2];
//unsigned long ABTime[2];
//unsigned char fEnableResume;
//unsigned char ValidMusicFlag;
unsigned char gPlugInSkip;
unsigned char   gAudioReq = 0;
//int    gAudioCount = 0;
//int    gVideoCount = 0;
//int    gDemuxCount = 0;
unsigned char gStartRec;
unsigned char   gAudioDmaState;
unsigned long ulEndOfRAM;
unsigned long buff[0xc000];
AUDIOCONTROL AudioPlayInfo;
//UINT16 gAudioOutBufIndex = 0;
AUDIOLISTENTRY        gAudioBufEntries[AUDIO_OUT_BUF_NUM];
SLIST  volatile      gAudioDecBufList;

short AudioDataMute = 0;
short AudioStopCtl;
short VideoPlaying = 0;

BOOLEAN AudioGetNextMusic(UINT32 msg);
void AudioMediaValidate(void* data);

void AudioOutBufSwitch(void);
void AudioSetEQ(void);
void AudioSetAB(void);
#define SpectrumLoopTime 3
#define  SPECTRUM_LINE_M     20
#define MAX(a,b) (a>b)?a:b;
int SpectrumLoop = SpectrumLoopTime;
int SpectrumCnt = 0;
//范圍是0~20.
unsigned short SpectrumBuf[SPECTRUM_LINE_M];//存放轉(zhuǎn)換過后的M根譜線的能量
extern unsigned short Spectrum_gLinePow[SPECTRUM_LINE_M];//存放轉(zhuǎn)換過后的M根譜線的能量
extern BOOLEAN AudioFindValidateFile ;
#ifdef MOV_INCLUDE
EXT void MovSetAudioPlayEnd(void);
#endif
BOOLEAN VideoPlayState(void)
{
    return VideoPlaying;
}

BOOLEAN AudioPlaying(void)
{
    return (Audio_State_Stop != AudioPlayState);
}

/**************************************************************************
* 函數(shù)描述:  音頻輸出音量設(shè)置
* 入口參數(shù):  無
* 出口參數(shù):  無
* 返回值:    無
* 注釋:      由于音頻中音效管理需要獨立配置音量,故,在driver層封裝此函數(shù)
***************************************************************************/
void AudioSetVolume(void)
{
    unsigned int Vol = OutputVolume;

#ifdef APE_DEC_INCLUDE
    if ((CurrentCodec == CODEC_APE_DEC) || (VideoPlaying))
    {
        //目前 ape 不做音效處理
        Codec_SetVolumet(Vol);
        return ;

    }
#endif
    if (Vol)
    {
        switch (AudioIOBuf.EffectCtl.Mode)
        {
            case EQ_NOR:
                break;
            case EQ_ROCK:
            case EQ_POP:
            case EQ_CLASSIC:
            case EQ_BASS:
            case EQ_JAZZ:
            case EQ_USER:
                Vol += 5;
                break;
            case EQ_PLAYFX:
                {
                    if (AudioIOBuf.EffectCtl.MSMode == Audio_BB)
                        Vol += 9;
                    else if (AudioIOBuf.EffectCtl.MSMode == Audio_3D || AudioIOBuf.EffectCtl.MSMode == Audio_LEQ)
                        Vol += 5;
                }
                break;
            default:
                break;
        }
    }
    Codec_SetVolumet(Vol);
}

/**************************************************************************
* 函數(shù)描述:  音頻輸出buf列表內(nèi)部使用
* 入口參數(shù):  SLIST_ENTRY *pNode :鏈表中一個節(jié)點的指針
             void *pKey         :用戶數(shù)據(jù)指針
* 出口參數(shù):  無
* 返回值:    無
* 注釋:      由于slist.c已打包,此函數(shù)現(xiàn)在沒用,目的是防止將來用到時死機
***************************************************************************/
INT32U  AudioListCmp(SLIST_ENTRY *pNode , void *pKey)
{
    return 1;
}

/**************************************************************************
* 入口參數(shù):  無
* 出口參數(shù):  無
* 返回值:    無
* 注釋:      使用靜態(tài)鏈表管理,詳細用法參考SList.c
***************************************************************************/
void AudioInitList(void)
{
    UINT16 cnt;
    for (cnt = 0;cnt < AUDIO_OUT_BUF_NUM;cnt++)
        gAudioBufEntries[cnt].BuffAddr = &AudioIOBuf.PCMBuf[cnt*AUDIO_OUT_BUF_LEN];

    gAudioDecBufList.StructSize = sizeof(AUDIOLISTENTRY);
    gAudioDecBufList.Func = AudioListCmp;
    SListInit((SLIST*)&gAudioDecBufList , AUDIO_OUT_BUF_NUM , gAudioBufEntries);
    SListAddEntryTail((SLIST*)&gAudioDecBufList);
    SListAddEntryTail((SLIST*)&gAudioDecBufList);
    SListAddEntryTail((SLIST*)&gAudioDecBufList);
    SListAddEntryTail((SLIST*)&gAudioDecBufList);
    SListAddEntryTail((SLIST*)&gAudioDecBufList);
    //Add by Vincent Hisung,Nov 24,2007
    isFirstDec = 0;
    AudioStopCtl = 0;
}
/**************************************************************************
* 函數(shù)描述:  音頻硬件初始化
* 入口參數(shù):  無
* 出口參數(shù):  無
* 返回值:    無
* 注釋:
***************************************************************************/
void Audio_Init(void)
{
    I2S_PowerOnInit(I2S_SlaveMode);    //I2S_MasterMode);//
    Codec_SetMode(Codec_DACout);
}
/**************************************************************************
* 函數(shù)描述:  DMA中斷處理函數(shù)
* 入口參數(shù):  無
* 出口參數(shù):  無
* 返回值:    無
* 注釋:
***************************************************************************/

void Audio_ISR(void)
{
    if (Audio_State_Play == AudioPlayState)
    {
        AudioOutBufSwitch();
        RockOSSendMsg(MBAUDIO, AS_GUAU_Playing, (void*)NULL);
    }
}

/**************************************************************************
* 函數(shù)描述:  切換音頻DMA源地址,重啟DMA
* 入口參數(shù):  無
* 出口參數(shù):  無
* 返回值:    無
* 注釋:
***************************************************************************/
short AudioTest[AUDIO_OUT_BUF_LEN*2];
void AudioOutBufSwitch(void)
{
    short* OutBuf = AudioTest;

    AUDIOLISTENTRY* entry = (AUDIOLISTENTRY*)gAudioDecBufList.UsedList;
    if (entry && (0 == AudioDataMute)) //DELATE LAST BUFFE.
    {
        SListDeleteEntryPtr((SLIST*)&gAudioDecBufList, (SLIST_ENTRY*)entry);
    }

    entry = (AUDIOLISTENTRY*)gAudioDecBufList.UsedList;
    if (entry)
    {
        AudioDataMute = 0;
        OutBuf = entry->BuffAddr;
    }
    else
    {
        AudioDataMute = 1;
        if (AudioStopCtl)return;
    }

    //若將切換到第一次解碼輸出的BUFFER,說明audio計時應(yīng)正式開始
    if ((OutBuf == FirstOutBuf) && (VideoPlaying))
    {
        RockOSSendMsg(MBAUDIO, AS_GUGU_UnMute, NULL);
        //Codec_DACUnMute();
        real_timer_tick = 0;
        RV_SkipFrameEn = 1;
        FirstOutBuf = NULL;
        RockOSSendMsg(MBVIDEO, AS_GUVI_RealDisplayStart, NULL);
    }

    DmaTransmit(AUDIO_DMACHANNEL,
                (UINT32)OutBuf,//OutBuf,
                (UINT32)RegI2s_TXR,
                (UINT32)AudioIOBuf.lOutLength,
                (UINT32)DmaI2sPlayCopy,
                (DMACallBack)Audio_ISR);
    nSamplesPlayed += AudioIOBuf.lOutLength; // For wmv, HuWeiGuo, 08/04/11

}

/**************************************************************************
* 函數(shù)描述:  音頻硬件初始化
* 入口參數(shù):  無
* 出口參數(shù):  無
* 返回值:    無
* 注釋:
***************************************************************************/
void AudioHWInit(void)
{
    Codec_SetMode(Codec_DACout);
    //  Codec_SetVolumet(OutputVolume);
    AudioSetVolume();
}

/**************************************************************************
* 函數(shù)描述:  音頻解碼初始化
* 入口參數(shù):  無
* 出口參數(shù):  無
* 返回值:    TRUE/FALSE
* 注釋:
***************************************************************************/
BOOLEAN AudioDecInit(MY_FILE* pHandle)
{
    if ((!pHandle) || AudioPlayState != Audio_State_Stop)
        return FALSE;
    pRawFileCache = pHandle;
    AudioDataMute = 0;
    AudioStopCtl = 0;
    //.2解頭
    pAudioRegKey->CurrentTime = 0;
    gPlugInSkip = 0;
    memset(buff, 0, sizeof(buff));
    ulEndOfRAM = (unsigned long)buff;
    ID3_GetID3((int)pRawFileCache);

    if (0 == OpenTrack())
    {
        //AudioPlayState = Audio_State_Play;
        //RockOSSendMsg(MBAUDIO,AS_GUAU_Stop,Audio_Stop_Normal);
        RockOSSendMsg(MBGUI, AS_AUGU_ReportErr, (void*)Audio_Err_DecHead);
        return FALSE;
    }
    CodecGetLength(&pAudioRegKey->TotalTime);
    CodecGetSampleRate(&pAudioRegKey->Samplerate);
    CodecGetBitrate(&pAudioRegKey->Bitrate);
    Codec_SetSampleRate(pAudioRegKey->Samplerate);
    if (0 == VideoPlaying)
    {
        PMU_ExitModule(Audio_PMU[CurrentCodec]);
        //CurrentCodec = AudioGetFIleType(AudioFileInfo.Name);
        if (CurrentCodec < NUMCODECS)
        {
            if ((CurrentCodec == CODEC_MP3) && (pAudioRegKey->Samplerate > 44100))
                PMU_EnterModule(PMU_MP3H);
            else
                PMU_EnterModule(Audio_PMU[CurrentCodec]);
        }
        else
            return FALSE;
    }
    if (pAudioWin)
    {
        LrcInit();
        RockOSSendMsg(MBGUI, AS_AUGU_UpdateAll, NULL);
    }
    RockOSSendMsg(MBAUDIO, AS_AUAU_DecStart, NULL);
    return TRUE;
}
/**************************************************************************

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合久久久久网| 亚洲国产精品成人综合色在线婷婷 | 99久久99久久精品免费观看| 欧美国产激情二区三区| 成人黄色综合网站| 一区二区三区国产精品| 欧美老女人第四色| 国内成人精品2018免费看| 日本一区二区三区电影| 91在线视频网址| 亚洲h动漫在线| 久久影视一区二区| 99久久久精品| 丝袜美腿亚洲一区| 国产欧美日韩综合精品一区二区| av午夜精品一区二区三区| 亚洲最大成人综合| 日韩欧美电影一区| 91首页免费视频| 日本少妇一区二区| 国产精品美女久久久久久久久久久 | 91久久精品一区二区二区| 日韩国产精品久久久| 国产亚洲一本大道中文在线| 91麻豆精东视频| 日韩av电影免费观看高清完整版| 久久久久久影视| 91福利精品视频| 免费人成黄页网站在线一区二区| 久久精品亚洲麻豆av一区二区| 色哟哟国产精品免费观看| 免费观看在线综合| 亚洲视频在线观看三级| 日韩欧美国产综合| 91丝袜美女网| 极品销魂美女一区二区三区| 亚洲女同一区二区| 一区二区三区四区蜜桃 | 欧美日韩亚洲另类| 国产suv精品一区二区6| 婷婷一区二区三区| 亚洲欧洲精品成人久久奇米网| 91精品国产色综合久久久蜜香臀| 99精品欧美一区| 国内国产精品久久| 日韩电影在线一区二区三区| 亚洲欧美日韩在线不卡| 国产日产欧美精品一区二区三区| 51精品国自产在线| 色一情一乱一乱一91av| 国产精品一区免费在线观看| 婷婷一区二区三区| 亚洲一区国产视频| 亚洲日本欧美天堂| 国产精品久久久久久久久久久免费看 | 91精品国产欧美一区二区18| 日本精品一级二级| 成人av中文字幕| 国产精品综合一区二区| 久久99精品国产麻豆婷婷| 亚洲成人自拍偷拍| 一区二区三区四区亚洲| 亚洲男同1069视频| 亚洲欧美中日韩| 国产精品女上位| 国产欧美日本一区视频| 国产欧美精品一区二区色综合| 精品伦理精品一区| 精品国产亚洲一区二区三区在线观看| 在线不卡中文字幕| 欧美日韩精品欧美日韩精品一| 色综合视频一区二区三区高清| 不卡视频在线观看| 99久久国产综合精品麻豆| 97精品视频在线观看自产线路二| av电影一区二区| 91蜜桃在线免费视频| 不卡区在线中文字幕| 国产999精品久久久久久| 成人免费高清视频| 成人少妇影院yyyy| 91免费版在线| 欧美在线|欧美| 欧美日韩国产美女| 欧美一区二区在线看| 日韩欧美精品三级| 久久精品无码一区二区三区| 欧美激情一区二区在线| 亚洲情趣在线观看| 午夜视频一区二区三区| 蜜臀av一区二区三区| 韩国女主播成人在线| 床上的激情91.| 色综合天天综合狠狠| 国产精品久久久久久户外露出 | 欧美性一二三区| 91精品国产一区二区三区蜜臀| 欧美一二三四在线| 久久新电视剧免费观看| 日韩伦理免费电影| 香蕉久久夜色精品国产使用方法| 日本亚洲一区二区| 国产91综合一区在线观看| 在线影视一区二区三区| 91精品国产色综合久久不卡蜜臀 | 麻豆成人久久精品二区三区小说| 国产精品伊人色| 色综合av在线| 日韩亚洲欧美中文三级| 中文字幕免费在线观看视频一区| 亚洲一区二区三区国产| 狠狠色狠狠色综合| 在线亚洲欧美专区二区| 日韩欧美你懂的| 亚洲精品成人悠悠色影视| 精品一区二区影视| 色综合久久综合| 精品免费国产一区二区三区四区| 亚洲欧洲三级电影| 麻豆精品视频在线| 91福利精品视频| 久久精品综合网| 日韩精品欧美精品| av网站一区二区三区| 日韩精品一区二区三区四区| 亚洲欧美一区二区久久 | 成人av资源站| 日韩午夜三级在线| 亚洲午夜一区二区| 国产精品一区在线观看你懂的| 欧洲色大大久久| 国产精品毛片大码女人| 青青草原综合久久大伊人精品优势 | 国产成人精品一区二区三区网站观看| 色播五月激情综合网| 国产亚洲婷婷免费| 久久99国产精品免费| 欧美三级中文字幕| 亚洲视频香蕉人妖| 国产.欧美.日韩| 日韩免费福利电影在线观看| 亚洲国产成人av| 一本一道综合狠狠老| 亚洲国产岛国毛片在线| 黄页视频在线91| 精品奇米国产一区二区三区| 午夜精品福利久久久| 在线免费亚洲电影| 亚洲视频狠狠干| 不卡一二三区首页| 国产精品白丝在线| 91精品久久久久久蜜臀| 亚洲r级在线视频| 日本久久电影网| 樱花草国产18久久久久| av高清久久久| 亚洲伦在线观看| 91在线视频官网| 亚洲欧美一区二区三区国产精品| av一二三不卡影片| 中文字幕在线观看不卡| jlzzjlzz欧美大全| 中文字幕日韩欧美一区二区三区| 岛国一区二区在线观看| 国产亚洲1区2区3区| 国产激情一区二区三区| 久久久久国产一区二区三区四区| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲一区二区在线播放相泽| 在线国产电影不卡| 亚洲一区二区三区四区在线免费观看| 色欲综合视频天天天| 一区二区三区av电影| 欧美日韩国产成人在线免费| 五月天视频一区| 日韩美女天天操| 国产69精品久久777的优势| 亚洲天堂福利av| 欧美日韩综合不卡| 日韩成人av影视| 久久老女人爱爱| kk眼镜猥琐国模调教系列一区二区| 亚洲日本va午夜在线电影| 欧美专区亚洲专区| 石原莉奈一区二区三区在线观看| 欧美一区二区三区影视| 国产真实乱对白精彩久久| 国产精品天干天干在观线| 日本精品一级二级| 免费高清在线视频一区·| 久久久久久亚洲综合影院红桃| 国产成人免费视频网站| 亚洲精品视频在线看| 51精品视频一区二区三区| 国产黄人亚洲片| 一区二区免费在线播放| 欧美喷潮久久久xxxxx| 国产精品911| 亚洲成av人综合在线观看| 精品日韩一区二区|