YUV420P用SDL显示问题. [问题点数:100分,结帖人cp1982]

Bbs2
本版专家分:131
结帖率 100%
Bbs2
本版专家分:131
Bbs7
本版专家分:25749
Blank
红花 2014年3月 Delphi大版内专家分月排行榜第一
2014年2月 Delphi大版内专家分月排行榜第一
2014年1月 Delphi大版内专家分月排行榜第一
2013年12月 Delphi大版内专家分月排行榜第一
2013年11月 Delphi大版内专家分月排行榜第一
2013年10月 Delphi大版内专家分月排行榜第一
2013年9月 Delphi大版内专家分月排行榜第一
2013年8月 Delphi大版内专家分月排行榜第一
2013年7月 Delphi大版内专家分月排行榜第一
2013年6月 Delphi大版内专家分月排行榜第一
2013年5月 Delphi大版内专家分月排行榜第一
Blank
黄花 2014年3月 C++ Builder大版内专家分月排行榜第二
2014年1月 C++ Builder大版内专家分月排行榜第二
2013年12月 C++ Builder大版内专家分月排行榜第二
2013年8月 C++ Builder大版内专家分月排行榜第二
2013年7月 C++ Builder大版内专家分月排行榜第二
2013年4月 Delphi大版内专家分月排行榜第二
Blank
蓝花 2013年11月 C++ Builder大版内专家分月排行榜第三
2013年9月 C++ Builder大版内专家分月排行榜第三
2013年6月 C++ Builder大版内专家分月排行榜第三
2013年3月 Delphi大版内专家分月排行榜第三
Bbs2
本版专家分:131
Bbs1
本版专家分:40
Bbs4
本版专家分:1748
Bbs2
本版专家分:289
DirectShow能显示YUV420P吗?
这个<em>问题</em>比较重要,希望高手指点一下。rn我们知道,ffmpeg解码后的YUV数据是YUV420P,但是这种数据格式目前在DirectShow中还没有<em>显示</em>出来,我只得到大块绿色为主的画面,我参考的有关代码是:rnhttp://blog.csdn.net/wtxidian/archive/2007/01/08/1476676.aspxrnrn我现在的方法是将YUV420P转换成YUV422——使用sws_scale函数,这样可以正常<em>显示</em>。但是,最大一个<em>问题</em>是cpu占用过高,比VLC高出近一倍。所以这样做是不可以取。rnrn我在网上找了一下,其中有高人说,DirectShow支持YUV420P/YUV420,如果这样,那么情况不妙了。rnrn因此,在此请各位大侠帮忙解决一下。rn谢谢!
用ffmpeg转yuv420p到rgb565
如何用编译出的swscale.dll将av_decode_video解码出来的<em>yuv420p</em>里面的数据转换为rgb565格式的,swscale.dll里有现成的函数可以用吗?是哪个?rn望指点。
libpng解析png图片,用SDL显示
跟上一篇解析 <em>显示</em>解析并<em>显示</em> bmp 类似,这次的对象是 24位(带rgba)的 png. 不同的是 bmp 格式比较简单,是自己写代码解析的.png 格式比较复杂,使用了libpng. 在此快速记录。 libpng 关键函数是 png_get_rows() ,能取得 png 的 二维图像数据,然后自己想办法搞到自己 new 出来的 内存里即可 纯试验,没处理泄露,没考虑代
用SDL显示不同的风格文字
v1.0.0   备注:以下代码是在c4droid运行。   #include #include SDL_Window*window=NULL; SDL_Renderer*renderer=NULL; //窗口类 class Window {     public:     //记录是否加载成功     bool load;     //构造函数     Wind
直接操作 SDL_Overlay YUV叠加上的像素
根据这篇解码出yuv数据后 海思h264解码库 y,u,v数据全部存进数组内,          IntPtr y = _decodeFrame.pY;                 IntPtr v = _decodeFrame.pV;                 IntPtr u = _decodeFrame.pU;                 byte[] ys = ...
如何用sdl在一个窗口中创建两个surface图层,一个作为图片或视频的显示,另一个作为控制ui图层
SDL是否支持在一个窗口中创建两个surface图层,一个作为图片或视频的<em>显示</em>,另一个作为控制ui的图层呢? 不使用SDL_BlitSurface的blit功能能实现这种要求么? 在官方的说明文档中也
SDL实现overlay方式双屏显示的应用流程分析(thinkvd开发日志)
由于在参与开发 thinkvd video converter 遇到释放SDL内存的<em>问题</em>,应用中需要在预览、全屏、双屏及CLIP之间来回切换,再次看了SDL相关的源代码,把SDL实现的过程简单说一下。 SDL开发包中自带的样例:testsprite2.c中就是一个实现多屏<em>显示</em>的例子。 简化它来说大概这几步: 1。SDL_Init(SDL_INIT_VIDEO | SDL_INIT_N
sdl:如何建立一个永远显示在上层的图层
如何建立一个永远<em>显示</em>在上层的图层? 就像桌面工具一样,想利用<em>sdl</em>做一个<em>显示</em>在屏幕一角的应用工具,不知道各位大虾有办法没有,谢谢各位了
使用SDL实现YUV与RGB的叠加输出,闪屏问题
在开发中我遇到一个<em>问题</em>,希望请教大家。 目标:使用SDL库实现YUV与RGB的叠加输出。 实现:当前先通过SDL_DisplayYUVOverlay输出YUV。 再通过SDL_BlitSurface、
视频显示库SDL
<em>sdl</em>开发库,视频渲染<em>显示</em>;方便易用,很小巧的一个开源库;
SDL视频显示进阶
1、SDL中事件和线程(函数同时运行) 2、练习 (1)创建线程 第一个参数是一个函数,创建线程后refresh_video这个函数和下面的while()循环同时执行 (2)refresh_video函数 不断循环,这里的REFRESH_EVENT用于刷新视频的画面,发一个REFRESH_EVENT就延时40ms,用到SDL_PushEvent函数 (3
ffmpeg SDL 显示视频
新手入门,ffmpeg SDL<em>显示</em>视频,编译通过
SDL视频显示
1、SDL SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以开发出跨多个平台(Linux、Windows、Mac OS X等)的应用软件。目前SDL多用于开发游戏、模拟器、媒体播放器等多媒体应用领域。 2、视频<em>显示</em>知识 (1)视频<em>显示</em>
SDL 多窗口显示
我现在使用ffmpeg获取实时数据流,通过SDL进行<em>显示</em>rn目前我把这个封装成一个空间,一切都很正常rn但是通过360多页面打开时,第一个页面正常,到第三个页面就绘制在前一个页面上了,最后两个页面崩溃rn在MFC对话框中<em>显示</em>多个控件也一样,第二个<em>显示</em>SDL_Surface 就出<em>问题</em>了rnrn是否SDL 不支持多窗口的<em>显示</em>rn如果在独立的程序中就可以~ rnrn各位大虾~ 请教一下~
SDL2播放视频(RGB/YUV)
原文: https://blog.csdn.net/leixiaohua1020/article/details/40525591 SDL播放视频的流程 1. 初始化  1) 初始化SDL  2) 创建窗口(Window)  3) 基于窗口创建渲染器(Render)  4) 创建纹理(Texture) ...
类型转换问题(字符编码?)(SDL_ttf显示汉字)
SDL_ttf扩展库<em>问题</em>: 在网上找了快两天了,一直没解决: 如果直接在代码中写入汉字: std::string text_="汉字一二:"; message=TTF_RenderUTF8_Solid
在SDL工程中让SDL_ttf渲染汉字 分类: ffmpeg-SDL-...
有时候在关于SDL的博文中看到一些评论,说SDL对中文的支持不佳,因为当程序涉及中文时总是输出乱码。照我个人观点,这里面很多都是误解。下面就根据我在windows下使用SDL的情况,说说我的观点。SDL作为一个跨平台的库,在字符方面有它独特的地方。那就是,它的运行库支持的字符编码为UTF8,而不是windows中常见的各种本地字符编码。比如中文版windows使用的codepag...
SDL系列讲解(八) SDL_ttf教程
关于游戏开发,当前还在调试,一款移植的随后先推出,自己开发的需要稍等几周,近期比较忙,时间不充裕,大家谅解。同时,对于android开发中的任意<em>问题</em>,可以留言,想了解哪方向的知识,可以回复,如果有能力,可以进行讲解的,后续我便会进行展开,以便更准确的帮助到大家。 感谢一路大家的支持与厚爱。 SDL系列讲解(一)  简介 SDL系列讲解(二) 环境搭建 SDL系列讲解(三) 工具安装 SDL
在YUV图像上根据背景色实现OSD反色
所谓的OSD其实就是在视频图像上叠加一些字符信息,比如时间,地点,通道号等,在图像上叠加OSD通常有两种方式, 一种是在前端嵌入式设备上,在图像数据上叠加OSD, 这样客户端这边只需解码<em>显示</em>数据即可。另一种是PC客户端在接收到前端设备图像,解码之后,进行叠加。这两种都是比较常见的方式。 最近做一个网络播放器, 有在播放器实时叠加OSD这个需求,正好借这个机会研究了一下。先说下大体流程, 首先,播
SDL显示视频图像
作用:用已存在的像素数据更新纹理 int SDL_UpdateTexture(SDL_Texture* texture,//要更新的纹理 const SDL_Rect* rect,//要更新的区域,如果为NULL,则更新整个纹理 const void* pixels,//已存在的像素值
【SDL】---窗口显示
学习SDL,看官方的例子很多,网上其他的人例子总有一点残缺,学习成本较高,比如<em>显示</em>窗口就单纯的<em>显示</em>窗口,如果你把消息循环也放进去,理解起来程序并不复杂,而且瞬间就提高了一个档次。#include "SDL.h" #include #pragma comment(lib, "./SDL2.0.4/lib/x86/SDL2.lib")int _tmain(int argc, _TCH
YUV420P转换RGB问题
现在对视频解码后得到了<em>yuv420p</em>数据,我在网上找到如下函数rn[code=C/C++]rn//创建转换表rnvoid CreateYUVTab()rnrn int i;rn int u, v;rnrn colortab = (int *)malloc(4*256*sizeof(int));rn u_b_tab = &colortab[0*256];rn u_g_tab = &colortab[1*256];rn v_g_tab = &colortab[2*256];rn v_r_tab = &colortab[3*256];rnrn for (i=0; i<< 8;rn g_2_pix[i+256] = (i & 0xFC) << 3;rn b_2_pix[i+256] = (i ) >> 3;rn rnrn for(i=0; i<< 8;rn g_2_pix[i+512] = 0xFC << 3;rn b_2_pix[i+512] = 0x1F;rn rnrn r_2_pix += 256;rn g_2_pix += 256;rn b_2_pix += 256;rnrn//转换YUV420P到RGB565,并写入ddraw表面显存pdst中rnvoid DisplayYUV(unsigned int *pdst, unsigned char *y, unsigned char *u, unsigned char *v, int width, int height, int src_ystride, int src_uvstride, int dst_ystride)rnrn int i, j;rn int r, g, b, rgb;rnrn int yy, ub, ug, vg, vr;rnrn const int width2 = width/2;rn const int height2 = height/2;rnrn unsigned char* yoff;rn unsigned char* uoff;rn unsigned char* voff;rnrn for(j=0; j>1] = (rgb)+((r_2_pix[r] + g_2_pix[g] + b_2_pix[b])<<16);rn rn rnrn[/code]rn我尝试过用directdraw建一个离屏表面,但是效率太低了。被否决了。我现在用的<em>显示</em>方式是传主表面的lpSurf到DisplayYUV中的pdst中,直接写进入,再<em>显示</em>。现在的<em>问题</em>是,我现在视频源数据是352*288的,直接用这个函数转换的话,在320*240的windows mobile6模拟器屏上<em>显示</em>是有<em>问题</em>,可以占到全屏。但是左边有间条,图像<em>显示</em>不正常。如果放到640*480的真机中,就只占到上方的一部分,而且右边还有一部分重复的。rnrn关于转换,我现在在想如果调用sws_scale转换YUV420P到RGB565的话,我又不知道怎么将sws_scale传出的uint8_t* dst[], int dstStride[] 组织到主表面的lpSurf中。rn关于分辨率的<em>问题</em>,我现在还有头绪,希望大家提点一下
sdl问题
我把<em>sdl</em>装好后,rn#include rn#include rnrnint main(int argc, char **argv)rnrn return 0;rnrnrn编译报错说有无法解析的外部符号 _main, 请问是怎么回事?怎么解决?rn我用的是vc 2005,貌似没装SP1
SDL问题
本人在本机上有个SDL的测试程序,运行没<em>问题</em>。但是在其他人的机器上,除一台外,其他运行时就会出现Fatal signal: Segmentation Fault (SDL Parachute Deployed)这种错误,不知到为什么。大家都是完全安装,<em>sdl</em>库的版本是linux8.0 的默认版本,kde环境。谁能知道啊?能给个意见就行。我在程序中就只用到了,初始化timer和delay和quit函数。
嵌入式开发之davinci--- 8127 中osd yuv 数据分析
YUV数据类型总结: YUV格式有两大类:planar和packed。对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。对于packed的YUV格式,每个像素点的Y,U,V是连续交*存储的。YUV常见有444 422 420 下面分析yuv和像素对应关系: 一个RGB像素 大小 = 3个字节  每个分量代表一个字节   在SWOSD 和D...
ffmpeg实战教程(二)用SDL播放YUV,并结合ffmpeg实现简易播放器
ffmpeg实战教程(二)用SDL播放YUV,并结合ffmpeg实现简易播放器 https://blog.csdn.net/King1425/article/details/71171142 我们先实现用SDL播放YUV数据 先来了解一下基本概念 SDL基本函数: [初始化]  * SDL_Init(): 初始化SDL。  * SDL_CreateWindow(): 创建窗口(Window...
修改TI Davinci IPNC显示的OSD LOGO
最近需要修改Davinci本地输出<em>显示</em>的Logo,但是TI的Software OSD on DM36x User Guide写得很模糊,很多东西都不全,于是决定绕开TI提供的工具,使用开源社区的工具重新制作一遍。 1. 生成一副160x64的jpeg图片 这里推荐用Ubuntu下的GIMP工具,不过也可以用其他工具 2. 将160x64的jpeg图片转换成yuv422 这里
Hi3519V101移植SDL+FreeType+SDL_ttf
目录目录 前言 源码下载 SDLFreeTypeSDL_ttf库编译过程 freeType编译过程 SDL编译过程 SDL_ttf编译过程 测试 总结 番外前言刚开始接触海思的时候要实现的功能就是OSD<em>显示</em>,虽然功能简单,但是要花了很长的时间,主要是对海思平台不够了解,同时对交叉编译测试还不太明白(虽然现在也不怎么明白),特此记录一下!当然也会抽时间把Hifb实现OSD的方式整理一下。毕竟Hifb是
生成ffmpeg使用的测试yuv格式图片
simplest_pic_gen。该工具可以生成视频测试时候常用的RGB/YUV格式的测试图片。包括灰阶测试图,彩条图,彩色条纹图,RGB渐变彩条图,YUV渐变彩条图,颜色视频等。下面简单介绍一下生成YUV格式图片的方法查看生成的图片需要使用RGB/YUV播放器。亮度取值为16-235的灰阶测试图下面这张图是一张灰阶测试图的示例。这张图的分辨率是1280x720,像素格式是YUV420P,亮度的取...
扫雷 用SDL编程
扫雷 点一个空的时候把邻近的所有连通的空格全部显出
用SDL显示图片失败
参考 rnhttp://hi.baidu.com/dvalyan/blog/item/51bd19224d99a2599822edf0.html rnrn
D3D11显示ffmpeg解码出的YUV420P数据
最近在做D3D11的播放器,用来<em>显示</em>ffmpeg解码出来的AVFrame,这里记录下踩过的坑。 坑1:创建纹理缓存时要设置 MipLevels=1 坑2:创建纹理缓存时指定的DXGI_FORMAT_R8_UNORM 和 shader 内 PS 函数获取采样色彩后分量要一致
SDL下多路视频显示报错问题
我是SDL的新手,在使用过程中碰到了<em>问题</em>希望大家能帮帮忙,是在ubuntu 10.4下碰到的,<em>问题</em>如下:rnrn我用SDL_SetVideoMode产生一个窗口screensurface: width = 640, height = 320rnSDL_LoadBMP产生四个SDL_Surface并SDL_BlitSurface到screensurface,调整四个SDL_Surface的位置,位置如下rn1: left(0,0) w = 320 h = 240rn2: left(320,0) w = 320 h = 240rn3: left(0,240) w = 320 h = 240rn4: left(320,240) w = 320 h = 240rn然后分别在每个SDL_Surface上面创建SDL_Overlay<em>显示</em>视频rn1、2能正常<em>显示</em>视频,3、4窗口在调用SDL_DisplayYUVOverlay<em>显示</em>视频窗口时报错,错误信息:rnprogram received signal SIGSEVG segmentation fault,严格的说是在<em>显示</em>视频3的时候异常退出了。rnrn以上<em>问题</em>希望能帮忙解决,谢谢!
YUYV(YUY2)到YUV420P的转化问题
我照着ffmpeg的api-example.c写了一个编码的小程序,现在对YUV420P的数据可以编码了.rn但是我的摄像头输出的是YUYV(YUY2)格式的数据,这种数据怎么转化成YUV420P的呢??rnrn听别人说ffmpeg里面有接口可以实现这个,没找到....rnrn谢谢哈
ffmpeg学习八:软件生成yuv420p视频并将其编码为H264格式
通过前面对ffmpeg中常用的几个api的源码分析,从而对api有了更好的理解。之前已经做过视频的解码了,今天来尝试视频的编码。ffmpeg已经给我们提供了相应的可供参考的程序:doc/examples/decoding_encoding.c文件就是解码和编码的例程。仔细阅读它的代码后,我们可以按照自己的理解,写自己的视频编码程序。我们将会把一个<em>yuv420p</em>格式的文件,使用h264编码器进行编码。
最简单的视音频播放示例7:SDL2播放RGB/YUV
本文记录SDL播放视频的技术。在这里使用的版本是SDL2。实际上SDL本身并不提供视音频播放的功能,它只是封装了视音频播放的底层API。在Windows平台下,SDL封装了Direct3D这类的API用于播放视频;封装了DirectSound这类的API用于播放音频。因为SDL的编写目的就是简化视音频播放的开发难度,所以使用SDL播放视频(YUV/RGB)和音频(PCM)数据非常的容易。
SDL2.0的YUV显示问题,效率感觉太低,求教~!!
SDL2.0的YUV<em>显示</em><em>问题</em>,效率感觉太低; (1)由于2.0支持了多窗口,所以想用SDL2.0来做多窗口的视频<em>显示</em>,参考网上的的一些做法,下面是我的做法,但是<em>显示</em>效率感觉很低;不知道大家有没有什么好
FFMPEG学习----使用SDL播放YUV数据
命令行下配置: G:\Coding\Video\SDL\proj&amp;gt;tree /F 文件夹 PATH 列表 卷序列号为 0FD5-0CC8 G:. │ <em>sdl</em>.cpp │ SDL2.dll │ SDL2.lib │ SDL2main.lib │ sintel_640_360.yuv │ test_<em>yuv420p</em>_320x180.yuv │ └─<em>sdl</em> begi...
SDL2.0 播放YUV
/* * ===================================================================================== * * Filename: main.cpp * * Description: * * Version: 1.0 * Created: 2014年05月10日 1
[SDL] SDL 游戏开发教程 (英文版)
☆ 资源说明:☆ [Packt Publishing] SDL 游戏开发教程 (英文版) [Packt Publishing] SDL Game Development (E-Book) ☆ 出版信息:☆ [作者信息] Shaun Mitchell [出版机构] Packt Publishing [出版日期] 2013年06月24日 [图书页数] 256页 [图书语言] 英语 [图书格式] PDF 格式
SDL SDK + SDL Image
SDL_Image SDL SDLProgram SDL_Image SDL SDLProgram SDL_Image SDL SDLProgram SDL_Image SDL SDLProgram
关于SDL显示H264的困惑
[code=c]int _tmain(int argc, _TCHAR* argv[]) rn rn AVFormatContext *pFormatCtx; rn int i, videoindex; rn AVCodecContext *pCodecCtx; rn AVCodec *pCodec; rn char filepath[]="nwn.mp4"; rn av_register_all(); rn avformat_network_init(); rn pFormatCtx = avformat_alloc_context(); rn if(avformat_open_input(&pFormatCtx,filepath,NULL,NULL)!=0) rn printf("无法打开文件\n"); rn return -1; rn rn if(av_find_stream_info(pFormatCtx)streams[i]->codec->codec_type==AVMEDIA_TYPE_VIDEO) rn rn videoindex=i; rn break; rn rn if(videoindex==-1) rn rn printf("Didn't find a video stream.\n"); rn return -1; rn rn pCodecCtx=pFormatCtx->streams[videoindex]->codec; rn pCodec=avcodec_find_decoder(pCodecCtx->codec_id); rn if(pCodec==NULL) rn rn printf("Codec not found.\n"); rn return -1; rn rn if(avcodec_open(pCodecCtx, pCodec)width, pCodecCtx->height)]; rn avpicture_fill((AVPicture *)pFrameYUV, out_buffer, PIX_FMT_YUV420P, pCodecCtx->width, pCodecCtx->height); rn//------------SDL---------------- rn if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER)) rn printf( "Could not initialize SDL - %s\n", SDL_GetError()); rn exit(1); rn rn SDL_Surface *screen; rn screen = SDL_SetVideoMode(pCodecCtx->width, pCodecCtx->height, 0, 0); rn if(!screen) printf("SDL: could not set video mode - exiting\n"); rn exit(1); rn rn SDL_Overlay *bmp; rn bmp = SDL_CreateYUVOverlay(pCodecCtx->width, pCodecCtx->height,SDL_YV12_OVERLAY, screen); rn SDL_Rect rect; rn//--------------- rn int ret, got_picture; rn static struct SwsContext *img_convert_ctx; rn int y_size = pCodecCtx->width * pCodecCtx->height; rn rn AVPacket *packet=(AVPacket *)malloc(sizeof(AVPacket)); rn av_new_packet(packet, y_size); rn //输出一下信息----------------------------- rn printf("文件信息-----------------------------------------\n"); rn av_dump_format(pFormatCtx,0,filepath,0); rn printf("-------------------------------------------------\n"); rn //------------------------------ rn while(av_read_frame(pFormatCtx, packet)>=0) rn rn if(packet->stream_index==videoindex) rn rn ret = avcodec_decode_video2(pCodecCtx, pFrame, &got_picture, packet); rn if(ret < 0) rn rn printf("解码错误\n"); rn return -1; rn rn if(got_picture) rn rn img_convert_ctx = sws_getContext(pCodecCtx->width, pCodecCtx->height, pCodecCtx->pix_fmt, pCodecCtx->width, pCodecCtx->height, PIX_FMT_YUV420P, SWS_BICUBIC, NULL, NULL, NULL); rn sws_scale(img_convert_ctx, (const uint8_t* const*)pFrame->data, pFrame->linesize, 0, pCodecCtx->height, pFrameYUV->data, pFrameYUV->linesize); rn rn SDL_LockYUVOverlay(bmp); rn bmp->pixels[0]=pFrameYUV->data[0]; rn bmp->pixels[2]=pFrameYUV->data[1]; rn bmp->pixels[1]=pFrameYUV->data[2]; rn bmp->pitches[0]=pFrameYUV->linesize[0]; rn bmp->pitches[2]=pFrameYUV->linesize[1]; rn bmp->pitches[1]=pFrameYUV->linesize[2]; rn SDL_UnlockYUVOverlay(bmp); rn rect.x = 0; rn rect.y = 0; rn rect.w = pCodecCtx->width; rn rect.h = pCodecCtx->height; rn SDL_DisplayYUVOverlay(bmp, &rect); rn //延时40ms rn SDL_Delay(40); rn rn rn av_free_packet(packet); rn rn delete[] out_buffer; rn av_free(pFrameYUV); rn avcodec_close(pCodecCtx); rn avformat_close_input(&pFormatCtx); rn rn return 0; rn [/code]rnrnrn这段代码有几点困惑的地方:rn1.avcodec_decode_video2()函数解码后,pFrame的data[0],data[1],data[2]中存的就是YUV数据bmp->pixels直接赋值pFrame中的数据,为什么还要用函数 sws_scale()进行转换,存到pFrameYUV,而且转化后还是YUV数据,这有什么区别吗?(我测试过,是需要转换的,否则<em>显示</em>出来花的)。rnrn2.pFrameYUV中的data[0],data[1],data[2]分别为Y,U,V分量,为什么分别赋给bmp->pixels[0],bmp->pixels[2],bmp->pixels[1],难道bmp中的pixels[0],pixels[1],pixels[2]分别对应Y,V,U分量吗?这个<em>问题</em>我查资料没查出来,谁能指点下?
[SDL 问题] Delphi SDL 开发遇到问题
[code=Delphi(Pascal)]rnunit Unit1;rninterfacernusesrn Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,rn Dialogs, SDL, StdCtrls;rnrntypern TForm1 = class(TForm)rn Button1: TButton;rn procedure FormCreate(Sender: TObject);rn procedure Button1Click(Sender: TObject);rn privatern Private declarations rn publicrn Public declarations rn end;rnrnrnvarrn Form1: TForm1;rnrnimplementationrn usesrn avformat, avcodec, avutil, mem, swscale,FFMPEGDynamiccall;rn$R *.dfmrnfunction SDL_Auxilipitary_ForDelphi(var pict:PAVPicture;var bmp:PSDL_Overlay):Integer;stdcall;external 'delphiSDL.dll';rnfunction SDL_GetOverlayPix(const bmp:PSDL_Overlay;const i : integer):System.PByte;stdcall;external 'delphiSDL.dll';rnfunction SDL_GetOverlayPit(const bmp:PSDL_Overlay;const i : integer):Integer;stdcall;external 'delphiSDL.dll';rnprocedure TForm1.FormCreate(Sender: TObject);rnbeginrn // 初始化 SDLrn if(SDL_Init(SDL_INIT_VIDEO or SDL_INIT_AUDIO or SDL_INIT_TIMER) < 0) thenrn showmessage(Format('Couldn''t initialize SDL : %s',[SDL_GetError]));rn // 初始化 FFMPEG 库rn // 动态调用rn FFCall_AddLibrary('D:\Delphi\ffmpeg 研究工程\avcodeclib\pthreadGC2.dll');rn FFCall_AddLibrary('D:\Delphi\ffmpeg 研究工程\avcodeclib\xvidcore.dll');rn FFCall_AddLibrary('D:\Delphi\ffmpeg 研究工程\avcodeclib\avutil.dll');rn FFCall_AddLibrary('D:\Delphi\ffmpeg 研究工程\avcodeclib\swscale.dll');rn FFCall_AddLibrary('D:\Delphi\ffmpeg 研究工程\avcodeclib\avcodec.dll');rn FFCall_AddLibrary('D:\Delphi\ffmpeg 研究工程\avcodeclib\avfilter.dll');rn FFCall_AddLibrary('D:\Delphi\ffmpeg 研究工程\avcodeclib\avformat.dll');rn FFCall_AddLibrary('D:\Delphi\ffmpeg 研究工程\avcodeclib\avdevice.dll');rn FFCall_Init;rnend;rnrnprocedure TForm1.Button1Click(Sender: TObject);rnconstrn filename = 'E:\Sample.avi'; // 得到 H.264 也可以 保存为图片rnvarrn pFormatCtx: PAVFormatContext;rn pCodecCtx: PAVCodecContext;rn pCodec: PAVCodec;rn pFrame: PAVFrame;rn pScaleCtx: PSwsContext;rn numBytes: integer;rn buffer: PByte;rn frameFinished : int ;rn pict: TAVPicture;rn i, videoStream: integer;rn ptk : TAVPacket;rn CRect : TRect;rn // <em>sdl</em>rn screen : PSDL_Surface;rn bmp:PSDL_Overlay;rnbeginrn av_register_all();rn // Open video filern if av_open_input_file ( pFormatCtx, filename, nil, 0, nil ) <> 0 thenrn raise exception.Create ( 'WTF?! Couldn''t open file!!!' );rn // Retrieve stream informationrn if av_find_stream_info ( pFormatCtx ) < 0 thenrn raise exception.Create ( 'WTF?! Couldn''t find stream information!!!' );rn dump_format ( pFormatCtx, 0, filename, 0 ); // <<<<<< i dont know how its worksrn // Get a pointer to the codec context for the video streamrn videoStream := -1;rn for i := 0 to pFormatCtx.nb_streams - 1 dorn beginrn if pFormatCtx.streams [i].codec.codec_type = CODEC_TYPE_VIDEO thenrn beginrn videoStream := i;rn break;rn end;rn end;rnrn if videoStream = -1 thenrn raise exception.Create ( 'WTF?! Didn''t find a video stream!' );rnrn pCodecCtx := pFormatCtx.streams [videoStream].codec;rn // Open codecrn pCodec := avcodec_find_decoder ( pCodecCtx.codec_id );rn rn if pCodec = nil thenrn raise exception.Create ( 'WTF?! Codec not found!' );rn if avcodec_open(pCodecCtx,pCodec) < 0 thenrn raise exception.Create ( 'WTF?! Could not open codec!');rn // Allocate video framern pFrame:=avcodec_alloc_frame();rn // Determine required buffer size and allocate bufferrn numBytes := avpicture_get_size(PIX_FMT_RGB24, pCodecCtx.width,pCodecCtx.height);rn$ifndef __DARWIN__rn screen := SDL_SetVideoMode(pCodecCtx.width, pCodecCtx.height, 0, 0);rn$elsern screen := SDL_SetVideoMode(pCodecCtx.width, pCodecCtx.height, 24, 0);rn$endifrn if not assigned(screen) then showmessage(Format('SDL: could not set video mode : %s',[SDL_GetError]));rn bmp := SDL_CreateYUVOverlay(pCodecCtx.width, pCodecCtx.height,rn SDL_YV12_OVERLAY, screen);rn // pFrameRGB := avcodec_alloc_frame;rn // avpicture_alloc ( PAVPicture (pFrameRGB), PIX_FMT_RGB32, pCodecCtx.width, pCodecCtx.height );rn pScaleCtx := sws_getContext ( pCodecCtx.width, pCodecCtx.height, pCodecCtx.pix_fmt,rn pCodecCtx.width, pCodecCtx.height, PIX_FMT_RGB32, SWS_BICUBIC, nil, nil, nil );rn i := 0;rn while(av_read_frame(pFormatCtx, @ptk)>=0) do beginrn i := i + 1;rn if(ptk.stream_index = videoStream) then beginrn // Decode video framern avcodec_decode_video(pCodecCtx, pFrame, @frameFinished,ptk.data, ptk.size);rn // Did we get a video frame?rn if frameFinished <> 0 then beginrn rn //*************************************************************rn// <em>问题</em>来了rn// SDL_GetOverlayPix 我用 C++ 写的动态链接库rn rn pict->data[0] = bmp->pixels[0];rn pict->data[1] = bmp->pixels[2];rn pict->data[2] = bmp->pixels[1];rn pict->linesize[0] = bmp->pitches[0];rn pict->linesize[1] = bmp->pitches[2];rn pict->linesize[2] = bmp->pitches[1];rn return 1;rn <em>问题</em>就是 这样 黑屏 无法播放!rn 如果用 delphi 实现 rn delphi SDLrn TSDL_Overlay = recordrn format: UInt32; // Overlay formatrn w, h: Integer; // Width and height of overlayrn planes: Integer; // Number of planes in the overlay. Usually either 1 or 3rn pitches: PUInt16;rn // An array of pitches, one for each plane. Pitch is the length of a row in bytes.rn pixels: PPUInt8; // 可以看出来 是 数组指针 不是数值rn // An array of pointers to the data of each plane. The overlay should be locked before these pointers are used.rn hw_overlay: UInt32;rn // This will be set to 1 if the overlay is hardware accelerated.rn end;rnrn 如何还原为数组呢???rnrn //*************************************************************rnrnrn SDL_LockYUVOverlay(bmp);rn showmessage(inttostr(integer(SDL_GetOverlayPix(bmp,0))));rn showmessage(inttostr(integer(SDL_GetOverlayPix(bmp,1))));rn showmessage(inttostr(integer(SDL_GetOverlayPix(bmp,2))));rn OutputDebugString(PChar(inttostr(SDL_GetOverlayPit(bmp,1))));rn // pict := getpict(bmp)^;rn pict.data[0] := SDL_GetOverlayPix(bmp,0);rn pict.data[1] := SDL_GetOverlayPix(bmp,2);rn pict.data[2] := SDL_GetOverlayPix(bmp,1);rn pict.linesize[0] := SDL_GetOverlayPit(bmp,0);rn pict.linesize[1] := SDL_GetOverlayPit(bmp,2);rn pict.linesize[2] := SDL_GetOverlayPit(bmp,1);rn OutputDebugString(PChar(inttostr(pict.linesize[2])));rn OutputDebugString(PChar(inttostr(integer(SDL_GetOverlayPix(bmp,1)))));rn OutputDebugString(PChar(inttostr(integer(pict.data[2]))));rn img_convert(@pict, PIX_FMT_YUV420P,rn PAVPicture(pFrame), pCodecCtx.pix_fmt, pCodecCtx.width, pCodecCtx.height);rnrn sws_scale(pScaleCtx, @pFrame.data, @pFrame.linesize,rn 0, pCodecCtx.height, @pict.data, @pict.linesize);rn SDL_UnlockYUVOverlay(bmp);rn Crect.Left := 0;rn Crect.top := 0;rn Crect.Right := pCodecCtx.width;rn Crect.Bottom := pCodecCtx.height;rn SDL_DisplayYUVOverlay(bmp, @CRect);rn Sleep(4);rn if i > 1000 then break;rn end;rn end;rn end;rn rn // Convert the image from its native format to RGBrn /*sws_scale(img_convert_ctx, pFrame->data, pFrame->linesize,rn 0, pCodecCtx->height, pFrameRGB->data, pFrameRGB->linesize);*/rn // Save the frame to diskrn /*if(++iwidth, pCodecCtx->height, i);*/rn SDL_LockYUVOverlay(bmp);rn AVPicture pict;rnrnrn // Convert the image into YUV format that SDL usesrn /*img_convert(&pict, PIX_FMT_YUV420P,rn (AVPicture *)pFrame, pCodecCtx->pix_fmt,rn pCodecCtx->width, pCodecCtx->height);*/rn sws_scale(img_convert_ctx, pFrame->data, pFrame->linesize,rn 0, pCodecCtx->height, pict.data, pict.linesize);rn SDL_UnlockYUVOverlay(bmp);rn rect.x = 0;rn rect.y = 0;rn rect.w = pCodecCtx->width;rn rect.h = pCodecCtx->height;rn SDL_DisplayYUVOverlay(bmp, &rect);rn //Sleep(60);rnrn rnend;rnrnend.rn[/code]
SDL添加了文字显示
将SDL_ttf添加到了SDL项目中,支持Unicode文字的直接<em>显示</em>
使用SDL2.0进行YUV显示
本文描述如何从ffmpeg decode出来的YUV frame到SDL2.0<em>显示</em>,重点在如何将ffmpeg decode的yuv format转换到SDL2.0可以<em>显示</em>的format,以及SDL如何<em>显示</em>。为什么要用YUV<em>显示</em>在使用软解方式实现一个视频播放器时,<em>显示</em>部分如果需要使用RGB format,由于ffmepg decode出来的format为YUV420,则需要做一次从YUV420到RGB
使用SDL播放YUV图像数据
SDL提供了针对YUV格式数据的直接写屏操作。废话不多说,直接上代码吧/** * file showyuv.c * author: rare * date: 2009/12/06 * email: dux003#163.com */#include #include "SDL.h"int main(int argc , char* argv[]){    int i = 1;    int x,
SDL的使用示例_显示YUV数据
博文http://blog.csdn.net/i_scream_/article/details/52714378 中的代码以及相关资料。
最简单的基于FFMPEG+SDL的视频播放器 ver2 (采用SDL2.0)
之前做过一个FFMPEG+SDL的简单播放器:《100行代码实现最简单的基于FFMPEG+SDL的视频播放器》。最近有不少人反映SDL已经升级到2.0版本了,甚至官网的Wiki上都只有SDL2.0的文档了,因此下载了SDL 2.0 并且进行了简单的研究。随后对此前的播放器进行了修改,将SDL1.2换成了SDL2.0。 注:《100行代码实现最简单的基于FFMPEG+SDL的视频播放器》文章中提到的很多知识这里不再重复。本文重点记录SDL1.2与SDL2.0的不同。
YUV420P图片裁剪出其中一块
我通过ffplay程序获得YUV420P图像,在图像<em>显示</em>之前,我需要进行裁剪处理,比如YUV420P图像如下: 比如需要裁剪出左上角的图像。裁剪后的图像仍然需要为YUV420P格式,因为我还需要通过S
SDL 显示YUV,RGB, BMP
通过SDL1<em>显示</em>BMP,YUV的示例程序。 功能: 支持直接<em>显示</em>文件BMP 支持<em>显示</em>内存BMP 支持<em>显示</em>YUV 附: BMP缩放需要SDL_GFX扩展。 工程是VS2010的WIN32
SDL多线程显示更新窗口
//初始化SDL2和创建一个窗口,并且将屏幕绘制成大红色 #include &amp;lt;iostream&amp;gt; extern &quot;C&quot; { #include &amp;lt;SDL.h&amp;gt; } //Refresh Event #define REFRESH_EVENT (SDL_USEREVENT + 1) #define BREAK_EVENT (SDL_USEREVENT + 2) bool t...
SDL使用SDL_ttf显示文字
搞了一天终于成功<em>显示</em>了,网上找了好多资料都不能正常<em>显示</em>,出现各种异常,最后终于用这种方式搞定了 先看<em>显示</em>效果 备注一下: 两个库的版本分别为SDL1.3.0.0   SDL_ttf-2.0.11 编程环境VS2010控制台程序 项目路径下要有一个字体文件(代码中打开字体要用到) 引入头文件库目录的方法这里不介绍 // SDLTTF.cpp : 定义控制台应用程序的入口
SDL 加载显示JPEG图片
在《 SDL点、线、面及图像加载 》一文中自己用SDL<em>显示</em>JPEG失败,现在有了解决方案。 关键函数: SDL_rwops.h:extern DECLSPEC SDL_RWops * SDLCALL SDL_RWFromFile(const char *file, const char *mode);extern DECLSPEC void SDLCALL SDL_FreeRW(SDL_RWop
sdl
能不能在<em>sdl</em>图形化界面中弹出一个窗口
YUV420P测试图片
640×480.yuv 大小640×480 格式为YUV420p 可以使用ffplay查看,查看方法:(ubuntu上可以直接安装ffplay) 1.安装ffplay工具 sudo apt insta
yuv420p
做编解码过程中最常见的视频格式是<em>yuv420p</em> 下面对<em>yuv420p</em>做一些介绍 420p中的p代表planar,也就是扁平的意思。所以这里引出yuv有两种布局方式,分别是lanar和packed。 对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。 对于packed的YUV格式,每个像素点的Y,U,V是连续交*存储的。 YUV,分为三个分量...
yuv420p基本图像处理
目前数字图像处理技术已经应用生活各个方面,但是大部分教程都是利用第三方库(如opencv)对RGB图像格式进行处理。对于YUV图像格式的图像处理教程较少。搬运总结了多个大牛的文章,总结出来这个YUV图
SDL2.0显示YUV图片的方法
使用函数SDL_UpdateYUVTexture(texture,&rect, yuvFrame->data[0], yuvFrame->linesize[0], yuvFrame->data[1], yuvFrame->linesize[1], yuvFrame->data[2], yuvFrame->linesize[2]);SDL_UpdateYUVTexture 需要用的参数包括纹理text
PPC上用SDL缩放问题
最近项目用到SDL,打算做图象缩放,本来是根据图像大小*X 最接近手机屏幕大小的方法来获取X(例如1.3倍数),从而用SDL_SetVideoMode,SDL_CreateYUVOverlay和SDL_DisplayYUVOverlay(大小都是X*图象大小),得到的结果发现没有达到缩放功能.在SP上可以看到缩放效果.在PPC上不知道有没有人成功实现用SDL缩放图象的?
SDL DEMO(源码), 实现了SDL显示汉字,图片等
SDL DEMO(源码), 实现了SDL<em>显示</em>汉字,图片等
用SDL做一个退出按钮
为了方便了解,我就用上节课的代码作了部分修改做一个简单的退出按钮。上节课:点击打开链接   先上效果图:     代码:   #include #include SDL_Window*window=NULL; SDL_Renderer*renderer=NULL; //窗口类 class Window { public: //记录是否加载成功
色彩模式yuv420p与RGB24转换
最近接手公司的新任务:实现yuv420与RGB24色彩之间的相互转换,网上有很多现成代码,但是不知道怎么验证其准确性,后来从网上找到了yuv格式的播放神器:YUV Player Deluxe,下载地址为&quot;http://www.yuvplayer.com/&quot;, <em>显示</em>效果如下: yuv播放器找到了,但是怎么制造一张内容为yuv格式的图片呢?答案是使用神器ffmpeg,下载ffmpeg工具,执行:...
使用Python显示YUV420图像
由于网上没找到好用的<em>显示</em>YUV420semiplanar格式图像的工具,自己整理了一段<em>显示</em>YUV420图像的python代码,分享给大家。 ############################################################### # author: sl # function: view yuv image file(only support YUV
sws_getContext函数详细使用
成功后返回SwsContext 类型的结构体。 参数1:被转换源的宽 参数2:被转换源的高 参数3:被转换源的格式,eg:YUV、RGB……(枚举格式,也可以直接用枚举的代号表示eg:AV_PIX_FMT_YUV420P这些枚举的格式在libavutil/pixfmt.h中列出) 参数4:转换后指定的宽 参数5:转换后指定的高 参数6:转换后指定的格式同参数3的格式 参数7:转换...
sws_getContext()
libswscale常用的函数数量很少,一般情况下就3个: sws_getContext():初始化一个SwsContext。sws_scale():处理图像数据。sws_freeContext():释放一个SwsContext。 其中sws_getContext()也可以用sws_getCachedContext()取代。 尽管libswscale从表面上看常用函数的个数不多,它的内部
yuv420p转yuv422
实现yuv之间的转换实现, 可以将<em>yuv420p</em>转换成yuv422, 可以将yuv422转换成uyvy, 可以将<em>yuv420p</em>转换成uyvy 。
SDL播放背景音乐问题
俄罗斯方块代码 播放背景音乐<em>问题</em>rn以下是main函数中的一段。播放音乐。rn延时5000毫秒过后,就自动停止。也就是根本达不到“背景”的效果,只要执行到下一条代码就over。rn求高人指导。怎样才能做到不被其他代码所影响。一直作为背景播放。rn Mix_PlayMusic(music,-1);rn SDL_Delay(5000);rnrn srand((unsigned) time(NULL));//执行此行时上一行的音乐就停止了rn nextBrick = rand()%STYLE;
SDL简单问题
我要用SDL做程序界面rn所以我想问问rnSDL能做出输入框来吗??rn要怎样实现??rn谢谢各位大虾们快帮帮我把!!!
ndk编译sdl问题
android-ndk-r3/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin/../lib/gcc/arm-eabi/4.4.0/../../../../arm-eabi/bin/ld: cannot find -lGLESv1_CMrncollect2: ld returned 1 exit statusrnrnrncannot find -lGLESv1_CM,大伙知道是什么原因吗?
linux下SDL库的问题
linux下SDL库相关<em>问题</em>:rn本人对这个不是很了解,有什么说的不对的望高手们指出rnrn我们可以下面的这个函数指定rect指定这个区域进行设置rnSDL_FillRect(screen, &rect, 0xffffff);rnrn如果我想读出这一块区域刚刚设置的值,应该怎么弄???????????????
SDL alien 入门级SDL编程
一个SDL的入门级游戏,包含文档,有声音,图像,代码资源,注释很详尽,代码风格很好
安装SDL遇到的问题
1、make时出现 fatal error: X11/extensions/XShm.h: No such file or directory 解决办法:搜到的解决办法是 sudo apt-get install x11proto-xext-dev sudo apt-get install libxext-dev ==================================
LINUX下sdl安装的问题
我在SDL的官方网站下载了<em>sdl</em>的运行库和开发库rn安装到linux下的时候出现了下边的<em>问题</em>rn请问怎么解决rn[root@localhost home]# rpm -i SDL-1.2.13-1.x86_64.rpmrn錯誤:相依性失敗:rn libc.so.6()(64bit) 是 SDL-1.2.13-1.x86_64 所需要的rn libc.so.6(GLIBC_2.2.5)(64bit) 是 SDL-1.2.13-1.x86_64 所需要的rn libc.so.6(GLIBC_2.3)(64bit) 是 SDL-1.2.13-1.x86_64 所需要的rn libc.so.6(GLIBC_2.3.4)(64bit) 是 SDL-1.2.13-1.x86_64 所需要的rn libc.so.6(GLIBC_2.4)(64bit) 是 SDL-1.2.13-1.x86_64 所需要的rn libdl.so.2()(64bit) 是 SDL-1.2.13-1.x86_64 所需要的rn libdl.so.2(GLIBC_2.2.5)(64bit) 是 SDL-1.2.13-1.x86_64 所需要的rn libm.so.6()(64bit) 是 SDL-1.2.13-1.x86_64 所需要的rn libm.so.6(GLIBC_2.2.5)(64bit) 是 SDL-1.2.13-1.x86_64 所需要的rn libpthread.so.0()(64bit) 是 SDL-1.2.13-1.x86_64 所需要的rn libpthread.so.0(GLIBC_2.2.5)(64bit) 是 SDL-1.2.13-1.x86_64 所需要的rn libpthread.so.0(GLIBC_2.3.2)(64bit) 是 SDL-1.2.13-1.x86_64 所需要的rn rtld(GNU_HASH) 是 SDL-1.2.13-1.x86_64 所需要的rn[root@localhost home]# rpm -i SDL-devel-1.2.13-1.x86_64.rpmrn錯誤:相依性失敗:rn SDL = 1.2.13 是 SDL-devel-1.2.13-1.x86_64 所需要的rn libSDL-1.2.so.0()(64bit) 是 SDL-devel-1.2.13-1.x86_64 所需要的rn[root@localhost home]#rn谢谢了
请教关于SDL的问题
最近在学习ffmpeg的东西,研究了下ffplay的源文件,自己也尝试修改了下代码.rn自己在练习编一个简单的视频播放器,现在遇到一个<em>问题</em>,在文件播放完毕后,调用SDL_Quit()退出窗口,但貌似没什么效果,死在那里.但是在视频播放的过程中是可以退出的.rn希望热心的朋友帮下忙.rn先表感谢.
sdl全屏的问题
我现在在做windows mobile下的监控客户端,现在的<em>问题</em>是,我想在对话框中间<em>显示</em>一个播放窗口,现在的<em>问题</em>是每次初始化<em>sdl</em>就会全屏被黑,包括标题栏和菜单栏。我试过在对话框中加picture control,再用这个控件的hwnd来初始化<em>sdl</em>但是却报couldn't initialize GAPI的错误。希望有相关经验的大哥大姐可以指点一下我。谢谢
SDL游戏开发之一-SDL的简介
本教程为一个长系列,旨在于从零开始边学习SDL边开发游戏。 一.什么是SDL? SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以开发出跨多个平台(Linux、Windows、Mac OS X等)的应用软件。目前SDL多用于开发游戏、模拟器、媒体播放...
sdl 问题。。。(载入图像)
#include rn #include "SDL.h" rnvoid pressESCtoQuit(); rnint main(int argc, char* argv[])rn rn try rn if ( SDL_Init(SDL_INIT_VIDEO) != 0 )rn throw SDL_GetError(); rn catch ( const char* s ) rn rn std::cerr << "SDL_Init() failed!\n" << s << std::endl; return -1; rn const int SCREEN_WIDTH = 640; // 0 means use current width. rn const int SCREEN_HEIGHT = 480; // 0 means use current height.rn const int SCREEN_BPP = 32; // 0 means use current bpp. rn const Uint32 SCREEN_FLAGS = SDL_SWSURFACE; // SDL_SWSURFACE == 0,surface in system memory. rn SDL_Surface* pScreen = 0; rn pScreen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SCREEN_FLAGS); // Creat a SDL window, and get the window's surface.rn try rn if ( pScreen == 0 )rn throw SDL_GetError();rn catch ( const char* s )rn rn std::cerr << "SDL_SetVideoMode() failed!\n" << s << std::endl; SDL_Quit(); rn return -1;rn rn SDL_Surface* pShownBMP = 0; rn pShownBMP = SDL_LoadBMP("D:\\新建文件夹\\新建文件夹\\logo2.bmp"); // Load a BMP file, and convert it as a surface.rn try rn if ( pShownBMP == 0 ) throw SDL_GetError(); rn catch ( const char* s ) rn std::cerr << "SDL_LoadBMP() failed!\n" << s << std::endl;rn // system("pause");rn SDL_Quit(); rn return -1;rn SDL_Rect* pSrcRect = 0; // If pSrcRect is NULL, the entire source surface is copied.rn SDL_Rect* pDstRect = 0; // If pDstRect is NULL, then the destination position (upper left corner) is (0, 0).rn try rn if ( SDL_BlitSurface(pShownBMP, pSrcRect, pScreen, pDstRect) != 0 ) // Put the BMP's surface on the SDL window's surface.rn throw SDL_GetError(); rn catch ( const char* s ) rn std::cerr << "SDL_BlitSurface() failed!\n" << s << std::endl; SDL_Quit(); return -1;rn try rn rn if ( SDL_Flip(pScreen) != 0 ) // Show the SDL window's surface. rn throw SDL_GetError(); rn rn catch ( const char* s )rn rn std::cerr << "SDL_Flip() failed!\n" << s << std::endl; SDL_Quit(); return -1;rn pressESCtoQuit(); SDL_Quit(); return 0; rnrnrn void pressESCtoQuit() rn bool gameOver = false;rn while( gameOver == false )rn rn SDL_Event gameEvent; rn while ( SDL_PollEvent(&gameEvent) != 0 )rn rn if ( gameEvent.type == SDL_QUIT )rn rn gameOver = true;rn if ( gameEvent.type == SDL_KEYUP )rn rn if ( gameEvent.key.keysym.sym == SDLK_ESCAPE )rn gameOver = true;rn rn rn rn rn rn return ;rn rnrnrn图像无法载入咋回事?
SDL和win32结合的问题~
我现在类似做一个流媒体播放器, 但是播放功能已经用一个三方库做好了,只要传入一个Windows Hwnd就可以<em>显示</em>视频, 但是我想用SDL 来绘制一些文字提示啊,或者说 绘制一些菜单什么的(不是win32菜单), 我最开始是rn是直接用SDL_CreateWindow 创建了一个主窗口, 然后获取到Hwnd传给播放器的库, 也能播放出画面了. 但是如果我用SDL 绘制一个图片出来的话,就会导致 播放器的库和SDL互相争抢窗口句柄,会严重的闪烁. 所以我想的2个方法是 rn1.再创建一个HWND 做为子窗体 用来<em>显示</em>视频 传给播放器库, 然后SDL的窗口能不能 设置成透明的,只渲染出文字和图片,而且还要响应SDL的消息处理. rn2 还是说用win32 CreateWindow先创建好主窗口Hwnd1给播放器,然后再创建一个子窗体Hwnd2 传给SDL.rnrnrn请教一下各位大神了.[img=https://img-bbs.csdn.net/upload/201611/09/1478690770_404496.jpg][/img] 类似VLC这样
SDL光标问题
请问SDL窗体如何<em>显示</em>光标
SDL 显示图像问题
无图像<em>显示</em>。rnbool CXXXXAppDlg::InitSdl()rnrn char <em>sdl</em>_var[64]; rn //sprintf(<em>sdl</em>_var, "SDL_WINDOWID=0x%lx", m_hWnd);//主窗口句柄rn sprintf(<em>sdl</em>_var, "SDL_WINDOWID=0x%lx", this->GetDlgItem(IDC_REMOTEVIDEO)->GetSafeHwnd());//主窗口句柄rn SDL_putenv(<em>sdl</em>_var);rn char *myvalue = SDL_getenv("SDL_WINDOWID");rnrn atexit(SDL_Quit);rnrn //根据解码后的视频尺寸来初始化<em>sdl</em>rn screen = SDL_SetVideoMode(FILE_WIDTH, FILE_HEIGHT, 0,SDL_ANYFORMAT|SDL_RESIZABLE|SDL_DOUBLEBUF|SDL_HWSURFACE);//注意用到的参数flagsrn if(!screen) rn rn TRACE(L"error SDL SetVideoMode!");rn return false;rn rnrn overlay = SDL_CreateYUVOverlay(FILE_WIDTH, FILE_HEIGHT,SDL_YV12_OVERLAY,screen);rn if(!overlay) rn rn TRACE(L"error SDL CreateYUVOverlay!");rn return false; rn rnrn return TRUE; rnrnrnvoid CXXXXDlg::SdlDisplayFrame(LPBYTE pFrame)rnrn // 加载yv12图像文件rn LPBYTE lpY = pFrame;rn LPBYTE lpU = pFrame + FILE_WIDTH * FILE_HEIGHT;rn LPBYTE lpV = pFrame + FILE_WIDTH * FILE_HEIGHT * 5 / 4;rnrn //....rnrn rn <em>sdl</em>_rect.w = FILE_WIDTH;rn <em>sdl</em>_rect.h = FILE_HEIGHT;rn <em>sdl</em>_rect.x = <em>sdl</em>_rect.y = 0;rnrn SDL_DisplayYUVOverlay(overlay, &<em>sdl</em>_rect);//<em>显示</em>图片到屏幕rnrnrnrnvoid CXXXXAppDlg::UnInitSdl()rn rn SDL_FreeYUVOverlay(overlay);rn SDL_FreeSurface(screen);rn
请教sdl问题?
我将SDL的视频<em>显示</em>在MFC窗体的一个控件(picture control)中,设置环境变量"SDL_WINDOWID". 现在有个<em>问题</em>:我想在窗体中放两个以上picture control控件,SDL能在一个程序中播放两个以上的视频吗? 怎么操作rnrn因为我想切换窗体<em>显示</em>视频 但好像不行 看<em>sdl</em>源代码一旦设置这个值了 就改变不了窗体
请教SDL与box2d的问题
请问如何使用<em>sdl</em>用鼠标画图形?而且画出的图形又是怎么跟box2d物理引擎联系在一起?
SDL的怪问题2
我自己写了个简单的俄罗斯程序,其中有这么个功能:rn运行中按ESC,游戏会暂停,同时英文提示:按ESC则继续游戏,按ENTER则结束游戏rnrn运行时发现,暂停后我按ENTER游戏根本没有反应?但按ESC则是能够运行的,如下:rn rn1.case SDLK_ESCAPE: handle_pause();break;rn2.case SDLK_RETURN: display=0;break;rn rn但如果交换顺序如下:rn1.case SDLK_RETURN: display=0;break;rn2.case SDLK_ESCAPE: handle_pause();break; rn则按ESC没有反应了,按ENTER能顺利退出,我怎么也不明白:为什么下面这句就不能运行了呢?而且我之前的移动和变换都是可以的?rn rn特来求教,以下中是我的源码,求教!!!rn我用的是DEVCPP,上面2行代码在game_loop()函数里最后面rn[code=C/C++]rnvoid game_loop()rnrn while(display)rn rn if(!game_pause) //未超过警戒线 rn rn while(SDL_PollEvent(&event))rn rn switch(event.type)rn rn case SDL_KEYDOWN:rn switch( event.key.keysym.sym )rn rn case SDLK_w: block_rotate(); break;rn case SDLK_a: move_left();break;rn case SDLK_d: move_right();break;rn case SDLK_s: move_bottom();break;rn case SDLK_ESCAPE: handle_pause();break; //手动暂停rn rn break;rn case SDL_QUIT :rn display=0; //也可以直接return; rn break;rn default:rn break;rn rn rn move_down();rn rn else //超过警戒线 rn rn while(SDL_PollEvent(&event))rn rn switch(event.type)rn rn case SDL_KEYDOWN:rn rn switch( event.key.keysym.sym )rn case SDLK_ESCAPE: handle_pause();break;rn case SDLK_RETURN: display=0;break; //???不运行rn rn break;rn case SDL_QUIT :rn display=0; //也可以直接return; rn break;rn default:rn break;rn rn rn rn SDL_Flip(screen); rn SDL_Delay(delay); rn rn[/code]rn
devcpp和sdl的怪问题
我以前编译过并且可以运行的文件,今天偶尔打开发现运行是窗口一闪就退出了,什么画面都没出现,而且类似的情况有好几个,都是涉及到象素操作的,我重装了DEVCPP和SDL都不行。rnrn我在把整个文件拷到另一台电脑上,没装DEVCPP和SDL的,运行时提示“没有找到SDL.DLL……”我把SDL.DLL拷到文件下就可以运行了,在原来电脑上进行相同操作还是老样子一闪就退出了,(原来电脑上SDL.DLL是在C:\WINDOWS\SYSTEM32文件夹里的),这是什么原因??我该这么解决呢?rn
SDL播放的问题
我用mfc和SDL的库做了一个简单的播放器,但是比如打开了一个文件可以正常播放,再打开另一个文件,就播放不了,请问大家有没有做过这种功能,如何实现啊?
sdl刷新问题
前提:rndialog的背景是在opaint中画上去的rnSDL的<em>显示</em>区域与dialog中的一个staic控件绑定。rn在dialog中的onpaint中对staic区域画线,将它分成九宫格rndialog重载onsize函数 重绘对话框rn<em>问题</em>:rn程序一进入,鼠标状态为等待状态rnonpaint中画的线条不可见rn当dialog大小改变时线条也会不可见rnrn希望大家能给我一些<em>sdl</em>和对话框刷新的的建议,着急中.........rnrn
MSC,SDL问题
谁会MSC,SDL
QT配置SDL的问题
最近想弄个播放器,用ffmpeg,用SDL进行<em>显示</em>,但是在配置<em>问题</em>的时候出现了,提示未有定义的提示,到底是怎么回事? 以下图片是我的配置代码
SDL 全屏问题.
第一: 绑定播放窗口<em>问题</em>:rnchar <em>sdl</em>_var[128]; rn sprintf(<em>sdl</em>_var, "SDL_WINDOWID=0x%lx", m_hWnd );//主窗口句柄 rn SDL_putenv(<em>sdl</em>_var); char *myvalue = SDL_getenv("SDL_WINDOWID");rn这端代码,需要放在播放窗口初始化之前,否则,轻易造成全屏。rnrn有用吗?
SDL的怪问题
SDL_Rect text_box[2];rn…………………rnint i,a,b,c,d;rn……rntext_box[0].x = 300; //对话框1的尺寸 rntext_box[0].y = 300;rntext_box[0].w = 100;rntext_box[0].h = 50;rn rntext_box[1].x = 500; //对话框2的尺寸 rntext_box[1].y = 500;rntext_box[1].w = 100;rntext_box[1].h = 50;rnrnfor(i=0;i= text_box[i].x ); rn b = ( button_x = text_box[i].y );rn d = ( button_y <= text_box[i].y + 50);//???rn rn if( a && b && c && d ) //点在文本框i区域内 rn on_focus[i]=1;rn else //在文本框i区域外 rn on_focus[i]=0;rn rn以上用来判断鼠标是否点在区域内部,<em>问题</em>是:如果我用text_box[i].w代替100,或者用text_box[i].h代替50rn即使我点在区域内 ,得到的on_focus[i]永远是0,求高手指点
SDL 移植到Android问题
直接编译时没有<em>问题</em>. rnrn交叉编译时出错.rn./src/audio/dma/SDL_dmaaudio.c: In function 'DMA_WaitAudio':rn./src/audio/dma/SDL_dmaaudio.c:166: error: impossible constraint in 'asm'rnmake: *** [build/SDL_dmaaudio.lo] 错误 1rn
一个不错的登陆框Hotel下载
刚刚开始学习flex,做了一个登陆界面,做的不太好但是还是花了一点心思,希望大侠们多多指教· 相关下载链接:[url=//download.csdn.net/download/wusonghua2/3121451?utm_source=bbsseo]//download.csdn.net/download/wusonghua2/3121451?utm_source=bbsseo[/url]
操作系统课设—进程调度算法下载
完整的可运行的C#程序,希望能够帮助大家! 相关下载链接:[url=//download.csdn.net/download/abing9880601/3779603?utm_source=bbsseo]//download.csdn.net/download/abing9880601/3779603?utm_source=bbsseo[/url]
C++ 自动输入文字(汉字和其他字符)下载
C++ 用程序来模拟输入字符(可中文),模拟输入法 相关下载链接:[url=//download.csdn.net/download/myjieer/5010203?utm_source=bbsseo]//download.csdn.net/download/myjieer/5010203?utm_source=bbsseo[/url]
相关热词 c# gdi 占用内存 c#中遍历字典 c#控制台模拟dos c# 斜率 最小二乘法 c#进程延迟 c# mysql完整项目 c# grid 总行数 c# web浏览器插件 c# xml 生成xsd c# 操作sql视图
我们是很有底线的