资源简介
YUV播放器,directX,VS2008 MFC完成
能够很好的完成播放,能截取指定的帧。
代码片段和文件信息
#include “StdAfx.h“
#include “Draw.h“
Draw::Draw()
{
lpDDSPrimary=NULL;
lpDDSBack=NULL;
lpDD=NULL;
makeWindow();
}
Draw::~Draw()
{
if(lpDD != NULL)
{
if(lpDDSPrimary != NULL)
{
lpDDSPrimary->Release();
lpDDSPrimary = NULL;
}
if (lpDDSBack!=NULL)
{
lpDDSBack->Release();
lpDDSBack=NULL;
}
lpDD->Release();
lpDD = NULL;
}
}
void Draw::CreateSur()
{
HRESULT hr;
LPDIRECTDRAWCLIPPER dcClipper =NULL;
if (DirectDrawCreate(NULL&lpDDNULL)!=DD_OK)
{
//AfxMessageBox(“创建ddraw失败!“);
}
if (lpDD->SetCooperativeLevel(hWndDDSCL_NORMAL)!=DD_OK)
{
//MessageBox(“协作层设置失败!“);
}
//创建离屏表面
ZeroMemory(&ddsdsizeof(ddsd));
ddsd.dwSize = sizeof(ddsd) ;
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN ;
ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT ;
ddsd.dwWidth = dwidth;
ddsd.dwHeight=dheight;
ddsd.ddpfPixelFormat.dwFlags = DDPF_FOURCC | DDPF_YUV ;
ddsd.ddpfPixelFormat.dwFourCC = MAKEFOURCC(‘Y‘ ‘V‘ ‘1‘ ‘2‘) ;
ddsd.ddpfPixelFormat.dwYUVBitCount = 8 ;
hr = lpDD->CreateSurface(&ddsd &lpDDSBack NULL) ;
if(hr != DD_OK)
{
lpDD->Release() ;
}
//创建主表面
ZeroMemory(&ddsdsizeof(ddsd));
ddsd.dwSize=sizeof(ddsd);
ddsd.dwFlags=DDSD_CAPS;
ddsd.ddsCaps.dwCaps=DDSCAPS_PRIMARYSURFACE;
ddsd.dwBackBufferCount=1;
if (lpDD->CreateSurface(&ddsd&lpDDSPrimaryNULL)!=DD_OK)
{
lpDDSBack->Release();
//MessageBox(“创建住表面失败!“);
}
//创建裁剪区
hr=lpDD->CreateClipper(0&dcClipperNULL);
if (FAILED(hr))
{
lpDD->Release();
lpDDSBack->Release();
lpDDSBack->Release();
return;
}
dcClipper->SetHWnd(0hWnd);
lpDDSPrimary->SetClipper(dcClipper);
//锁定离屏页面
}
void Draw::show(unsigned char * buffer)
{
lpDDSBack->Lock(NULL&ddsdDDLOCK_WAIT|DDLOCK_WRITEONLY|DDLOCK_NOSYSLOCKNULL);
LPBYTE lpSurf = (LPBYTE)ddsd.lpSurface;
LPBYTE PtrY = buffer ;
LPBYTE PtrU = buffer+dwidth*dheight;
LPBYTE PtrV = buffer+(int)(dwidth*dheight*1.25) ;
for (int i=0; i {
memcpy(lpSurf PtrY dwidth );
PtrY +=dwidth ;
lpSurf += ddsd.lPitch;
}
for ( int i=0;i {
memcpy(lpSurf PtrV dwidth/2);
PtrV += dwidth/2;
lpSurf += ddsd.lPitch/2;
}
for (int i=0;i {
memcpy(lpSurf PtrU dwidth/2);
PtrU +=dwidth/2;
lpSurf += ddsd.lPitch/2;
}
lpDDSBack->Unlock(NULL);
CRect rc;
GetWindowRect(hWnd&rc);
lpDDSPrimary->Blt(rclpDDSBackNULLDDBLT_WAITNULL);
}
void Draw::set(int widthint height)
{
dwidth=width;
dheight=height;
}
void Draw::makeWindow()
{
if(IsWindow(hWnd))
{
::DestroyWindow(hWnd);
hWnd = NULL;
}
hWnd = CreateWindow(_T(“name“)_T(“YUV播放“)WS_OVERLAPPEDWINDOW
100100dwidth*2+16dheight*2+36NULLNULLAfxGetInstanceHandle()NULL);
::ShowWindow(hWndSW_NORMAL);
::UpdateWindow(hWnd);
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4540 2004-09-06 20:58 YUVTORGB\YUVTORGB\ddraw.lib
文件 5660 2010-05-06 19:05 YUVTORGB\YUVTORGB\Debug\BuildLog.htm
文件 13948 2010-05-06 19:04 YUVTORGB\YUVTORGB\Debug\Draw.obj
文件 60 2010-05-06 19:05 YUVTORGB\YUVTORGB\Debug\mt.dep
文件 53629 2010-05-06 19:04 YUVTORGB\YUVTORGB\Debug\NewEdit.obj
文件 467069 2010-05-06 19:04 YUVTORGB\YUVTORGB\Debug\stdafx.obj
文件 682 2010-05-06 19:04 YUVTORGB\YUVTORGB\Debug\YUVTORGB.exe.em
文件 748 2010-05-06 19:04 YUVTORGB\YUVTORGB\Debug\YUVTORGB.exe.em
文件 640 2010-05-06 19:05 YUVTORGB\YUVTORGB\Debug\YUVTORGB.exe.intermediate.manifest
文件 22039 2010-05-06 19:04 YUVTORGB\YUVTORGB\Debug\YUVTORGB.obj
文件 23952 2010-05-02 15:19 YUVTORGB\YUVTORGB\Debug\YUVTORGB.res
文件 139440 2010-05-06 19:05 YUVTORGB\YUVTORGB\Debug\YUVTORGBDlg.obj
文件 3023 2010-05-06 18:56 YUVTORGB\YUVTORGB\Draw.cpp
文件 405 2010-05-06 18:13 YUVTORGB\YUVTORGB\Draw.h
文件 972 2010-05-02 19:01 YUVTORGB\YUVTORGB\NewEdit.cpp
文件 263 2010-05-02 13:12 YUVTORGB\YUVTORGB\NewEdit.h
文件 2909 2010-05-02 01:56 YUVTORGB\YUVTORGB\ReadMe.txt
文件 10836 2010-05-06 19:09 YUVTORGB\YUVTORGB\Release\BuildLog.htm
文件 33626 2010-05-06 19:09 YUVTORGB\YUVTORGB\Release\Draw.obj
文件 60 2010-05-06 19:09 YUVTORGB\YUVTORGB\Release\mt.dep
文件 45605 2010-05-06 19:09 YUVTORGB\YUVTORGB\Release\NewEdit.obj
文件 502784 2010-05-06 19:09 YUVTORGB\YUVTORGB\Release\vc90.idb
文件 640 2010-05-06 19:09 YUVTORGB\YUVTORGB\Release\YUVTORGB.exe.intermediate.manifest
文件 35546 2010-05-06 19:09 YUVTORGB\YUVTORGB\Release\YUVTORGB.obj
文件 33812 2010-05-06 19:09 YUVTORGB\YUVTORGB\Release\YUVTORGB.res
文件 98059 2010-05-06 19:09 YUVTORGB\YUVTORGB\Release\YUVTORGBDlg.obj
文件 21630 2003-07-24 09:52 YUVTORGB\YUVTORGB\res\YUVTORGB.ico
文件 364 2010-05-02 01:57 YUVTORGB\YUVTORGB\res\YUVTORGB.rc2
文件 1232 2010-05-02 14:43 YUVTORGB\YUVTORGB\resource.h
文件 139 2010-05-02 01:57 YUVTORGB\YUVTORGB\stdafx.cpp
............此处省略20个文件信息
相关资源
- VC 2015 MFC 图片列表ListCtrl
- MFC读取txt,分割显示到listctrl控件上
- 测试网速和延迟的MFC 前期代码
- 网速监控 v1.2 MFC VC C++ 网速监控 线程
- MFC绘图小程序源代码
- VC++ MFC入门精讲.PPT
- 质子交换膜燃料电池PEMFC仿真模型
- TCP/IP聊天室群聊MFC版
- c语言 根据坐标 截取yuv420p 区域 保存
- 吕鑫VS2015之C.C++.MFC完整视频
- MFC下CSocket编程详解代码
- Windows平台下的图形化的Ping工具基于
- MFC读写CSV文件
- MFC下SQL的新增,删除和修改
- 在mfc中picture控件中显示Mat图片
- MFC socket通信,socket通讯
- MFC Combox自动提示输入
- MFC VS2010 图片控件+滚动条
- MFC和CLIPS交互例程
- C++MFC教程
- MFC的对话框中使用OpenGL绘图
- 操作系统实验-----MFC线程--购票系统演
- MFC实现PopStar小游戏
- MFC实现数据绘图显示示波器界面
-
MFC、DOM实现的xm
l文件解析、修改和 - socket通信MFC版本
- c++ MFC实现文件合成器功能,实现多种
- mfc实现多线程工程代码和线程进程查
- VC HOSTS 修改工具源码(MFC工程)
- MFC中的多线程同步
评论
共有 条评论