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

📄 flvaudiocontrol.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
字号:
/******************************************************************/
/*  Copyright (C) 2007 ROCK-CHIPS FUZHOU . All Rights Reserved.  */
/*******************************************************************
File :  FlvAudioControl.c
Desc :  主界面窗口
Author :
Date :  2007-08-24
Notes :
$Log :
*********************************************************************/
#include "include.h"
#include "system.h"
#include "../browser/BrowserStruct.h"
#ifdef BOARD
#include "../video/flv/flvfile.h"
#include "AudioControl.h"
#include "../audio/include/audio_globals.h"
#include "BrowserGlobal.h"
#include "FlvMacro.h"
#include "FlvVideoControl.h"
#endif

/*********************************declare********************************/
#ifdef BOARD
extern SYS_FILE_INFO VideoFileInfo;
extern BACKGRND                    gScreen;
/*************************************************************/
extern MY_FILE*(*RKFIO_FOpen)(const char *, const char *);
extern size_t (*RKFIO_FRead)(MY_FILE *, void *, size_t) ;
extern int (*RKFIO_FSeek)(MY_FILE * /*stream*/, long int /*offset*/, int /*whence*/);
extern unsigned int (*RKFIO_FLength)(MY_FILE *in);
extern int (*RKFIO_FClose)(MY_FILE * /*stream*/);
extern long int (*RKFIO_FTell)(MY_FILE *stream); //long int ftell(MY_FILE *stream);
extern size_t (*RKFIO_FWrite)(MY_FILE *stream, const void *ptr, size_t n);
extern unsigned long    ulEndOfRAM;
extern unsigned long buff[0xc000];
extern AudioInOut_Type AudioIOBuf;
extern MY_FILE * pRawFileCache;
#endif

extern INT16U AudioPlayState;

extern UINT32    CurrentTime;
extern UINT32    TotalTime;
extern UINT32    CurrentTimeLast;

/*************************************************************/
void FileFuncInit(void);
void AudioInitList(void);
/*************************************************************/
int FlvAfterSeekCnt = 0;

int FlvAudioReadData(MY_FILE *fpNo, char *buffer, DWORD size)
{
#ifdef BOARD
    //Add by Vincent Hisung , Jan 13,2008
    //For Avoid Audio Noise
    if (FlvAfterSeekCnt != 0)
    {
        FlvAfterSeekCnt--;
        memset(buffer, 0, size);
        buffer[0] = 0xff;
        buffer[1] = 0xf9;
        return size;  //add by ljn, Jan 22, 2008
    }
    //-------------------------------
    return FlvAudioGetData(buffer, size);
#endif
}

unsigned int FlvAudioGetLength(MY_FILE *in)
{
    return 0xfffffff;
}

int  FlvAudioFSeek(MY_FILE *in, long int off , int b)
{
    if ((b == 0) && (off == 0))
        FlvAudioSeek(&flv, off, b);
    return 1;
}

void FlvAudioFileFunInit(void)
{
#ifdef BOARD
    FileFuncInit();
    RKFIO_FRead = (size_t (*)(MY_FILE *, void *, size_t))FlvAudioReadData;
    RKFIO_FSeek = (int(*)(MY_FILE *, long int , int))FlvAudioFSeek;//AviAudioSeek;
    RKFIO_FLength = (unsigned int (*)(MY_FILE *))FlvAudioGetLength;
#endif
}

BOOLEAN FlvDecMusicInit(void)
{
#ifdef BOARD
    int Err, i;
    int offset = 0, result;

    ulEndOfRAM = (unsigned long)buff;
    Codec_SetMode(Codec_DACout);
#endif
    return TRUE;
}

BOOLEAN FlvDecMusicStart(void)
{
#ifdef BOARD
    unsigned long Samplerate;
    Codec_DACMute();
    I2sStop();
    HDMA_Stop(0);
    AudioInitList();
    FlvAudioFileFunInit();

#if 0
    switch (FlvGetAudioFormat())
    {
        case    SIGN_WAVE_FORMAT_MPEG:
            {
                CurrentCodec = CODEC_MP2;
            }
            break;
        case    SIGN_WAVE_FORAMT_MPEGLAYER3:
            {
                CurrentCodec = CODEC_MP3;
            }
            break;
        case    SIGN_WAVE_FORAMT_AC3:
            {
                //CurrentCodec = CODEC_AC3;
            }
            break;
        default:
            CurrentCodec = CODEC_MP2;
            break;
    }
#else
    CurrentCodec = CODEC_MP3;
#endif

    memset(buff, 0, sizeof(buff));
    ulEndOfRAM = (unsigned long)buff;

    if (0 == OpenTrack())
    {
        return FALSE;
    }

    CodecGetSampleRate(&Samplerate);

    Codec_SetSampleRate(Samplerate);
    AudioIOBuf.lOutLength = 2048;

    FlvAudioSeek(&flv, 0, SEEK_SET);

    AudioPlayState = Audio_State_Play;
    memset(AudioIOBuf.PCMBuf, 0, AUDIO_OUT_BUF_NUM*AUDIO_OUT_BUF_LEN*sizeof(short));
    I2sStart(I2S_Start_Tx);
    AudioOutBufSwitch();
    Codec_DACUnMute();
    Codec_SetVolumet(OutputVolume);
    //RockOSSendMsg(MBAUDIO,AS_GUAU_VolumeSet,(void*)OutputVolume);
#endif
    return TRUE;
}

void FlvAudioStart(void)
{
#ifdef BOARD
    pRawFileCache = NULL;
    FlvDecMusicInit();
    FlvDecMusicStart();
#endif
}

void FlvAudioCtrl(int cmd)
{
    switch (cmd)
    {
        case FLV_AUDIO_CTRL_START:
            FlvAfterSeekCnt = 0;
            FlvAudioStart();
            break;
        case FLV_AUDIO_CTRL_PAUSE:
            RockOSSendMsg(MBAUDIO, AS_GUAU_Pause, NULL);
            break;
        case FLV_AUDIO_CTRL_FFD:
            AudioPlayState = Audio_State_FFD;
            break;
        case FLV_AUDIO_CTRL_FFW:
            AudioPlayState = Audio_State_FFW;
            break;
        case FLV_AUDIO_CTRL_RESUME:
            //Add by Vincent Hisung , Jan 13,2008
            //For Avoid Audio Noise
            FlvAfterSeekCnt = 1200;
            RockOSSendMsg(MBAUDIO, AS_GUAU_Resume, NULL);
            break;
        case FLV_AUDIO_CTRL_STOP:
            RockOSSendMsg(MBAUDIO, AS_GUAU_VideoAudioStop, NULL);
            break;
        default:
            break;
    }
}

⌨️ 快捷键说明

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