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瀏覽量
11280 -
SDL
+關注
關注
0文章
18瀏覽量
7401 -
YUV
+關注
關注
0文章
11瀏覽量
2886
發布評論請先 登錄
相關推薦
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 計算公式對其做 運算,得到
評論