📄 gdi_video_render.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 + -