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

📄 maicomp.cpp

📁 This the source release kit for the following system configuration(s): - AMD Alchemy(TM) DBAu1200(
💻 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 + -