0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SDL显示YUV图像数据

嵌入式技术 来源:嵌入式技术 作者:嵌入式技术 2022-09-29 15:57 次阅读

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
    SDL
    +关注

    关注

    0

    文章

    18

    浏览量

    7395
  • YUV
    YUV
    +关注

    关注

    0

    文章

    11

    浏览量

    2880
收藏 人收藏

    评论

    相关推荐

    SDL编译安装图片显示

    SDL(Simple DirectMediaLayer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以
    的头像 发表于 09-29 15:54 1478次阅读
    <b class='flag-5'>SDL</b>编译安装图片<b class='flag-5'>显示</b>

    SDL显示文本

       SDL2.0库本身没有文本数据显示相关函数接口,文本显示需要编译安装SDL_ttf库。
    的头像 发表于 09-29 16:32 2007次阅读
    <b class='flag-5'>SDL</b><b class='flag-5'>显示</b>文本

    SDL时间和天气显示

    SDL(Simple DirectMediaLayer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以
    的头像 发表于 12-08 14:15 1196次阅读

    Linux下基于SDL库贪吃蛇游戏

    SDL(Simple DirectMediaLayer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以
    的头像 发表于 12-11 14:29 3411次阅读
    Linux下基于<b class='flag-5'>SDL</b>库贪吃蛇游戏

    Linux下V4L2框架基于SDL库本地USB摄像头监控

    开启摄像头采集:VIDIOC_STREAMON (视频捕获格式) (7)从采集队列中取出图像数据,通过SDL图像渲染;
    的头像 发表于 12-17 15:37 3904次阅读
    Linux下V4L2框架基于<b class='flag-5'>SDL</b>库本地USB摄像头监控

    移植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系列选择第一个)。
    的头像 发表于 02-27 14:51 3256次阅读
    <b class='flag-5'>SDL</b>下载与配置

    什么是YUV

    简单的讲YUV是一种图像和视频的编码方式,RGB通过三种颜色来表达现实世界中的各种颜色,YUV通过亮度与色度饱和度来表示颜色。
    的头像 发表于 03-03 09:50 1764次阅读
    什么是<b class='flag-5'>YUV</b>

    YUV和RGB是如何进行转换的

    首先要明确待转换格式和目标格式的特点和相互转换关系,这是编程实现转换的核心。对于 RGB 转YUV 的过程,我们要首先拿到 RGB 文件的数据,再通过上图的 YUV 计算公式对其做 运算,得到
    的头像 发表于 07-30 10:06 1943次阅读