SDL显示YUV图像数据

描述

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 运行效果

 
  审核编辑:汤梓红
 
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分