?? 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 + -