VideoRenderer.cpp
上传用户:tuheem
上传日期:2007-05-01
资源大小:21889k
文件大小:5k
- /**************************************************************************************
- * *
- * *
- **************************************************************************************/
- #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;
- }