一、TI在gstreamer体系下增加的插件
目录/opt/LeopardBoardDM365sdkEVAL2011Q2/proprietary/dvsdk-4_02_00_06/dvsdk/gstreamer-ti_svnr919/src
x(代表c,h)
gstticodecplugin.c 主要是注册TI提供的插件
1、插件代码:
音频解码插件
gsttiauddec1.x
音频编码插件
gsttiaudenc1.x
色彩空间转换加速器插件
gsttic6xcolorspace.x
显示插件
gsttidisplaysink2.x
用来捕获管道性能的数据的插件
gsttidmaiperf.x
video输出插件
gsttidmaivideosink.x
JPEG图像解码插件
gsttiimgdec1.x
JPEG图像编码插件
gsttiimgenc1.x
解码器插件TIViddec2
gsttividdec2.x
编码器插件TIVidenc1
gsttividdenc1.x
视频帧缩放插件
gsttividresize.x
2、一些全局定义:
定义:使用DMAI实现一个循环缓存区
gstticircbuffer.x
定义:提供一个查询平台提供到
编解码器信息到函数体
gstticodecs.x
定义:包含所有elements通用函数结构gstticommonutils.x
定义:实现把一个已经存在到DMAI缓存区
放到gstreamer缓存区,
以便给pipeline使用
gsttidmaibuffertransport.x
定义一些用来解码的函数和参数信息
gsttiquicktime_xxxx.x
3、参数定义:
特定型号芯片的配置参数,
包括插件默认的参数,
需要链接的文件的路径等
gstticodecplugin_dmxxx.cfg
xxxx平台编解码器的信息(名称)
gstticodecs_xxxx.c
为TIVidenc插件准备GstBuffer
的插件,主要是把内存复制到
连续的物理缓存
gsttiprepencbuf.x
二、gstreamer体系的代码
目录/opt/LeopardBoardDM365sdkEVAL2011Q2/proprietary/gst-dmai-plugins/src/src
x(代表c,h)
注册插件、提供主要函数
gstticodecplugin
1、插件
dmaiaccel插件,
把gst缓存转换成dmai缓存(可能时)
或者仅仅复制数据到dmai缓存
gsttidmaiaccel.x
dmaiperf插件,
用来捕获管道性能的数据的插件
gsttidmaiperf.x
通用的缩放插件
gsttidmairesizer.x
dmai视频输出接口插件
gsttidmaivideosink.x
priority插件,
修改了线程的优先级和调度
gsttipriority.x
2、一些全局定义:
特定型号芯片的配置参数,
包括插件默认的参数,
需要链接的文件的路径等
dmxxx.cfg
定义:各种分辨率,视频格式的支持能力
cap.x
定义:音频编解码器到调用接口
gsttiauddec.x
定义:包含所有elements通用的
函数、结构
gstticommonutils.x
定义:实现把一个已经存在到DMAI缓存区
放到gstreamer缓存区,
以便给pipeline使用
gsttidmaibuffertransport.x
定义:DMAI基础上的通用解码器插件
gsttidmaidec.x
定义:DMAI基础上的通用编码器插件
gsttidmaienc.x
3、参数定义:
提供通用的图像解码器接口
gsttiimgdec.x
提供通用的图像编码器接口
gsttiimgenc.x
解析xxx文件格式的文件
gsttisupport_xxx.x
提供通用的视频解码器接口
gsttividdec.x
提供通用的视频编码器接口
gsttividenc.x
提供给所有插件使用的各分辨率参数
ittiam_caps.x
提供通用编解码器属性
ittiam_encoders.x
提供大部分TI编解码器属性
ti_encoders.x
三、目录/opt/LeopardBoardDM365sdkEVAL2011Q2/fs/apps
在这个目录,包含了gstreamer的主框架,和基本插件。
四、各插件参数
1、v4l2src参数:
默认使用的输入设备定义为:#define DEFAULT_PROP_DEVICE "/dev/video0"
queue-size:streaming模式下驱动中缓存到数量,最小1,最大16,默认size=2,
always-copy:缓存区是否可以直接被mmap使用,默认true
input-src:选择输入源,默认留空,好像也不可以设置
chain-ipipe:使用ipipe工具链,会调用resizer,previewer驱动,默认true
force-720p-30:强制驱动工作在720p-30fps模式,默认false,leopard不支持此设置
num-buffers:输出缓存区的数量,录像时用到,决定录像文件的大小和时间长度。
2、dmaiaccel插件,
把gst缓存转换成dmai缓存(如果有必要),或者仅仅复制数据到dmai缓存,应该所用来加快速度的
调用v4l2src之后,需要设置输出参数
3、dmaiperf插件,
提升管道的性能,数据处理速度。
engine-name:引擎名字,比如decode,encode
print-arm-load:打印cpu加载信息,默认false
4、TIDmaiVideoSink插件,
视频显示输出,
sync:时钟到同步标志
accelFrameCopy:使用硬件加速,拷贝视频帧,默认true
videoOutput:输出设备,SVIDEO,COMPOSITE,COMPONENT,DVI,LCD,AUTO
videoStd:视频格式,D1_NTSC,D1_PAL, 480P, 576P, 720P_60, 720P_50, 等
enable-last-buffer:使能最后一帧特性
5、dmaienc_h264插件
实现对数据进行h264格式的编码
encodingpreset:使用编码预置算法到类型,
0:默认,1:高质量,2:高速度,3:使用外部定义的参数
ratecontrol:使用速率控制算法,
1:恒定比特率CBR,适用视频会议
2:可变比特率,适合存储
3:通过非实时应用切换使用两种控制
4:不使用速率控制算法
5:用户定义的外部参数
intraframeinterval:内部连续的两帧之间的间隔
0:仅第一个I帧跟随所有P帧
1:无内部帧
2:连续IP序列(如果无B帧)
N:(n-1) P序列在I帧之间
idrinterval:两个连续的IDR帧间的间隔,0--2147483647,默认0
targetbitrate:目标比特率,1000-2000 0000,默认600 0000
outputBufferSize:输出缓存区大小,0 - 2147483647 Default: 0
6、qtmux多路复用器
7、queue简单的数据队列
8、rtph264pay
五、实现一些功能的常用
1、canera(mt9p031)输入,经过dmai缓存,加速,composite输出D1_NTSC
gst-launch -e v4l2src chain-ipipe=true always-copy=false \
! dmaiaccel \
! video/x-raw-yuv,format=\(fourcc\)NV12, width=640, height=480, framerate=\(fraction\)30/1 \
!dmaiperf \
! TIDmaiVideoSink sync=false accelFrameCopy=false videoOutput=composite videoStd=D1_NTSC sync=false enable-last-buffer=false&
2、canera(mt9p031)输入,经过dmai缓存,加速,h264编码,保存到文件,mp4格式
gst-launch -e v4l2src always-copy=true chain-ipipe=true num-buffers=200 \
! 'video/x-raw-yuv,format=(fourcc)NV12,width=640,height=480' \
! dmaiaccel \
! dmaienc_h264 encodingpreset=2 ratecontrol=2 intraframeinterval=23 idrinterval=46 targetbitrate=6000000 \
! dmaiperf \
! qtmux \
! filesink location=test01.mp4 sync=false enable-last-buffer=false&
3、camera输入,打包成ts流,udp方式发送到网络
gst-launch -e v4l2src chain-ipipe=true always-copy=FALSE \
! 'video/x-raw-yuv,format=(fourcc)NV12,width=640,height=480,framerate=(fraction)30/1' \
! queue \
! dmaiaccel \
! dmaienc_h264 encodingpreset=2 targetbitrate=600000 maxbitrate=5000000 intraframeinterval=25 \
outputBufferSize=5000000 ratecontrol=2 headers=true \
! dmaiperf print-arm-load=true \
! mpegtsmux \
! udpsink ts-offset = 100000000 port=1234 host=227.1.1.1 enable-last-buffer=false sync=true &
注:参数说明
1)
width
640
800
1024
1280
1280
1600
1920
2048
2176
height
480
600
768
720
1024
1200
1080
1536
1944
framerate
(30或60)/1
65/1
47/1
(45或23)/1
42/1
31/1
31/1
21/1
14/1
以上参数要一一对应
2)ts-offset参数与udp输出的fps和cpu使用率成反比
3)ratecontrol速率控制算法也影响udp输出的fps和cpu使用率
4)targetbitrate增大也会增加cpu到使用率