Code/Resource
Windows Develop
Linux-Unix program
Internet-Socket-Network
Web Server
Browser Client
Ftp Server
Ftp Client
Browser Plugins
Proxy Server
Email Server
Email Client
WEB Mail
Firewall-Security
Telnet Server
Telnet Client
ICQ-IM-Chat
Search Engine
Sniffer Package capture
Remote Control
xml-soap-webservice
P2P
WEB(ASP,PHP,...)
TCP/IP Stack
SNMP
Grid Computing
SilverLight
DNS
Cluster Service
Network Security
Communication-Mobile
Game Program
Editor
Multimedia program
Graph program
Compiler program
Compress-Decompress algrithms
Crypt_Decrypt algrithms
Mathimatics-Numerical algorithms
MultiLanguage
Disk/Storage
Java Develop
assembly language
Applications
Other systems
Database system
Embeded-SCM Develop
FlashMX/Flex
source in ebook
Delphi VCL
OS Develop
MiddleWare
MPI
MacOS develop
LabView
ELanguage
Software/Tools
E-Books
Artical/Document
VideoRenderer.cpp
Package: Visual C++视频音频开发实用工程案例精选.rar [view]
Upload User: tuheem
Upload Date: 2007-05-01
Package Size: 21889k
Code Size: 5k
Category:
Multimedia Develop
Development Platform:
Visual C++
- /**************************************************************************************
- * *
- * *
- **************************************************************************************/
- #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;
- }