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

📄 aviaudiocontrol.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
字号:
/******************************************************************/
/*  Copyright (C) 2007 ROCK-CHIPS FUZHOU . All Rights Reserved.  */
/*******************************************************************
File :  AviInterface.c
Desc :  主界面窗口
Author :
Date :  2007-08-24
Notes :
$Log :
*********************************************************************/
#include "include.h"
#include "system.h"
#include "../browser/BrowserStruct.h"
#ifdef BOARD
#include "../video/avi/avifile.h"
#include "AudioControl.h"
#include "../audio/include/audio_globals.h"
#include "BrowserGlobal.h"
#include "Mpeg4Contrl.h"
#include "AviMacro.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 AviAudioGetData(MY_FILE *fpNo, char *buffer, DWORD size)
{
#ifdef BOARD
    return (AviGetAudioData(buffer, size));
#endif
}

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

int  AviAudioFSeek(MY_FILE *in, long int off , int b)
{
    if ((b == 0))
        AviAudioSeek(&aviPointer, off, b);
    return 1;
}

void VideoFileFunInit(void)
{
#ifdef BOARD
    FileFuncInit();
    RKFIO_FRead = (size_t (*)(MY_FILE *, void *, size_t))AviAudioGetData;
    RKFIO_FSeek = (int(*)(MY_FILE *, long int , int))AviAudioFSeek;//AviAudioSeek;
    RKFIO_FLength = (unsigned int (*)(MY_FILE *))AviAudioGetLength;
#endif
}

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

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

UINT8  AviOpenTrackFlag = 0;                //    AVI声音文件很短
BOOLEAN VideoDecMusicStart(void)
{
#ifdef BOARD
    unsigned long Samplerate;
    Codec_DACMute();
    I2sStop();
    HDMA_Stop(0);
    AudioInitList();
    VideoFileFunInit();

    //audio format check, added by ljn @ 2005-12-28 15:49:22
    switch (AviGetAudioFormat())
    {
        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_DEC;
            }
            break;
        case    SIGN_WAVE_FORAMT_PCM:    
        case    SIGN_WAVE_FORAMT_ADPCM:
            {
                CurrentCodec = CODEC_WAV;
            }
            break;
        default:
            CurrentCodec = CODEC_MP2;
            break;
    }

    memset(buff, 0, sizeof(buff));
    ulEndOfRAM = (unsigned long)buff;
    if (CODEC_AC3_DEC == CurrentCodec)
        PMU_EnterModule(PMU_VIDEOLOW);
    if (0 == OpenTrack())
    {
        return FALSE;
    }
    AviOpenTrackFlag = 1;
#if 0
    CodecGetSampleRate(&Samplerate);
#else
    Samplerate = AviGetAudioSamplerate(); /* by ljn. 2008-5-28 */
#endif
    Codec_SetSampleRate(Samplerate);
    AudioIOBuf.lOutLength = 2048;

    //AviAudioSeek(&aviPointer, 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();
    // RockOSSendMsg(MBAUDIO,AS_GUAU_VolumeSet,(void*)OutputVolume);
    Codec_SetVolumet(OutputVolume);
#endif
    return TRUE;
}

void AviAudioStart(void)
{
#ifdef BOARD
    pRawFileCache = NULL;
    Codec_SetVolumet(OutputVolume);
    // RockOSSendMsg(MBAUDIO,AS_GUAU_VolumeSet,(void*)OutputVolume);
    VideoDecMusicInit();
    VideoDecMusicStart();
#endif
}

void AviAudioCtrl(int cmd)
{
    switch (cmd)
    {
        case AVI_AUDIO_CTRL_START:
            AviAudioStart();
            break;
        case AVI_AUDIO_CTRL_PAUSE:
            RockOSSendMsg(MBAUDIO, AS_GUAU_Pause, NULL);
            break;
        case AVI_AUDIO_CTRL_FFD:
            AudioPlayState = Audio_State_FFD;
            break;
        case AVI_AUDIO_CTRL_FFW:
            AudioPlayState = Audio_State_FFW;
            break;
        case AVI_AUDIO_CTRL_RESUME:
            if (CurrentCodec == CODEC_WAV)
                CodecSeek((unsigned long)AviGetCurTime(), 0);
            RockOSSendMsg(MBAUDIO, AS_GUAU_Resume, NULL);
            break;
        case AVI_AUDIO_CTRL_STOP:
            RockOSSendMsg(MBAUDIO, AS_GUAU_VideoAudioStop, NULL);
            break;
        default:
            break;
    }
}

⌨️ 快捷键说明

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