(转)SDL2.0在mfc窗口中显示yuv的一种方法
DWORD ThreadFun()
//用mfc窗口句柄创建一个sdl window
SDL_Window * pWindow = SDL_CreateWindowFrom( (void *)( GetDlgItem(IDC_STATIC1)->GetSafeHwnd() ) );
SDL_Rect sdlRT;
sdlRT.h = 288;
sdlRT.w = 352;
sdlRT.x = 0;
sdlRT.y = 0;
SDL_Rect dstRT;
dstRT.h = 288;
dstRT.w = 352;
dstRT.x = 0;
dstRT.y = 0;
int iW = 352;
int iH = 288;
char szData[352*288*2] = {0};
char szPrint[256] = {0};
//计算yuv一行数据占的字节数
int iPitch = iW*SDL_BYTESPERPIXEL(SDL_PIXELFORMAT_YV12);
int iWidth = 0;
int iHeight = 0;
SDL_GetWindowSize( pWindow, &iWidth, &iHeight );
dstRT.h = iHeight;
dstRT.w = iWidth;
//获取当前可用画图驱动 window中有3个,第一个为d3d,第二个为opengl,第三个为software
int iii = SDL_GetNumRenderDrivers();
//创建渲染器,第二个参数为选用的画图驱动,0代表d3d
SDL_Renderer * pRender = SDL_CreateRenderer( pWindow, 0, SDL_RENDERER_ACCELERATED );
sprintf( szPrint, "%s", SDL_GetError());
SDL_RendererInfo info;
SDL_GetRendererInfo(pRender, &info);
SDL_GetRenderDriverInfo(0, &info); //d3d
SDL_GetRenderDriverInfo(1, &info); //opgl
SDL_GetRenderDriverInfo(2, &info); //software
char szInfo[256] = {0};
sprintf(szInfo, "%s", info.name);
sprintf( szPrint, "%s", SDL_GetError());
//创建纹理
SDL_Texture * pTexture = SDL_CreateTexture( pRender,SDL_PIXELFORMAT_YV12, SDL_TEXTUREACCESS_STREAMING, iW, iH );
FILE * pFile = fopen( "d:\\cap1.yuv", "rb" );
if ( pFile == NULL )
{
int u = 0;
}
//读yuv文件,该文件中存放的数据尺寸为 352*288的yv12数据
while ( fread( szData, 1, iW*iH*3/2, pFile ) != NULL )
{
int i = SDL_UpdateTexture( pTexture, &sdlRT, szData, iPitch );
SDL_RenderClear( pRender );
SDL_RenderCopy( pRender, pTexture, &sdlRT, &dstRT );
SDL_RenderPresent( pRender );
Sleep(40);
}
fclose(pFile);
if ( pTexture != NULL )
{
SDL_DestroyTexture( pTexture );
pTexture = NULL ;
}
if ( pRender != NULL )
{
SDL_DestroyRenderer( pRender );
pRender = NULL;
}
if ( NULL != pWindow )
{
SDL_DestroyWindow( pWindow );
pWindow = NULL;
}
}
注意在SDL_CreateWindowFrom中sdl将窗口的消息处理函数地址给改写成sdl的函数了(在sdl源文件中SetupWindowData()此函数内修改),
对SDL的使用还在摸索中,不能保证上述知识全部正确,如哪位仁兄发现问题,请留言更正,再次谢过了!
(转)SDL2.0在mfc窗口中显示yuv的一种方法的更多相关文章
- 【转载】SDL2.0在mfc窗口中显示yuv的一种方法
DWORD ThreadFun(){ //用mfc窗口句柄创建一个sdl window SDL_Window * pWindow = SDL_CreateWindowFrom( (void ...
- 树莓派linux系统中显示隐藏文件的几种方法
一.如果直接使用可视化文件管理器 1.直接点击右键,直接选择“显示隐藏文件”选项. 2.快捷键 CTRL + H 二.在终端命令行模式下 可以使用ls命令的-a参数来显示隐藏的文件及文件夹. ls - ...
- windows下ruby中显示中文的3种方法
A: 1将x.rb编码为ascii格式 2 在x.rb开头加上 #code:gbk或者 #coding:gbk B: 1 将x.rb编码为utf-8格式 2 在x.rb开头加上 #code:utf-8 ...
- mysql数据库导出模型到powerdesigner,PDM图形窗口中显示数据列的中文注释
1,mysql数据库导出模型到powerdesigner 2,CRL+Shift+X 3,复制以下内容,执行 '******************************************** ...
- MFC对话框中显示BMP,JPG图片
//************************************ // 方法说明: 显示JPG和GIF.BMP图片 // 参数说明: CDC * pDC 设 ...
- MFC对话框中显示背景图片
在MFC对话框中显示图片,四个步骤. 1.首先得在VC6.0或者VS2008(其他版本也是一样)中导入GDI文件.(网上下载:) GDI含义是图形设备接口,主要任务是负责系统与绘图程序之间的信息交换, ...
- 转 在PowerDesigner的PDM图形窗口中显示数据列的中文注释
Name是名称(字段描述),Code是字段名称,Comment是注释名称,ER图中显示的是Name.一般设计时,Name跟comment都设计成描述, 而设计时候常把comment写成中文,name保 ...
- Frameset框架,在同一个浏览器窗口中显示不止一个页面
总结一下.通过使用Frameset框架,可以在同一个浏览器窗口中显示不止一个页面. 先举个例子: 1 <frameset rows="100,*" cols="*& ...
- OpenGL编程逐步深入(三)在窗口中显示一个三角形
这一节教程的内容会比较少,我们仅仅是对上一节教程中的代码进行扩展,在窗口中渲染一个三角形出来. 本节我们以下图所示正方形来讲解OpenGl中的坐标系统.当沿着Z轴负方向看时,可见顶点的坐标必须在这个正 ...
随机推荐
- [转]HSpice仿真
一.HSPICE基础知识Avant! Start-Hspice(现在属于Synopsys公司)是IC设计中最常使用的电路仿真工具,是目前业界使用最为广泛的IC设计工具,甚至可以说是事实上的标准.目前, ...
- [原创]JAVA技巧:去除ArrayList<Object>里面的重复记录
简单说明 ArrayList中保存的是某种类型的对象,如User,现在需要将对象属性userid重复的都去掉,使userid唯一,要如何处理? 实现步骤 代码如下方所示,实现一个Comparator的 ...
- Python 多进程 一分钟下载二百张图片 是什么样子的体验
需要爬取国内某个网站,但是这个网站封ip,没办法,只能用代理了,然后构建自己的代理池,代理池维护了20条进程, 所用的网络是20M带宽,实际的网速能达到2.5M,考虑到其他原因,网速未必能达到那么多. ...
- Latex文件如何拆分进行独立编译?
Latex文件如何拆分并进行独立编译? --latex源文件分批独立编译 最近使用Latex编写长文档,对于文件的组织有些困扰. 如果LaTeX文档比较大,可以考虑拆分为几个部分.比如编辑 ...
- UVa 12715 Watching the Kangaroo(二分)
题意:n条线段(n <= 100000) (L<=R <= 1e9) ,m组询问(m <= 100000) 每次询问一个点的覆盖范围的最大值.一个点x对于一条包括其的线段,覆盖 ...
- Linode中的Network Helper
Linode主机vps有一个很好的网络配置工具:Network Helper,他可以在系统启动的时候,根据你的操作系统,以及检测到的网络配置等信息,自动配置好网络,非常有用. 官方文档: Networ ...
- [k8s]subpath解决cm覆盖目录问题
参考 发现cm老覆盖容器原有目录里的内容,后来不得不通过in -s的方式来搞cm, 先将cm挂到/tmp下,然后ln -s文件到指定目录. 后来发现个cm的subpath特性可以解决这个问题 写了bu ...
- 李洪强iOS开发之-FMDB的用法
// // ViewController.m // 04 - FMDB的用法 // // Created by 李洪强 on 2017/6/6. // Copyright © 2017年 李洪 ...
- IOS7的蛋疼各种收集
------------------ ios7基于viewController隐藏状态条:通过ViewController重载方法返回枚举值的方法来控制状态栏的隐藏和样式.首先,需要在Info.pli ...
- lua的table库
函数列表: table.insert(table,[ pos,] value) table.remove(table[, pos]) table.concat(table[, sep[, i[, j] ...