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

📄 movaudiocontrol.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
字号:
/********************************************************************************************
*	Copyright (C), 2008, Fuzhou Rockchip Co.,Ltd.
*   All Rights Reserved
*
*	File:
*              MovAudioContrl.c
*	Description:
*
*	Author:
*              guosl
*	Note:
*	           None.
*	$Log: MovAudioControl.c,v $
*	Revision 1.2  2008/07/18 06:54:24  HZF
*	no message
*	
*	Revision 1.1  2008/07/08 07:29:20  HZF
*	增加3gp和MP4
*	
*	Revision 1.1  2008/5/16 14:43:19  guosl
*	no message
*
*
*
*
********************************************************************************************/

#include "include.h"
#include "system.h"
#include "../browser/BrowserStruct.h"
#ifdef BOARD
#include "MovVideoContrl.h"
#include "MovFile.h"
#include "AudioControl.h"
#include "../audio/include/audio_globals.h"
#include "BrowserGlobal.h"
#include "MovVideoContrl.h"
#include "MovMacro.h"
#endif

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

EXT INT16U AudioPlayState;
/*************************************************************/
EXT void FileFuncInit(void);
EXT void AudioInitList(void);
EXT void AudioOutBufSwitch(void);
EXT int OpenTrack(void);
EXT int AACDecReset(void);

EXT LONG nSamplesPlayed; // 用于统计当前DMA送了多少个样点的音频数据,最大存放46ms左右的误差

/********************************************************************************************
*	Func:
*		MovAudioSeekTime()
*	Description:
*
*	Param:
*
*	Return:
*
*
*	Author:
*		guosl
*	Date:
*		2008-5-16	10:30
*	Log:
*
********************************************************************************************/

uint32 MovAudioSeekTime(uint32 msTime)
{
    uint32 SampleRate;

    if (CurrentCodec == CODEC_AMR)
    {
        SampleRate = 8000;
    }
    else
    {
        if (CurrentCodec == CODEC_AAC_DEC)
        {
            SampleRate = gMovFile.sampleRate;
        }
        else
        {
            return 1; // error
        }
    }
    if (CODEC_AC3_DEC == CurrentCodec)
        PMU_EnterModule(PMU_VIDEOLOW);
    CodecSeek(msTime, 0);
    nSamplesPlayed = ((msTime / 1000) * SampleRate) + (((msTime % 1000) * SampleRate) / 1000);
	return 0;
}

/********************************************************************************************
*	Func:
*		MovAudioGetCurTime()
*	Description:
*
*	Param:
*
*	Return:
*
*
*	Author:
*		guosl
*	Date:
*		2008-5-16	10:30
*	Log:
*
********************************************************************************************/

uint32 MovAudioGetCurTime(void)
{
	uint32 msTime = 0x0;
    uint32 SampleRate = 0x0;

    if (gMovFile.audioFlag == TRUE)
    {
        if (CurrentCodec == CODEC_AMR)
        {
           SampleRate = 8000;
        }
        else
        {
            if (CurrentCodec == CODEC_AAC_DEC)
            {
                SampleRate = gMovFile.sampleRate;
            }
            else
            {
                return 0; // error
            }
        }

        msTime = ((nSamplesPlayed / SampleRate) * 1000) +
                       (((nSamplesPlayed % SampleRate) * 1000) / SampleRate);
        return msTime;
    }
    else
    {
        return 0;
    }
}


/********************************************************************************************
*	Func:
*		MovAudioGetData()
*	Description:
*
*	Param:
*
*	Return:
*
*
*	Author:
*		guosl
*	Date:
*		2008-5-16	10:30
*	Log:
*
********************************************************************************************/

STATIC int MovAudioGetData(MY_FILE *fpNo, char *buffer, DWORD size)
{
#ifdef BOARD
    return (MovGetAudioData(buffer, size));
#endif
}

/********************************************************************************************
*	Func:
*		MovAudioGetLength()
*	Description:
*
*	Param:
*
*	Return:
*
*
*	Author:
*		guosl
*	Date:
*		2008-5-16	10:30
*	Log:
*
********************************************************************************************/

STATIC uint32 MovAudioGetLength(MY_FILE *in)
{
    return 0xfffffff;
}

/********************************************************************************************
*	Func:
*		MovAudioFSeek()
*	Description:
*
*	Param:
*
*	Return:
*
*
*	Author:
*		guosl
*	Date:
*		2008-5-16	10:30
*	Log:
*
********************************************************************************************/

STATIC uint32 MovAudioFSeek(MY_FILE *in, LONG off , uint32 b)
{
    MovAudioSeek(in, 0, b);
    return 1;
}

/********************************************************************************************
*	Func:
*		MovVideoFileFunInit()
*	Description:
*
*	Param:
*
*	Return:
*
*
*	Author:
*		guosl
*	Date:
*		2008-5-16	10:30
*	Log:
*
********************************************************************************************/
STATIC void MovVideoFileFunInit(void)
{
#ifdef BOARD
    FileFuncInit();
    RKFIO_FRead = (size_t (*)(MY_FILE *,void *, size_t ) )MovAudioGetData;
    RKFIO_FSeek = (int(*)(MY_FILE *, long int , int))MovAudioFSeek;
    RKFIO_FLength = (unsigned int (*)(MY_FILE *))MovAudioGetLength;
#endif
    return;
}


/********************************************************************************************
*	Func:
*		MovVideoDecMusicInit()
*	Description:
*
*	Param:
*
*	Return:
*
*
*	Author:
*		guosl
*	Date:
*		2008-5-16	10:30
*	Log:
*
********************************************************************************************/
STATIC BOOLEAN MovVideoDecMusicInit(void)
{
#ifdef BOARD
    ulEndOfRAM = (unsigned long)buff;
    Codec_SetMode(Codec_DACout);
#endif
    return TRUE;
}

/********************************************************************************************
*	Func:
*		MovVideoDecMusicStart()
*	Description:
*
*	Param:
*
*	Return:
*
*
*	Author:
*		guosl
*	Date:
*		2008-5-16	10:30
*	Log:
*
********************************************************************************************/

STATIC BOOLEAN MovVideoDecMusicStart(void)
{
#ifdef BOARD
    unsigned long Samplerate;
    Codec_DACMute();
    I2sStop();
    HDMA_Stop(0);
    AudioInitList();
    MovVideoFileFunInit();

	//audio format check
    switch (MovGetAudioFormat())
    {
        case AUDIO_CODEC_LIB_SAMR :
            CurrentCodec = CODEC_AMR;
            break;

        case AUDIO_CODEC_LIB_MP4A :
            CurrentCodec = CODEC_AAC_DEC;
            break;

        default :
            CurrentCodec = CODEC_AMR;
            break;
    }

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

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

    CodecGetSampleRate(&Samplerate);
    Codec_SetSampleRate(Samplerate);
    AudioIOBuf.lOutLength = 2048;
    MovAudioFSeek(gMovAudioFilePointer, 0, SEEK_SET);
    MovAudioSeekTime(0);
    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;
}


/********************************************************************************************
*	Func:
*		MovAudioStart()
*	Description:
*
*	Param:
*
*	Return:
*
*
*	Author:
*		guosl
*	Date:
*		2008-5-16	10:30
*	Log:
*
********************************************************************************************/

void MovAudioStart(void)
{
#ifdef BOARD
    pRawFileCache = NULL;
    nSamplesPlayed = 0;
    Codec_SetVolumet(OutputVolume);
    // RockOSSendMsg(MBAUDIO,AS_GUAU_VolumeSet,(void*)OutputVolume);
    MovVideoDecMusicInit();
    MovVideoDecMusicStart();
#endif

    return;
}

/********************************************************************************************
*	Func:
*		MovAudioCtrl()
*	Description:
*
*	Param:
*
*	Return:
*
*
*	Author:
*		guosl
*	Date:
*		2008-5-16	10:30
*	Log:
*
********************************************************************************************/
void MovAudioCtrl(int cmd)
{
    switch (cmd)
    {
	    case MOV_AUDIO_CTRL_START :
		    MovAudioStart();
		    break;

	    case MOV_AUDIO_CTRL_PAUSE :
		    RockOSSendMsg(MBAUDIO, AS_GUAU_Pause, NULL);
		    break;

	    case MOV_AUDIO_CTRL_FFD :
		    AudioPlayState = Audio_State_FFD;
		    break;

	    case MOV_AUDIO_CTRL_FFW :
		    AudioPlayState = Audio_State_FFW;
		    break;

	    case MOV_AUDIO_CTRL_RESUME :
		    RockOSSendMsg(MBAUDIO, AS_GUAU_Resume, NULL);
            break;

         case MOV_AUDIO_CTRL_STOP :
    	    RockOSSendMsg(MBAUDIO, AS_GUAU_VideoAudioStop, NULL);
    	    break;

	     default :
	        break;
    }

    return;

}

⌨️ 快捷键说明

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