- Visual C++源码
- Visual Basic源码
- C++ Builder源码
- Java源码
- Delphi源码
- C/C++源码
- PHP源码
- Perl源码
- Python源码
- Asm源码
- Pascal源码
- Borland C++源码
- Others源码
- SQL源码
- VBScript源码
- JavaScript源码
- ASP/ASPX源码
- C#源码
- Flash/ActionScript源码
- matlab源码
- PowerBuilder源码
- LabView源码
- Flex源码
- MathCAD源码
- VBA源码
- IDL源码
- Lisp/Scheme源码
- VHDL源码
- Objective-C源码
- Fortran源码
- tcl/tk源码
- QT源码
VideoRenderer.cpp
资源名称:VC++视频传输.rar [点击查看]
上传用户:hxb_1234
上传日期:2010-03-30
资源大小:8328k
文件大小:5k
源码类别:
VC书籍
开发平台:
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;
- }