📄 mtwreg_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-2006 Intel Corporation. All Rights Reserved.
//
*/
#include "mtwreg_video_render.h"
#if defined(UMC_ENABLE_MTWGX_VIDEO_RENDER)
#include "vm_debug.h"
#include "umc_video_data.h"
#include "windows.h"
namespace UMC
{
MTWREGVideoRender::MTWREGVideoRender():
m_pvVideoMemPtr(NULL),
m_uiScreenWidth(640),
m_uiScreenHeight(480),
m_uiPitch(640 * 2)
{
} // MTWREGVideoRender::MTWREGVideoRender():
MTWREGVideoRender::~MTWREGVideoRender()
{
Close();
} // MTWREGVideoRender::~MTWREGVideoRender()
// Terminate the render
Status MTWREGVideoRender::Close()
{
Status umcRes = MobileVideoRender::Close();
m_pvVideoMemPtr = NULL;
return umcRes;
} // Status MTWREGVideoRender::Close()
// Initialize the render, return false if failed, call Close anyway
Status MTWREGVideoRender::Init(MediaReceiverParams* pInit)
{
Status umcRes = UMC_OK;
VideoRenderParams *pParams = DynamicCast<VideoRenderParams>(pInit);
if (NULL == pParams)
umcRes = UMC_ERR_NULL_PTR;
if (UMC_OK == umcRes)
umcRes = MobileVideoRender::Init(pInit);
HKEY hKey = 0;
if (UMC_OK == umcRes &&
ERROR_SUCCESS != RegOpenKeyEx(HKEY_LOCAL_MACHINE,
VM_STRING("LCDDriver"),
0,
KEY_QUERY_VALUE,
&hKey))
{
umcRes = UMC_ERR_FAILED;
}
Ipp32u dwBufSize = sizeof(m_pvVideoMemPtr);
if (UMC_OK == umcRes &&
ERROR_SUCCESS != RegQueryValueEx(hKey,
VM_STRING("BaseFrameAddr"),
NULL,
NULL,
(LPBYTE)&m_pvVideoMemPtr,
(LPDWORD)&dwBufSize))
{
umcRes = UMC_ERR_FAILED;
}
if (0 != hKey)
RegCloseKey(hKey);
if (UMC_OK != umcRes)
Close();
return umcRes;
} // Status MTWREGVideoRender::Init(MediaReceiverParams* pInit)
Status MTWREGVideoRender::LockInputBuffer(MediaData* pInData)
{
Status umcRes = UMC_OK;
VideoData *pVideoData = DynamicCast<VideoData>(pInData);
if (NULL == pVideoData)
umcRes = UMC_ERR_NULL_PTR;
if (UMC_OK == umcRes && NULL == m_pvVideoMemPtr)
umcRes = UMC_ERR_NOT_INITIALIZED;
if (UMC_OK == umcRes)
{
while (VM_TIMEOUT == m_ReadySema.Wait(1000))
{
if(m_bStopFlag || m_dfFrameTime == -1.0)
{
umcRes = UMC_ERR_END_OF_STREAM;
break;
}
}
}
if (UMC_OK == umcRes)
{
umcRes = pVideoData->SetSurface(m_pvVideoMemPtr, m_uiPitch);
}
else
{
umcRes = pVideoData->SetSurface(NULL, 0);
}
return umcRes;
} // Status MTWREGVideoRender::LockInputBuffer(MediaData* pInData)
Status MTWREGVideoRender::UnLockInputBuffer(MediaData *pInData, Status StreamStatus)
{
Status umcRes = UMC_OK;
VideoData* pVideoData = DynamicCast<VideoData, MediaData>(pInData);
if (NULL == pVideoData)
umcRes = UMC_ERR_NULL_PTR;
if (UMC_OK == umcRes)
{
Ipp64f dfEndTime;
pVideoData->GetTime(m_dfFrameTime, dfEndTime);
umcRes = m_DoneSema.Signal();
}
if (UMC_ERR_END_OF_STREAM == StreamStatus)
Stop();
return umcRes;
} // Status MTWREGVideoRender::UnLockInputBuffer(MediaData *pInData, Status StreamStatus)
} // namespace UMC
#endif // defined(UMC_ENABLE_MTWGX_VIDEO_RENDER)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -