📄 movaudiocontrol.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 + -