2708|3

80

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

主管叫我看tcpmp播放器,求求你帮我,下面这句代码看了半年了555555 [复制链接]

主管叫我看tcpmp播放器,找出解码代码的接口!!
该如何去找关于音视频解码部分接口呢?

它是由14个项目组成的,其中主工程是一个叫player的,里面代码如下:

#include "../common/common.h"

static const tchar_t ProgramName[] = T("TCPMP");
static const tchar_t ProgramVersion[] =
#include "../version"
;

#ifndef STRICT
#define STRICT
#endif
#include

#if defined(TARGET_WINCE)
#define TWIN(a) L ## a
extern int ProgramId;
#else
#define TWIN(a) a
static int ProgramId = 0;
#endif

// don't want to use common.dll, but don't want to collide with DLL import function either
#define tcscpy_s _tcscpy_s

#if !defined(NO_PLUGINS) || defined(NDEBUG)
static void tcscpy_s(tchar_t* Out,int OutLen,const tchar_t* In)
{
if (OutLen>0)
{
int n = min((int)tcslen(In),OutLen-1);
memcpy(Out,In,n*sizeof(tchar_t));
Out[n] = 0;
}
}
#endif

#ifdef NDEBUG
static BOOL CALLBACK EnumWindowsProc(HWND Wnd,LPARAM Param)
{
HWND* p = (HWND*)Param;
if (GetWindow(Wnd,GW_OWNER) == *p)
{
*p = Wnd;
return 0;
}
return 1;
}

static bool_t FindRunning(const tchar_t* CmdLine)
{
HWND Wnd;
tchar_t ClassName[32];
int n = tcslen(ProgramName);
tcscpy_s(ClassName,TSIZEOF(ClassName),ProgramName);
tcscpy_s(ClassName+n,TSIZEOF(ClassName)-n,T("_Win"));
Wnd = FindWindow(ClassName, NULL);
if (Wnd)
{
HWND WndMain = Wnd;

while (!IsWindowEnabled(Wnd))
{
HWND Last = Wnd;
EnumWindows(EnumWindowsProc,(LPARAM)&Wnd);
if (Wnd == Last)
break;
}

SetForegroundWindow(Wnd);

if (CmdLine && CmdLine[0])
{
COPYDATASTRUCT Data;
Data.dwData = 0;
Data.cbData = (tcslen(CmdLine)+1)*sizeof(tchar_t);
Data.lpData = (PVOID)CmdLine;
SendMessage(WndMain,WM_COPYDATA,(WPARAM)WndMain,(LPARAM)&Data);
}

return 1;
}
return 0;
}
#endif

#ifdef NO_PLUGINS
extern void Main(const tchar_t* Name,const tchar_t* Version,int Id,const tchar_t* CmdLine);
#else
static HANDLE Load(const tchar_t* Name)
{
HANDLE Module;
tchar_t Path[MAXPATH];
tchar_t *s;
GetModuleFileName(NULL,Path,MAXPATH);
s = tcsrchr(Path,'\\');
if (s) s[1]=0;
tcscpy_s(Path+tcslen(Path),TSIZEOF(Path)-tcslen(Path),Name);
Module = LoadLibrary(Path);
if (!Module)
Module = LoadLibrary(Name);
return Module;
}
#endif

#if !defined(TARGET_WINCE) && defined(UNICODE)
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hParent,LPSTR CmdA,int CmdShow)
{
WCHAR Cmd[2048];
mbstowcs(Cmd,CmdA,sizeof(Cmd)/sizeof(WCHAR)); //!!!
#else
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hParent,TCHAR* Cmd,int CmdShow)
{
#endif

#ifndef NDEBUG
// DLLTest(); // just to help debugging plugins. comment out if not needed
Context();
#endif

#if defined(TARGET_WINCE) && defined(ARM)
if (ProgramId == 2)
{
OSVERSIONINFO Ver;
Ver.dwOSVersionInfoSize = sizeof(Ver);
GetVersionEx(&Ver);
if (Ver.dwMajorVersion*100 + Ver.dwMinorVersion >= 421)
{
// old shell menu not supported after WM2003SE
MessageBox(NULL,T("This ARM_CE2 version of the player is not compatible with this device. Please install ARM_CE3 version."),NULL,MB_OK|MB_ICONERROR);
return 1;
}
}
#endif

#ifdef NDEBUG
if (!FindRunning(Cmd))
{
HANDLE Handle = CreateMutex(NULL,FALSE,ProgramName);
if (GetLastError() != ERROR_ALREADY_EXISTS)
#endif
{
#ifndef NO_PLUGINS
HMODULE Module;
SetCursor(LoadCursor(NULL, IDC_WAIT));
Module = Load(T("interface.plg"));
if (Module)
{
void (*Main)(const tchar_t* Name,const tchar_t* Version,int Id,const tchar_t* CmdLine);
*(FARPROC*)&Main = GetProcAddress(Module,TWIN("Main"));
if (!Main)
*(FARPROC*)&Main = GetProcAddress(Module,TWIN("_Main@16"));
if (Main)
Main(ProgramName,ProgramVersion,ProgramId,Cmd);
FreeLibrary(Module);
}
#else
Main(ProgramName,ProgramVersion,ProgramId,Cmd);
#endif
#ifdef NDEBUG
CloseHandle(Handle);
#endif
SetCursor(LoadCursor(NULL, IDC_ARROW));
}
#ifdef NDEBUG
}
#endif
return 0;
}

最新回复

mark  详情 回复 发表于 2010-2-1 10:20
点赞 关注

回复
举报

73

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
从TCPMP的结构组成下手。
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
把每个功能看成一个窗体类的对象,在窗体上贴图画图实现点击功能并加入TCPMP的实际对照功能即可,这个只是简单的界面制作了。个人感觉TCPMP的难点还是在他的解码上。还有如何使用所带的库,如何使用能让播放的效果更好,整个播放器运行的更流畅。也是个需要研究的东西。。
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

4
 
mark
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表