directdraw显示yuv420(YV12)
height=width=widthBytes=0;
 m_screen.SetWindowPos(&CWnd::wndBottom,0,0,720,576, SWP_NOMOVE | SWP_SHOWWINDOW);
 UpdateWindow();
 main_window_handle = m_screen.GetSafeHwnd();
if(DD_OK!=(DirectDrawCreateEx(NULL, (void **)&lpdd7, IID_IDirectDraw7, NULL)))
 {
  return ;
 }
 // set the cooperative level for full-screen mode
 if(DD_OK != lpdd7->SetCooperativeLevel(AfxGetMainWnd()->GetSafeHwnd(), DDSCL_NORMAL))
 {
  return ;
 }
 /*设置控制级时,如果应用程序请求了 DDSCL_NORMAL 模式(表明应用程序以普通窗口的形式运行),则不需要提供一个指定窗口的句柄.给窗口句柄参数为 NULL, 所有的窗口都可以被设置为普通的控制级. */
 // set the display mode to 640x480x256
 // clear ddsd and set size
 memset(&ddsd,0,sizeof(ddsd));
 ddsd.dwSize = sizeof(ddsd);
// enable valid fields
 ddsd.dwFlags=DDSD_CAPS;
 ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
 // create the primary surface
if(DD_OK!=(lpdd7->CreateSurface(&ddsd, &lpddsprimary, NULL)))
 {
  return ;
 }
// 创建裁剪器
 if (FAILED(lpdd7->CreateClipper(0, &lpDDClipper, NULL)))
  return ; 
 // 与窗口工作区关联
if (FAILED(lpDDClipper->SetHWnd(0, main_window_handle)))
 {
  lpDDClipper->Release();
  return ;
 }
if (FAILED(lpddsprimary->SetClipper(lpDDClipper)))
 {
  lpDDClipper->Release();
  return ;
 }
//
 memset(&ddsd,0,sizeof(ddsd));
 ddsd.dwSize = sizeof(ddsd);
 //DDPIXELFORMAT camdispPixelFormat = {sizeof(DDPIXELFORMAT), DDPF_FOURCC, mmioFOURCC('Y','U','1','2'), 0,0,0,0,0}; 
 ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT;
 ddsd.dwWidth = 720;
 ddsd.dwHeight = 576;
 ddsd.dwBackBufferCount = 0;//忽略            //忽略
 ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN| DDSCAPS_VIDEOMEMORY;
ddsd.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
 ddsd.ddpfPixelFormat.dwFlags  = DDPF_FOURCC | DDPF_YUV ;
 ddsd.ddpfPixelFormat.dwFourCC = MAKEFOURCC('Y','V','1','2');
 ddsd.ddpfPixelFormat.dwYUVBitCount = 8;
 //
if(DD_OK!=(lpdd7->CreateSurface(&ddsd, &lpddsmypage[0], NULL)))
 {
  return ;
 }
POINT p;
p.x = 0; p.y = 0;
 m_screen.ClientToScreen(&p);//获取屏幕顶点
 // m_screen.GetClientRect(&rcRectDest);
rcRectDest.left = 0; rcRectDest.top=0; rcRectDest.right = 720; rcRectDest.bottom = 576;
OffsetRect(&rcRectDest, p.x, p.y);//把窗口区域转化为屏幕区域坐标
SetRect(&rcRectSrc, 0, 0, 720, 576);//初始化窗口区域
 /////////////////////////////////////////////////////////////
    FILE *fp;
 buf[0] = new BYTE[720*576];
 buf[1] = new BYTE[720*576/4];
 buf[2] = new BYTE[720*576/4];
 fp = fopen("d:\\temp\\test.yuv","rb+");
 while(!feof(fp))
 {
  if(DD_OK != lpddsmypage[0]->Lock(NULL,&ddsd,DDLOCK_WAIT|DDLOCK_SURFACEMEMORYPTR,NULL))
  {
   return ;
  }
UCHAR  *lp_buffer = (UCHAR *)ddsd.lpSurface;
///////////////////////////提取数据/////////////////////////////////////////////
  fread(buf[0],720*576,1,fp); 
  fread(buf[1],720*576/4,1,fp); 
  fread(buf[2],720*576/4,1,fp);
LPBYTE lpY = lp_buffer;
  LPBYTE lpV = lp_buffer + ddsd.lPitch * 576;
  LPBYTE lpU = lp_buffer + ddsd.lPitch * 576 * 5 / 4;
  for (int k=0;k<576;k++)
  {
   memcpy(lpY + k*ddsd.lPitch,buf[0]+720*k,720);
  }
for (int k=0;k<576/2;k++)
  {
   memcpy(lpU+ k*ddsd.lPitch/2  ,buf[1]+720*k/2,720/2);
   memcpy(lpV+ k*ddsd.lPitch/2 ,buf[2]+720*k/2,720/2);
  }
Sleep(40); 
//////////////////////////////////////////////////////////////////////////
  //memcpy(bmp_buffer,buf[0],720*576*2);
if(DD_OK != lpddsmypage[0]->Unlock(NULL))
  {
   return ;
  }
  HRESULT     ddRval;
  ddRval= lpddsprimary->Blt( &rcRectDest, lpddsmypage[0], &rcRectSrc, DDBLT_WAIT, NULL);
        while(ddRval == DDERR_WASSTILLDRAWING);
  if(DD_OK != ddRval)
  {
   return ;
  }
 }
 fclose(fp);
 if(lpddsmypage)
 {
  lpddsmypage[0]->Release();
  lpddsmypage[0]=NULL;
 }
 MessageBox(_T("over"));
directdraw显示yuv420(YV12)的更多相关文章
- 【OpenGL】用OpenGL shader实现将YUV(YUV420,YV12)转RGB-(直接调用GPU实现,纯硬件方式,效率高)
		这段时间一直在搞视频格式的转换问题,终于最近将一个图片的YUV格式转RGB格式转换成功了.下面就来介绍一下: 由于我的工程是在vs2008中的,其中包含一些相关头文件和库,所以下面只是列出部分核心代码 ... 
- YUV图解 (YUV444, YUV422, YUV420, YV12, NV12, NV21)
		背景: 最近在研究音视频,了解YUV这样的格式对于音视频开发比较重要. 虽然这篇文章大部分是转载别人的,但是经过了校对以后,重新排版并补充了一部分内容 概览: 之所以提出yuv格式的原因,是为了解 ... 
- 嵌入式linux------SDL移植(am335x下显示yuv420)
		#include<stdio.h> #include "/usr/local/ffmpeg_arm/include/SDL/SDL.h" char *bmp_name[ ... 
- directdraw显示yuv视频,出现屏保时,yuv显示不出来,表面丢失
		原因是: DDrawSurface 丢失, DDraw表面在很多情况下都会丢失(如:启动其他全屏独占程序,屏保,或锁屏时), 表面丢失其实就是表面所使用的内存或显存被DirectDraw系统释放, 分 ... 
- directdraw显示rgb555
		// TODO: 在此添加控件通知处理程序代码 height=width=widthBytes=0; m_screen.SetWindowPos(&CWnd::wndBottom,0,0, ... 
- directdraw显示rgb565
		// TODO: 在此添加控件通知处理程序代码 height=width=widthBytes=0; m_screen.SetWindowPos(&CWnd::wndBottom,0,0, ... 
- directdraw显示yuv422(yuy2)
		#include <mmsystem.h> void CshowpicDlg::OnBnClickedButton3() { // TODO: 在此添加控件通知处理程序代码 height ... 
- directdraw 显示yuv
		http://www.cnblogs.com/lidan/archive/2012/03/23/2413772.html http://www.yirendai.com/msd/ 
- linux之x86裁剪移植---ffmpeg的H264解码显示(420、422)
		在虚拟机上yuv420可以正常显示 ,而945(D525)模块上却无法显示 ,后来验证了directdraw的yuv420也无法显示 ,由此怀疑显卡不支持 ,后把420转换为422显示. 420显示如 ... 
随机推荐
- 怎么使用IDEA
			war 和 war exploded war部署首先通过IDEA生成.war工程文件,然后将WEB工程以包的形式上传到服务器,因此会替代服务器本来同名的web app项目. war exploded模 ... 
- mkdir -p 参数的使用
			ssh root@%s -o ConnectTimeout=2 "ssh root@%s ConnectTimeout=2 "if [ ! -d /root/scripts ]; ... 
- 从一道Python面试题说起(大神勿入)
			作为一个自学Python的小白,在了解了点皮毛之后,便按捺不住自己内心的骚动,在某招聘网站上投了些简历,居然也收到了面试邀请.第二天到公司,HR废话不多讲,上来就抛出几张A4纸,"先做题吧, ... 
- 浅谈python中的闭包函数
			闭包函数初探 通常我们定义函数都是这样定义的 def foo(): pass 其实在函数式编程中,函数里面还可以嵌套函数,如下面这样 def foo(): print("hello worl ... 
- 2017年总结的前端文章——CSS盒模型详解
			CSS的盒模型是CSS的基础,同时也是难点,这个问题经常在面试中会被问到,属于经典问题了.很多博客里讲得也很模糊不清,于是,我在这里重新整理一下. 可以认为每个html标签都是一个方块,然后这个方块又 ... 
- python学习交流 - 匿名函数
			匿名函数 匿名函数是一个很有特色的定义函数的功能.在实际使用的过程,用户有时不得不为一些一行代码即可实现的功能来定义一个函数,例如像map, max, filter等内置函数的key参数只能接收可调用 ... 
- Codevs 3990 [中国剩余定理]
			模板题 注意如何得到[a,b]区间范围内的解 #include <iostream> #include <cstdio> #include <cstring> #i ... 
- vue项目基本流程
			一.做项目基本流程: 1.规划组件结构 Nav.vue Header.vue Home.vue..... 2.编写对应路由 vue-router 3.具体些每个组件功能 一些公共的文件jquery,j ... 
- Visual Studio 2017 for Mac  快捷键
			格式化代码: ^I 转到定义:⌘D 注释/反注释: ⌘/ 生成:⌘B 重新生成:^⌘B 调试运行:⌘↩ 不调试运行:⌥⌘↩ 添加/删除断点:⌘\ 查看所有断点:⌥⌘↩ 放大:⌘+ 缩小:⌘- 正常大 ... 
- 2018年最完整5大网页设计图标解决方案:Font Awesome奥森图Unicode、CSS 和、Font以及国产zfont图标集
			网上有很多高质量的图标,基于icon的关键词能在Google上搜索到不少内容,不考虑版权外还要修改大小.颜色等等,现在介绍一些替代方案:Unicode.CSS 和 Font,它具有更高的灵活性. 方案 ... 
