📄 asfaudiocontrol.c
字号:
/******************************************************************/
/* Copyright (C) 2007 ROCK-CHIPS FUZHOU . All Rights Reserved. */
/*******************************************************************
File : AsfAudioControl.c
Desc : 主界面窗口
Author :
Date : 2007-08-24
Notes :
$Log :
*********************************************************************/
#include "include.h"
#include "system.h"
#include "../browser/BrowserStruct.h"
#ifdef BOARD
#include "../video/ASF/AsfFile.h"
#include "AudioControl.h"
#include "../audio/include/audio_globals.h"
#include "BrowserGlobal.h"
#include "AsfMacro.h"
#include "../VideoCodecs/VideoCodecs.h"
#include "AsfVideoControl.h"
#endif
/*********************************declare********************************/
#ifdef BOARD
extern SYS_FILE_INFO VideoFileInfo;
extern MY_FILE * pRawFileCache;
extern BACKGRND gScreen;
/*************************************************************/
extern MY_FILE * pRawFileCache;
extern short VideoPlaying;
extern INT16U AudioPlayState;
extern REG_AUDIOCONFIG* pAudioRegKey;
extern unsigned long ulEndOfRAM;
extern video_interface_t video_interface_wmv;
/*************************************************************/
extern void AudioStart(void);
extern BOOLEAN AudioDecInit(MY_FILE* pHandle);
extern void FileFuncInit(void);
extern int WMAFileSeekFast(void *hstate, unsigned long cbOffset);
/*************************************************************/
#endif
unsigned long nSamplesPlayed; // 用于统计当前DMA送了多少个样点的音频数据,最大存放46ms左右的误差
int AsfAudioSeek(int msTime)
{
int offset;
int ret;
int SampleRate = pAudioRegKey->Samplerate;
if (video_interface_wmv.audio_flag)
{
AudioPlayState = Audio_State_FFD;
//CodecSeek(msTime,0);
offset = AsfSeekAudioPkt(&asf, &msTime);
VideoAudioStop(0);
if (AudioDecInit(pRawFileCache) != TRUE)
return;
if (offset)
{
if (!WMAFileSeekFast((void*)ulEndOfRAM, offset))
nSamplesPlayed = ((msTime / 1000) * SampleRate) + (((msTime % 1000) * SampleRate) / 1000);
}
RockOSSendMsg(MBAUDIO, AS_GUAU_Resume, NULL);
}
return 0;
}
int AsfAudioGetCurTime(void)
{
unsigned long msTime;
if (video_interface_wmv.audio_flag)
{
#if 0
CodecGetTime(&msTime);
return (int)((msTime > 150) ? (msTime - 150) : 0);
#else
unsigned long SampleRate = pAudioRegKey->Samplerate;
msTime = ((nSamplesPlayed / SampleRate) * 1000) +
(((nSamplesPlayed % SampleRate) * 1000) / SampleRate);
return msTime;
#endif
}
else
{
return 0;
}
}
int AsfAudioStart(void)
{
#ifdef BOARD
char path[FS_MAX_PATH_LEN];
RKmemcpy(path, VideoFileInfo.Path, FS_MAX_PATH_LEN);
RKstrcat(path, VideoFileInfo.Name);
pRawFileCache = AsfFopen(path, "rb");
if (pRawFileCache == NULL)
return FALSE;
VideoPlaying = 1;
nSamplesPlayed = 0;
CurrentCodec = CODEC_WMA;
FileFuncInit();
if (AudioDecInit(pRawFileCache) != TRUE)
return FALSE;
return TRUE;
#endif
}
int AsfAudioCtrl(int cmd)
{
switch (cmd)
{
case ASF_AUDIO_CTRL_START:
return AsfAudioStart();
break;
case ASF_AUDIO_CTRL_PAUSE:
RockOSSendMsg(MBAUDIO, AS_GUAU_Pause, NULL);
break;
case ASF_AUDIO_CTRL_FFD:
AudioPlayState = Audio_State_FFD;
break;
case ASF_AUDIO_CTRL_FFW:
AudioPlayState = Audio_State_FFW;
break;
case ASF_AUDIO_CTRL_RESUME:
RockOSSendMsg(MBAUDIO, AS_GUAU_Resume, NULL);
break;
case ASF_AUDIO_CTRL_STOP:
if (pRawFileCache != NULL)
{
AsfFClose(pRawFileCache);
pRawFileCache = NULL;
}
RockOSSendMsg(MBAUDIO, AS_GUAU_VideoAudioStop, NULL);
break;
default:
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -