SDL显示YUV图像数据
1.YUV简介
YUV,分为三个分量,“Y”表示明亮度(Luminance或Luma),也就是灰度值;而“U”和“V”表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。
与我们熟知的RGB类似,YUV也是一种颜色编码方法,主要用于电视系统以及模拟视频领域,它将亮度信息(Y)与色彩信息(UV)分离,没有UV信息一样可以显示完整的图像,只不过是黑白的,这样的设计很好地解决了彩色电视机与黑白电视的兼容问题。并且,YUV不像RGB那样要求三个独立的视频信号同时传输,所以用YUV方式传送占用极少的频宽。
YUV码流的存储格式其实与其采样的方式密切相关,主流的采样方式有三种,YUV4:4:4,YUV4:2:2,YUV4:2:0
2.ffmpeg将mp4转yuv格式
ffmpeg -i test.mp4 -s 960x540 -pix_fmt yuv420p yuv420960_540.yuv
3.SDL显示示例
#include
#include
#include
#include
typedef enum
{
false,
true,
}bool;
int main(int argc,char *argv[])
{
FILE *fp=fopen("yuv420960_540.yuv","rb");
if(fp==NULL)
{
printf("文件打开失败n");
return 0;
}
//yuv420保存格式:y占2份,uv各占1份,y表示亮度,uv表示颜色
char *p=malloc(960*540*3);
SDL_Init(SDL_INIT_VIDEO);
/*创建窗口*/
SDL_Window *window=SDL_CreateWindow("SDL_VIDEO", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,800,480,SDL_WINDOW_SHOWN);
/*创建渲染器*/
SDL_Renderer *render=SDL_CreateRenderer(window,-1,SDL_RENDERER_ACCELERATED);
/*清空渲染器*/
SDL_RenderClear(render);
/*创建纹理*/
SDL_Texture *sdltext=SDL_CreateTexture(render,SDL_PIXELFORMAT_IYUV,SDL_TEXTUREACCESS_STREAMING,960,540);
bool quit=true;
SDL_Event event;
while(quit)
{
SDL_PollEvent(&event);/*事件监测*/
if(event.type==SDL_QUIT)/*退出事件*/
{
quit=false;
}
fread(p,1,960*540*3/2,fp);/*读取一帧数据*/
SDL_UpdateTexture(sdltext,NULL,p, 960);
SDL_RenderCopy(render, sdltext, NULL, NULL); // 拷贝纹理到渲染器
SDL_RenderPresent(render); // 渲染
}
}
3 Makefile文件
CFLAGS =-I/home/wbyq/src_pack/SDL2-2.0.14/_install/include -I/home/wbyq/src_pack/SDL2-2.0.14/_install/include/SDL2 -L/home/wbyq/src_pack/SDL2-2.0.14/_install/lib
CFLAGS +=-L/home/wbyq/src_pack/SDL2_image-2.0.5/_install/lib -I/home/wbyq/src_pack/SDL2_image-2.0.5/_install/include -I/home/wbyq/src_pack/SDL2_image-2.0.5/_install/include/SDL2
CFLAGS+=-lSDL2 -lpthread -lm -ldl -lSDL2_image
app:
gcc sdl_test.c $(CFLAGS)
4 运行效果
审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
图像数据
+关注
关注
0文章
52浏览量
11276 -
SDL
+关注
关注
0文章
18浏览量
7395 -
YUV
+关注
关注
0文章
11浏览量
2880
发布评论请先 登录
相关推荐
SDL编译安装图片显示
SDL(Simple DirectMediaLayer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以
SDL时间和天气显示
SDL(Simple DirectMediaLayer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以
Linux下基于SDL库贪吃蛇游戏
SDL(Simple DirectMediaLayer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以
移植SDL到JZ2440显示BMP图片
LOGO的制作, 韦老师第3期讲了如何显示jpeg图片, 那么怎么显示bmp图片?这次我们借助libSDL来实现,我们先移植SDL到Ubuntu, 体验它的威力后再移植到开发板。一、移植SDL
发表于 06-29 11:19
在vpss上得到cif大小的yuv,连同500万像素的yuv拷贝在一块连续的内存上,在dsp上做两个图像的yuv转rgb。这样是否可行?
是:我在vpss上得到cif大小的yuv,然后连同500万像素的yuv拷贝在一块连续的内存上,一起送给dsp,在dsp上做两个图像的yuv转rgb。不知这样是否可行?这样就省去了两路
发表于 05-25 05:57
YUV_FRAMES_TO_A8 显示正常但保存YUV数据有误,请问是什么原因?
;outQueId = 0;本地保存YUV数据的代码并未完善,在ti_mcfw_ipcframes.c中,打开了宏CUSTOM_SD_DEMO,并在App_ipcFramesFileWriteCreate中修改
发表于 05-28 13:55
亮度图像显示问题。
采用GS2961芯片输出高清视频,YUV分离模式,DM8127接入后,单独显示亮度图像。如下:
感觉灰度等级量化少了。 GS2961输出10bit Y数据,硬件上只连接了高8位管脚到
发表于 06-21 12:25
DM8127使用DSP直接修改YUV数据造成图像异常
目前正在开发DSP中的图像算法,需要对YUV图像中的Y分量进行直接修改
一开始先尝试将Y分量的值直接取代掉来进行测试:
unsigned char* pSrc = pFrame->addr[0][0];
for (i= 0;
发表于 06-21 02:12
基于FPGA的RGB2YUV、图像增强、YUV2RGBIP仿真实例
的功能框图如下所示。该IP输入和输出的图像数据必须为YUV444或YUV422模式;待处理图像进入IP后,首先需要多行缓存,然后分别通过降噪
发表于 08-12 18:50
基于SDL的自动售票系统的研发
基于SDL 的自动售票系统的研发顾丽丽 梅杓春(南京邮电大学自动化学院,江苏南京 210003)摘要:本文简要介绍了SDL语言及其支持工具。通过设计自动售票系统实例对如何利用SDL
发表于 12-18 11:34
•21次下载
SDL下载与配置
点击[SDL2 核心库下载](https://libsdl.org/download-2.0.php)下载SDL2库,如下图根据编译器选择不同版本(Visual Studo系列选择第一个)。
YUV和RGB是如何进行转换的
首先要明确待转换格式和目标格式的特点和相互转换关系,这是编程实现转换的核心。对于 RGB 转YUV 的过程,我们要首先拿到 RGB 文件的数据,再通过上图的 YUV 计算公式对其做 运算,得到
评论