📄 coloracc.cpp
字号:
ColorFuncAccess::ConvertRGB24toXRGB( UCHAR* pSrc, UCHAR* pDest, ULONG32 srcSize, ULONG32 destSize, INT32 nWidth, INT32 nHeight)
{
if (m_fpConvertRGB24ToXRGB)
{
m_fpConvertRGB24ToXRGB(pSrc,pDest,srcSize,destSize,nWidth,nHeight);
}
}
int ColorFuncAccess::I420andYUVA(
unsigned char *src1_ptr, int src1_pels, int src1_lines, int src1_pitch,
int src1_startx, int src1_starty,
unsigned char *src2_ptr, int src2_pels, int src2_lines, int src2_pitch,
int src2_startx, int src2_starty,
unsigned char *dest_ptr, int dest_pels, int dest_lines, int dest_pitch,
int dest_startx, int dest_starty,
int width, int height, int color_format)
{
if( m_fpI420andYUVA )
{
return m_fpI420andYUVA( src1_ptr, src1_pels, src1_lines, src1_pitch,
src1_startx, src1_starty,
src2_ptr, src2_pels, src2_lines, src2_pitch,
src2_startx, src2_starty,
dest_ptr, dest_pels, dest_lines, dest_pitch,
dest_startx, dest_starty, width, height,
color_format);
}
return HXR_FAIL;
}
int ColorFuncAccess::I420andI420toI420(
unsigned char *src1_ptr, int src1_pels, int src1_lines, int src1_pitch,
int src1_startx, int src1_starty,
unsigned char *src2_ptr, int src2_pels, int src2_lines, int src2_pitch,
int src2_startx, int src2_starty,
unsigned char *dest_ptr, int dest_pels, int dest_lines, int dest_pitch,
int dest_startx, int dest_starty,
int width, int height, int alpha )
{
if( m_fpI420andI420toI420 )
{
return m_fpI420andI420toI420( src1_ptr, src1_pels, src1_lines, src1_pitch,
src1_startx, src1_starty,
src2_ptr, src2_pels, src2_lines, src2_pitch,
src2_startx, src2_starty,
dest_ptr, dest_pels, dest_lines, dest_pitch,
dest_startx, dest_starty, width, height,
alpha);
}
return HXR_FAIL;
}
LPHXCOLORCONVERTER ColorFuncAccess::GetColorConverter (INT32 cidIn, INT32 cidOut)
{
#ifdef _WINDOWS
if (m_fpGetColorConverter2 && m_pContext)
{
LPHXCOLORCONVERTER colorConverter = m_fpGetColorConverter2(m_pContext, cidIn, cidOut);
if (!colorConverter)
m_fpUpgradeColorConverter(m_pContext,m_pPlayer, cidIn, cidOut);
else
return colorConverter;
}
else
#endif
if (m_fpGetColorConverter)
{
return m_fpGetColorConverter(cidIn, cidOut);
}
return NULL;
}
LPHXCOLORCONVERTER2 ColorFuncAccess::GetColorConverter2 (INT32 cidIn, INT32 cidOut)
{
#ifdef _WINDOWS
if (m_fpGetColorConverter2x && m_pContext)
{
LPHXCOLORCONVERTER2 colorConverter = m_fpGetColorConverter2x(m_pContext, cidIn, cidOut);
if (!colorConverter)
m_fpUpgradeColorConverter(m_pContext,m_pPlayer, cidIn, cidOut);
else
return colorConverter;
}
else
#endif
if (m_fpGetColorConverterx)
{
return m_fpGetColorConverterx(cidIn, cidOut);
}
return NULL;
}
BOOL ColorFuncAccess::ScanCompatibleColorFormats(INT32 cidIn, INT32 cidOutMask, void *pParam,
BOOL (*pfnTryIt) (void *pParam, INT32 cidOut, LPHXCOLORCONVERTER pfnCC))
{
if (m_fpScanCompatibleColorFormats)
{
return m_fpScanCompatibleColorFormats(cidIn, cidOutMask, pParam, pfnTryIt);
}
return FALSE;
}
BOOL ColorFuncAccess::ScanAllCompatibleColorFormats(INT32 cidIn, void *pParam,
BOOL (*pfnTryIt) (void *pParam, INT32 cidOut, LPHXCOLORCONVERTER pfnCC))
{
if (m_fpScanAllCompatibleColorFormats)
{
return m_fpScanAllCompatibleColorFormats(cidIn, pParam, pfnTryIt);
}
return FALSE;
}
void
ColorFuncAccess::LoadConversionFunctions()
{
if (m_pDllAccess)
{
m_fpGetHXColorGUID = (FPGETHXCOLORGUID) m_pDllAccess->getSymbol("GetHXColorGUID");
m_fpInitColorConverter = (FPINITCOLORCONVERTER) m_pDllAccess->getSymbol("InitColorConverter");
m_fpSetColorAdjustments = (FPSETCOLORADJUSTMENTS) m_pDllAccess->getSymbol("SetColorAdjustments");
m_fpGetColorAdjustments = (FPGETCOLORADJUSTMENTS) m_pDllAccess->getSymbol("GetColorAdjustments");
m_SuggestRGB8Palette = (FPSUGGESTRGB8PALETTE) m_pDllAccess->getSymbol("SuggestRGB8Palette");
m_SetRGB8Palette = (FPSETRGB8PALETTE) m_pDllAccess->getSymbol("SetRGB8Palette");
m_fpSetSharpnessAdjustments = (FPSETSHARPNESSADJUSTMENTS) m_pDllAccess->getSymbol("SetSharpnessAdjustments");
m_fpGetSharpnessAdjustments = (FPGETSHARPNESSADJUSTMENTS) m_pDllAccess->getSymbol("GetSharpnessAdjustments");
m_fpConvertRGBtoYUV = (FPCONVERTRGBTOYUV) m_pDllAccess->getSymbol("ConvertRGBtoYUV");
m_fpConvertYUVtoRGB = (FPCONVERTYUVTORGB) m_pDllAccess->getSymbol("ConvertYUVtoRGB");
m_fpEnhance = (FPENHANCE) m_pDllAccess->getSymbol("Enhance");
m_fpEnhanceUniform = (FPENHANCEUNIFORM) m_pDllAccess->getSymbol("EnhanceUniform");
m_fpConvertRGB24ToXRGB = (FPCONVERTRGB24TOXRGB) m_pDllAccess->getSymbol("ConvertRGB24toXRGB");
m_fpScanCompatibleColorFormats = (FPSCANCOMPATIBLECOLORFORMATS) m_pDllAccess->getSymbol("ScanCompatibleColorFormats");
m_fpScanAllCompatibleColorFormats = (FPSCANALLCOMPATIBLECOLORFORMATS) m_pDllAccess->getSymbol("ScanAllCompatibleColorFormats");
m_fpGetColorConverter = (FPGETCOLORCONVERTER) m_pDllAccess->getSymbol("GetColorConverter");
m_fpGetColorConverterx = (FPGETCOLORCONVERTERx) m_pDllAccess->getSymbol("GetColorConverter2");
m_fpI420andYUVA = (FPI420ANDYUVA) m_pDllAccess->getSymbol("I420andYUVA");
m_fpI420andI420toI420 = (FPI420ANDI420TOI420) m_pDllAccess->getSymbol("I420andI420toI420");
#if _WINDOWS
#if defined(XXXX_NEW_COLOR_CONVERTER)
m_fpInitColorConverter2 = (FPINITCOLORCONVERTER2) m_pDllAccess->getSymbol("InitColorConverter");
m_fpGetColorConverter2 = (FPGETCOLORCONVERTER2) m_pDllAccess->getSymbol("GetColorConverter");
m_fpGetColorConverter2x = (FPGETCOLORCONVERTER2x) m_pDllAccess->getSymbol("GetColorConverter2x");
m_fpSetColorAdjustments2 = (FPSETCOLORADJUSTMENTS2) m_pDllAccess->getSymbol("SetColorAdjustments");
m_fpUpgradeColorConverter = (FPUPGRADECOLORCONVERTER) m_pDllAccess->getSymbol("UpgradeColorConverter");
#endif
#endif
}
if (!m_fpInitColorConverter ||
!m_fpSetColorAdjustments ||
!m_fpSetSharpnessAdjustments ||
!m_fpEnhance ||
!m_fpEnhanceUniform ||
#ifdef _WINDOWS
!m_fpGetColorAdjustments ||
!m_fpGetSharpnessAdjustments ||
#endif
//!m_fpConvertRGB24ToXRGB ||
!m_fpScanAllCompatibleColorFormats ||
!m_fpGetColorConverter
)
{
WrongHXColorVersion();
}
else
{
if (!m_bLightColorConverter && (
!m_SuggestRGB8Palette ||
!m_SetRGB8Palette ||
!m_fpConvertRGBtoYUV ||
!m_fpConvertYUVtoRGB)
)
{
WrongHXColorVersion();
}
}
}
void ColorFuncAccess::WrongHXColorVersion()
{
m_fpInitColorConverter = NULL;
m_fpSetColorAdjustments = NULL;
m_fpGetColorAdjustments = NULL;
m_SuggestRGB8Palette = NULL;
m_SetRGB8Palette = NULL;
m_fpSetSharpnessAdjustments = NULL;
m_fpGetSharpnessAdjustments = NULL;
m_fpConvertRGBtoYUV = NULL;
m_fpConvertYUVtoRGB = NULL;
m_fpEnhance=NULL;
m_fpEnhanceUniform=NULL;
m_fpConvertRGB24ToXRGB = NULL;
m_fpScanCompatibleColorFormats = NULL;
m_fpScanAllCompatibleColorFormats = NULL;
m_fpGetColorConverter = NULL;
delete m_pDllAccess;
m_pDllAccess = NULL;
hStatus = HXR_FAIL;
HX_ASSERT(WRONG_HXCOLOR_VERSION);
}
HX_RESULT
ColorFuncAccess::SetCodecDir()
{
#ifndef _VXWORKS
const char* pPath = NULL;
CHXString codecDir;
pPath = GetDLLAccessPath()->GetPath(DLLTYPE_PLUGIN);
HX_ASSERT(pPath && *pPath);
codecDir = pPath;
#ifndef _MACINTOSH
if (strcmp((const char*)codecDir.Right(1), OS_SEPARATOR_STRING))
{
codecDir += OS_SEPARATOR_STRING;
}
codecDir += "Codecs";
#endif
GetDLLAccessPath()->SetPath(DLLTYPE_CODEC, (const char*)codecDir);
#endif // _VXWORKS
return HXR_OK;
}
#ifdef _WINDOWS
void
ColorFuncAccess::SetPlayer(IHXPlayer* pPlayer)
{
if (m_pPlayer)
{
m_pPlayer->Release();
}
m_pPlayer = pPlayer;
if (m_pPlayer)
{
m_pPlayer->AddRef();
}
}
#endif
BOOL ColorFuncAccess::CheckColorConverter (INT32 cidIn, INT32 cidOut)
{
LPHXCOLORCONVERTER fpConvert = GetColorConverter(cidIn, cidOut);
return fpConvert != NULL;
}
BOOL ColorFuncAccess::CheckColorConverter2 (INT32 cidIn, INT32 cidOut)
{
LPHXCOLORCONVERTER2 fpConvert = GetColorConverter2(cidIn, cidOut);
return fpConvert != NULL;
}
int ColorFuncAccess::ColorConvert(INT32 cidOut, unsigned char *dest_ptr,
int dest_width, int dest_height,
int dest_pitch, int dest_x, int dest_y,
int dest_dx, int dest_dy,
INT32 cidIn, unsigned char *src_ptr,
int src_width, int src_height,
int src_pitch, int src_x, int src_y,
int src_dx, int src_dy)
{
int nRet = -1;
LPHXCOLORCONVERTER fpConvert = GetColorConverter (cidIn, cidOut);
if (fpConvert)
{
nRet = fpConvert(dest_ptr, dest_width, dest_height,
dest_pitch, dest_x, dest_y,
dest_dx, dest_dy,
src_ptr, src_width, src_height,
src_pitch, src_x, src_y,
src_dx, src_dy);
}
return nRet;
}
int ColorFuncAccess::ColorConvert2(INT32 cidOut, unsigned char *dest_ptr,
int dest_width, int dest_height,
int dest_pitch, int dest_x, int dest_y,
int dest_dx, int dest_dy,
INT32 cidIn, unsigned char *pY,
unsigned char *pU, unsigned char *pV,
int src_width, int src_height,
int yPitch, int uPitch, int vPitch,
int src_x, int src_y,
int src_dx, int src_dy)
{
int nRet = -1;
LPHXCOLORCONVERTER2 fpConvert = GetColorConverter2 (cidIn, cidOut);
if (fpConvert)
{
nRet = fpConvert(dest_ptr, dest_width, dest_height,
dest_pitch, dest_x, dest_y,
dest_dx, dest_dy,
pY, pU, pV, src_width, src_height,
yPitch, uPitch, vPitch,
src_x, src_y,
src_dx, src_dy);
}
return nRet;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -