Rockchip之FFmpeg通过MPP硬解并转储

// Rockchip Linux 官方网站 
https://github.com/rockchip-linux

// Rockchip 支持硬件
RK29XX/RK30XX/RK31XX
RK3288/RK3368/RK3399
RK3228/RK3229/RK3228H/RK3328
RV1108/RV1107

// Media Process Platform (MPP) module
https://github.com/rockchip-linux/mpp

// FFmpeg 使用 4.1 版本(此时最新)
http://ffmpeg.org/

// FFmpeg 编译命令 ...
./configure --enable-version3 --enable-libdrm --enable-rkmpp --enable-libx264 --enable-nonfree --enable-gpl
make ; make install

// 编译完成后查看解码器 ...    
ffmpeg -decoders |grep h264_rkmpp
V..... h264_rkmpp           h264 (rkmpp) (codec h264)

// 特别注意 
ffmpeg h264_rkmpp 解码获得的是 AV_PIX_FMT_DRM_PRIME 也就是 DRM 帧数据 ...
// 如果使用 drm 显示该帧可以直接 zero-copy 绘制帧 ...

// 通过以下操作把 drm 帧拷贝到内存并且转换为NV12 ...
pFrameOK->width = pFrame->width;
pFrameOK->height = pFrame->height;
pFrameOK->format = AV_PIX_FMT_NV12;
// Copy data to or from a hw surface ...
av_hwframe_transfer_data(pFrameOK, pFrame, 0)

// 此时 pFrameOK 就是转储出来的 NV12 格式帧