基于V4L2 MFC 视频编解码

平台:exynos4412 (ibox)

Kernel:odroid linux-3.8.13.29

OS: ubuntu14.04-armhf

tool:eclipse-armhf

参考三星源码:public-apps-00d0905


4412 eclipse工程截图

基于V4L2 MFC 视频编解码_第1张图片

流程:

uvc获取640x480YUYV数据---->memcpy(因为uvc不能使用dma连续物理内存,所以无法直接入队进入fimc)--->FIMC(YUYV转NV12M)--->入队方式直接进入MFC---->MFC---->H264/H263/ MPEG1/2/4--->写入文件

基于V4L2 MFC 视频编解码_第2张图片


编码视频为原始h264 data,  可以通过mp4v2转化成mp4视频文件,或者 直接通过gnome mplayer播放,也可以尝试其他播放器

基于V4L2 MFC 视频编解码_第3张图片


编码640x480 h264 fps 20时,cpu使用率

Tasks: 155 total,   2 running, 153 sleeping,   0 stopped,   0 zombie
%Cpu(s): 12.5 us,  5.9 sy,  0.0 ni, 76.3 id,  0.0 wa,  0.0 hi,  5.4 si,  0.0 st
KiB Mem:   1029212 total,   815784 used,   213428 free,    14032 buffers
KiB Swap:        0 total,        0 used,        0 free.   422128 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 1992 odroid    20   0  815772 163172  23732 S  35.3 15.9   1:49.02 java
 1040 root      20   0   83028  42332  22792 S  25.5  4.1   2:24.59 Xorg
 3495 odroid    20   0   35968  10036   9964 R  14.7  1.0   0:01.73 mfctest
  753 avahi     20   0    3740   2264   1068 S   2.9  0.2   4:31.55 avahi-daemon
编码1920x1080 h264 fps20时,cpu使用率

Tasks: 155 total,   1 running, 154 sleeping,   0 stopped,   0 zombie
%Cpu(s): 12.3 us,  9.5 sy,  0.0 ni, 71.3 id,  1.3 wa,  0.0 hi,  5.6 si,  0.0 st
KiB Mem:   1029212 total,   901360 used,   127852 free,     7908 buffers
KiB Swap:        0 total,        0 used,        0 free.   462140 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 3533 odroid    20   0   77696  10036   9964 D  33.4  1.0   0:06.40 mfctest
 1992 odroid    20   0  817128 164240  23760 S  30.5 16.0   2:07.85 java
 1040 root      20   0   82916  42352  22820 S  27.5  4.1   2:36.45 Xorg
   59 root      20   0       0      0      0 D   2.9  0.0   0:09.89 mmcqd/0
 1296 odroid    20   0  275576  11616   8532 S   2.9  1.1   1:41.22 indicator-multi
  753 avahi     20   0    3740   2264   1068 S   2.0  0.2   4:35.56 avahi-daemon
 1079 root      20   0       0      0      0 S   2.0  0.0   0:00.44 flush-179:0
 1192 odroid    20   0   49048   5100   2800 S   2.0  0.5   0:18.01 ibus-daemon
 3528 root      20   0    5824   1232    848 R   1.0  0.1   0:00.49 top


解码没有修改,直接使用原代码,把原始数据直接解码输出到lcd,扩展到整个屏幕

基于V4L2 MFC 视频编解码_第4张图片

解码输出到1920x1080显示时,cpu使用率

Tasks: 155 total,   2 running, 153 sleeping,   0 stopped,   0 zombie
%Cpu(s): 15.8 us, 14.1 sy,  0.0 ni, 66.8 id,  0.0 wa,  0.0 hi,  3.4 si,  0.0 st
KiB Mem:   1029212 total,   859364 used,   169848 free,    19132 buffers
KiB Swap:        0 total,        0 used,        0 free.   485832 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 1040 root      20   0   83028  42332  22792 R  67.5  4.1   1:58.24 Xorg
 3441 odroid    20   0  133412  11240  11128 S  45.0  1.1   0:02.50 v4l2_decode
 2749 odroid    20   0  286724  12732   9432 S  22.5  1.2   0:22.79 lxterminal
 1192 odroid    20   0   49048   5092   2800 S   6.8  0.5   0:13.88 ibus-daemon
 1296 odroid    20   0  275576  11616   8532 S   2.9  1.1   1:36.81 indicator-multi


共享文件

编码:

http://download.csdn.net/detail/liujia2100/8568845

解码:

http://download.csdn.net/detail/liujia2100/8568891


可以测试使用的平台 s5pv210  exynos4412等mfc5.1版本.

目前由于mfc5.1硬件限制, mfc输入格式只能是NV12M, 所以如果输入图像数据是其他格式,必须通过转换,这里通过fimc将usb摄像头YUYV数据转换成NV12M再传给MFC.

在exynos5 系列处理器中,MFC已经可以支持其他格式文件直接输入,所以不需要fimc,效率会增加。


你可能感兴趣的:(视频编解码,Linux-V4L2系统)