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

📄 gdi_video_render.cpp

📁 audio-video-codecs.rar语音编解码器
💻 CPP
字号:
/*
//
//                  INTEL CORPORATION PROPRIETARY INFORMATION
//     This software is supplied under the terms of a license agreement or
//     nondisclosure agreement with Intel Corporation and may not be copied
//     or disclosed except in accordance with the terms of that agreement.
//       Copyright(c) 2003-2007 Intel Corporation. All Rights Reserved.
//
*/

#include "gdi_video_render.h"

#if defined(UMC_ENABLE_GDI_VIDEO_RENDER)

namespace UMC
{

/* ------------------------------------------------------------------------- */

#define MODULE          "<Undefined Module>"
#define FUNCTION        "<Undefined Function>"
#define DBG_SET(msg)    VIDEO_DRV_DBG_SET   (MODULE, FUNCTION, msg)

/* ------------------------------------------------------------------------- */

#undef  MODULE
#define MODULE "GDIVideoRenderParams:"

GDIVideoRenderParams::GDIVideoRenderParams():
    m_hWnd(NULL)
{
#undef  FUNCTION
#define FUNCTION "GDIVideoRenderParams"
    DBG_SET("+");
    DBG_SET("-");
} // GDIVideoRenderParams::GDIVideoRenderParams()

/* ------------------------------------------------------------------------- */

#undef  MODULE
#define MODULE "GDIVideoRender:"

GDIVideoRender::GDIVideoRender(void)
{
#undef  FUNCTION
#define FUNCTION "GDIVideoRender"
    DBG_SET("+");
    DBG_SET("-");
}

/* ------------------------------------------------------------------------- */

GDIVideoRender::~GDIVideoRender(void)
{
#undef  FUNCTION
#define FUNCTION "~GDIVideoRender"
    DBG_SET("+");
    Close();
    DBG_SET("-");
}

/* ------------------------------------------------------------------------- */

Status GDIVideoRender::Init(MediaReceiverParams* pInit)
{
#undef  FUNCTION
#define FUNCTION "Init"
    DBG_SET("+");
    Status                      umcRes  = UMC_OK;
    GDIVideoRenderParams*       pParams = DynamicCast<GDIVideoRenderParams>(pInit);
    UnifiedVideoRenderParams    UnifiedParams;
    GDIVideoDrvParams           DrvParams;
    VideoDrvVideoMemInfo        sMemInfo;
    size_t                    nPitch = 0, nImageSize = 0;
    bool                        rgb_format  = false;

    if (NULL == pParams)
    {
        umcRes = UMC_ERR_NULL_PTR;
    }
    if (UMC_OK == umcRes)
    {
        // NOTE: next Init will be removed in future.
        if (NONE == pParams->out_data_template.GetColorFormat())
            umcRes = m_OutDataTemplate.Init(pParams->info.width,
                                            pParams->info.height,
                                            pParams->color_format);
        else
            m_OutDataTemplate = pParams->out_data_template;

        DrvParams.gdi_in_color_format = m_OutDataTemplate.GetColorFormat();
        /* Checking color format to be used ("IN" color format). */
        switch (DrvParams.gdi_in_color_format)
        {
        case YV12:
            nPitch      = align_value<size_t>(m_OutDataTemplate.GetWidth(), VIDEO_DRV_ALIGN_BYTE);
            nImageSize  = (nPitch * m_OutDataTemplate.GetHeight() * 3) / 2;
            break;
        case YUY2:
            nPitch      = align_value<size_t>(m_OutDataTemplate.GetWidth() * 2, VIDEO_DRV_ALIGN_BYTE);
            nImageSize  = nPitch * m_OutDataTemplate.GetHeight();
            break;
        case RGB32:
            rgb_format = true;
            nPitch = 0; nImageSize = 0;
            break;
        case RGB24:
            rgb_format = true;
            nPitch = 0; nImageSize = 0;
            break;
        case RGB555:
            rgb_format = true;
            nPitch = 0; nImageSize = 0;
            break;
        default:
            umcRes = UMC_ERR_INVALID_STREAM;
            break;
        }
        DrvParams.gdi_YUV_buffer.m_pPlane   = NULL;
        DrvParams.gdi_YUV_buffer.m_nPitch   = nPitch;
        DrvParams.gdi_YUV_buffer.m_nMemSize = nImageSize;
        nPitch = nImageSize = 0;
    }
    if (UMC_OK == umcRes)
    {
        DrvParams.gdi_out_color_format = NONE;
        DrvParams.gdi_bpp_DC = umc_gdi_get_bpp_DC(pParams->m_hWnd);
        /* Setting "OUT" color format. */
        switch (DrvParams.gdi_bpp_DC)
        {
        case 4:
            DrvParams.gdi_out_color_format = RGB32;
            break;
        case 3:
            DrvParams.gdi_out_color_format = RGB24;
            break;
        case 2:
            DrvParams.gdi_out_color_format = RGB555;
            break;
        default: case 0:
            umcRes = UMC_ERR_FAILED;
            break;
        }
        nPitch      = m_OutDataTemplate.GetWidth() * DrvParams.gdi_bpp_DC;
        nImageSize  = nPitch * m_OutDataTemplate.GetHeight();
        if (rgb_format && (DrvParams.gdi_out_color_format != DrvParams.gdi_in_color_format))
            umcRes = UMC_ERR_FAILED;
    }
    if (UMC_OK == umcRes)
    {
        /* Copying parameters specified in <pParams> to <UnifiedParams>. */
        UnifiedParams = *pParams;
        /* Setting SDL driver specification. */
        UnifiedParams.m_pDrvSpec    = (VideoDrvSpec*) &GDIVideoDrvSpec;
        DrvParams.win               = pParams->m_hWnd;
        DrvParams.common.img_width  = m_OutDataTemplate.GetWidth();
        DrvParams.common.img_height = m_OutDataTemplate.GetHeight();
        DrvParams.common.win_rect.x = pParams->disp.left;
        DrvParams.common.win_rect.y = pParams->disp.top;
        DrvParams.common.win_rect.w = pParams->disp.right  - pParams->disp.left;
        DrvParams.common.win_rect.h = pParams->disp.bottom - pParams->disp.top;
        /* Setting SDL driver parameters. */
        UnifiedParams.m_pDrvParams  = &DrvParams;
        /* Setting video memory specification. */
        UnifiedParams.m_VideoMemType    = VideoDrvVideoMemInternal;
        sMemInfo.m_pVideoMem            = NULL;
        sMemInfo.m_nMemSize             = 0;
        sMemInfo.m_nAlignment           = VIDEO_DRV_ALIGN_BYTE;
        sMemInfo.m_nPitch               = nPitch;
        sMemInfo.m_nBufSize             = nImageSize;
        UnifiedParams.m_pVideoMemInfo   = &sMemInfo;

    }
    if (UMC_OK == umcRes)
    {
        umcRes = UnifiedVideoRender::Init(&UnifiedParams);
    }
    DBG_SET("-");
    return umcRes;

} // Status GDIVideoRender::Init(MediaReceiverParams* pInit)

/* ------------------------------------------------------------------------- */

} // namespace UMC

#endif // defined(UMC_ENABLE_GDI_VIDEO_RENDER)

⌨️ 快捷键说明

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