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

📄 coloracc.cpp

📁 著名的 helix realplayer 基于手机 symbian 系统的 播放器全套源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/* ***** BEGIN LICENSE BLOCK ***** 
 * Version: RCSL 1.0/RPSL 1.0 
 *  
 * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved. 
 *      
 * The contents of this file, and the files included with this file, are 
 * subject to the current version of the RealNetworks Public Source License 
 * Version 1.0 (the "RPSL") available at 
 * http://www.helixcommunity.org/content/rpsl unless you have licensed 
 * the file under the RealNetworks Community Source License Version 1.0 
 * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl, 
 * in which case the RCSL will apply. You may also obtain the license terms 
 * directly from RealNetworks.  You may not use this file except in 
 * compliance with the RPSL or, if you have a valid RCSL with RealNetworks 
 * applicable to this file, the RCSL.  Please see the applicable RPSL or 
 * RCSL for the rights, obligations and limitations governing use of the 
 * contents of the file.  
 *  
 * This file is part of the Helix DNA Technology. RealNetworks is the 
 * developer of the Original Code and owns the copyrights in the portions 
 * it created. 
 *  
 * This file, and the files included with this file, is distributed and made 
 * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
 * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS 
 * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
 * 
 * Technology Compatibility Kit Test Suite(s) Location: 
 *    http://www.helixcommunity.org/content/tck 
 * 
 * Contributor(s): 
 *  
 * ***** END LICENSE BLOCK ***** */ 

#include "hxtypes.h"
#ifdef _WINDOWS
#ifdef _WIN16
#include <stdlib.h>
#endif
#include <windows.h>
#include <ctype.h>
#endif
#ifdef _MACINTOSH
#include <ctype.h>
#endif

#include "hxresult.h"
#include "hxassert.h"
#include "debug.h"
#include "hxcom.h"
#include "hxbuffer.h"
#include "hxprefs.h"
#include "hxplugn.h"
#include "hxerror.h"
#include "hxengin.h"

#include "dllacces.h"
#include "dllpath.h"

#include "hxheap.h"
#ifdef _DEBUG
#undef HX_THIS_FILE     
static const char HX_THIS_FILE[] = __FILE__;
#endif

#include "coloracc.h"

#include "hxdir.h"

#define WRONG_HXCOLOR_VERSION 0

ColorFuncAccess::ColorFuncAccess(IUnknown* pContext)
    : m_pDllAccess(NULL)
    , hStatus(HXR_OK)
    , m_fpGetHXColorGUID(NULL)
    , 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_fpI420andYUVA(NULL)
    , m_fpI420andI420toI420(NULL)
    , m_fpConvertYUVtoRGB(NULL)
    , m_fpEnhance(NULL)
    , m_fpEnhanceUniform(NULL)
    , m_fpConvertRGB24ToXRGB(NULL)
    , m_fpScanAllCompatibleColorFormats(NULL)
    , m_fpGetColorConverter(NULL)
    , m_fpGetColorConverterx(NULL)
    , m_bLightColorConverter(FALSE)
#ifdef _WINDOWS
    , m_fpInitColorConverter2(NULL)
    , m_fpSetColorAdjustments2(NULL)
    , m_fpGetColorConverter2(NULL)
    , m_fpGetColorConverter2x(NULL)
    , m_fpUpgradeColorConverter(NULL)
    , m_pPlayer(NULL)
#endif
{
    UINT32 uDLLNameLen = MAX_DLL_NAME_LEN;

    m_pContext = pContext;
    if (m_pContext)
    {
        m_pContext->AddRef();
    }

    // If the Codec directory is not currently specified, set it
#ifndef _VXWORKS
    if (!GetDLLAccessPath()->GetPath(DLLTYPE_CODEC))
    {
        SetCodecDir();
    }

    if (GetDLLAccessPath()->GetPath(DLLTYPE_CODEC))
    {
#endif // _VXWORKS
        m_pDllAccess = new DLLAccess;
        if (m_pDllAccess)
        {
            /*
             *  Attempt to load the full version 1st
             */
            DLLAccess::CreateName("colorcvt", "colorcvt", m_pDllName, uDLLNameLen);

            if (DLLAccess::DLL_OK != m_pDllAccess->open(m_pDllName, DLLTYPE_CODEC))
            {
                /*
                 *  Ok, the full version of hxcolor was
                 *  missing. Perhaps we have the lite version?
                 */
                uDLLNameLen = MAX_DLL_NAME_LEN;
                DLLAccess::CreateName("hxltcolor", "hxltcolor", m_pDllName, uDLLNameLen);
                if (DLLAccess::DLL_OK != m_pDllAccess->open(m_pDllName, DLLTYPE_CODEC))
                {
                    hStatus = HXR_FAIL;
                }
                else
                {
                    m_bLightColorConverter = TRUE;
                }
            }
        
            if (hStatus == HXR_FAIL)
            {
                delete m_pDllAccess;
                m_pDllAccess = NULL;
                PANIC(("Unable to load a color conversion library! \n"));
            }
            else
            {
                LoadConversionFunctions();
            }


        }
#ifndef _VXWORKS
    }
    else
    {
        PANIC(("Unable to locate codec directory! Cannot load the"
               "HXColor library!\n"));
    }
#endif

//    HX_RELEASE(pContext);
}

ColorFuncAccess::~ColorFuncAccess()
{
    if (m_pDllAccess)
    {
        m_pDllAccess->close();
        delete m_pDllAccess;
        m_pDllAccess = NULL;
    }

#ifdef _WINDOWS
    HX_RELEASE(m_pPlayer);
#endif

    HX_RELEASE(m_pContext);
}

HX_RESULT
ColorFuncAccess::GetHXColorGUID(UCHAR* pGUID)
{
    HX_RESULT ret = HXR_FAIL;
    UCHAR guid[16];
    if(m_fpGetHXColorGUID && pGUID)
    {
        ret = m_fpGetHXColorGUID(guid);
        if(ret == HXR_OK)
        {
            memcpy(pGUID, guid, sizeof(GUID)); /* Flawfinder: ignore */
        }
    }
    return ret;
}

void
ColorFuncAccess::InitColorConverter()
{
#ifdef _WINDOWS
    if (m_fpInitColorConverter2 && m_pContext)
    {
        m_fpInitColorConverter2(m_pContext);
    }
    else
#endif
        if (m_fpInitColorConverter)
        {
            m_fpInitColorConverter();
        }
}

void
ColorFuncAccess::SetColorAdjustments(float Brightness, float Contrast,
                                     float Saturation, float Hue)
{
#ifdef _WINDOWS
    if (m_fpSetColorAdjustments2 && m_pContext)
    {
        m_fpSetColorAdjustments2(m_pContext, Brightness, Contrast, Saturation, Hue);
    }
    else
#endif
        if (m_fpSetColorAdjustments)
        {
            m_fpSetColorAdjustments(Brightness, Contrast, Saturation, Hue);
        }
}

void
ColorFuncAccess::GetColorAdjustments(float *Brightness, float *Contrast,
                                     float *Saturation, float *Hue)
{
    if (m_fpGetColorAdjustments)
    {
        m_fpGetColorAdjustments(Brightness, Contrast, Saturation, Hue);
    }
}


int ColorFuncAccess::SuggestRGB8Palette (int nColors, UINT32 *lpRGBVals)
{
    return m_SuggestRGB8Palette? m_SuggestRGB8Palette(nColors, lpRGBVals): -1;
}

int ColorFuncAccess::SetRGB8Palette (int nColors, UINT32 *lpRGBVals, int *lpIndices)
{
    return m_SetRGB8Palette? m_SetRGB8Palette(nColors, lpRGBVals, lpIndices): -1;
}

void
ColorFuncAccess::SetSharpnessAdjustments(float Sharpness, INT16 nExpand)
{
    if (m_fpSetSharpnessAdjustments)
    {
        m_fpSetSharpnessAdjustments(Sharpness,nExpand);
    }
}

void
ColorFuncAccess::GetSharpnessAdjustments(float *Sharpness, INT16 *nExpand)
{
    if (m_fpGetSharpnessAdjustments)
    {
        m_fpGetSharpnessAdjustments(Sharpness,nExpand);
    }
}

void
ColorFuncAccess::ConvertRGBtoYUV(UCHAR* pInput, UCHAR* pOutput, INT32 nWidth,
                                 INT32 nHeight, BOOL bBGR)
{
    if (m_fpConvertRGBtoYUV)
    {
        m_fpConvertRGBtoYUV(pInput, pOutput, nWidth, nHeight, bBGR);
    }
}



void
ColorFuncAccess::ConvertYUVtoRGB(UCHAR* ySrc, UCHAR* uSrc, UCHAR* vSrc,
                                 INT32 nPitchSrc, UCHAR* Dst, INT32 nWidth,
                                 INT32 nHeight, INT32 nPitchDst, INT16 nFormat,
                                 INT16 nExpand)
{
    if (m_fpConvertYUVtoRGB)
    {
        m_fpConvertYUVtoRGB(ySrc, uSrc, vSrc, nPitchSrc, Dst,
                            nWidth, nHeight, nPitchDst, nFormat, nExpand);
    }
}

void ColorFuncAccess::Enhance(UCHAR *yuv420in, INT32 inheight, INT32  inwidth, INT32 pitchSrc, float Sharpness)
{
    if (m_fpEnhance)
    {
        m_fpEnhance(yuv420in, inheight, inwidth, pitchSrc, Sharpness);
    }

}

void ColorFuncAccess::EnhanceUniform(UCHAR *yuv420in, INT32 inheight, INT32  inwidth, INT32 pitchSrc, float Sharpness)
{
    if (m_fpEnhanceUniform)
    {
        m_fpEnhanceUniform(yuv420in, inheight, inwidth, pitchSrc, Sharpness);
    }

}

void

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -