📄 maicomp.cpp
字号:
//------------------------------------------------------------------------------
// File: maicomp.cpp
//------------------------------------------------------------------------------
#include <windows.h>
#include <stdio.h>
#include "maicomp.h"
#include "debug.h"
static ActiveCompInfo_t g_LoadedComp = {0 /*loaded*/};
#ifdef UNDER_CE
#define LIBPATH TEXT("h264dec.dll")
#elif WIN32
#define LIBPATH TEXT("c:\\AMD\\h264dec.dll")
#endif
LibHandle_t OpenLib(m_tchar *pszLibPath)
{
LibHandle_t hlib=NULL;
hlib = (LibHandle_t)LoadLibrary(pszLibPath);
if (!hlib)
{
DP_ERROR((TEXT("Failed to load library %s"), pszLibPath));
}
return hlib;
}
void *LibGetPointerOS(LibHandle_t hlib, m_tchar *pszSymbolName)
{
void *ptr=NULL;
ptr = (void *)GetProcAddress((HMODULE)hlib, pszSymbolName);
if (!ptr)
{
DP_ERROR((TEXT("Failed to GetProcAddress %s"), pszSymbolName));
}
return ptr;
}
int LibCloseOS(LibHandle_t hlib)
{
int eResult = DIU_STATUS_OK;
if (!FreeLibrary((HMODULE)hlib))
{
DP_ERROR((TEXT("Failed to FreeLibrary")));
eResult=DIU_STATUS_ERROR;
}
return eResult;
}
DIUCompHandle_t LoadLib(TCHAR *pszLibName, unsigned char *pucGUID)
{
ActiveCompInfo_t *pLoadInfo=NULL;
if (!g_LoadedComp.bLoaded)
{
pLoadInfo = &g_LoadedComp;
}
else
{
/* component already loaded return it*/
DP_WARNING((TEXT("LoadLib %s already loaded"), pszLibName));
return &g_LoadedComp;
}
/* load the component */
memset(pLoadInfo, 0, sizeof(ActiveCompInfo_t));
pLoadInfo->eCompID=0;
pLoadInfo->hLib=OpenLib(pszLibName);
if (pLoadInfo->hLib)
{
pLoadInfo->pfCompCreate=(pfDIUCompCreate_t)LibGetPointerOS(pLoadInfo->hLib, TEXT("DIUCompCreate"));
if (!pLoadInfo->pfCompCreate)
{
DP_ERROR((TEXT("ERROR - Failed to locate pfCompCreate in Component library: %s"), pszLibName));
LibCloseOS(pLoadInfo->hLib);
}
else
{
pLoadInfo->bLoaded = 1;
pLoadInfo->pfCompCreate = (pfDIUCompCreate_t)LibGetPointerOS(pLoadInfo->hLib, TEXT("DIUCompCreate"));
pLoadInfo->pfCompRelease = (pfDIUCompRelease_t)LibGetPointerOS(pLoadInfo->hLib, TEXT("DIUCompRelease"));
if (pLoadInfo->pfCompCreate)
{
pLoadInfo->pfCompCreate(pucGUID, &pLoadInfo->hComp);
}
}
}
else
{
DP_ERROR((TEXT("ERROR - Failed to open Component library: %s"), pszLibName));
}
return pLoadInfo->hComp;
}
int DecoderOpen(DIUCompHandle_t *phComp)
{
int eResult = DIU_STATUS_ERROR;
DIUCompHandle_t hComp = M_HANDLE_INVALID;
hComp = LoadLib(LIBPATH, (unsigned char *)0);
if (hComp != M_HANDLE_INVALID) /* component loaded */
eResult = DIU_STATUS_OK;
else
{
DP_ERROR((TEXT("Failed to load component %s\n"), LIBPATH));
}
*phComp=hComp;
return eResult;
}
void DecoderClose(DIUCompHandle_t hComp)
{
ActiveCompInfo_t *pLoadInfo=NULL;
/* locate the component's ActiveCompInfo */
if (hComp == g_LoadedComp.hComp)
{
pLoadInfo=&g_LoadedComp;
}
if (pLoadInfo && pLoadInfo->bLoaded)
{
pLoadInfo->pfCompRelease(pLoadInfo->hComp);
pLoadInfo->hComp=M_HANDLE_INVALID;
pLoadInfo->bLoaded=0;
LibCloseOS(pLoadInfo->hLib);
memset(pLoadInfo, 0, sizeof(ActiveCompInfo_t));
DP_INFO((TEXT("DecoderClose unloaded successfully")));
return;
}
DP_ERROR((TEXT("DecoderClose failed to unload decoder")));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -