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

📄 gspmp4.cpp

📁 WINCE mp4 format source
💻 CPP
字号:
#include <windows.h>
#include <tchar.h>
#ifndef _WIN32_WCE
#include <mmsystem.h>
#endif
#include "mapplugin.h"

#include "in_mp4.h"

MAP_DEC_PLUGIN plugin = {0};
CRITICAL_SECTION g_csec;

void WINAPI mp4Init()
{
	InitializeCriticalSection(&g_csec);
}

void WINAPI mp4Quit()
{
	DeleteCriticalSection(&g_csec);
}

DWORD WINAPI mp4GetFunc()
{
	return PLUGIN_FUNC_DECFILE | PLUGIN_FUNC_SEEKFILE | PLUGIN_FUNC_FILETAG | PLUGIN_FUNC_DECSTREAMING;
}

BOOL WINAPI mp4GetPluginName(LPTSTR pszName)
{
	_tcscpy(pszName, _T("GreenSoftware AAC(MP4/M4A) Plug-in"));
	return FALSE;
}

BOOL WINAPI mp4SetEqualizer(MAP_PLUGIN_EQ* pEQ)
{
	return FALSE;
}

void WINAPI mp4ShowConfigDlg(HWND hwndParent)
{
	MessageBox(hwndParent, _T("GreenSoftware AAC(MP4/M4A) Plug-in v1.03\nCopyright(C) 2007 GreenSoftware"), _T("About"), MB_ICONINFORMATION);
}

int WINAPI mp4GetFileExtCount()
{
	return 4;
}

BOOL WINAPI mp4GetFileExt(int nIndex, LPTSTR pszExt, LPTSTR pszExtDesc)
{
	switch (nIndex) {
	case 0:
		_tcscpy(pszExt, _T("mp4"));
		_tcscpy(pszExtDesc, _T("MPEG-4 Files (*.mp4)"));
		return TRUE;
	case 1:
		_tcscpy(pszExt, _T("m4a"));
		_tcscpy(pszExtDesc, _T("MPEG-4 Audio Files (*.m4a)"));
		return TRUE;
	case 2:
		_tcscpy(pszExt, _T("aac"));
		_tcscpy(pszExtDesc, _T("AAC Files (*.aac)"));
		return TRUE;
	case 3:
		_tcscpy(pszExt, _T("3gp"));
		_tcscpy(pszExtDesc, _T("3GP Files (*.3gp)"));
		return TRUE;
	}
	return FALSE;
}

BOOL WINAPI mp4IsValidFile(LPCTSTR pszFile)
{
	return isourfile((TCHAR*)pszFile);
}

BOOL WINAPI mp4OpenFile(LPCTSTR pszFile, MAP_PLUGIN_FILE_INFO* pInfo)
{
	if (open((TCHAR*)pszFile)) {
		memset(&mp4state, 0, sizeof(state));
		return FALSE;
	}

	pInfo->nAvgBitrate = mp4state.avg_bitrate / 1000;
	pInfo->nBitsPerSample = 16;
	pInfo->nChannels = mp4state.channels;
	pInfo->nDuration = mp4state.m_length;
	pInfo->nSampleRate = mp4state.samplerate;

	return TRUE;
}

long WINAPI mp4SeekFile(long lTime)
{
	EnterCriticalSection(&g_csec);
	long ret = setoutputtime(lTime);
	LeaveCriticalSection(&g_csec);
	return ret;
}

BOOL WINAPI mp4StartDecodeFile()
{
	return start() ? TRUE : FALSE;
}

int  WINAPI mp4DecodeFile(WAVEHDR* pHdr)
{
	EnterCriticalSection(&g_csec);
	int ret = decode((uint8_t*)pHdr->lpData, pHdr->dwBufferLength, &pHdr->dwBytesRecorded);
	LeaveCriticalSection(&g_csec);
	return ret;
}

void WINAPI mp4StopDecodeFile()
{
	stop();
}

void WINAPI mp4CloseFile()
{
	close();
}

BOOL WINAPI mp4GetTag(MAP_PLUGIN_FILETAG* pTag)
{
	return gettag(pTag) ? TRUE : FALSE;
}

BOOL WINAPI mp4GetFileTag(LPCTSTR pszFile, MAP_PLUGIN_FILETAG* pTag)
{
	return getfiletag(pszFile, pTag) ? TRUE : FALSE;
}

BOOL WINAPI mp4OpenStreaming(LPBYTE pbBuf, DWORD cbBuf, MAP_PLUGIN_STREMING_INFO* pInfo)
{
	return open_streaming(pbBuf, cbBuf, pInfo) ? TRUE : FALSE;
}

int WINAPI mp4DecodeStreaming(LPBYTE pbInBuf, DWORD cbInBuf, DWORD* pcbInUsed, WAVEHDR* pHdr)
{
	return decode_streaming(pbInBuf, cbInBuf, pcbInUsed, pHdr);
}

void WINAPI mp4CloseStreaming()
{
	close_streaming();
}


MAP_DEC_PLUGIN* WINAPI mapGetDecoder()
{
	plugin.dwVersion = PLUGIN_DEC_VER;
	plugin.dwChar = sizeof(TCHAR);
	plugin.Init = mp4Init;
	plugin.Quit = mp4Quit;
	plugin.GetFunc = mp4GetFunc;
	plugin.GetPluginName = mp4GetPluginName;
	plugin.GetFileExtCount = mp4GetFileExtCount;
	plugin.GetFileExt = mp4GetFileExt;
	plugin.SetEqualizer = mp4SetEqualizer;
	plugin.IsValidFile = mp4IsValidFile;
	plugin.ShowConfigDlg = mp4ShowConfigDlg;
	plugin.OpenFile = mp4OpenFile;
	plugin.SeekFile = mp4SeekFile;
	plugin.StartDecodeFile = mp4StartDecodeFile;
	plugin.DecodeFile = mp4DecodeFile;
	plugin.StopDecodeFile = mp4StopDecodeFile;
	plugin.CloseFile = mp4CloseFile;
	plugin.OpenStreaming = mp4OpenStreaming;
	plugin.DecodeStreaming = mp4DecodeStreaming;
	plugin.CloseStreaming = mp4CloseStreaming;
	plugin.GetTag = mp4GetTag;
	plugin.GetFileTag = mp4GetFileTag;

	return &plugin;
}

⌨️ 快捷键说明

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