SDL2.0在mfc窗口中显示yuv的一种方法
来源:互联网 发布:靠谱韩代 淘宝店 良心 编辑:程序博客网 时间:2024/05/01 12:57
SDL显示问题
Ubuntu下进行OpenGL编程
SDL2.0在mfc窗口中显示yuv的一种方法
2012-07-10 14:08:57| 分类:SDL | 标签:|举报|字号大中小 订阅
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_Destroy函数中会恢复hwnd默认消息处理函数,如果不希望sdl参与消息处理,可将SetWindowLongPtr注销掉
对SDL的使用还在摸索中,不能保证上述知识全部正确,如哪位仁兄发现问题,请留言更正,再次谢过了!
对SDL的使用还在摸索中,不能保证上述知识全部正确,如哪位仁兄发现问题,请留言更正,再次谢过了!
0 0
- 【转载】SDL2.0在mfc窗口中显示yuv的一种方法
- SDL2.0在mfc窗口中显示yuv的一种方法
- SDL2.0在mfc窗口中显示yuv的一种方法
- SDL2.0在mfc窗口中显示yuv的一种方法
- SDL2.0在mfc窗口中显示yuv的一种方法
- SDL2.0在mfc窗口中显示yuv的一种方法
- 转 SDL2.0在mfc窗口中显示yuv的一种方法
- SDL2.0在mfc窗口中显示yuv的一种方法
- SDL2.0在mfc窗口中显示yuv 数据
- 在MFC中使用SDL2.0(SDL窗口嵌入到MFC中)
- 使用SDL2.0进行YUV显示
- SDL2显示YUV图像
- SDL2.0显示图形窗口
- MFC中如何利用ffmpeg和SDL2.0多线程多窗口播放摄像头的视频
- SDL2.0 播放YUV
- 在MFC的View窗口中显示IplImage之一
- 在MFC的View窗口中显示IplImage之二
- 在mfc对话框中添加一个显示网页的窗口
- zoj 3809 水 2014 ACM牡丹江区域赛网赛
- 原生态异步提交
- linux nohup命令详解
- vertical-align的小作用
- PAT 1086. Tree Traversals Again (25)
- SDL2.0在mfc窗口中显示yuv的一种方法
- Linux tail 命令详解
- Android系统集成第三方pre-build库和程序(转)
- 创建型模式总结
- 对于返回局部指针变量的思考
- iOS7新增特性
- MMU(TLB)与Cache的工作方式
- Redundant management nodes in MySQL Cluster
- HTML学习之超链接