一、環境介紹
作業系統: ubuntu18.04
開發平台: RK3399
二、出現的問題
使用FFMPEG的sws_scale函數在ARM平台轉換效率很低,使用libyuv提高轉換效率。
三、下載下傳編譯libyuv
CSDN下載下傳位址:
https://download.csdn.net/download/xiaolong1126626497/12631325 GitHub下載下傳位址: https://github.com/lemenkov/libyuvwbyq@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
四、示例代碼
調用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);