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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? audiocontrol.c

?? 瑞星微公司RK27XX系列芯片的SDK開發包
?? C
?? 第 1 頁 / 共 3 頁
字號:
* 函數描述:  開始播放
* 入口參數:  無
* 出口參數:  無
* 返回值:    無
* 注釋:      加入媒體庫和資源管理器后需修改
***************************************************************************/

void AudioStart(void)
{
    AudioInitList();

    AudioIOBuf.gAudioOutBufIndex = 0;// AUDIO_OUT_BUF_NUM;
    AudioIOBuf.gAudioDecoderIndex = AUDIO_OUT_BUF_NUM - 1;
    AudioIOBuf.gAudioOutBufIndex = 0;
    AudioIOBuf.lOutLength = 2048;
    AudioPlayState = Audio_State_Play;
    RockOSSendMsg(MBGUI, AS_AUGU_UpdateState, NULL);
    // AudioPlay();
    memset(AudioIOBuf.PCMBuf, 0, AUDIO_OUT_BUF_NUM*AUDIO_OUT_BUF_LEN*2);

    if (VideoPlaying == 0)
    {
        // 音效初始化
        EffectInit();
        //AudioIOBuf.EffectCtl.Mode = pAudioRegKey->EQType;
        //AudioIOBuf.EffectCtl.MSMode = pAudioRegKey->MSEQType;

        AudioSetEQ();
    }
    ////////////////////////////////////////////////////////////
    gAudioReq = 0;
    AudioPlayInfo.PlayDirect = 1;
    AudioHWInit();
    I2sStart(I2S_Start_Tx);
    AudioOutBufSwitch();
    Codec_DACUnMute();

    //080520,huangsl,音頻 CACHE 命中測試語句.
    //Cache_MeasureStart( CACHE_MEASURE_DATA );

// RockOSSendMsg(MBGUI,AS_AUGU_UpdateAll,NULL);
}

BOOLEAN VideoAudioStop(UINT16 ReqType);
/**************************************************************************
* 函數描述:  音頻解碼
             解碼下一禎
             修正顯示相關的全局變量,并通知ui更新
             若在復讀模式,檢查是否播放到復讀終點,然,發送AB消息
* 入口參數:  無
* 出口參數:  無
* 返回值:    TRUE/FALSE
* 注釋:
***************************************************************************/
#ifdef SPECTRUM
int SpectrumOutBuffer[128 * 2];
#endif
BOOLEAN AudioPlay()
{
    static int cnt = 0;
    UINT32 i;
    short *outtmp, *outtmp1;
    short *left, *right;
    unsigned long cur_time = 0;
    AUDIOLISTENTRY *LEntry;
    DECLARE_CUP_SR;
    if (Audio_State_Play != AudioPlayState)
        return FALSE;
    //ENTER_CRITICAL();
    if (gAudioDecBufList.FreeList)
    {
        LEntry = (AUDIOLISTENTRY*)gAudioDecBufList.FreeList;
        outtmp1 = outtmp = (short*)LEntry->BuffAddr;
        //EXIT_CRITICAL();
    }
    else
    {
        //EXIT_CRITICAL();
        return FALSE;
    }

//.1解碼下一禎
    {
        static int err_cnt = 0;
        if ((0 == CodecDecode()) || ((!VideoPlaying) && (pAudioRegKey->CurrentTime == pAudioRegKey->TotalTime) && (0 < pAudioRegKey->CurrentTime)))
        {//4出錯返回,暫無糾錯處理
            err_cnt ++;
            if (0 == VideoPlaying)
                AudioStop(Audio_Stop_Normal);
            //上面是誰添加的 修改請留下記號
            else //the else is added By Vincent Hisung , Dec 25,2007
            {
                if (err_cnt == 5)
                {
                    RockOSSendMsg(MBVIDEO, AS_GUVI_RealDisplayStart, NULL);
                }
                else if (err_cnt > 64)
                {
                    err_cnt = 0;
#ifdef MOV_INCLUDE
                MovSetAudioPlayEnd();
#endif
                    VideoAudioStop(0);
                    RealAudioErrorDeal();
                }
                return FALSE;
            }
            return FALSE;
        }
        else
        {
            err_cnt = 0;
        }
    }
    CodecGetCaptureBuffer(&AudioIOBuf.pOutLeft, &AudioIOBuf.pOutRight, &AudioIOBuf.lOutLength);
    //保存第一次有解碼數據的BUFFER地址
    //Bug Fix : OutLenth shoud more than zero :(
    //Dec 12,2007 By Vincent Hisung
    if ((isFirstDec == 0) && (AudioIOBuf.lOutLength > 0))
    {
        isFirstDec = 1;
        FirstOutBuf = outtmp;
    }
    //nTick0 = RockGetNTick();
#if 0
    for (i = 0;i < AudioIOBuf.lOutLength;i++)
    {
        *(outtmp++) = AudioIOBuf.pOutLeft[i];
        *(outtmp++) = AudioIOBuf.pOutRight[i];
    }
#else
    i = AudioIOBuf.lOutLength;
    left = AudioIOBuf.pOutLeft;
    right = AudioIOBuf.pOutRight;
    while (i--)
    {
        *(outtmp++) = *(left++);
        *(outtmp++) = *(right++);
    }
#endif
    // 音效處理
    if (0 == VideoPlaying)
        EffectProcess(outtmp1, AudioIOBuf.lOutLength);
    ENTER_CRITICAL();
    LEntry = (AUDIOLISTENTRY*)gAudioDecBufList.FreeList;
    if (LEntry->BuffAddr != outtmp1)
        RKmemcpy(LEntry->BuffAddr, outtmp1, AudioIOBuf.lOutLength*2*sizeof(short));
    SListAddEntryTail((SLIST*)&gAudioDecBufList);
    EXIT_CRITICAL();
    //頻譜處理
#ifdef SPECTRUM
    if ((0 == VideoPlaying))//&&(pAudioRegKey->DispContent == Audio_FreqChart)&&(FALSE == SysIdleGetState(SYS_LCD_OFF)))
    {
        if (SpectrumLoop == 0)
        {
            if (SpectrumCnt == 0)
                memset(SpectrumBuf, 0, SPECTRUM_LINE_M*sizeof(unsigned short));
            if (/*(pAudioRegKey->DispContent==Audio_FreqChart)&&*/(Audio_State_Play == AudioPlayState) && (SpectrumCnt < 3))
            {

                int i;
                // 080104,huangsl,由于 里面使用了 r13 作為 臨時寄存器,因此不能進行任務切換.
                DECLARE_CUP_SR;
                ENTER_CRITICAL();
                //OSSchedLock();
                Spectrum_fft_main(AudioIOBuf.pOutLeft, SpectrumOutBuffer);
                //OSSchedUnlock();
                EXIT_CRITICAL();
                Spectrum_Norm((unsigned short*)SpectrumOutBuffer, pAudioRegKey->Samplerate);
                for (i = 0;i < SPECTRUM_LINE_M;i++)
                {
                    SpectrumBuf[i] = MAX(Spectrum_gLinePow[i], SpectrumBuf[i]);
                }
                SpectrumCnt++;
                if (SpectrumCnt >= 3)
                {
                    SpectrumLoop = SpectrumLoopTime;
                    RockOSSendMsg(MBGUI, AS_AUGU_UpdateFrequence, 0);
                    SpectrumCnt = 0;
                }
            }
        }
        if (SpectrumLoop > 0)
            SpectrumLoop-- ;
    }
#endif
    AudioFindValidateFile = TRUE;
//.2修正顯示相關的全局變量,并通知ui更新
    if (pAudioRegKey)
    {
        CodecGetTime(&cur_time);
        if (cur_time - pAudioRegKey->CurrentTime > 1000)
        {
            pAudioRegKey->CurrentTime = cur_time;
            RockOSSendMsg(MBGUI, AS_AUGU_UpdateTime, (void*)cur_time);
        }
        //.3若在復讀模式,檢查是否播放到復讀終點,然,發送AB消息
        if ((Audio_AB_PLAY == AudioPlayInfo.ABRequire) && (AudioPlayInfo.AudioABEnd <= cur_time))
        {
            //RockOSSendMsg(MBAUDIO,AS_GUAU_ABPlay,NULL);
            AudioPlayInfo.ABRequire = Audio_AB_A;
            AudioSetAB();
        }
    }
    return TRUE;
}

/**************************************************************************
* 函數描述:  音頻解碼暫停
             暫通過修改播放狀態來暫停
* 入口參數:  無
* 出口參數:  無
* 返回值:    TRUE/FALSE
* 注釋:
***************************************************************************/
BOOLEAN AudioPause()
{
//.1清空音頻解碼DMA回調
    if (Audio_State_Play == AudioPlayState)
    {
        DECLARE_CUP_SR;
        //while(AudioIOBuf.gAudioOutBufIndex != AudioIOBuf.gAudioDecoderIndex);
        //while(gAudioDmaState);
        //while(((AudioIOBuf.gAudioOutBufIndex+3)%AUDIO_OUT_BUF_NUM) == AudioIOBuf.gAudioDecoderIndex)
        ENTER_CRITICAL();
        AudioPlayState = Audio_State_Pause;
        EXIT_CRITICAL();
        Codec_DACMute();
        RockOSSendMsg(MBGUI, AS_AUGU_UpdateState, NULL);
    }
//.2維持其他解碼相關變量不變
    return TRUE;
}

/**************************************************************************
* 函數描述:  音頻解碼恢復
             修改播放狀態
             發送解碼消息
             啟動DMA
* 入口參數:  無
* 出口參數:  無
* 返回值:    TRUE/FALSE
* 注釋:
***************************************************************************/
BOOLEAN AudioResume()
{
//.1啟動dma
#if 0
    if ((Audio_State_FFD == AudioPlayState) || (Audio_State_FFW == AudioPlayState))
    {
        memset(AudioIOBuf.PCMBuf, 0, AUDIO_OUT_BUF_NUM*AUDIO_OUT_BUF_LEN*2);
    }
    else if (Audio_State_Pause != AudioPlayState)
        return FALSE;
#else
    if ((Audio_State_Pause != AudioPlayState) && (Audio_State_FFD != AudioPlayState) && (Audio_State_FFW != AudioPlayState))
        return FALSE;
    RKmemset(AudioIOBuf.PCMBuf, 0, AUDIO_OUT_BUF_NUM*AUDIO_OUT_BUF_LEN*2);
#endif
    AudioInitList();
    Codec_DACUnMute();
    AudioPlayState = Audio_State_Play;
    RockOSSendMsg(MBGUI, AS_AUGU_UpdateState, NULL);
    AudioOutBufSwitch();
    return TRUE;
}

/**************************************************************************
* 函數描述:  音頻解碼結束
             修改播放狀態
             關閉文件
* 入口參數:  無
* 出口參數:  無
* 返回值:    TRUE/FALSE
* 注釋:
***************************************************************************/
BOOLEAN AudioStop(UINT16 ReqType)
{
    // UINT16 loop=0,cnt = 0;
//.1反初始化解碼相關變量至啟動狀態
    DECLARE_CUP_SR;

    //080520,huangsl,音頻 CACHE 命中測試語句,和 AudioStart里面對應,此處用于打印
    //CACHE命中率.
#if 0
    INT32U      total, hit;
    TB_FIXBMP   *pfixBmp;

    Cache_MeasureStop(&total , &hit);
    pfixBmp = ToolBarGetFixBmpItem(3);      // 3,狀態欄測試部分.
    //sprintf( (char*)pfixBmp->unitData , "%x:%x" , hit,total);
    sprintf((char*)pfixBmp->unitData , "%02d%" , (hit / (total / 100)));
#endif

    AudioStopCtl = 1;

    if (Audio_State_Stop == AudioPlayState)
        return FALSE;
    if (Audio_State_Play == AudioPlayState)
        while (gAudioDecBufList.UsedList);
    if (0 == VideoPlaying)
    {
        if ((CurrentCodec == CODEC_MP3) && (pAudioRegKey->Samplerate > 44100))
            PMU_ExitModule(PMU_MP3H);
        else
            PMU_ExitModule(Audio_PMU[CurrentCodec]);
    }
    AudioPlayInfo.ABRequire = Audio_AB_NULL;
    ENTER_CRITICAL();
    AudioPlayState = Audio_State_Stop;
    EXIT_CRITICAL();
    Codec_DACMute();
    I2sStop();
    HDMA_Stop(0);
    CloseTrack();

    EffectEnd(); // 音效結束
    if (pRawFileCache)      //防止播視頻死機
    {
        FSFileClose((MY_FILE *) pRawFileCache);   //文件操作或在外部進行 by Vincent
        pRawFileCache = NULL;
    }

    if (Audio_Stop_Normal == ReqType)
    {
        RockOSSendMsg(MBAUDIO, AS_AUGU_NEXTFILE, (void*)(Audio_Direct_Forword | Audio_Stop_Normal));
    }
    RockOSSendMsg(MBGUI, AS_AUGU_UpdateState, NULL);
    return TRUE;
}

BOOLEAN VideoAudioStop(UINT16 ReqType)
{
//.1反初始化解碼相關變量至啟動狀態
    UINT32  TimeOutCount;
    DECLARE_CUP_SR;
    AudioStopCtl = 1;
    if (Audio_State_Stop == AudioPlayState)
        return FALSE;
    if (Audio_State_Play == AudioPlayState)
    {
        while (gAudioDecBufList.UsedList)                 //超時處理add by hzf 080508
        {
            if (++TimeOutCount > 5)
                break;
            DelayMs_nops(30);
        }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
9191久久久久久久久久久| 欧美一区二区三区喷汁尤物| 欧美亚洲另类激情小说| 欧美成人一区二区三区| 亚洲日本乱码在线观看| 国产自产高清不卡| 欧美日韩在线播| 欧美国产97人人爽人人喊| 青娱乐精品视频| 日本久久一区二区| 日本一区二区三区四区在线视频 | 日韩黄色小视频| 99在线精品视频| 久久先锋资源网| 日韩av高清在线观看| 99精品偷自拍| 国产视频一区不卡| 中文字幕的久久| 日本系列欧美系列| 色菇凉天天综合网| 国产日韩欧美高清| 久久er精品视频| 欧美性xxxxxxxx| 欧美国产日韩精品免费观看| 亚洲欧美日韩小说| 国产一区二区三区蝌蚪| 欧美午夜精品一区二区蜜桃| 国产清纯美女被跳蛋高潮一区二区久久w | 国产精品18久久久久| 欧美网站一区二区| 亚洲日本va午夜在线影院| 蜜桃一区二区三区在线| 色呦呦国产精品| 国产午夜一区二区三区| 免费观看成人av| 在线播放欧美女士性生活| 亚洲男人天堂av| www.性欧美| 国产精品沙发午睡系列990531| 日韩av网站免费在线| 欧美在线小视频| 亚洲欧美激情插| 成人av在线观| 日韩精品一区二区三区视频播放 | 同产精品九九九| 99精品视频在线播放观看| 国产日韩欧美高清| 国产一区二区毛片| 久久综合av免费| 久久99精品久久久久久久久久久久| 欧美色综合网站| 一区二区高清视频在线观看| 91片在线免费观看| 一区二区三区精品久久久| 91在线看国产| 一区二区三区四区乱视频| 色一情一伦一子一伦一区| 国产精品亚洲专一区二区三区| 欧美日韩亚洲综合一区二区三区| 亚洲成年人影院| 欧美三级日韩三级国产三级| 亚洲午夜一二三区视频| 在线电影一区二区三区| 午夜影院久久久| 日韩欧美国产一区二区三区 | 国产剧情在线观看一区二区| 欧美精品一区二区蜜臀亚洲| 国产精品一区二区男女羞羞无遮挡 | 经典一区二区三区| 欧美精品色一区二区三区| 一区二区三区在线视频免费| 91美女精品福利| 免费视频一区二区| 欧美激情综合在线| 日本精品视频一区二区| 午夜精品久久久久影视| 日韩欧美的一区| 成人一区二区三区视频在线观看| 国产精品美女久久福利网站| 91免费观看在线| 青青青伊人色综合久久| 久久久亚洲欧洲日产国码αv| 丰满放荡岳乱妇91ww| 亚洲品质自拍视频| 欧美一区二区在线视频| 国产成人在线免费| 一级特黄大欧美久久久| 欧美成人bangbros| 色综合天天视频在线观看| 日韩专区欧美专区| 国产精品天天看| 欧美电影在线免费观看| 国产精品18久久久久久久久| 亚洲h动漫在线| 久久亚洲私人国产精品va媚药| 成人黄色电影在线| 五月天网站亚洲| 亚洲国产高清在线观看视频| 欧美日韩在线综合| 国产成人精品一区二| 亚洲1区2区3区视频| 久久久国产午夜精品| 666欧美在线视频| 97se亚洲国产综合自在线不卡| 亚洲精品第1页| 久久精品网站免费观看| 欧美日韩精品专区| caoporn国产一区二区| 久久精品99久久久| 亚洲大片精品永久免费| 成人欧美一区二区三区黑人麻豆| 欧美一区二区久久| 欧洲另类一二三四区| 国产成人精品免费视频网站| 琪琪久久久久日韩精品| 夜夜嗨av一区二区三区中文字幕 | 韩国女主播一区二区三区| 一区二区不卡在线视频 午夜欧美不卡在 | 久久蜜桃香蕉精品一区二区三区| 在线观看免费视频综合| 精品一区二区综合| 一区2区3区在线看| 精品sm捆绑视频| 久久香蕉国产线看观看99| 欧美成人三级电影在线| 91.麻豆视频| 欧美久久久久久蜜桃| 欧美性一区二区| 91国偷自产一区二区开放时间| 91亚洲精品一区二区乱码| 欧美日韩欧美一区二区| 欧美在线不卡一区| 91丝袜高跟美女视频| 成人精品国产福利| 成人永久aaa| 成+人+亚洲+综合天堂| 不卡免费追剧大全电视剧网站| 成人97人人超碰人人99| 99re成人精品视频| av高清不卡在线| 色哟哟日韩精品| 在线观看视频91| 欧美日本国产视频| 777午夜精品免费视频| 555夜色666亚洲国产免| 91精品国产色综合久久不卡电影| 91精品国产一区二区| 日韩精品一区二区在线| 精品久久久久久亚洲综合网| 欧美日本精品一区二区三区| 欧美日韩一区二区三区在线看| 大桥未久av一区二区三区中文| 久久99精品国产91久久来源| 国产69精品久久99不卡| av电影在线观看一区| 成人高清在线视频| 色综合久久久网| 欧美久久高跟鞋激| 精品国产免费人成在线观看| 国产亚洲欧美日韩日本| 亚洲欧洲性图库| 亚洲成人黄色小说| 久久国产乱子精品免费女| 国产成人小视频| 91国在线观看| 精品99久久久久久| 欧美激情一区二区三区四区| www亚洲一区| 一区二区三区久久久| 韩国av一区二区三区在线观看| 成人综合在线网站| 日本韩国一区二区三区| 亚洲精品在线三区| 一区二区三区中文免费| 九九热在线视频观看这里只有精品| 国产成人免费xxxxxxxx| 在线精品视频一区二区三四| 精品剧情在线观看| 亚洲精品视频一区| 久久se这里有精品| 欧美在线视频不卡| 久久久久国产成人精品亚洲午夜| 久久综合狠狠综合久久激情| 日韩电影在线一区二区三区| 国产精品2024| 欧美一区二区三区免费| 亚洲欧洲国产日韩| 美国精品在线观看| 色婷婷综合久久| wwww国产精品欧美| 亚洲成av人片在www色猫咪| 国产成人无遮挡在线视频| 欧美人妖巨大在线| 亚洲男女一区二区三区| 蜜桃精品视频在线| 91一区二区在线| 一区二区三区日本| 成人av网站免费观看| 久久久久久久久久久黄色| 日韩精品亚洲一区|