coloracc.cpp
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:20k
源码类别:

Symbian

开发平台:

C/C++

  1. /* ***** BEGIN LICENSE BLOCK ***** 
  2.  * Version: RCSL 1.0/RPSL 1.0 
  3.  *  
  4.  * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved. 
  5.  *      
  6.  * The contents of this file, and the files included with this file, are 
  7.  * subject to the current version of the RealNetworks Public Source License 
  8.  * Version 1.0 (the "RPSL") available at 
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed 
  10.  * the file under the RealNetworks Community Source License Version 1.0 
  11.  * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl, 
  12.  * in which case the RCSL will apply. You may also obtain the license terms 
  13.  * directly from RealNetworks.  You may not use this file except in 
  14.  * compliance with the RPSL or, if you have a valid RCSL with RealNetworks 
  15.  * applicable to this file, the RCSL.  Please see the applicable RPSL or 
  16.  * RCSL for the rights, obligations and limitations governing use of the 
  17.  * contents of the file.  
  18.  *  
  19.  * This file is part of the Helix DNA Technology. RealNetworks is the 
  20.  * developer of the Original Code and owns the copyrights in the portions 
  21.  * it created. 
  22.  *  
  23.  * This file, and the files included with this file, is distributed and made 
  24.  * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  25.  * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  26.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS 
  27.  * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  28.  * 
  29.  * Technology Compatibility Kit Test Suite(s) Location: 
  30.  *    http://www.helixcommunity.org/content/tck 
  31.  * 
  32.  * Contributor(s): 
  33.  *  
  34.  * ***** END LICENSE BLOCK ***** */ 
  35. #include "hxtypes.h"
  36. #ifdef _WINDOWS
  37. #ifdef _WIN16
  38. #include <stdlib.h>
  39. #endif
  40. #include <windows.h>
  41. #include <ctype.h>
  42. #endif
  43. #ifdef _MACINTOSH
  44. #include <ctype.h>
  45. #endif
  46. #include "hxresult.h"
  47. #include "hxassert.h"
  48. #include "debug.h"
  49. #include "hxcom.h"
  50. #include "hxbuffer.h"
  51. #include "hxprefs.h"
  52. #include "hxplugn.h"
  53. #include "hxerror.h"
  54. #include "hxengin.h"
  55. #include "dllacces.h"
  56. #include "dllpath.h"
  57. #include "hxheap.h"
  58. #ifdef _DEBUG
  59. #undef HX_THIS_FILE     
  60. static const char HX_THIS_FILE[] = __FILE__;
  61. #endif
  62. #include "coloracc.h"
  63. #include "hxdir.h"
  64. #define WRONG_HXCOLOR_VERSION 0
  65. ColorFuncAccess::ColorFuncAccess(IUnknown* pContext)
  66.     : m_pDllAccess(NULL)
  67.     , hStatus(HXR_OK)
  68.     , m_fpGetHXColorGUID(NULL)
  69.     , m_fpInitColorConverter(NULL)
  70.     , m_fpSetColorAdjustments(NULL)
  71.     , m_fpGetColorAdjustments(NULL)
  72.     , m_SuggestRGB8Palette(NULL)
  73.     , m_SetRGB8Palette(NULL)
  74.     , m_fpSetSharpnessAdjustments(NULL)
  75.     , m_fpGetSharpnessAdjustments(NULL)
  76.     , m_fpConvertRGBtoYUV(NULL)
  77.     , m_fpI420andYUVA(NULL)
  78.     , m_fpI420andI420toI420(NULL)
  79.     , m_fpConvertYUVtoRGB(NULL)
  80.     , m_fpEnhance(NULL)
  81.     , m_fpEnhanceUniform(NULL)
  82.     , m_fpConvertRGB24ToXRGB(NULL)
  83.     , m_fpScanAllCompatibleColorFormats(NULL)
  84.     , m_fpGetColorConverter(NULL)
  85.     , m_fpGetColorConverterx(NULL)
  86.     , m_bLightColorConverter(FALSE)
  87. #ifdef _WINDOWS
  88.     , m_fpInitColorConverter2(NULL)
  89.     , m_fpSetColorAdjustments2(NULL)
  90.     , m_fpGetColorConverter2(NULL)
  91.     , m_fpGetColorConverter2x(NULL)
  92.     , m_fpUpgradeColorConverter(NULL)
  93.     , m_pPlayer(NULL)
  94. #endif
  95. {
  96.     UINT32 uDLLNameLen = MAX_DLL_NAME_LEN;
  97.     m_pContext = pContext;
  98.     if (m_pContext)
  99.     {
  100.         m_pContext->AddRef();
  101.     }
  102.     // If the Codec directory is not currently specified, set it
  103. #ifndef _VXWORKS
  104.     if (!GetDLLAccessPath()->GetPath(DLLTYPE_CODEC))
  105.     {
  106.         SetCodecDir();
  107.     }
  108.     if (GetDLLAccessPath()->GetPath(DLLTYPE_CODEC))
  109.     {
  110. #endif // _VXWORKS
  111.         m_pDllAccess = new DLLAccess;
  112.         if (m_pDllAccess)
  113.         {
  114.             /*
  115.              *  Attempt to load the full version 1st
  116.              */
  117.             DLLAccess::CreateName("colorcvt", "colorcvt", m_pDllName, uDLLNameLen);
  118.             if (DLLAccess::DLL_OK != m_pDllAccess->open(m_pDllName, DLLTYPE_CODEC))
  119.             {
  120.                 /*
  121.                  *  Ok, the full version of hxcolor was
  122.                  *  missing. Perhaps we have the lite version?
  123.                  */
  124.                 uDLLNameLen = MAX_DLL_NAME_LEN;
  125.                 DLLAccess::CreateName("hxltcolor", "hxltcolor", m_pDllName, uDLLNameLen);
  126.                 if (DLLAccess::DLL_OK != m_pDllAccess->open(m_pDllName, DLLTYPE_CODEC))
  127.                 {
  128.                     hStatus = HXR_FAIL;
  129.                 }
  130.                 else
  131.                 {
  132.                     m_bLightColorConverter = TRUE;
  133.                 }
  134.             }
  135.         
  136.             if (hStatus == HXR_FAIL)
  137.             {
  138.                 delete m_pDllAccess;
  139.                 m_pDllAccess = NULL;
  140.                 PANIC(("Unable to load a color conversion library! n"));
  141.             }
  142.             else
  143.             {
  144.                 LoadConversionFunctions();
  145.             }
  146.         }
  147. #ifndef _VXWORKS
  148.     }
  149.     else
  150.     {
  151.         PANIC(("Unable to locate codec directory! Cannot load the"
  152.                "HXColor library!n"));
  153.     }
  154. #endif
  155. //    HX_RELEASE(pContext);
  156. }
  157. ColorFuncAccess::~ColorFuncAccess()
  158. {
  159.     if (m_pDllAccess)
  160.     {
  161.         m_pDllAccess->close();
  162.         delete m_pDllAccess;
  163.         m_pDllAccess = NULL;
  164.     }
  165. #ifdef _WINDOWS
  166.     HX_RELEASE(m_pPlayer);
  167. #endif
  168.     HX_RELEASE(m_pContext);
  169. }
  170. HX_RESULT
  171. ColorFuncAccess::GetHXColorGUID(UCHAR* pGUID)
  172. {
  173.     HX_RESULT ret = HXR_FAIL;
  174.     UCHAR guid[16];
  175.     if(m_fpGetHXColorGUID && pGUID)
  176.     {
  177.         ret = m_fpGetHXColorGUID(guid);
  178.         if(ret == HXR_OK)
  179.         {
  180.             memcpy(pGUID, guid, sizeof(GUID)); /* Flawfinder: ignore */
  181.         }
  182.     }
  183.     return ret;
  184. }
  185. void
  186. ColorFuncAccess::InitColorConverter()
  187. {
  188. #ifdef _WINDOWS
  189.     if (m_fpInitColorConverter2 && m_pContext)
  190.     {
  191.         m_fpInitColorConverter2(m_pContext);
  192.     }
  193.     else
  194. #endif
  195.         if (m_fpInitColorConverter)
  196.         {
  197.             m_fpInitColorConverter();
  198.         }
  199. }
  200. void
  201. ColorFuncAccess::SetColorAdjustments(float Brightness, float Contrast,
  202.                                      float Saturation, float Hue)
  203. {
  204. #ifdef _WINDOWS
  205.     if (m_fpSetColorAdjustments2 && m_pContext)
  206.     {
  207.         m_fpSetColorAdjustments2(m_pContext, Brightness, Contrast, Saturation, Hue);
  208.     }
  209.     else
  210. #endif
  211.         if (m_fpSetColorAdjustments)
  212.         {
  213.             m_fpSetColorAdjustments(Brightness, Contrast, Saturation, Hue);
  214.         }
  215. }
  216. void
  217. ColorFuncAccess::GetColorAdjustments(float *Brightness, float *Contrast,
  218.                                      float *Saturation, float *Hue)
  219. {
  220.     if (m_fpGetColorAdjustments)
  221.     {
  222.         m_fpGetColorAdjustments(Brightness, Contrast, Saturation, Hue);
  223.     }
  224. }
  225. int ColorFuncAccess::SuggestRGB8Palette (int nColors, UINT32 *lpRGBVals)
  226. {
  227.     return m_SuggestRGB8Palette? m_SuggestRGB8Palette(nColors, lpRGBVals): -1;
  228. }
  229. int ColorFuncAccess::SetRGB8Palette (int nColors, UINT32 *lpRGBVals, int *lpIndices)
  230. {
  231.     return m_SetRGB8Palette? m_SetRGB8Palette(nColors, lpRGBVals, lpIndices): -1;
  232. }
  233. void
  234. ColorFuncAccess::SetSharpnessAdjustments(float Sharpness, INT16 nExpand)
  235. {
  236.     if (m_fpSetSharpnessAdjustments)
  237.     {
  238.         m_fpSetSharpnessAdjustments(Sharpness,nExpand);
  239.     }
  240. }
  241. void
  242. ColorFuncAccess::GetSharpnessAdjustments(float *Sharpness, INT16 *nExpand)
  243. {
  244.     if (m_fpGetSharpnessAdjustments)
  245.     {
  246.         m_fpGetSharpnessAdjustments(Sharpness,nExpand);
  247.     }
  248. }
  249. void
  250. ColorFuncAccess::ConvertRGBtoYUV(UCHAR* pInput, UCHAR* pOutput, INT32 nWidth,
  251.                                  INT32 nHeight, BOOL bBGR)
  252. {
  253.     if (m_fpConvertRGBtoYUV)
  254.     {
  255.         m_fpConvertRGBtoYUV(pInput, pOutput, nWidth, nHeight, bBGR);
  256.     }
  257. }
  258. void
  259. ColorFuncAccess::ConvertYUVtoRGB(UCHAR* ySrc, UCHAR* uSrc, UCHAR* vSrc,
  260.                                  INT32 nPitchSrc, UCHAR* Dst, INT32 nWidth,
  261.                                  INT32 nHeight, INT32 nPitchDst, INT16 nFormat,
  262.                                  INT16 nExpand)
  263. {
  264.     if (m_fpConvertYUVtoRGB)
  265.     {
  266.         m_fpConvertYUVtoRGB(ySrc, uSrc, vSrc, nPitchSrc, Dst,
  267.                             nWidth, nHeight, nPitchDst, nFormat, nExpand);
  268.     }
  269. }
  270. void ColorFuncAccess::Enhance(UCHAR *yuv420in, INT32 inheight, INT32  inwidth, INT32 pitchSrc, float Sharpness)
  271. {
  272.     if (m_fpEnhance)
  273.     {
  274.         m_fpEnhance(yuv420in, inheight, inwidth, pitchSrc, Sharpness);
  275.     }
  276. }
  277. void ColorFuncAccess::EnhanceUniform(UCHAR *yuv420in, INT32 inheight, INT32  inwidth, INT32 pitchSrc, float Sharpness)
  278. {
  279.     if (m_fpEnhanceUniform)
  280.     {
  281.         m_fpEnhanceUniform(yuv420in, inheight, inwidth, pitchSrc, Sharpness);
  282.     }
  283. }
  284. void
  285. ColorFuncAccess::ConvertRGB24toXRGB( UCHAR* pSrc, UCHAR* pDest, ULONG32 srcSize, ULONG32 destSize, INT32 nWidth, INT32 nHeight)
  286. {
  287.     if (m_fpConvertRGB24ToXRGB)
  288.     {
  289.         m_fpConvertRGB24ToXRGB(pSrc,pDest,srcSize,destSize,nWidth,nHeight);
  290.     }
  291. }
  292. int ColorFuncAccess::I420andYUVA(
  293.     unsigned char *src1_ptr, int src1_pels,   int src1_lines,  int src1_pitch,
  294.     int src1_startx, int src1_starty,
  295.     unsigned char *src2_ptr, int src2_pels,   int src2_lines,  int src2_pitch,
  296.     int src2_startx, int src2_starty,
  297.     unsigned char *dest_ptr, int dest_pels,   int dest_lines,  int dest_pitch,
  298.     int dest_startx, int dest_starty,
  299.     int width,  int height,  int color_format)
  300. {
  301.     if( m_fpI420andYUVA )
  302.     {
  303.         return m_fpI420andYUVA( src1_ptr, src1_pels, src1_lines, src1_pitch,
  304.                                 src1_startx, src1_starty,
  305.                                 src2_ptr, src2_pels, src2_lines, src2_pitch,
  306.                                 src2_startx, src2_starty,
  307.                                 dest_ptr, dest_pels, dest_lines, dest_pitch,
  308.                                 dest_startx, dest_starty, width, height,
  309.                                 color_format);
  310.     }
  311.     return HXR_FAIL;
  312. }
  313. int ColorFuncAccess::I420andI420toI420(
  314.     unsigned char *src1_ptr, int src1_pels,   int src1_lines,  int src1_pitch,
  315.     int src1_startx, int src1_starty,
  316.     unsigned char *src2_ptr, int src2_pels,   int src2_lines,  int src2_pitch,
  317.     int src2_startx, int src2_starty,
  318.     unsigned char *dest_ptr, int dest_pels,   int dest_lines,  int dest_pitch,
  319.     int dest_startx, int dest_starty,
  320.     int width,  int height,  int alpha )
  321. {
  322.     if( m_fpI420andI420toI420 )
  323.     {
  324.         return m_fpI420andI420toI420( src1_ptr, src1_pels, src1_lines, src1_pitch,
  325.                                       src1_startx, src1_starty,
  326.                                       src2_ptr, src2_pels, src2_lines, src2_pitch,
  327.                                       src2_startx, src2_starty,
  328.                                       dest_ptr, dest_pels, dest_lines, dest_pitch,
  329.                                       dest_startx, dest_starty, width, height,
  330.                                       alpha);
  331.     }
  332.     return HXR_FAIL;
  333. }
  334. LPHXCOLORCONVERTER ColorFuncAccess::GetColorConverter (INT32 cidIn, INT32 cidOut)
  335. {
  336. #ifdef _WINDOWS
  337.     if (m_fpGetColorConverter2 && m_pContext)
  338.     {
  339.         LPHXCOLORCONVERTER colorConverter = m_fpGetColorConverter2(m_pContext, cidIn, cidOut);
  340.         if (!colorConverter)
  341.             m_fpUpgradeColorConverter(m_pContext,m_pPlayer, cidIn, cidOut);
  342.         else
  343.             return colorConverter;
  344.     }
  345.     else
  346. #endif
  347.         if (m_fpGetColorConverter)
  348.         {
  349.             return m_fpGetColorConverter(cidIn, cidOut);
  350.         }
  351.     return NULL;
  352. }
  353. LPHXCOLORCONVERTER2 ColorFuncAccess::GetColorConverter2 (INT32 cidIn, INT32 cidOut)
  354. {
  355. #ifdef _WINDOWS
  356.     if (m_fpGetColorConverter2x && m_pContext)
  357.     {
  358.         LPHXCOLORCONVERTER2 colorConverter = m_fpGetColorConverter2x(m_pContext, cidIn, cidOut);
  359.         if (!colorConverter)
  360.             m_fpUpgradeColorConverter(m_pContext,m_pPlayer, cidIn, cidOut);
  361.         else
  362.             return colorConverter;
  363.     }
  364.     else
  365. #endif
  366.         if (m_fpGetColorConverterx)
  367.         {
  368.             return m_fpGetColorConverterx(cidIn, cidOut);
  369.         }
  370.     return NULL;
  371. }
  372. BOOL ColorFuncAccess::ScanCompatibleColorFormats(INT32 cidIn, INT32 cidOutMask, void *pParam,
  373.                                                  BOOL (*pfnTryIt) (void *pParam, INT32 cidOut, LPHXCOLORCONVERTER pfnCC))
  374. {
  375.     if (m_fpScanCompatibleColorFormats)
  376.     {
  377.         return m_fpScanCompatibleColorFormats(cidIn, cidOutMask, pParam, pfnTryIt);
  378.     }
  379.     return FALSE;
  380. }
  381. BOOL ColorFuncAccess::ScanAllCompatibleColorFormats(INT32 cidIn, void *pParam,
  382.                                                     BOOL (*pfnTryIt) (void *pParam, INT32 cidOut, LPHXCOLORCONVERTER pfnCC))
  383. {
  384.     if (m_fpScanAllCompatibleColorFormats)
  385.     {
  386.         return m_fpScanAllCompatibleColorFormats(cidIn, pParam, pfnTryIt);
  387.     }
  388.     return FALSE;
  389. }
  390. void
  391. ColorFuncAccess::LoadConversionFunctions()
  392. {
  393.     if (m_pDllAccess)
  394.     {
  395.         m_fpGetHXColorGUID                = (FPGETHXCOLORGUID) m_pDllAccess->getSymbol("GetHXColorGUID");
  396.         m_fpInitColorConverter            = (FPINITCOLORCONVERTER) m_pDllAccess->getSymbol("InitColorConverter");
  397.         m_fpSetColorAdjustments           = (FPSETCOLORADJUSTMENTS)  m_pDllAccess->getSymbol("SetColorAdjustments");
  398.         m_fpGetColorAdjustments           = (FPGETCOLORADJUSTMENTS) m_pDllAccess->getSymbol("GetColorAdjustments");
  399.         m_SuggestRGB8Palette              = (FPSUGGESTRGB8PALETTE) m_pDllAccess->getSymbol("SuggestRGB8Palette");
  400.         m_SetRGB8Palette                  = (FPSETRGB8PALETTE) m_pDllAccess->getSymbol("SetRGB8Palette");
  401.         m_fpSetSharpnessAdjustments       = (FPSETSHARPNESSADJUSTMENTS) m_pDllAccess->getSymbol("SetSharpnessAdjustments");
  402.         m_fpGetSharpnessAdjustments       = (FPGETSHARPNESSADJUSTMENTS) m_pDllAccess->getSymbol("GetSharpnessAdjustments");
  403.         m_fpConvertRGBtoYUV               = (FPCONVERTRGBTOYUV) m_pDllAccess->getSymbol("ConvertRGBtoYUV");
  404.         m_fpConvertYUVtoRGB               = (FPCONVERTYUVTORGB) m_pDllAccess->getSymbol("ConvertYUVtoRGB");
  405.         m_fpEnhance                       = (FPENHANCE) m_pDllAccess->getSymbol("Enhance");
  406.         m_fpEnhanceUniform                = (FPENHANCEUNIFORM) m_pDllAccess->getSymbol("EnhanceUniform");
  407.         m_fpConvertRGB24ToXRGB            = (FPCONVERTRGB24TOXRGB) m_pDllAccess->getSymbol("ConvertRGB24toXRGB");
  408.         m_fpScanCompatibleColorFormats    = (FPSCANCOMPATIBLECOLORFORMATS) m_pDllAccess->getSymbol("ScanCompatibleColorFormats");
  409.         m_fpScanAllCompatibleColorFormats = (FPSCANALLCOMPATIBLECOLORFORMATS) m_pDllAccess->getSymbol("ScanAllCompatibleColorFormats");
  410.         m_fpGetColorConverter             = (FPGETCOLORCONVERTER) m_pDllAccess->getSymbol("GetColorConverter");
  411.         m_fpGetColorConverterx            = (FPGETCOLORCONVERTERx) m_pDllAccess->getSymbol("GetColorConverter2");
  412.         
  413.         m_fpI420andYUVA                   = (FPI420ANDYUVA) m_pDllAccess->getSymbol("I420andYUVA");
  414.         m_fpI420andI420toI420             = (FPI420ANDI420TOI420) m_pDllAccess->getSymbol("I420andI420toI420");
  415. #if _WINDOWS
  416. #if defined(XXXX_NEW_COLOR_CONVERTER)
  417.         m_fpInitColorConverter2 = (FPINITCOLORCONVERTER2)  m_pDllAccess->getSymbol("InitColorConverter");
  418.         m_fpGetColorConverter2  = (FPGETCOLORCONVERTER2) m_pDllAccess->getSymbol("GetColorConverter");
  419.         m_fpGetColorConverter2x = (FPGETCOLORCONVERTER2x) m_pDllAccess->getSymbol("GetColorConverter2x");
  420.         m_fpSetColorAdjustments2  = (FPSETCOLORADJUSTMENTS2) m_pDllAccess->getSymbol("SetColorAdjustments");
  421.         m_fpUpgradeColorConverter = (FPUPGRADECOLORCONVERTER) m_pDllAccess->getSymbol("UpgradeColorConverter");
  422. #endif
  423. #endif
  424.     }
  425.     if (!m_fpInitColorConverter  ||
  426.         !m_fpSetColorAdjustments ||
  427.         !m_fpSetSharpnessAdjustments ||
  428.         !m_fpEnhance ||
  429.         !m_fpEnhanceUniform ||
  430. #ifdef _WINDOWS 
  431.         !m_fpGetColorAdjustments ||
  432.         !m_fpGetSharpnessAdjustments ||
  433. #endif
  434.         //!m_fpConvertRGB24ToXRGB ||
  435.         !m_fpScanAllCompatibleColorFormats ||
  436.         !m_fpGetColorConverter
  437.         )
  438.     {
  439.         WrongHXColorVersion();
  440.     }
  441.     else
  442.     {
  443.         if (!m_bLightColorConverter && (
  444.                 !m_SuggestRGB8Palette    ||
  445.                 !m_SetRGB8Palette        ||
  446.                 !m_fpConvertRGBtoYUV     ||
  447.                 !m_fpConvertYUVtoRGB)
  448.             )
  449.         {
  450.             WrongHXColorVersion();
  451.         }
  452.     }
  453. }
  454. void ColorFuncAccess::WrongHXColorVersion()
  455. {
  456.     m_fpInitColorConverter  = NULL;
  457.     m_fpSetColorAdjustments = NULL;
  458.     m_fpGetColorAdjustments = NULL;
  459.     m_SuggestRGB8Palette    = NULL;
  460.     m_SetRGB8Palette        = NULL;
  461.     m_fpSetSharpnessAdjustments = NULL;
  462.     m_fpGetSharpnessAdjustments = NULL;
  463.     m_fpConvertRGBtoYUV = NULL;
  464.     m_fpConvertYUVtoRGB = NULL;
  465.     m_fpEnhance=NULL;
  466.     m_fpEnhanceUniform=NULL;
  467.     m_fpConvertRGB24ToXRGB = NULL;
  468.     m_fpScanCompatibleColorFormats = NULL;
  469.     m_fpScanAllCompatibleColorFormats = NULL;
  470.     m_fpGetColorConverter = NULL;
  471.     delete m_pDllAccess;
  472.     m_pDllAccess = NULL;
  473.     hStatus = HXR_FAIL;
  474.     HX_ASSERT(WRONG_HXCOLOR_VERSION);
  475. }
  476. HX_RESULT
  477. ColorFuncAccess::SetCodecDir()
  478. {
  479. #ifndef _VXWORKS
  480.     const char* pPath = NULL;
  481.     CHXString codecDir;
  482.     pPath = GetDLLAccessPath()->GetPath(DLLTYPE_PLUGIN);
  483.     HX_ASSERT(pPath && *pPath);
  484.     codecDir = pPath;
  485. #ifndef _MACINTOSH
  486.     if (strcmp((const char*)codecDir.Right(1), OS_SEPARATOR_STRING))
  487.     {
  488.         codecDir += OS_SEPARATOR_STRING;
  489.     }
  490.     codecDir += "Codecs";
  491. #endif
  492.     GetDLLAccessPath()->SetPath(DLLTYPE_CODEC, (const char*)codecDir);
  493. #endif // _VXWORKS
  494.     return HXR_OK;
  495. }
  496. #ifdef _WINDOWS
  497. void
  498. ColorFuncAccess::SetPlayer(IHXPlayer* pPlayer)
  499. {
  500.     if (m_pPlayer)
  501.     {
  502.         m_pPlayer->Release();
  503.     }
  504.     m_pPlayer = pPlayer;
  505.     if (m_pPlayer)
  506.     {
  507.         m_pPlayer->AddRef();
  508.     }
  509. }
  510. #endif
  511. BOOL ColorFuncAccess::CheckColorConverter (INT32 cidIn, INT32 cidOut)
  512. {
  513.     LPHXCOLORCONVERTER fpConvert = GetColorConverter(cidIn, cidOut);
  514.     return fpConvert != NULL;
  515. }
  516. BOOL ColorFuncAccess::CheckColorConverter2 (INT32 cidIn, INT32 cidOut)
  517. {
  518.     LPHXCOLORCONVERTER2 fpConvert = GetColorConverter2(cidIn, cidOut);
  519.     return fpConvert != NULL;
  520. }
  521. int ColorFuncAccess::ColorConvert(INT32 cidOut, unsigned char *dest_ptr,
  522.                                   int dest_width, int dest_height,
  523.                                   int dest_pitch, int dest_x, int dest_y,
  524.                                   int dest_dx, int dest_dy,
  525.                                   INT32 cidIn, unsigned char *src_ptr,
  526.                                   int src_width, int src_height,
  527.                                   int src_pitch, int src_x, int src_y,
  528.                                   int src_dx, int src_dy)
  529. {
  530.     int nRet = -1;
  531.     LPHXCOLORCONVERTER fpConvert = GetColorConverter (cidIn, cidOut);
  532.     if (fpConvert)
  533.     {
  534.         nRet = fpConvert(dest_ptr, dest_width, dest_height,
  535.                          dest_pitch, dest_x, dest_y,
  536.                          dest_dx, dest_dy,
  537.                          src_ptr, src_width, src_height,
  538.                          src_pitch, src_x, src_y,
  539.                          src_dx, src_dy);
  540.     }
  541.     return nRet;
  542. }
  543. int ColorFuncAccess::ColorConvert2(INT32 cidOut, unsigned char *dest_ptr,
  544.                                    int dest_width, int dest_height,
  545.                                    int dest_pitch, int dest_x, int dest_y,
  546.                                    int dest_dx, int dest_dy,
  547.                                    INT32 cidIn, unsigned char *pY,
  548.                                    unsigned char *pU, unsigned char *pV,
  549.                                    int src_width, int src_height,
  550.                                    int yPitch, int uPitch, int vPitch,
  551.                                    int src_x, int src_y,
  552.                                    int src_dx, int src_dy)
  553. {
  554.     int nRet = -1;
  555.     LPHXCOLORCONVERTER2 fpConvert = GetColorConverter2 (cidIn, cidOut);
  556.     if (fpConvert)
  557.     {
  558.         nRet = fpConvert(dest_ptr, dest_width, dest_height,
  559.                          dest_pitch, dest_x, dest_y,
  560.                          dest_dx, dest_dy,
  561.                          pY, pU, pV, src_width, src_height,
  562.                          yPitch, uPitch, vPitch,
  563.                          src_x, src_y,
  564.                          src_dx, src_dy);
  565.     }
  566.     return nRet;
  567. }