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

📄 coloracc.cpp

📁 著名的 helix realplayer 基于手机 symbian 系统的 播放器全套源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
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 + -