• 大小: 377KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-16
  • 语言: C/C++
  • 标签: YUV  directX  MFC  

资源简介

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.embed.manifest

     文件        748  2010-05-06 19:04  YUVTORGB\YUVTORGB\Debug\YUVTORGB.exe.embed.manifest.res

     文件        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个文件信息

评论

共有 条评论