📄 videorenderer.cpp
字号:
/**************************************************************************************
* *
* *
**************************************************************************************/
#include "VideoRenderer.h"
/*
* 视频补偿器封装类
*/
MediaVideoRenderer::MediaVideoRenderer()
{
this->overlayRenderer = new MediaVideoRendererOverlay();
this->rgbRenderer = new MediaVideoRendererRGB();
this->renderer = NULL;
}
MediaVideoRenderer::~MediaVideoRenderer()
{
delete this->overlayRenderer;
delete this->rgbRenderer;
}
/*
* 媒体项方法
*/
media_type_t MediaVideoRenderer::GetType()
{
return MEDIA_TYPE_VIDEO_RENDERER;
}
char *MediaVideoRenderer::GetName()
{
if(this->renderer)
return this->renderer->GetName();
return "Video Renderer Wrapper";
}
MP_RESULT MediaVideoRenderer::Connect(MediaItem *item)
{
if(this->renderer)
return this->renderer->Connect(item);
return MP_RESULT_ERROR;
}
MP_RESULT MediaVideoRenderer::ReleaseConnections()
{
return MP_RESULT_OK;
}
DWORD MediaVideoRenderer::GetCaps()
{
return 0;
}
MP_RESULT MediaVideoRenderer::Configure(HINSTANCE hInstance, HWND hwnd)
{
return MP_RESULT_ERROR;
}
/*
* 视频补偿方法
*/
MP_RESULT MediaVideoRenderer::Init(HWND hwnd,
unsigned int width,
unsigned int height,
media_video_mode_t preferedMode)
{
this->renderer = NULL;
switch(preferedMode) {
case VIDEO_MODE_RGB16:
case VIDEO_MODE_RGB24:
case VIDEO_MODE_RGB32:
if(this->rgbRenderer->Init(hwnd, width, height) == MP_RESULT_OK) {
this->renderer = (MediaVideoRenderer *) this->rgbRenderer;
return MP_RESULT_OK;
}
else {
return MP_RESULT_ERROR;
}
break;
case VIDEO_MODE_YUV12:
case VIDEO_MODE_UYVY:
case VIDEO_MODE_YUY2:
if(this->overlayRenderer->Init(hwnd, width, height) == MP_RESULT_OK) {
this->renderer = (MediaVideoRenderer *) this->overlayRenderer;
return MP_RESULT_OK;
}
else {
/*
* 尝试标准补偿器
*/
if(this->rgbRenderer->Init(hwnd, width, height) == MP_RESULT_OK) {
this->renderer = (MediaVideoRenderer *) this->rgbRenderer;
return MP_RESULT_OK;
}
else {
return MP_RESULT_ERROR;
}
}
break;
}
return MP_RESULT_ERROR;
}
MP_RESULT MediaVideoRenderer::InitFullscreen(HWND hwnd,
unsigned int width,
unsigned int height,
media_video_mode_t preferedMode)
{
this->renderer = NULL;
switch(preferedMode) {
case VIDEO_MODE_RGB16:
case VIDEO_MODE_RGB24:
case VIDEO_MODE_RGB32:
if(this->rgbRenderer->InitFullscreen(hwnd, width, height) == MP_RESULT_OK) {
this->renderer = (MediaVideoRenderer *) this->rgbRenderer;
return MP_RESULT_OK;
}
else {
return MP_RESULT_ERROR;
}
break;
case VIDEO_MODE_YUV12:
case VIDEO_MODE_UYVY:
case VIDEO_MODE_YUY2:
if(this->overlayRenderer->InitFullscreen(hwnd, width, height) == MP_RESULT_OK) {
this->renderer = (MediaVideoRenderer *) this->overlayRenderer;
return MP_RESULT_OK;
}
else {
/*
* 尝试标准补偿器
*/
if(this->rgbRenderer->InitFullscreen(hwnd, width, height) == MP_RESULT_OK) {
this->renderer = (MediaVideoRenderer *) this->rgbRenderer;
return MP_RESULT_OK;
}
else {
return MP_RESULT_ERROR;
}
}
break;
}
return MP_RESULT_ERROR;
}
/*
* 以下两个不使用
*/
MP_RESULT MediaVideoRenderer::Init(HWND hwnd, unsigned int width, unsigned int height)
{
if(this->renderer) {
this->renderer->Close();
return this->renderer->Init(hwnd, width, height);
}
return MP_RESULT_ERROR;
}
MP_RESULT MediaVideoRenderer::InitFullscreen(HWND hwnd, unsigned int width, unsigned int height)
{
if(this->renderer) {
this->renderer->Close();
return this->renderer->InitFullscreen(hwnd, width, height);
}
return MP_RESULT_ERROR;
}
MP_RESULT MediaVideoRenderer::Stop()
{
if(this->renderer)
return this->renderer->Stop();
return MP_RESULT_ERROR;
}
RECT *MediaVideoRenderer::GetFullscreenRects()
{
if(this->renderer)
return this->renderer->GetFullscreenRects();
return NULL;
}
media_video_mode_t MediaVideoRenderer::GetVideoMode()
{
if(this->renderer)
return this->renderer->GetVideoMode();
return VIDEO_MODE_NONE;
}
MP_RESULT MediaVideoRenderer::Draw(MediaBuffer *buffer, RECT *rect, int frameNumber, int invertFlag)
{
if(this->renderer)
return this->renderer->Draw(buffer, rect, frameNumber, invertFlag);
return MP_RESULT_ERROR;
}
MP_RESULT MediaVideoRenderer::DrawFullscreen(MediaBuffer *buffer, int frameNumber, int invertFlag, int desktop)
{
if(this->renderer)
return this->renderer->DrawFullscreen(buffer, frameNumber, invertFlag, desktop);
return MP_RESULT_ERROR;
}
MP_RESULT MediaVideoRenderer::Close()
{
if(this->renderer) {
this->renderer->Close();
this->renderer = NULL;
}
return MP_RESULT_ERROR;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -