天天看點

Linux下使用libyuv提高YUV圖像轉換效率

一、環境介紹

作業系統: ubuntu18.04

開發平台: RK3399

二、出現的問題

使用FFMPEG的sws_scale函數在ARM平台轉換效率很低,使用libyuv提高轉換效率。

三、下載下傳編譯libyuv

CSDN下載下傳位址:

https://download.csdn.net/download/xiaolong1126626497/12631325 GitHub下載下傳位址: https://github.com/lemenkov/libyuv
Linux下使用libyuv提高YUV圖像轉換效率

wbyq@wbyq:~/qt_code/666$ unzip /mnt/hgfs/linux-share-dir/libyuv-master.zip 
wbyq@wbyq:~/qt_code/666$ cd libyuv-master
wbyq@wbyq:~/qt_code/666$ make -f linux.mk      
Linux下使用libyuv提高YUV圖像轉換效率

四、示例代碼

調用libyuv庫方式:  将libyuv.h包含到工程,直接調用轉換函數即可(轉換函數名稱可看下面2個例子),編譯時指定libyuv.a庫。

//YUYV422轉YUV420P

//YUYV422轉YUV420P
uint8_t* i420_image = video0_yuv420p_buff;
uint8_t* i420_image_y_ptr = i420_image;
uint8_t* i420_image_u_ptr = i420_image_y_ptr + (VIDEO_WIDTH * VIDEO_HEIGHT);
uint8_t* i420_image_v_ptr = i420_image_u_ptr + (int)(VIDEO_WIDTH * VIDEO_HEIGHT * 0.25);
 
libyuv::YUY2ToI420(
        image_buffer[video_buffer.index],VIDEO_WIDTH*2,
        (uint8_t*)i420_image_y_ptr, VIDEO_WIDTH,
        (uint8_t*)i420_image_u_ptr, (VIDEO_WIDTH >> 1),
        (uint8_t*)i420_image_v_ptr, (VIDEO_WIDTH >> 1),
        VIDEO_WIDTH, VIDEO_HEIGHT);      

YUYV422轉ARGB

libyuv::YUY2ToARGB(image_buffer[video_buffer.index],VIDEO_WIDTH*2,
                          argb_buffer,VIDEO_WIDTH*4,VIDEO_WIDTH,VIDEO_HEIGHT);      

繼續閱讀