資源簡介
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個文件信息
評論
共有 條評論