gsteamer的疑问?

 

1. 为什么gstreamer是graph-based?

 

2. Pipelines can be visualised by dumping them to a .dot file and creating a PNG image from that

    如何倒?

 

3. container和codec的区别?

   container formats: asf, avi, 3gp/mp4/mov, flv, mpeg-ps/ts, mkv/webm, mxf, ogg

 

4. event->structure作用是什么?

 

5. GstStructure的作用?

   GstStructure实质是GArray.

   是Key/Value键值对的集合(Collection)

   一般GstCaps, GstEvent, GstQuery, GstMessage会用到GstStructure.

 

6. GstEvent仅仅提供了几个event,并没有生命周期,谁用它呢?

    GstPad? GstElement? GstPipeline?

    The event class provides factory methods to construct events for sending and functions to query (parse) received events.

 

gstreamer 中ABI接口定义的比较多。

//ZZ

应用程序二进制接口(ABI-Application Binary Interface)定义了一组在PowerPC系统软件上编译应用程序所需要遵循的一套规则。主要包括基本数据类型,通用寄存器的使用,参数的传递规则,以及堆栈的使用等等。

ABI涵盖了各种细节:如数据类型、大小和对齐;调用约定(控制着函数的参数如何传送以及如何接受返回值);系统调用的编码和一个应用如何向操作系统进行系统调用;以及在一个完整的操作系统ABI中,目标文件的二进制格式、程序库等等。一个完整的ABI,像Intel二进制兼容标准(iBCS)[1] ,允许支持它的操作系统上的程序不经修改在其他支持此ABI的操作体统上运行。

其他的 ABI 标准化细节包括 C++ 名称修饰[2] ,和同一个平台上的编译器之间的调用约定[3],但是不包括跨平台的兼容性。

ABI不同于应用程序接口(API),API定义了源代码和库之间的接口,因此同样的代码可以在支持这个API的任何系统中编译,然而ABI允许编译好的目标代码在使用兼容ABI的系统中无需改动就能运行。 在Unix风格的操作系统中,存在很多运行在同一硬件平台上互相相关但是不兼容的操作系统(尤其是Intel 80386兼容系统)。有一些努力尝试标准化ABI,以减少销售商将程序移植到其他系统时所需的工作。然而,直到现在还没有很成功的例子,虽然Linux标准化工作组正在为Linux做这方面的努力。

API,顾名思义,是编程的接口,换句话说也就是你编写“应用程序”时候调用的函数之类的东西。对于内核来说,它的“应用程序”有两种:一种是在它之上的,用户空间的真正的应用程序,内核给它们提供的是系统调用这种接口,比如 read(2),write(2);另一种就是内核模块了,它们和内核处于同一层,内核给它们提供的是导出的内核函数,比如 kmalloc(),printk()。这些接口都是你可以在编写程序的时候直接看到的,可以直接拿来用的。

而 ABI 是另一种形式的接口,二进制接口。除非你直接使用汇编语言,这种接口一般是不能直接拿来用的。比如,内核系统调用用哪些寄存器或者干脆用堆栈来传递参数,返回值又是通过哪个寄存器传递回去,内核里面定义的某个结构体的某个字段偏移是多少等等,这些都是二进制层面上的接口。这些接口是直接给编译好的二进制用的。换句话说,如果 ABI 保持稳定的话,你在之前版本上编译好的二进制应用程序、内核模块,完全可以无须重新编译直接在新版本上运行。另一种比较特殊的 ABI 是像 /proc,/sys 目录下面导出的文件,它们虽然不是直接的二进制形式,但也会影响编译出来的二进制,如果它里面使用到它们的话,因此这些“接口”也是一种 ABI。

你平时看到的什么 POSIX 标准啊,C99 标准啊,都是对 API 的规定。而规定 ABI 的标准就不多,而且也没那么强势,Linux 上面的 ABI 标准似乎只有 Linux Foundation 提供的一些标准

好了,从上面我们可以看出,其实保持一个稳定的 ABI 要比保持稳定的 API 要难得多。比如,在内核中 int register_netdevice(struct net_device *dev) 这个内核函数原型基本上是不会变的,所以保持这个 API 稳定是很简单的,但它的 ABI 就未必了,就算是这个函数定义本身没变,即 API 没变,而 struct net_device 的定义变了,里面多了或者少了某一个字段,它的 ABI 就变了,你之前编译好的二进制模块就很可能会出错了,必须重新编译才行。

你可能会感到意外,上游的 Linux 内核其实不光不保持稳定的 ABI,它就连稳定的 API 都不会保持!而且还牛逼哄哄地写了一个文档,叫 stable_api_nonsense.txt。这么做的道理是,内核一直在向前推进,而且速度很快,内核开发者们并不想因为 API 的限制而阻碍前进的脚步!毕竟我们不想成为下一个 Windows!:-)

所以,你的驱动在不同版本的内核上不经修改直接运行那几乎是不太可能的,就算是你允许重新编译也未必就能不经修改编译成功。即使在同一个大版本的不同发行版上也可能不行。

那你应该怎么办?最好的办法莫过于把你的驱动贡献到社区,汇入内核源代码树中,这样一旦内核的 API 有改动,改动这个 API 的人就有义务替你修改你的驱动的代码,你只需要 review 一下(或者这个也会有人帮你),也省去你不少时间,何乐而不为呢?另一种办法就是基于某个提供稳定 ABI 的内核,比如红帽的 RHEL (认为这是广告的人请使用 CentOS,谢谢!),红帽的企业版内核保证有稳定的 ABI,只要你没有跨大的版本,因为我们的源代码里会检测 ABI 的变化,为此我们实在付出了不少努力。

struct _GstElement
{
  GstObject             object;

  /*< public >*/ /* with LOCK */
  GStaticRecMutex      *state_lock;

  /* element state */
  GCond                *state_cond;
  guint32               state_cookie;
  GstState              current_state;
  GstState              next_state;
  GstState              pending_state;
  GstStateChangeReturn  last_return;

  GstBus               *bus;

  /* allocated clock */
  GstClock             *clock;
  GstClockTimeDiff      base_time; /* NULL/READY: 0 - PAUSED: current time - PLAYING: difference to clock */

  /* element pads, these lists can only be iterated while holding
   * the LOCK or checking the cookie after each LOCK. */
  guint16               numpads;
  GList                *pads;
  guint16               numsrcpads;
  GList                *srcpads;
  guint16               numsinkpads;
  GList                *sinkpads;
  guint32               pads_cookie;

  /*< private >*/
  union {
    struct {
      /* state set by application */
      GstState              target_state;
      /* running time of the last PAUSED state */
      GstClockTime          start_time;
    } ABI;
    /* adding + 0 to mark ABI change to be undone later */
    gpointer _gst_reserved[GST_PADDING + 0];
  } abidata;
};

 

struct _GstEvent {
  GstMiniObject mini_object;

  /*< public >*/ /* with COW */
  GstEventType  type;
  guint64       timestamp;
  GstObject     *src;

  GstStructure  *structure;

  /*< private >*/
  union {
    guint32 seqnum;
    gpointer _gst_reserved;
  } abidata;
};
struct _GstMessage
{
  GstMiniObject mini_object;

  /*< private >*//* with MESSAGE_LOCK */
  GMutex *lock;                 /* lock and cond for async delivery */
  GCond *cond;

  /*< public > *//* with COW */
  GstMessageType type;
  guint64 timestamp;
  GstObject *src;

  GstStructure *structure;

  /*< private >*/
  union {
    struct {
      guint32 seqnum;
    } ABI;
    /* + 0 to mark ABI change for future greppage */
    gpointer _gst_reserved[GST_PADDING + 0];
  } abidata;
};
struct _GstClock {
  GstObject	 object;

  GMutex	*slave_lock; /* order: SLAVE_LOCK, OBJECT_LOCK */

  /*< protected >*/ /* with LOCK */
  GstClockTime	 internal_calibration;
  GstClockTime	 external_calibration;
  GstClockTime	 rate_numerator;
  GstClockTime	 rate_denominator;
  GstClockTime	 last_time;
  GList		*entries;
  GCond		*entries_changed;

  /*< private >*/ /* with LOCK */
  GstClockTime	 resolution;
  gboolean	 stats;

  /* for master/slave clocks */
  GstClock      *master;

  /* with SLAVE_LOCK */
  gboolean       filling;
  gint           window_size;
  gint           window_threshold;
  gint           time_index;
  GstClockTime   timeout;
  GstClockTime  *times;
  GstClockID     clockid;

  /*< private >*/
  union {
    GstClockPrivate *priv;
    GstClockTime     _gst_reserved[GST_PADDING];
  } ABI;
};

 

struct _GstPad {
  GstObject			object;

  /*< public >*/
  gpointer			element_private;

  GstPadTemplate		*padtemplate;

  GstPadDirection		 direction;

  /*< public >*/ /* with STREAM_LOCK */
  /* streaming rec_lock */
  GStaticRecMutex		*stream_rec_lock;
  GstTask			*task;
  /*< public >*/ /* with PREROLL_LOCK */
  GMutex			*preroll_lock;
  GCond				*preroll_cond;

  /*< public >*/ /* with LOCK */
  /* block cond, mutex is from the object */
  GCond				*block_cond;
  GstPadBlockCallback		 block_callback;
  gpointer			 block_data;

  /* the pad capabilities */
  GstCaps			*caps;
  GstPadGetCapsFunction		getcapsfunc;
  GstPadSetCapsFunction		setcapsfunc;
  GstPadAcceptCapsFunction	 acceptcapsfunc;
  GstPadFixateCapsFunction	 fixatecapsfunc;

  GstPadActivateFunction	 activatefunc;
  GstPadActivateModeFunction	 activatepushfunc;
  GstPadActivateModeFunction	 activatepullfunc;

  /* pad link */
  GstPadLinkFunction		 linkfunc;
  GstPadUnlinkFunction		 unlinkfunc;
  GstPad			*peer;

  gpointer			 sched_private;

  /* data transport functions */
  GstPadChainFunction		 chainfunc;
  GstPadCheckGetRangeFunction	 checkgetrangefunc;
  GstPadGetRangeFunction	 getrangefunc;
  GstPadEventFunction		 eventfunc;

  GstActivateMode		 mode;

  /* generic query method */
  GstPadQueryTypeFunction	 querytypefunc;
  GstPadQueryFunction		 queryfunc;

  /* internal links */
#ifndef GST_DISABLE_DEPRECATED
  GstPadIntLinkFunction		 intlinkfunc;
#else
#ifndef __GTK_DOC_IGNORE__
  gpointer intlinkfunc;
#endif
#endif

  GstPadBufferAllocFunction      bufferallocfunc;

  /* whether to emit signals for have-data. counts number
   * of handlers attached. */
  gint				 do_buffer_signals;
  gint				 do_event_signals;

  /* ABI added */
  /* iterate internal links */
  GstPadIterIntLinkFunction     iterintlinkfunc;

  /* free block_data */
  GDestroyNotify block_destroy_data;

  /*< private >*/
  union {
    struct {
      gboolean                      block_callback_called;
      GstPadPrivate                *priv;
    } ABI;
    gpointer _gst_reserved[GST_PADDING - 2];
  } abidata;
};
struct _GstTask {
  GstObject      object;

  /*< public >*/ /* with LOCK */
  GstTaskState     state;
  GCond           *cond;

  GStaticRecMutex *lock;

  GstTaskFunction  func;
  gpointer         data;

  gboolean         running;

  /*< private >*/
  union {
    struct {
      /* thread this task is currently running in */
      GThread  *thread;
    } ABI;
    gpointer _gst_reserved[GST_PADDING - 1];
  } abidata;

  GstTaskPrivate *priv;
};

 

 

gst-inspect 的使用

Gstreamer学习list.

http://hi.baidu.com/dudangyimian/item/7afde5f9ca862c19e2e3bdb0

 

1. 默认打印信息

/YOURGST/bin/gst-inspect

此命令很常用,可以看出系统安装了多少个插件,共有多少个特性。

2. 最全打印信息

/YOURGST/bin/gst-inspect -a

此命令的打印量特别大,最好将结果存到文件中,供以后搜索

3. 查询可用于URI的特性

/YOURGST/bin/gst-inspect -u

输出都是一些 src, sink。是创建管道的源头和终点。

4. 查询某个插件信息

比如查询核心插件:

/YOURGST/bin/gst-inspect --plugin coreelements

5. 查询某个特性信息

查询文件源元件:

/YOURGST/bin/gst-inspect filesrc

值得注意的是,特性(feature)有三种:元件(element)、类型查找(typefinder)、索引(index)

6. 查询某个核心插件中包含的信息

/YOURGST/bin/gst-inspect /YOURGST//lib/gstreamer-0.10/libgstcoreelements.so

gst-inspect :

rawparse:  videoparse: Video Parse
rawparse:  audioparse: Audio Parse
mulaw:  mulawenc: Mu Law audio encoder
mulaw:  mulawdec: Mu Law audio decoder
avi:  avidemux: Avi demuxer
avi:  avimux: Avi muxer
avi:  avisubtitle: Avi subtitle parser
dccp:  dccpclientsrc: DCCP client source
dccp:  dccpserversink: DCCP server sink
dccp:  dccpclientsink: DCCP client sink
dccp:  dccpserversrc: DCCP server source
jpeg:  jpegenc: JPEG image encoder
jpeg:  jpegdec: JPEG image decoder
jpeg:  smokeenc: Smoke video encoder
jpeg:  smokedec: Smoke video decoder
1394:  dv1394src: Firewire (1394) DV video source
1394:  hdv1394src: Firewire (1394) HDV video source
deinterlace:  deinterlace: Deinterlacer
nsf:  nsfdec: Nsf decoder
debug:  breakmydata: Break my data
debug:  capssetter: CapsSetter
debug:  rndbuffersize: Random buffer size
debug:  navseek: Seek based on left-right arrows
debug:  pushfilesrc: Push File Source
debug:  progressreport: Progress report
debug:  taginject: TagInject
debug:  testsink: Test plugin
debug:  capsdebug: Caps debug
debug:  cpureport: CPU report
ogg:  oggdemux: Ogg demuxer
ogg:  oggmux: Ogg muxer
ogg:  ogmaudioparse: OGM audio stream parser
ogg:  ogmvideoparse: OGM video stream parser
ogg:  ogmtextparse: OGM text stream parser
ogg:  oggparse: Ogg parser
ogg:  oggaviparse: Ogg AVI parser
flac:  flacenc: FLAC audio encoder
flac:  flacdec: FLAC audio decoder
flac:  flactag: FLAC tagger
fsrtcpfilter:  fsrtcpfilter: RTCP Filter element
pango:  textoverlay: Text overlay
pango:  timeoverlay: Time overlay
pango:  clockoverlay: Clock overlay
pango:  textrender: Text renderer
gio:  giosink: GIO sink
gio:  giosrc: GIO source
gio:  giostreamsink: GIO stream sink
gio:  giostreamsrc: GIO stream source
videomaxrate:  videomaxrate: Video maximum rate adjuster
alaw:  alawenc: A Law audio encoder
alaw:  alawdec: A Law audio decoder
pulseaudio:  pulsesink: PulseAudio Audio Sink
pulseaudio:  pulsesrc: PulseAudio Audio Source
pulseaudio:  pulseaudiosink: Bin wrapping pulsesink
pulseaudio:  pulsemixer: PulseAudio Mixer
dc1394:  dc1394src: 1394 IIDC Video Source
smpte:  smpte: SMPTE transitions
smpte:  smptealpha: SMPTE transitions
smooth:  smooth: Smooth effect
ivfparse:  ivfparse: IVF parser
tta:  ttaparse: TTA file parser
tta:  ttadec: TTA audio decoder
mxf:  mxfdemux: MXF Demuxer
mxf:  mxfmux: MXF muxer
dv:  dvdemux: DV system stream demuxer
dv:  dvdec: DV video decoder
effectv:  edgetv: EdgeTV effect
effectv:  agingtv: AgingTV effect
effectv:  dicetv: DiceTV effect
effectv:  warptv: WarpTV effect
effectv:  shagadelictv: ShagadelicTV
effectv:  vertigotv: VertigoTV effect
effectv:  revtv: RevTV effect
effectv:  quarktv: QuarkTV effect
effectv:  optv: OpTV effect
effectv:  radioactv: RadioacTV effect
effectv:  streaktv: StreakTV effect
effectv:  rippletv: RippleTV effect
mpegtsdemux:  tsparse: MPEG transport stream parser
mpegtsdemux:  tsdemux: MPEG transport stream demuxer
coreindexers:  memindex: A index that stores entries in memory
coreindexers:  fileindex: A index that stores entries in file
adder:  adder: Adder
soup:  souphttpsrc: HTTP client source
soup:  souphttpclientsink: HTTP client sink
subparse: subparse_typefind: srt, sub, mpsub, mdvd, smi, txt, dks
subparse:  subparse: Subtitle parser
subparse:  ssaparse: SSA Subtitle Parser
equalizer:  equalizer-nbands: N Band Equalizer
equalizer:  equalizer-3bands: 3 Band Equalizer
equalizer:  equalizer-10bands: 10 Band Equalizer
faceoverlay:  faceoverlay: faceoverlay
vcdsrc:  vcdsrc: VCD Source
udp:  udpsink: UDP packet sender
udp:  multiudpsink: UDP packet sender
udp:  dynudpsink: UDP packet sender
udp:  udpsrc: UDP packet receiver
adpcmdec:  adpcmdec: ADPCM decoder
wavenc:  wavenc: WAV audio muxer
imagefreeze:  imagefreeze: Still frame stream generator
cairo:  cairotextoverlay: Text overlay
cairo:  cairotimeoverlay: Time overlay
cairo:  cairooverlay: Cairo overlay
cairo:  cairorender: Cairo encoder
cutter:  cutter: Audio cutter
openal:  openalsink: Audio sink (OpenAL)
openal:  openalsrc: OpenAL src
speed:  speed: Speed
auparse:  auparse: AU audio demuxer
tcp:  tcpclientsink: TCP client sink
tcp:  tcpclientsrc: TCP client source
tcp:  tcpserversink: TCP server sink
tcp:  tcpserversrc: TCP server source
tcp:  multifdsink: Multi filedescriptor sink
sdp:  sdpdemux: SDP session setup
video4linux2:  v4l2src: Video (video4linux2) Source
video4linux2:  v4l2sink: Video (video4linux2) Sink
video4linux2:  v4l2radio: Radio (video4linux2) Tuner
dataurisrc:  dataurisrc: data: URI source element
modplug:  modplug: ModPlug
pcapparse:  pcapparse: PCapParse
pcapparse:  irtspparse: IRTSPParse
navigationtest:  navigationtest: Video navigation test
nice:  nicesrc: ICE source
nice:  nicesink: ICE sink
sndfile:  sfsink: Sndfile sink
sndfile:  sfsrc: Sndfile source
videosignal:  videoanalyse: Video analyser
videosignal:  videodetect: Video detecter
videosignal:  videomark: Video marker
autodetect:  autovideosink: Auto video sink
autodetect:  autovideosrc: Auto video source
autodetect:  autoaudiosink: Auto audio sink
autodetect:  autoaudiosrc: Auto audio source
dirac:  diracenc: Dirac Encoder
gstsiren:  sirendec: Siren Decoder element
gstsiren:  sirenenc: Siren Encoder element
decodebin:  decodebin: Decoder Bin
inter:  interaudiosrc: FIXME Long name
inter:  interaudiosink: FIXME Long name
inter:  intervideosrc: FIXME Long name
inter:  intervideosink: FIXME Long name
debugutilsbad:  checksumsink: Checksum sink
debugutilsbad:  fpsdisplaysink: Measure and show framerate on videosink
debugutilsbad:  chopmydata: FIXME
debugutilsbad:  compare: Compare buffers
debugutilsbad:  debugspy: DebugSpy
fsvideoanyrate:  fsvideoanyrate: Videoanyrate element
gconfelements:  gconfvideosink: GConf video sink
gconfelements:  gconfvideosrc: GConf video source
gconfelements:  gconfaudiosink: GConf audio sink
gconfelements:  gconfaudiosrc: GConf audio source
gstrtpmanager:  gstrtpbin: RTP Bin
gstrtpmanager:  gstrtpjitterbuffer: RTP packet jitter-buffer
gstrtpmanager:  gstrtpptdemux: RTP Demux
gstrtpmanager:  gstrtpsession: RTP Session
gstrtpmanager:  gstrtpssrcdemux: RTP SSRC Demux
videofilter:  gamma: Video gamma correction
videofilter:  videobalance: Video balance
videofilter:  videoflip: Video flipper
liveadder:  liveadder: Live Adder element
opus:  opusenc: Opus audio encoder
opus:  opusdec: Opus audio decoder
opus:  opusparse: Opus audio parser
opus:  rtpopusdepay: RTP Opus packet depayloader
opus:  rtpopuspay: RTP Opus payloader
app:  appsrc: AppSrc
app:  appsink: AppSink
apetag:  apedemux: APE tag demuxer
efence:  efence: Electric Fence
fsmsnconference:  fsmsncamsendconference: Farstream MSN Sending Conference
fsmsnconference:  fsmsncamrecvconference: Farstream MSN Reception Conference
ossaudio:  ossmixer: OSS Mixer
ossaudio:  osssrc: Audio Source (OSS)
ossaudio:  osssink: Audio Sink (OSS)
videoscale:  videoscale: Video scaler
nuvdemux:  nuvdemux: Nuv demuxer
freeverb:  freeverb: Stereo positioning
mpegvideoparse:  legacympegvideoparse: MPEG video elementary stream parser
multipart:  multipartdemux: Multipart demuxer
multipart:  multipartmux: Multipart muxer
decklink:  decklinksrc: Decklink source
decklink:  decklinksink: Decklink Sink
resindvd:  rsndvdbin: rsndvdbin
cdparanoia:  cdparanoiasrc: CD Audio (cdda) Source, Paranoia IV
dfbvideosink:  dfbvideosink: DirectFB video sink
videomixer:  videomixer: Video mixer
videomixer:  videomixer2: Video mixer 2
coloreffects:  coloreffects: Color Look-up Table filter
coloreffects:  chromahold: Chroma hold filter
spandsp:  spanplc: SpanDSP PLC
mpegdemux2:  mpegpsdemux: The Fluendo MPEG Program Stream Demuxer
mpegdemux2:  mpegtsdemux: The Fluendo MPEG Transport stream demuxer
mpegdemux2:  mpegtsparse: MPEG transport stream parser
colorspace:  colorspace:  Colorspace converter
gsettings:  gsettingsaudiosink: GSettings audio sink
gsettings:  gsettingsaudiosrc: GSettings audio src
gsettings:  gsettingsvideosink: GSettings video sink
gsettings:  gsettingsvideosrc: GSettings video src
videomeasure:  ssim: SSim
videomeasure:  measurecollector: Video measure collector
vmnc:  vmncdec: VMnc video decoder
camerabin:  camerabin: Camera Bin
dtsdec:  dtsdec: DTS audio decoder
postproc:  postproc_hdeblock: LibPostProc hdeblock filter
postproc:  postproc_vdeblock: LibPostProc vdeblock filter
postproc:  postproc_x1hdeblock: LibPostProc x1hdeblock filter
postproc:  postproc_x1vdeblock: LibPostProc x1vdeblock filter
postproc:  postproc_ahdeblock: LibPostProc ahdeblock filter
postproc:  postproc_avdeblock: LibPostProc avdeblock filter
postproc:  postproc_dering: LibPostProc dering filter
postproc:  postproc_autolevels: LibPostProc autolevels filter
postproc:  postproc_linblenddeint: LibPostProc linblenddeint filter
postproc:  postproc_linipoldeint: LibPostProc linipoldeint filter
postproc:  postproc_cubicipoldeint: LibPostProc cubicipoldeint filter
postproc:  postproc_mediandeint: LibPostProc mediandeint filter
postproc:  postproc_ffmpegdeint: LibPostProc ffmpegdeint filter
postproc:  postproc_lowpass5: LibPostProc lowpass5 filter
postproc:  postproc_tmpnoise: LibPostProc tmpnoise filter
postproc:  postproc_forcequant: LibPostProc forcequant filter
postproc:  postproc_default: LibPostProc default filter
bz2:  bz2enc: BZ2 encoder
bz2:  bz2dec: BZ2 decoder
assrender:  assrender: ASS/SSA Render
jpegformat:  jpegparse: JPEG stream parser
jpegformat:  jifmux: JPEG stream muxer
alpha:  alpha: Alpha filter
libvisual:  libvisual_bumpscope: libvisual Bumpscope plugin plugin v.0.0.1
libvisual:  libvisual_corona: libvisual libvisual corona plugin plugin v.0.1
libvisual:  libvisual_infinite: libvisual infinite plugin plugin v.0.1
libvisual:  libvisual_jakdaw: libvisual Jakdaw plugin plugin v.0.0.1
libvisual:  libvisual_jess: libvisual jess plugin plugin v.0.1
libvisual:  libvisual_lv_analyzer: libvisual libvisual analyzer plugin v.1.0
libvisual:  libvisual_lv_scope: libvisual libvisual scope plugin v.0.1
libvisual:  libvisual_oinksie: libvisual oinksie plugin plugin v.0.1
theora:  theoradec: Theora video decoder
theora:  theoraenc: Theora video encoder
theora:  theoraparse: Theora video parser
geometrictransform:  circle: circle
geometrictransform:  diffuse: diffuse
geometrictransform:  kaleidoscope: kaleidoscope
geometrictransform:  marble: marble
geometrictransform:  pinch: pinch
geometrictransform:  rotate: rotate
geometrictransform:  sphere: sphere
geometrictransform:  twirl: twirl
geometrictransform:  waterripple: waterripple
geometrictransform:  stretch: stretch
geometrictransform:  bulge: bulge
geometrictransform:  tunnel: tunnel
geometrictransform:  square: square
geometrictransform:  mirror: mirror
geometrictransform:  fisheye: fisheye
spectrum:  spectrum: Spectrum analyzer
dvdspu:  dvdspu: Sub-picture Overlay
zbar:  zbar: Barcode detector
xvimagesink:  xvimagesink: Video sink
hdvparse:  hdvparse: HDVParser
speex:  speexenc: Speex audio encoder
speex:  speexdec: Speex audio decoder
interleave:  interleave: Audio interleaver
interleave:  deinterleave: Audio deinterleaver
audiofx:  audiopanorama: Stereo positioning
audiofx:  audioinvert: Audio inversion
audiofx:  audiokaraoke: AudioKaraoke
audiofx:  audioamplify: Audio amplifier
audiofx:  audiodynamic: Dynamic range controller
audiofx:  audiocheblimit: Low pass & high pass filter
audiofx:  audiochebband: Band pass & band reject filter
audiofx:  audioiirfilter: Audio IIR filter
audiofx:  audiowsinclimit: Low pass & high pass filter
audiofx:  audiowsincband: Band pass & band reject filter
audiofx:  audiofirfilter: Audio FIR filter
audiofx:  audioecho: Audio echo
ffmpegcolorspace:  ffmpegcolorspace: FFMPEG Colorspace converter
fsrtpconference:  fsrtpconference: Farstream RTP Conference
ffvideoscale:  ffvideoscale: FFMPEG Scale element
ximagesrc:  ximagesrc: Ximage video source
subenc:  srtenc: Srt encoder
subenc:  webvttenc: WebVTT encoder
schro:  schrodec: Dirac Decoder
schro:  schroenc: Dirac Encoder
alsa:  alsamixer: Alsa mixer
alsa:  alsasrc: Audio source (ALSA)
alsa:  alsasink: Audio sink (ALSA)
fragmented:  hlsdemux: HLS Demuxer
aiff:  aiffparse: AIFF audio demuxer
aiff:  aiffmux: AIFF audio muxer
mimic:  mimenc: Mimic Encoder
mimic:  mimdec: Mimic Decoder
videofiltersbad:  scenechange: Scene change detector
videofiltersbad:  zebrastripe: Zebra stripe overlay
dvbsuboverlay:  dvbsuboverlay: DVB Subtitles Overlay
png:  pngdec: PNG image decoder
png:  pngenc: PNG image encoder
apexsink:  apexsink: Apple AirPort Express Audio Sink
typefindfunctions: video/x-ms-asf: asf, wm, wma, wmv
typefindfunctions: audio/x-musepack: mpc, mpp, mp+
typefindfunctions: audio/x-au: au, snd
typefindfunctions: video/x-msvideo: avi
typefindfunctions: audio/qcelp: qcp
typefindfunctions: video/x-cdxa: dat
typefindfunctions: video/x-vcd: dat
typefindfunctions: audio/x-imelody: imy, ime, imelody
typefindfunctions: audio/midi: mid, midi
typefindfunctions: audio/riff-midi: mid, midi
typefindfunctions: audio/mobile-xmf: mxmf
typefindfunctions: video/x-fli: flc, fli
typefindfunctions: application/x-id3v2: mp3, mp2, mp1, mpga, ogg, flac, tta
typefindfunctions: application/x-id3v1: mp3, mp2, mp1, mpga, ogg, flac, tta
typefindfunctions: application/x-apetag: mp3, ape, mpc, wv
typefindfunctions: audio/x-ttafile: tta
typefindfunctions: audio/x-mod: 669, amf, dsm, gdm, far, imf, it, med, mod, mtm, okt, sam, s3m, stm, stx, ult, xm
typefindfunctions: audio/mpeg: mp3, mp2, mp1, mpga
typefindfunctions: audio/x-ac3: ac3, eac3
typefindfunctions: audio/x-dts: dts
typefindfunctions: audio/x-gsm: gsm
typefindfunctions: video/mpeg-sys: mpe, mpeg, mpg
typefindfunctions: video/mpegts: ts, mts
typefindfunctions: application/ogg: anx, ogg, ogm
typefindfunctions: video/mpeg-elementary: mpv, mpeg, mpg
typefindfunctions: video/mpeg4: m4v
typefindfunctions: video/x-h263: h263, 263
typefindfunctions: video/x-h264: h264, x264, 264
typefindfunctions: video/x-nuv: nuv
typefindfunctions: audio/x-m4a: m4a
typefindfunctions: application/x-3gp: 3gp
typefindfunctions: video/quicktime: mov
typefindfunctions: image/x-quicktime: qif, qtif, qti
typefindfunctions: image/jp2: jp2
typefindfunctions: video/mj2: mj2
typefindfunctions: text/html: htm, html
typefindfunctions: application/vnd.rn-realmedia: ra, ram, rm, rmvb
typefindfunctions: application/x-pn-realaudio: ra, ram, rm, rmvb
typefindfunctions: application/x-shockwave-flash: swf, swfl
typefindfunctions: video/x-flv: flv
typefindfunctions: text/plain: txt
typefindfunctions: text/utf-16: txt
typefindfunctions: text/utf-32: txt
typefindfunctions: text/uri-list: ram
typefindfunctions: application/x-hls: m3u8
typefindfunctions: application/sdp: sdp
typefindfunctions: application/smil: smil
typefindfunctions: application/xml: xml
typefindfunctions: audio/x-wav: wav
typefindfunctions: audio/x-aiff: aiff, aif, aifc
typefindfunctions: audio/x-svx: iff, svx
typefindfunctions: audio/x-paris: paf
typefindfunctions: audio/x-nist: nist
typefindfunctions: audio/x-voc: voc
typefindfunctions: audio/x-sds: sds
typefindfunctions: audio/x-ircam: sf
typefindfunctions: audio/x-w64: w64
typefindfunctions: audio/x-shorten: shn
typefindfunctions: application/x-ape: ape
typefindfunctions: image/jpeg: jpg, jpe, jpeg
typefindfunctions: image/gif: gif
typefindfunctions: image/png: png
typefindfunctions: image/bmp: bmp
typefindfunctions: image/tiff: tif, tiff
typefindfunctions: image/x-portable-pixmap: pnm, ppm, pgm, pbm
typefindfunctions: video/x-matroska: mkv, mka
typefindfunctions: video/webm: webm
typefindfunctions: application/mxf: mxf
typefindfunctions: video/x-mve: mve
typefindfunctions: video/x-dv: dv, dif
typefindfunctions: audio/x-amr-nb-sh: amr
typefindfunctions: audio/x-amr-wb-sh: amr
typefindfunctions: audio/iLBC-sh: ilbc
typefindfunctions: audio/x-sid: sid
typefindfunctions: image/x-xcf: xcf
typefindfunctions: video/x-mng: mng
typefindfunctions: image/x-jng: jng
typefindfunctions: image/x-xpixmap: xpm
typefindfunctions: image/x-sun-raster: ras
typefindfunctions: application/x-bzip: bz2
typefindfunctions: application/x-gzip: gz
typefindfunctions: application/zip: zip
typefindfunctions: application/x-compress: Z
typefindfunctions: subtitle/x-kate: no extensions
typefindfunctions: audio/x-flac: flac
typefindfunctions: audio/x-vorbis: no extensions
typefindfunctions: video/x-theora: no extensions
typefindfunctions: application/x-ogm-video: no extensions
typefindfunctions: application/x-ogm-audio: no extensions
typefindfunctions: application/x-ogm-text: no extensions
typefindfunctions: audio/x-speex: no extensions
typefindfunctions: audio/x-celt: no extensions
typefindfunctions: application/x-ogg-skeleton: no extensions
typefindfunctions: text/x-cmml: no extensions
typefindfunctions: application/x-executable: no extensions
typefindfunctions: audio/aac: aac, adts, adif, loas
typefindfunctions: audio/x-spc: spc
typefindfunctions: audio/x-wavpack: wv, wvp
typefindfunctions: audio/x-wavpack-correction: wvc
typefindfunctions: application/postscript: ps
typefindfunctions: image/svg+xml: svg
typefindfunctions: application/x-rar: rar
typefindfunctions: application/x-tar: tar
typefindfunctions: application/x-ar: a
typefindfunctions: application/x-ms-dos-executable: dll, exe, ocx, sys, scr, msstyles, cpl
typefindfunctions: video/x-dirac: no extensions
typefindfunctions: multipart/x-mixed-replace: no extensions
typefindfunctions: application/x-mmsh: no extensions
typefindfunctions: video/vivo: viv
typefindfunctions: audio/x-nsf: nsf
typefindfunctions: audio/x-gym: gym
typefindfunctions: audio/x-ay: ay
typefindfunctions: audio/x-gbs: gbs
typefindfunctions: audio/x-vgm: vgm
typefindfunctions: audio/x-sap: sap
typefindfunctions: video/x-ivf: ivf
typefindfunctions: audio/x-kss: kss
typefindfunctions: application/pdf: pdf
typefindfunctions: application/msword: doc
typefindfunctions: application/octet-stream: DS_Store
typefindfunctions: image/vnd.adobe.photoshop: psd
typefindfunctions: image/vnd.wap.wbmp: no extensions
typefindfunctions: application/x-yuv4mpeg: y4m
typefindfunctions: image/x-icon: no extensions
typefindfunctions: xdgmime-base: no extensions
typefindfunctions: image/x-degas: no extensions
jp2kdecimator:  jp2kdecimator: JPEG2000 decimator
ximagesink:  ximagesink: Video sink
segmentclip:  audiosegmentclip: Audio buffer segment clipper
segmentclip:  videosegmentclip: Video buffer segment clipper
wavpack:  wavpackparse: Wavpack parser
wavpack:  wavpackdec: Wavpack audio decoder
wavpack:  wavpackenc: Wavpack audio encoder
cdxaparse:  cdxaparse: (S)VCD parser
cdxaparse:  vcdparse: (S)VCD stream parser
oss4:  oss4sink: OSS v4 Audio Sink
oss4:  oss4src: OSS v4 Audio Source
oss4:  oss4mixer: OSS v4 Audio Mixer
asfmux:  asfmux: ASF muxer
asfmux:  rtpasfpay: RTP ASF payloader
asfmux:  asfparse: ASF parser
bluetooth: sbc: sbc
bluetooth:  sbcenc: Bluetooth SBC encoder
bluetooth:  sbcdec: Bluetooth SBC decoder
bluetooth:  sbcparse: Bluetooth SBC parser
bluetooth:  avdtpsink: Bluetooth AVDTP sink
bluetooth:  a2dpsink: Bluetooth A2DP sink
bluetooth:  rtpsbcpay: RTP packet payloader
coreelements:  capsfilter: CapsFilter
coreelements:  fakesrc: Fake Source
coreelements:  fakesink: Fake Sink
coreelements:  fdsrc: Filedescriptor Source
coreelements:  fdsink: Filedescriptor Sink
coreelements:  filesrc: File Source
coreelements:  funnel: Funnel pipe fitting
coreelements:  identity: Identity
coreelements:  input-selector: Input selector
coreelements:  output-selector: Output selector
coreelements:  queue: Queue
coreelements:  queue2: Queue 2
coreelements:  filesink: File Sink
coreelements:  tee: Tee pipe fitting
coreelements:  typefind: TypeFind
coreelements:  multiqueue: MultiQueue
coreelements:  valve: Valve element
mpegpsmux:  mpegpsmux: MPEG Program Stream Muxer
annodex:  cmmlenc: CMML streams encoder
annodex:  cmmldec: CMML stream decoder
voaacenc:  voaacenc: AAC audio encoder
xvid:  xvidenc: XviD video encoder
xvid:  xviddec: XviD video decoder
festival:  festival: Festival Text-to-Speech synthesizer
camerabin2:  viewfinderbin: Viewfinder Bin
camerabin2:  wrappercamerabinsrc: V4l2 camera src element for camerabin
camerabin2:  camerabin2: CameraBin2
goom:  goom: GOOM: what a GOOM!
autoconvert:  autoconvert: Select convertor based on caps
autoconvert:  autovideoconvert: Select color space convertor based on caps
id3demux:  id3demux: ID3 tag demuxer
audioresample:  audioresample: Audio resampler
flv:  flvdemux: FLV Demuxer
flv:  flvmux: FLV muxer
level:  level: Level
interlace:  interlace: Interlace filter
adpcmenc:  adpcmenc: ADPCM encoder
pnm:  pnmdec: PNM image decoder
pnm:  pnmenc: PNM image encoder
videocrop:  videocrop: Crop
videocrop:  aspectratiocrop: aspectratiocrop
patchdetect:  patchdetect: Color Patch Detector
audioconvert:  audioconvert: Audio converter
id3tag:  id3mux: ID3 v1 and v2 Muxer
freeze:  freeze: Stream freezer
multifile:  multifilesrc: Multi-File Source
multifile:  multifilesink: Multi-File Sink
multifile:  splitfilesrc: Split-File Source
wavparse:  wavparse: WAV audio demuxer
wildmidi:  wildmidi: WildMidi
taglib:  id3v2mux: TagLib-based ID3v2 Muxer
taglib:  apev2mux: TagLib-based APEv2 Muxer
mpegtsmux:  mpegtsmux: MPEG Transport Stream Muxer
uridecodebin:  decodebin2: Decoder Bin
uridecodebin:  uridecodebin: URI Decoder
fieldanalysis:  fieldanalysis: Video field analysis
volume:  volume: Volume
playback:  playbin: Player Bin
playback:  playbin2: Player Bin 2
playback:  playsink: Player Sink
playback:  subtitleoverlay: Subtitle Overlay
shout2send:  shout2send: Icecast network sink
rtsp:  rtspsrc: RTSP packet receiver
rtsp:  rtpdec: RTP Decoder
y4menc:  y4menc: YUV4MPEG video encoder
sdi:  sdidemux: SDI Demuxer
sdi:  sdimux: SDI Muxer
rtpmux:  rtpmux: RTP muxer
rtpmux:  rtpdtmfmux: RTP muxer
icydemux:  icydemux: ICY tag demuxer
legacyresample:  legacyresample: Audio scaler
soundtouch:  pitch: Pitch controller
soundtouch:  bpmdetect: BPM Detector
gdp:  gdpdepay: GDP Depayloader
gdp:  gdppay: GDP Payloader
kate:  katedec: Kate stream text decoder
kate:  kateenc: Kate stream encoder
kate:  kateparse: Kate stream parser
kate:  katetag: Kate stream tagger
mms:  mmssrc: MMS streaming source
cacasink:  cacasink: A colored ASCII art video sink
shapewipe:  shapewipe: Shape Wipe transition filter
isomp4:  qtdemux: QuickTime demuxer
isomp4:  rtpxqtdepay: RTP packet depayloader
isomp4:  qtmux: QuickTime Muxer
isomp4:  mp4mux: MP4 Muxer
isomp4:  ismlmux: ISML Muxer
isomp4:  3gppmux: 3GPP Muxer
isomp4:  gppmux: 3GPP Muxer
isomp4:  mj2mux: MJ2 Muxer
isomp4:  qtmoovrecover: QT Moov Recover
shm:  shmsrc: Shared Memory Source
shm:  shmsink: Shared Memory Sink
vorbis:  vorbisenc: Vorbis audio encoder
vorbis:  vorbisdec: Vorbis audio decoder
vorbis:  vorbisparse: VorbisParse
vorbis:  vorbistag: VorbisTag
cdaudio:  cdaudio: CD player
ffmpeg:  ffenc_a64multi: FFmpeg Multicolor charset for Commodore 64 encoder
ffmpeg:  ffenc_a64multi5: FFmpeg Multicolor charset for Commodore 64, extended with 5th color (colram) encoder
ffmpeg:  ffenc_asv1: FFmpeg ASUS V1 encoder
ffmpeg:  ffenc_asv2: FFmpeg ASUS V2 encoder
ffmpeg:  ffenc_bmp: FFmpeg BMP image encoder
ffmpeg:  ffenc_cljr: FFmpeg Cirrus Logic AccuPak encoder
ffmpeg:  ffenc_dnxhd: FFmpeg VC3/DNxHD encoder
ffmpeg:  ffenc_dpx: FFmpeg DPX image encoder
ffmpeg:  ffenc_dvvideo: FFmpeg DV (Digital Video) encoder
ffmpeg:  ffenc_ffv1: FFmpeg FFmpeg video codec #1 encoder
ffmpeg:  ffenc_ffvhuff: FFmpeg Huffyuv FFmpeg variant encoder
ffmpeg:  ffenc_flashsv: FFmpeg Flash Screen Video encoder
ffmpeg:  ffenc_flv: FFmpeg Flash Video (FLV) / Sorenson Spark / Sorenson H.263 encoder
ffmpeg:  ffenc_h261: FFmpeg H.261 encoder
ffmpeg:  ffenc_h263: FFmpeg H.263 / H.263-1996 encoder
ffmpeg:  ffenc_h263p: FFmpeg H.263+ / H.263-1998 / H.263 version 2 encoder
ffmpeg:  ffenc_huffyuv: FFmpeg Huffyuv / HuffYUV encoder
ffmpeg:  ffenc_jpegls: FFmpeg JPEG-LS encoder
ffmpeg:  ffenc_ljpeg: FFmpeg Lossless JPEG encoder
ffmpeg:  ffenc_mjpeg: FFmpeg MJPEG (Motion JPEG) encoder
ffmpeg:  ffenc_mpeg1video: FFmpeg MPEG-1 video encoder
ffmpeg:  ffenc_mpeg2video: FFmpeg MPEG-2 video encoder
ffmpeg:  ffenc_mpeg4: FFmpeg MPEG-4 part 2 encoder
ffmpeg:  ffenc_msmpeg4v2: FFmpeg MPEG-4 part 2 Microsoft variant version 2 encoder
ffmpeg:  ffenc_msmpeg4: FFmpeg MPEG-4 part 2 Microsoft variant version 3 encoder
ffmpeg:  ffenc_pam: FFmpeg PAM (Portable AnyMap) image encoder
ffmpeg:  ffenc_pbm: FFmpeg PBM (Portable BitMap) image encoder
ffmpeg:  ffenc_pcx: FFmpeg PC Paintbrush PCX image encoder
ffmpeg:  ffenc_pgm: FFmpeg PGM (Portable GrayMap) image encoder
ffmpeg:  ffenc_pgmyuv: FFmpeg PGMYUV (Portable GrayMap YUV) image encoder
ffmpeg:  ffenc_png: FFmpeg PNG image encoder
ffmpeg:  ffenc_ppm: FFmpeg PPM (Portable PixelMap) image encoder
ffmpeg:  ffenc_qtrle: FFmpeg QuickTime Animation (RLE) video encoder
ffmpeg:  ffenc_roqvideo: FFmpeg id RoQ video encoder
ffmpeg:  ffenc_rv10: FFmpeg RealVideo 1.0 encoder
ffmpeg:  ffenc_rv20: FFmpeg RealVideo 2.0 encoder
ffmpeg:  ffenc_sgi: FFmpeg SGI image encoder
ffmpeg:  ffenc_snow: FFmpeg Snow encoder
ffmpeg:  ffenc_svq1: FFmpeg Sorenson Vector Quantizer 1 / Sorenson Video 1 / SVQ1 encoder
ffmpeg:  ffenc_targa: FFmpeg Truevision Targa image encoder
ffmpeg:  ffenc_tiff: FFmpeg TIFF image encoder
ffmpeg:  ffenc_v410: FFmpeg Uncompressed 4:4:4 10-bit encoder
ffmpeg:  ffenc_wmv1: FFmpeg Windows Media Video 7 encoder
ffmpeg:  ffenc_wmv2: FFmpeg Windows Media Video 8 encoder
ffmpeg:  ffenc_zmbv: FFmpeg Zip Motion Blocks Video encoder
ffmpeg:  ffenc_aac: FFmpeg Advanced Audio Coding encoder
ffmpeg:  ffenc_ac3: FFmpeg ATSC A/52A (AC-3) encoder
ffmpeg:  ffenc_ac3_fixed: FFmpeg ATSC A/52A (AC-3) encoder
ffmpeg:  ffenc_alac: FFmpeg ALAC (Apple Lossless Audio Codec) encoder
ffmpeg:  ffenc_eac3: FFmpeg ATSC A/52 E-AC-3 encoder
ffmpeg:  ffenc_mp2: FFmpeg MP2 (MPEG audio layer 2) encoder
ffmpeg:  ffenc_nellymoser: FFmpeg Nellymoser Asao encoder
ffmpeg:  ffenc_real_144: FFmpeg RealAudio 1.0 (14.4K) encoder encoder
ffmpeg:  ffenc_wmav1: FFmpeg Windows Media Audio 1 encoder
ffmpeg:  ffenc_wmav2: FFmpeg Windows Media Audio 2 encoder
ffmpeg:  ffenc_roq_dpcm: FFmpeg id RoQ DPCM encoder
ffmpeg:  ffenc_adpcm_adx: FFmpeg SEGA CRI ADX ADPCM encoder
ffmpeg:  ffenc_g722: FFmpeg G.722 ADPCM encoder
ffmpeg:  ffenc_g726: FFmpeg G.726 ADPCM encoder
ffmpeg:  ffenc_adpcm_ima_qt: FFmpeg ADPCM IMA QuickTime encoder
ffmpeg:  ffenc_adpcm_ima_wav: FFmpeg ADPCM IMA WAV encoder
ffmpeg:  ffenc_adpcm_ms: FFmpeg ADPCM Microsoft encoder
ffmpeg:  ffenc_adpcm_swf: FFmpeg ADPCM Shockwave Flash encoder
ffmpeg:  ffenc_adpcm_yamaha: FFmpeg ADPCM Yamaha encoder
ffmpeg:  ffdec_aasc: FFmpeg Autodesk RLE decoder
ffmpeg:  ffdec_amv: FFmpeg AMV Video decoder
ffmpeg:  ffdec_anm: FFmpeg Deluxe Paint Animation decoder
ffmpeg:  ffdec_ansi: FFmpeg ASCII/ANSI art decoder
ffmpeg:  ffdec_asv1: FFmpeg ASUS V1 decoder
ffmpeg:  ffdec_asv2: FFmpeg ASUS V2 decoder
ffmpeg:  ffdec_aura: FFmpeg Auravision AURA decoder
ffmpeg:  ffdec_aura2: FFmpeg Auravision Aura 2 decoder
ffmpeg:  ffdec_avs: FFmpeg AVS (Audio Video Standard) video decoder
ffmpeg:  ffdec_bethsoftvid: FFmpeg Bethesda VID video decoder
ffmpeg:  ffdec_bfi: FFmpeg Brute Force & Ignorance decoder
ffmpeg:  ffdec_binkvideo: FFmpeg Bink video decoder
ffmpeg:  ffdec_bmp: FFmpeg BMP image decoder
ffmpeg:  ffdec_bmv_video: FFmpeg Discworld II BMV video decoder
ffmpeg:  ffdec_c93: FFmpeg Interplay C93 decoder
ffmpeg:  ffdec_cavs: FFmpeg Chinese AVS video (AVS1-P2, JiZhun profile) decoder
ffmpeg:  ffdec_cdgraphics: FFmpeg CD Graphics video decoder
ffmpeg:  ffdec_cinepak: FFmpeg Cinepak decoder
ffmpeg:  ffdec_cljr: FFmpeg Cirrus Logic AccuPak decoder
ffmpeg:  ffdec_camstudio: FFmpeg CamStudio decoder
ffmpeg:  ffdec_cyuv: FFmpeg Creative YUV (CYUV) decoder
ffmpeg:  ffdec_dfa: FFmpeg Chronomaster DFA decoder
ffmpeg:  ffdec_dnxhd: FFmpeg VC3/DNxHD decoder
ffmpeg:  ffdec_dpx: FFmpeg DPX image decoder
ffmpeg:  ffdec_dsicinvideo: FFmpeg Delphine Software International CIN video decoder
ffmpeg:  ffdec_dvvideo: FFmpeg DV (Digital Video) decoder
ffmpeg:  ffdec_dxa: FFmpeg Feeble Files/ScummVM DXA decoder
ffmpeg:  ffdec_dxtory: FFmpeg Dxtory decoder
ffmpeg:  ffdec_eacmv: FFmpeg Electronic Arts CMV video decoder
ffmpeg:  ffdec_eamad: FFmpeg Electronic Arts Madcow Video decoder
ffmpeg:  ffdec_eatgq: FFmpeg Electronic Arts TGQ video decoder
ffmpeg:  ffdec_eatgv: FFmpeg Electronic Arts TGV video decoder
ffmpeg:  ffdec_eatqi: FFmpeg Electronic Arts TQI Video decoder
ffmpeg:  ffdec_8bps: FFmpeg QuickTime 8BPS video decoder
ffmpeg:  ffdec_8svx_exp: FFmpeg 8SVX exponential decoder
ffmpeg:  ffdec_8svx_fib: FFmpeg 8SVX fibonacci decoder
ffmpeg:  ffdec_escape124: FFmpeg Escape 124 decoder
ffmpeg:  ffdec_ffv1: FFmpeg FFmpeg video codec #1 decoder
ffmpeg:  ffdec_ffvhuff: FFmpeg Huffyuv FFmpeg variant decoder
ffmpeg:  ffdec_flashsv: FFmpeg Flash Screen Video v1 decoder
ffmpeg:  ffdec_flashsv2: FFmpeg Flash Screen Video v2 decoder
ffmpeg:  ffdec_flic: FFmpeg Autodesk Animator Flic video decoder
ffmpeg:  ffdec_flv: FFmpeg Flash Video (FLV) / Sorenson Spark / Sorenson H.263 decoder
ffmpeg:  ffdec_4xm: FFmpeg 4X Movie decoder
ffmpeg:  ffdec_fraps: FFmpeg Fraps decoder
ffmpeg:  ffdec_FRWU: FFmpeg Forward Uncompressed decoder
ffmpeg:  ffdec_h261: FFmpeg H.261 decoder
ffmpeg:  ffdec_h263: FFmpeg H.263 / H.263-1996, H.263+ / H.263-1998 / H.263 version 2 decoder
ffmpeg:  ffdec_h263i: FFmpeg Intel H.263 decoder
ffmpeg:  ffdec_h264: FFmpeg H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 decoder
ffmpeg:  ffdec_huffyuv: FFmpeg Huffyuv / HuffYUV decoder
ffmpeg:  ffdec_idcinvideo: FFmpeg id Quake II CIN video decoder
ffmpeg:  ffdec_iff_byterun1: FFmpeg IFF ByteRun1 decoder
ffmpeg:  ffdec_iff_ilbm: FFmpeg IFF ILBM decoder
ffmpeg:  ffdec_indeo2: FFmpeg Intel Indeo 2 decoder
ffmpeg:  ffdec_indeo3: FFmpeg Intel Indeo 3 decoder
ffmpeg:  ffdec_indeo4: FFmpeg Intel Indeo Video Interactive 4 decoder
ffmpeg:  ffdec_indeo5: FFmpeg Intel Indeo Video Interactive 5 decoder
ffmpeg:  ffdec_interplayvideo: FFmpeg Interplay MVE video decoder
ffmpeg:  ffdec_jpegls: FFmpeg JPEG-LS decoder
ffmpeg:  ffdec_jv: FFmpeg Bitmap Brothers JV video decoder
ffmpeg:  ffdec_kgv1: FFmpeg Kega Game Video decoder
ffmpeg:  ffdec_kmvc: FFmpeg Karl Morton's video codec decoder
ffmpeg:  ffdec_lagarith: FFmpeg Lagarith lossless decoder
ffmpeg:  ffdec_loco: FFmpeg LOCO decoder
ffmpeg:  ffdec_mdec: FFmpeg Sony PlayStation MDEC (Motion DECoder) decoder
ffmpeg:  ffdec_mimic: FFmpeg Mimic decoder
ffmpeg:  ffdec_mjpeg: FFmpeg MJPEG (Motion JPEG) decoder
ffmpeg:  ffdec_mjpegb: FFmpeg Apple MJPEG-B decoder
ffmpeg:  ffdec_mmvideo: FFmpeg American Laser Games MM Video decoder
ffmpeg:  ffdec_motionpixels: FFmpeg Motion Pixels video decoder
ffmpeg:  ffdec_mpeg2video: FFmpeg MPEG-2 video decoder
ffmpeg:  ffdec_mpeg4: FFmpeg MPEG-4 part 2 decoder
ffmpeg:  ffdec_msmpeg4v1: FFmpeg MPEG-4 part 2 Microsoft variant version 1 decoder
ffmpeg:  ffdec_msmpeg4v2: FFmpeg MPEG-4 part 2 Microsoft variant version 2 decoder
ffmpeg:  ffdec_msmpeg4: FFmpeg MPEG-4 part 2 Microsoft variant version 3 decoder
ffmpeg:  ffdec_msrle: FFmpeg Microsoft RLE decoder
ffmpeg:  ffdec_msvideo1: FFmpeg Microsoft Video 1 decoder
ffmpeg:  ffdec_mszh: FFmpeg LCL (LossLess Codec Library) MSZH decoder
ffmpeg:  ffdec_mxpeg: FFmpeg Mobotix MxPEG video decoder
ffmpeg:  ffdec_nuv: FFmpeg NuppelVideo/RTJPEG decoder
ffmpeg:  ffdec_pam: FFmpeg PAM (Portable AnyMap) image decoder
ffmpeg:  ffdec_pbm: FFmpeg PBM (Portable BitMap) image decoder
ffmpeg:  ffdec_pcx: FFmpeg PC Paintbrush PCX image decoder
ffmpeg:  ffdec_pgm: FFmpeg PGM (Portable GrayMap) image decoder
ffmpeg:  ffdec_pgmyuv: FFmpeg PGMYUV (Portable GrayMap YUV) image decoder
ffmpeg:  ffdec_pictor: FFmpeg Pictor/PC Paint decoder
ffmpeg:  ffdec_png: FFmpeg PNG image decoder
ffmpeg:  ffdec_ppm: FFmpeg PPM (Portable PixelMap) image decoder
ffmpeg:  ffdec_prores: FFmpeg Apple ProRes (iCodec Pro) decoder
ffmpeg:  ffdec_ptx: FFmpeg V.Flash PTX image decoder
ffmpeg:  ffdec_qdraw: FFmpeg Apple QuickDraw decoder
ffmpeg:  ffdec_qpeg: FFmpeg Q-team QPEG decoder
ffmpeg:  ffdec_qtrle: FFmpeg QuickTime Animation (RLE) video decoder
ffmpeg:  ffdec_r10k: FFmpeg AJA Kona 10-bit RGB Codec decoder
ffmpeg:  ffdec_rl2: FFmpeg RL2 video decoder
ffmpeg:  ffdec_roqvideo: FFmpeg id RoQ video decoder
ffmpeg:  ffdec_rpza: FFmpeg QuickTime video (RPZA) decoder
ffmpeg:  ffdec_rv10: FFmpeg RealVideo 1.0 decoder
ffmpeg:  ffdec_rv20: FFmpeg RealVideo 2.0 decoder
ffmpeg:  ffdec_rv30: FFmpeg RealVideo 3.0 decoder
ffmpeg:  ffdec_rv40: FFmpeg RealVideo 4.0 decoder
ffmpeg:  ffdec_s302m: FFmpeg SMPTE 302M decoder
ffmpeg:  ffdec_sgi: FFmpeg SGI image decoder
ffmpeg:  ffdec_smackvid: FFmpeg Smacker video decoder
ffmpeg:  ffdec_smc: FFmpeg QuickTime Graphics (SMC) decoder
ffmpeg:  ffdec_snow: FFmpeg Snow decoder
ffmpeg:  ffdec_sp5x: FFmpeg Sunplus JPEG (SP5X) decoder
ffmpeg:  ffdec_sunrast: FFmpeg Sun Rasterfile image decoder
ffmpeg:  ffdec_svq1: FFmpeg Sorenson Vector Quantizer 1 / Sorenson Video 1 / SVQ1 decoder
ffmpeg:  ffdec_svq3: FFmpeg Sorenson Vector Quantizer 3 / Sorenson Video 3 / SVQ3 decoder
ffmpeg:  ffdec_targa: FFmpeg Truevision Targa image decoder
ffmpeg:  ffdec_thp: FFmpeg Nintendo Gamecube THP video decoder
ffmpeg:  ffdec_tiertexseqvideo: FFmpeg Tiertex Limited SEQ video decoder
ffmpeg:  ffdec_tiff: FFmpeg TIFF image decoder
ffmpeg:  ffdec_tmv: FFmpeg 8088flex TMV decoder
ffmpeg:  ffdec_truemotion1: FFmpeg Duck TrueMotion 1.0 decoder
ffmpeg:  ffdec_truemotion2: FFmpeg Duck TrueMotion 2.0 decoder
ffmpeg:  ffdec_camtasia: FFmpeg TechSmith Screen Capture Codec decoder
ffmpeg:  ffdec_txd: FFmpeg Renderware TXD (TeXture Dictionary) image decoder
ffmpeg:  ffdec_ultimotion: FFmpeg IBM UltiMotion decoder
ffmpeg:  ffdec_utvideo: FFmpeg Ut Video decoder
ffmpeg:  ffdec_v410: FFmpeg Uncompressed 4:4:4 10-bit decoder
ffmpeg:  ffdec_vb: FFmpeg Beam Software VB decoder
ffmpeg:  ffdec_vble: FFmpeg VBLE Lossless Codec decoder
ffmpeg:  ffdec_vc1: FFmpeg SMPTE VC-1 decoder
ffmpeg:  ffdec_vc1image: FFmpeg Windows Media Video 9 Image v2 decoder
ffmpeg:  ffdec_vcr1: FFmpeg ATI VCR1 decoder
ffmpeg:  ffdec_vmdvideo: FFmpeg Sierra VMD video decoder
ffmpeg:  ffdec_vmnc: FFmpeg VMware Screen Codec / VMware Video decoder
ffmpeg:  ffdec_vp3: FFmpeg On2 VP3 decoder
ffmpeg:  ffdec_vp5: FFmpeg On2 VP5 decoder
ffmpeg:  ffdec_vp6: FFmpeg On2 VP6 decoder
ffmpeg:  ffdec_vp6a: FFmpeg On2 VP6 (Flash version, with alpha channel) decoder
ffmpeg:  ffdec_vp6f: FFmpeg On2 VP6 (Flash version) decoder
ffmpeg:  ffdec_vp8: FFmpeg On2 VP8 decoder
ffmpeg:  ffdec_vqavideo: FFmpeg Westwood Studios VQA (Vector Quantized Animation) video decoder
ffmpeg:  ffdec_wmv1: FFmpeg Windows Media Video 7 decoder
ffmpeg:  ffdec_wmv2: FFmpeg Windows Media Video 8 decoder
ffmpeg:  ffdec_wmv3: FFmpeg Windows Media Video 9 decoder
ffmpeg:  ffdec_wmv3image: FFmpeg Windows Media Video 9 Image decoder
ffmpeg:  ffdec_wnv1: FFmpeg Winnov WNV1 decoder
ffmpeg:  ffdec_xan_wc3: FFmpeg Wing Commander III / Xan decoder
ffmpeg:  ffdec_xan_wc4: FFmpeg Wing Commander IV / Xxan decoder
ffmpeg:  ffdec_xl: FFmpeg Miro VideoXL decoder
ffmpeg:  ffdec_yop: FFmpeg Psygnosis YOP Video decoder
ffmpeg:  ffdec_zlib: FFmpeg LCL (LossLess Codec Library) ZLIB decoder
ffmpeg:  ffdec_zmbv: FFmpeg Zip Motion Blocks Video decoder
ffmpeg:  ffdec_aac: FFmpeg Advanced Audio Coding decoder
ffmpeg:  ffdec_aac_latm: FFmpeg AAC LATM (Advanced Audio Codec LATM syntax) decoder
ffmpeg:  ffdec_ac3: FFmpeg ATSC A/52A (AC-3) decoder
ffmpeg:  ffdec_alac: FFmpeg ALAC (Apple Lossless Audio Codec) decoder
ffmpeg:  ffdec_als: FFmpeg MPEG-4 Audio Lossless Coding (ALS) decoder
ffmpeg:  ffdec_amrnb: FFmpeg Adaptive Multi-Rate NarrowBand decoder
ffmpeg:  ffdec_amrwb: FFmpeg Adaptive Multi-Rate WideBand decoder
ffmpeg:  ffdec_ape: FFmpeg Monkey's Audio decoder
ffmpeg:  ffdec_atrac1: FFmpeg Atrac 1 (Adaptive TRansform Acoustic Coding) decoder
ffmpeg:  ffdec_atrac3: FFmpeg Atrac 3 (Adaptive TRansform Acoustic Coding 3) decoder
ffmpeg:  ffdec_binkaudio_dct: FFmpeg Bink Audio (DCT) decoder
ffmpeg:  ffdec_binkaudio_rdft: FFmpeg Bink Audio (RDFT) decoder
ffmpeg:  ffdec_bmv_audio: FFmpeg Discworld II BMV audio decoder
ffmpeg:  ffdec_cook: FFmpeg COOK decoder
ffmpeg:  ffdec_dca: FFmpeg DCA (DTS Coherent Acoustics) decoder
ffmpeg:  ffdec_dsicinaudio: FFmpeg Delphine Software International CIN audio decoder
ffmpeg:  ffdec_eac3: FFmpeg ATSC A/52B (AC-3, E-AC-3) decoder
ffmpeg:  ffdec_flac: FFmpeg FLAC (Free Lossless Audio Codec) decoder
ffmpeg:  ffdec_gsm: FFmpeg GSM decoder
ffmpeg:  ffdec_gsm_ms: FFmpeg GSM Microsoft variant decoder
ffmpeg:  ffdec_imc: FFmpeg IMC (Intel Music Coder) decoder
ffmpeg:  ffdec_mace3: FFmpeg MACE (Macintosh Audio Compression/Expansion) 3:1 decoder
ffmpeg:  ffdec_mace6: FFmpeg MACE (Macintosh Audio Compression/Expansion) 6:1 decoder
ffmpeg:  ffdec_mlp: FFmpeg MLP (Meridian Lossless Packing) decoder
ffmpeg:  ffdec_mp1float: FFmpeg MP1 (MPEG audio layer 1) decoder
ffmpeg:  ffdec_mp2float: FFmpeg MP2 (MPEG audio layer 2) decoder
ffmpeg:  ffdec_mp3: FFmpeg MP3 (MPEG audio layer 3) decoder
ffmpeg:  ffdec_mp3float: FFmpeg MP3 (MPEG audio layer 3) decoder
ffmpeg:  ffdec_mp3adu: FFmpeg ADU (Application Data Unit) MP3 (MPEG audio layer 3) decoder
ffmpeg:  ffdec_mp3adufloat: FFmpeg ADU (Application Data Unit) MP3 (MPEG audio layer 3) decoder
ffmpeg:  ffdec_mp3on4: FFmpeg MP3onMP4 decoder
ffmpeg:  ffdec_mp3on4float: FFmpeg MP3onMP4 decoder
ffmpeg:  ffdec_mpc7: FFmpeg Musepack SV7 decoder
ffmpeg:  ffdec_mpc8: FFmpeg Musepack SV8 decoder
ffmpeg:  ffdec_nellymoser: FFmpeg Nellymoser Asao decoder
ffmpeg:  ffdec_qcelp: FFmpeg QCELP / PureVoice decoder
ffmpeg:  ffdec_qdm2: FFmpeg QDesign Music Codec 2 decoder
ffmpeg:  ffdec_real_144: FFmpeg RealAudio 1.0 (14.4K) decoder
ffmpeg:  ffdec_real_288: FFmpeg RealAudio 2.0 (28.8K) decoder
ffmpeg:  ffdec_shorten: FFmpeg Shorten decoder
ffmpeg:  ffdec_sipr: FFmpeg RealAudio SIPR / ACELP.NET decoder
ffmpeg:  ffdec_smackaud: FFmpeg Smacker audio decoder
ffmpeg:  ffdec_truehd: FFmpeg TrueHD decoder
ffmpeg:  ffdec_truespeech: FFmpeg DSP Group TrueSpeech decoder
ffmpeg:  ffdec_tta: FFmpeg True Audio (TTA) decoder
ffmpeg:  ffdec_twinvq: FFmpeg VQF TwinVQ decoder
ffmpeg:  ffdec_vmdaudio: FFmpeg Sierra VMD audio decoder
ffmpeg:  ffdec_wmapro: FFmpeg Windows Media Audio 9 Professional decoder
ffmpeg:  ffdec_wmav1: FFmpeg Windows Media Audio 1 decoder
ffmpeg:  ffdec_wmav2: FFmpeg Windows Media Audio 2 decoder
ffmpeg:  ffdec_wmavoice: FFmpeg Windows Media Audio Voice decoder
ffmpeg:  ffdec_ws_snd1: FFmpeg Westwood Audio (SND1) decoder
ffmpeg:  ffdec_pcm_lxf: FFmpeg PCM signed 20-bit little-endian planar decoder
ffmpeg:  ffdec_pcm_s8_planar: FFmpeg PCM signed 8-bit planar decoder
ffmpeg:  ffdec_interplay_dpcm: FFmpeg DPCM Interplay decoder
ffmpeg:  ffdec_roq_dpcm: FFmpeg DPCM id RoQ decoder
ffmpeg:  ffdec_sol_dpcm: FFmpeg DPCM Sol decoder
ffmpeg:  ffdec_xan_dpcm: FFmpeg DPCM Xan decoder
ffmpeg:  ffdec_adpcm_4xm: FFmpeg ADPCM 4X Movie decoder
ffmpeg:  ffdec_adpcm_adx: FFmpeg SEGA CRI ADX ADPCM decoder
ffmpeg:  ffdec_adpcm_ct: FFmpeg ADPCM Creative Technology decoder
ffmpeg:  ffdec_adpcm_ea: FFmpeg ADPCM Electronic Arts decoder
ffmpeg:  ffdec_adpcm_ea_maxis_xa: FFmpeg ADPCM Electronic Arts Maxis CDROM XA decoder
ffmpeg:  ffdec_adpcm_ea_r1: FFmpeg ADPCM Electronic Arts R1 decoder
ffmpeg:  ffdec_adpcm_ea_r2: FFmpeg ADPCM Electronic Arts R2 decoder
ffmpeg:  ffdec_adpcm_ea_r3: FFmpeg ADPCM Electronic Arts R3 decoder
ffmpeg:  ffdec_adpcm_ea_xas: FFmpeg ADPCM Electronic Arts XAS decoder
ffmpeg:  ffdec_g722: FFmpeg G.722 ADPCM decoder
ffmpeg:  ffdec_g726: FFmpeg G.726 ADPCM decoder
ffmpeg:  ffdec_adpcm_ima_amv: FFmpeg ADPCM IMA AMV decoder
ffmpeg:  ffdec_adpcm_ima_dk3: FFmpeg ADPCM IMA Duck DK3 decoder
ffmpeg:  ffdec_adpcm_ima_dk4: FFmpeg ADPCM IMA Duck DK4 decoder
ffmpeg:  ffdec_adpcm_ima_ea_eacs: FFmpeg ADPCM IMA Electronic Arts EACS decoder
ffmpeg:  ffdec_adpcm_ima_ea_sead: FFmpeg ADPCM IMA Electronic Arts SEAD decoder
ffmpeg:  ffdec_adpcm_ima_iss: FFmpeg ADPCM IMA Funcom ISS decoder
ffmpeg:  ffdec_adpcm_ima_qt: FFmpeg ADPCM IMA QuickTime decoder
ffmpeg:  ffdec_adpcm_ima_smjpeg: FFmpeg ADPCM IMA Loki SDL MJPEG decoder
ffmpeg:  ffdec_adpcm_ima_wav: FFmpeg ADPCM IMA WAV decoder
ffmpeg:  ffdec_adpcm_ima_ws: FFmpeg ADPCM IMA Westwood decoder
ffmpeg:  ffdec_adpcm_ms: FFmpeg ADPCM Microsoft decoder
ffmpeg:  ffdec_adpcm_sbpro_2: FFmpeg ADPCM Sound Blaster Pro 2-bit decoder
ffmpeg:  ffdec_adpcm_sbpro_3: FFmpeg ADPCM Sound Blaster Pro 2.6-bit decoder
ffmpeg:  ffdec_adpcm_sbpro_4: FFmpeg ADPCM Sound Blaster Pro 4-bit decoder
ffmpeg:  ffdec_adpcm_swf: FFmpeg ADPCM Shockwave Flash decoder
ffmpeg:  ffdec_adpcm_thp: FFmpeg ADPCM Nintendo Gamecube THP decoder
ffmpeg:  ffdec_adpcm_xa: FFmpeg ADPCM CDROM XA decoder
ffmpeg:  ffdec_adpcm_yamaha: FFmpeg ADPCM Yamaha decoder
ffmpeg:  ffdec_xsub: FFmpeg XSUB decoder
ffmpeg:  ffdemux_aiff: FFmpeg Audio IFF demuxer
ffmpeg:  ffdemux_ape: FFmpeg Monkey's Audio demuxer
ffmpeg:  ffdemux_avs: FFmpeg AVS format demuxer
ffmpeg: fftype_avs: no extensions
ffmpeg:  ffdemux_daud: FFmpeg D-Cinema audio format demuxer
ffmpeg: fftype_daud: 302
ffmpeg:  ffdemux_ea: FFmpeg Electronic Arts Multimedia Format demuxer
ffmpeg: fftype_ea: no extensions
ffmpeg:  ffdemux_ffm: FFmpeg FFM (AVserver live feed) format demuxer
ffmpeg: fftype_ffm: no extensions
ffmpeg:  ffdemux_4xm: FFmpeg 4X Technologies format demuxer
ffmpeg: fftype_4xm: no extensions
ffmpeg:  ffdemux_gxf: FFmpeg GXF format demuxer
ffmpeg: fftype_gxf: no extensions
ffmpeg:  ffdemux_idcin: FFmpeg id Cinematic format demuxer
ffmpeg: fftype_idcin: no extensions
ffmpeg:  ffdemux_ipmovie: FFmpeg Interplay MVE format demuxer
ffmpeg: fftype_ipmovie: no extensions
ffmpeg:  ffdemux_mm: FFmpeg American Laser Games MM format demuxer
ffmpeg: fftype_mm: no extensions
ffmpeg:  ffdemux_mmf: FFmpeg Yamaha SMAF demuxer
ffmpeg: fftype_mmf: no extensions
ffmpeg:  ffdemux_mpc: FFmpeg Musepack demuxer
ffmpeg:  ffdemux_mxf: FFmpeg Material eXchange Format demuxer
ffmpeg:  ffdemux_nsv: FFmpeg Nullsoft Streaming Video demuxer
ffmpeg: fftype_nsv: no extensions
ffmpeg:  ffdemux_nut: FFmpeg NUT format demuxer
ffmpeg: fftype_nut: nut
ffmpeg:  ffdemux_nuv: FFmpeg NuppelVideo format demuxer
ffmpeg:  ffdemux_RoQ: FFmpeg id RoQ format demuxer
ffmpeg: fftype_RoQ: no extensions
ffmpeg:  ffdemux_film_cpk: FFmpeg Sega FILM/CPK format demuxer
ffmpeg: fftype_film_cpk: no extensions
ffmpeg:  ffdemux_smk: FFmpeg Smacker video demuxer
ffmpeg: fftype_smk: no extensions
ffmpeg:  ffdemux_sol: FFmpeg Sierra SOL format demuxer
ffmpeg: fftype_sol: no extensions
ffmpeg:  ffdemux_psxstr: FFmpeg Sony Playstation STR format demuxer
ffmpeg: fftype_psxstr: no extensions
ffmpeg:  ffdemux_swf: FFmpeg Flash format demuxer
ffmpeg:  ffdemux_tta: FFmpeg True Audio demuxer
ffmpeg:  ffdemux_vmd: FFmpeg Sierra VMD format demuxer
ffmpeg: fftype_vmd: no extensions
ffmpeg:  ffdemux_voc: FFmpeg Creative Voice file format demuxer
ffmpeg:  ffdemux_wc3movie: FFmpeg Wing Commander III movie format demuxer
ffmpeg: fftype_wc3movie: no extensions
ffmpeg:  ffdemux_wsaud: FFmpeg Westwood Studios audio format demuxer
ffmpeg: fftype_wsaud: no extensions
ffmpeg:  ffdemux_wsvqa: FFmpeg Westwood Studios VQA format demuxer
ffmpeg: fftype_wsvqa: no extensions
ffmpeg:  ffdemux_yuv4mpegpipe: FFmpeg YUV4MPEG pipe format demuxer
ffmpeg: fftype_yuv4mpegpipe: y4m
ffmpeg:  ffmux_a64: FFmpeg a64 - video for Commodore 64 muxer
ffmpeg:  ffmux_adts: FFmpeg ADTS AAC muxer (not recommended, use aacparse instead)
ffmpeg:  ffmux_adx: FFmpeg CRI ADX muxer
ffmpeg:  ffmux_aiff: FFmpeg Audio IFF muxer (not recommended, use aiffmux instead)
ffmpeg:  ffmux_amr: FFmpeg 3GPP AMR file format muxer
ffmpeg:  ffmux_asf: FFmpeg ASF format muxer (not recommended, use asfmux instead)
ffmpeg:  ffmux_asf_stream: FFmpeg ASF format muxer (not recommended, use asfmux instead)
ffmpeg:  ffmux_au: FFmpeg SUN AU format muxer
ffmpeg:  ffmux_avi: FFmpeg AVI format muxer (not recommended, use avimux instead)
ffmpeg:  ffmux_avm2: FFmpeg Flash 9 (AVM2) format muxer
ffmpeg:  ffmux_daud: FFmpeg D-Cinema audio format muxer
ffmpeg:  ffmux_dv: FFmpeg DV video format muxer
ffmpeg:  ffmux_ffm: FFmpeg FFM (AVserver live feed) format muxer
ffmpeg:  ffmux_filmstrip: FFmpeg Adobe Filmstrip muxer
ffmpeg:  ffmux_flv: FFmpeg FLV format muxer (not recommended, use flvmux instead)
ffmpeg:  ffmux_gxf: FFmpeg GXF format muxer
ffmpeg:  ffmux_ipod: FFmpeg iPod H.264 MP4 format muxer
ffmpeg:  ffmux_ivf: FFmpeg On2 IVF muxer
ffmpeg:  ffmux_latm: FFmpeg LOAS/LATM muxer
ffmpeg:  ffmux_md5: FFmpeg MD5 testing format muxer
ffmpeg:  ffmux_matroska: FFmpeg Matroska file format muxer (not recommended, use matroskamux instead)
ffmpeg:  ffmux_mmf: FFmpeg Yamaha SMAF muxer
ffmpeg:  ffmux_mov: FFmpeg MOV format muxer (not recommended, use qtmux instead)
ffmpeg:  ffmux_mp2: FFmpeg MPEG audio layer 2 formatter (not recommended, use id3v2mux instead)
ffmpeg:  ffmux_mp3: FFmpeg MPEG audio layer 3 formatter (not recommended, use id3v2mux instead)
ffmpeg:  ffmux_mp4: FFmpeg MP4 format muxer (not recommended, use mp4mux instead)
ffmpeg:  ffmux_mpeg: FFmpeg MPEG-1 System format muxer
ffmpeg:  ffmux_vcd: FFmpeg MPEG-1 System format (VCD) muxer
ffmpeg:  ffmux_dvd: FFmpeg MPEG-2 PS format (DVD VOB) muxer
ffmpeg:  ffmux_svcd: FFmpeg MPEG-2 PS format (VOB) muxer
ffmpeg:  ffmux_vob: FFmpeg MPEG-2 PS format (VOB) muxer
ffmpeg:  ffmux_mpegts: FFmpeg MPEG-2 transport stream format muxer (not recommended, use mpegtsmux instead)
ffmpeg:  ffmux_mpjpeg: FFmpeg MIME multipart JPEG format muxer (not recommended, use multipartmux instead)
ffmpeg:  ffmux_mxf: FFmpeg Material eXchange Format muxer (not recommended, use mxfmux instead)
ffmpeg:  ffmux_mxf_d10: FFmpeg Material eXchange Format, D-10 Mapping muxer
ffmpeg:  ffmux_nut: FFmpeg NUT format muxer
ffmpeg:  ffmux_ogg: FFmpeg Ogg muxer (not recommended, use oggmux instead)
ffmpeg:  ffmux_oma: FFmpeg Sony OpenMG audio muxer
ffmpeg:  ffmux_psp: FFmpeg PSP MP4 format muxer
ffmpeg:  ffmux_rm: FFmpeg RealMedia format muxer
ffmpeg:  ffmux_rso: FFmpeg Lego Mindstorms RSO format muxer
ffmpeg:  ffmux_rtsp: FFmpeg RTSP output format muxer
ffmpeg:  ffmux_sap: FFmpeg SAP output format muxer
ffmpeg:  ffmux_segment: FFmpeg segment muxer muxer
ffmpeg:  ffmux_smjpeg: FFmpeg Loki SDL MJPEG muxer
ffmpeg:  ffmux_sox: FFmpeg SoX native format muxer
ffmpeg:  ffmux_spdif: FFmpeg IEC 61937 (used on S/PDIF - IEC958) muxer
ffmpeg:  ffmux_swf: FFmpeg Flash format muxer
ffmpeg:  ffmux_3g2: FFmpeg 3GP2 format muxer
ffmpeg:  ffmux_3gp: FFmpeg 3GP format muxer (not recommended, use gppmux instead)
ffmpeg:  ffmux_rcv: FFmpeg VC-1 test bitstream muxer
ffmpeg:  ffmux_voc: FFmpeg Creative Voice file format muxer
ffmpeg:  ffmux_wav: FFmpeg WAV format muxer (not recommended, use wavenc instead)
ffmpeg:  ffmux_webm: FFmpeg WebM file format muxer (not recommended, use webmmux instead)
ffmpeg:  ffmux_yuv4mpegpipe: FFmpeg YUV4MPEG pipe format muxer (not recommended, use y4menc instead)
ffmpeg:  ffdeinterlace: FFMPEG Deinterlace element
ffmpeg:  ffaudioresample: FFMPEG Audio resampling element
videoparsersbad:  h263parse: H.263 parser
videoparsersbad:  h264parse: H.264 parser
videoparsersbad:  diracparse: Dirac parser
videoparsersbad:  mpegvideoparse: MPEG video elementary stream parser
videoparsersbad:  mpeg4videoparse: MPEG 4 video elementary stream parser
alphacolor:  alphacolor: Alpha color filter
replaygain:  rganalysis: ReplayGain analysis
replaygain:  rglimiter: ReplayGain limiter
replaygain:  rgvolume: ReplayGain volume
rtpvp8:  rtpvp8depay: RTP VP8 depayloader
rtpvp8:  rtpvp8pay: RTP VP8 payloader
flxdec:  flxdec: FLX video decoder
matroska:  matroskademux: Matroska demuxer
matroska:  matroskaparse: Matroska parser
matroska:  matroskamux: Matroska muxer
matroska:  webmmux: WebM muxer
fsrawconference:  fsrawconference: Generic bin
rtp:  rtpdepay: Dummy RTP session manager
rtp:  rtpac3depay: RTP AC3 depayloader
rtp:  rtpac3pay: RTP AC3 audio payloader
rtp:  rtpbvdepay: RTP BroadcomVoice depayloader
rtp:  rtpbvpay: RTP BV Payloader
rtp:  rtpceltdepay: RTP CELT depayloader
rtp:  rtpceltpay: RTP CELT payloader
rtp:  rtpdvdepay: RTP DV Depayloader
rtp:  rtpdvpay: RTP DV Payloader
rtp:  rtpgstdepay: GStreamer depayloader
rtp:  rtpgstpay: RTP GStreamer payloader
rtp:  rtpilbcpay: RTP iLBC Payloader
rtp:  rtpilbcdepay: RTP iLBC depayloader
rtp:  rtpg722depay: RTP audio depayloader
rtp:  rtpg722pay: RTP audio payloader
rtp:  rtpg723depay: RTP G.723 depayloader
rtp:  rtpg723pay: RTP G.723 payloader
rtp:  rtpg726depay: RTP G.726 depayloader
rtp:  rtpg726pay: RTP G.726 payloader
rtp:  rtpg729depay: RTP G.729 depayloader
rtp:  rtpg729pay: RTP G.729 payloader
rtp:  rtpgsmdepay: RTP GSM depayloader
rtp:  rtpgsmpay: RTP GSM payloader
rtp:  rtpamrdepay: RTP AMR depayloader
rtp:  rtpamrpay: RTP AMR payloader
rtp:  rtppcmadepay: RTP PCMA depayloader
rtp:  rtppcmudepay: RTP PCMU depayloader
rtp:  rtppcmupay: RTP PCMU payloader
rtp:  rtppcmapay: RTP PCMA payloader
rtp:  rtpmpadepay: RTP MPEG audio depayloader
rtp:  rtpmpapay: RTP MPEG audio payloader
rtp:  rtpmparobustdepay: RTP MPEG audio depayloader
rtp:  rtpmpvdepay: RTP MPEG video depayloader
rtp:  rtpmpvpay: RTP MPEG2 ES video payloader
rtp:  rtph263ppay: RTP H263 payloader
rtp:  rtph263pdepay: RTP H263 depayloader
rtp:  rtph263depay: RTP H263 depayloader
rtp:  rtph263pay: RTP H263 packet payloader
rtp:  rtph264depay: RTP H264 depayloader
rtp:  rtph264pay: RTP H264 payloader
rtp:  rtpj2kdepay: RTP JPEG 2000 depayloader
rtp:  rtpj2kpay: RTP JPEG 2000 payloader
rtp:  rtpjpegdepay: RTP JPEG depayloader
rtp:  rtpjpegpay: RTP JPEG payloader
rtp:  rtpL16pay: RTP audio payloader
rtp:  rtpL16depay: RTP audio depayloader
rtp:  asteriskh263: RTP Asterisk H263 depayloader
rtp:  rtpmp1sdepay: RTP MPEG1 System Stream depayloader
rtp:  rtpmp2tdepay: RTP MPEG Transport Stream depayloader
rtp:  rtpmp2tpay: RTP MPEG2 Transport Stream payloader
rtp:  rtpmp4vpay: RTP MPEG4 Video payloader
rtp:  rtpmp4vdepay: RTP MPEG4 video depayloader
rtp:  rtpmp4apay: RTP MPEG4 audio payloader
rtp:  rtpmp4adepay: RTP MPEG4 audio depayloader
rtp:  rtpmp4gdepay: RTP MPEG4 ES depayloader
rtp:  rtpmp4gpay: RTP MPEG4 ES payloader
rtp:  rtpqcelpdepay: RTP QCELP depayloader
rtp:  rtpqdm2depay: RTP QDM2 depayloader
rtp:  rtpsirenpay: RTP Payloader for Siren Audio
rtp:  rtpsirendepay: RTP Siren packet depayloader
rtp:  rtpspeexpay: RTP Speex payloader
rtp:  rtpspeexdepay: RTP Speex depayloader
rtp:  rtpsv3vdepay: RTP SVQ3 depayloader
rtp:  rtptheoradepay: RTP Theora depayloader
rtp:  rtptheorapay: RTP Theora payloader
rtp:  rtpvorbisdepay: RTP Vorbis depayloader
rtp:  rtpvorbispay: RTP Vorbis depayloader
rtp:  rtpvrawdepay: RTP Raw Video depayloader
rtp:  rtpvrawpay: RTP Raw Video payloader
goom2k1:  goom2k1: GOOM: what a GOOM! 2k1 edition
removesilence:  removesilence: RemoveSilence
y4mdec:  y4mdec: YUV4MPEG demuxer/decoder
stereo:  stereo: Stereo effect
monoscope:  monoscope: Monoscope
dtmf:  dtmfdetect: DTMF detector element
dtmf:  dtmfsrc: DTMF tone generator
dtmf:  rtpdtmfsrc: RTP DTMF packet generator
dtmf:  rtpdtmfdepay: RTP DTMF packet depayloader
flite:  flitetestsrc: Flite speech test source
rtmp:  rtmpsrc: RTMP Source
rtmp:  rtmpsink: RTMP output sink
jp2k:  jp2kdec: Jasper JPEG2000 image decoder
jp2k:  jp2kenc: Jasper JPEG2000 image encoder
mve:  mvedemux: MVE Demuxer
mve:  mvemux: MVE Multiplexer
jack:  jackaudiosrc: Audio Source (Jack)
jack:  jackaudiosink: Audio Sink (Jack)
vp8:  vp8dec: On2 VP8 Decoder
vp8:  vp8enc: On2 VP8 Encoder
gsm:  gsmenc: GSM audio encoder
gsm:  gsmdec: GSM audio decoder
audiotestsrc:  audiotestsrc: Audio test source
dvb:  dvbsrc: DVB Source
dvb:  dvbbasebin: DVB bin
real:  realvideodec: RealVideo decoder
real:  realaudiodec: RealAudio decoder
cog:  cogdownsample: Scale down video by factor of 2
cog:  cogcolorspace: YCbCr/RGB format conversion
cog:  cogscale: Video scaler
cog:  cogcolorconvert: Convert colorspace
cog:  coglogoinsert: Overlay image onto video
cog:  cogmse: Calculate MSE
encoding:  encodebin: Encoder Bin
audioparsers:  aacparse: AAC audio stream parser
audioparsers:  amrparse: AMR audio stream parser
audioparsers:  ac3parse: AC3 audio stream parser
audioparsers:  dcaparse: DTS Coherent Acoustics audio stream parser
audioparsers:  flacparse: FLAC audio parser
audioparsers:  mpegaudioparse: MPEG1 Audio Parser
voamrwbenc:  voamrwbenc: AMR-WB audio encoder
gdkpixbuf:  gdkpixbufdec: GdkPixbuf image decoder
gdkpixbuf:  gdkpixbufsink: GdkPixbuf sink
gdkpixbuf:  gdkpixbufscale: GdkPixbuf image scaler
bayer:  bayer2rgb: Bayer to RGB decoder for cameras
bayer:  rgb2bayer: RGB to Bayer converter
linsys:  linsyssdisrc: SDI video source
linsys:  linsyssdisink: SDI video sink
aasink:  aasink: ASCII art video sink
musepack:  musepackdec: Musepack decoder
ofa:  ofa: OFA
faad:  faad: AAC audio decoder
scaletempo:  scaletempo: Scaletempo
curl:  curlsink: Curl sink
h264parse:  legacyh264parse: H264Parse
audiovisualizers:  spacescope: Stereo visualizer
audiovisualizers:  spectrascope: Frequency spectrum scope
audiovisualizers:  synaescope: Synaescope
audiovisualizers:  wavescope: Waveform oscilloscope
teletext:  teletextdec: Teletext decoder
audiorate:  audiorate: Audio rate adjuster
gmedec:  gmedec: Gaming console music file decoder
videorate:  videorate: Video rate adjuster
gaudieffects:  burn: Burn
gaudieffects:  chromium: Chromium
gaudieffects:  dilate: Dilate
gaudieffects:  dodge: Dodge
gaudieffects:  exclusion: Exclusion
gaudieffects:  solarize: Solarize
gaudieffects:  gaussianblur: GaussBlur
rsvg:  rsvgoverlay: RSVG overlay
rsvg:  rsvgdec: SVG image decoder
fbdevsink:  fbdevsink: fbdev video sink
fsfunnel:  fsfunnel: Farstream Funnel pipe fitting
videobox:  videobox: Video box filter
rfbsrc:  rfbsrc: Rfb source
videotestsrc:  videotestsrc: Video test source
staticelements:  bin: Generic bin
staticelements:  pipeline: Pipeline object

Total count: 231 plugins (1 blacklist entry not shown), 1116 features

 

 

Gstreamer design documents.

Gstreamer学习list.

 

这是设计者写的原始设计文档,

多读几遍,结合代码来看。

http://cgit.freedesktop.org/gstreamer/gstreamer/tree/docs/design/

 

Size  
-rw-r--r-- Makefile.am 1511 logplain
-rw-r--r-- draft-klass.txt 7466 logplain
-rw-r--r-- draft-metadata.txt 7377 logplain
-rw-r--r-- draft-push-pull.txt 3849 logplain
-rw-r--r-- draft-tagreading.txt 3209 logplain
-rw-r--r-- draft-tracing.txt 3359 logplain
-rw-r--r-- part-MT-refcounting.txt 16570 logplain
-rw-r--r-- part-TODO.txt 3821 logplain
-rw-r--r-- part-activation.txt 4633 logplain
-rw-r--r-- part-buffer.txt 5761 logplain
-rw-r--r-- part-buffering.txt 12660 logplain
-rw-r--r-- part-bufferpool.txt 14984 logplain
-rw-r--r-- part-caps.txt 6201 logplain
-rw-r--r-- part-clocks.txt 3606 logplain
-rw-r--r-- part-context.txt 2507 logplain
-rw-r--r-- part-controller.txt 3098 logplain
-rw-r--r-- part-conventions.txt 2280 logplain
-rw-r--r-- part-dynamic.txt 389 logplain
-rw-r--r-- part-element-sink.txt 7895 logplain
-rw-r--r-- part-element-source.txt 5251 logplain
-rw-r--r-- part-element-transform.txt 13682 logplain
-rw-r--r-- part-events.txt 11775 logplain
-rw-r--r-- part-framestep.txt 10653 logplain
-rw-r--r-- part-gstbin.txt 3918 logplain
-rw-r--r-- part-gstbus.txt 1983 logplain
-rw-r--r-- part-gstelement.txt 2749 logplain
-rw-r--r-- part-gstghostpad.txt 15160 logplain
-rw-r--r-- part-gstobject.txt 3278 logplain
-rw-r--r-- part-gstpipeline.txt 2987 logplain
-rw-r--r-- part-latency.txt 13224 logplain
-rw-r--r-- part-live-source.txt 2129 logplain
-rw-r--r-- part-memory.txt 5848 logplain
-rw-r--r-- part-messages.txt 4706 logplain
-rw-r--r-- part-meta.txt 15672 logplain
-rw-r--r-- part-miniobject.txt 7194 logplain
-rw-r--r-- part-missing-plugins.txt 10964 logplain
-rw-r--r-- part-negotiation.txt 13305 logplain
-rw-r--r-- part-overview.txt 23151 logplain
-rw-r--r-- part-preroll.txt 2071 logplain
-rw-r--r-- part-probes.txt 15208 logplain
-rw-r--r-- part-progress.txt 9716 logplain
-rw-r--r-- part-push-pull.txt 2103 logplain
-rw-r--r-- part-qos.txt 16143 logplain
-rw-r--r-- part-query.txt 2450 logplain
-rw-r--r-- part-relations.txt 14928 logplain
-rw-r--r-- part-scheduling.txt 8610 logplain
-rw-r--r-- part-seeking.txt 10200 logplain
-rw-r--r-- part-segments.txt 4341 logplain
-rw-r--r-- part-sparsestreams.txt 4863 logplain
-rw-r--r-- part-standards.txt 1684 logplain
-rw-r--r-- part-states.txt 15978 logplain
-rw-r--r-- part-stream-status.txt 4248 logplain
-rw-r--r-- part-streams.txt 2688 logplain
-rw-r--r-- part-synchronisation.txt 8304 logplain
-rw-r--r-- part-toc.txt 6104 logplain
-rw-r--r-- part-trickmodes.txt 9172 logplain

 

 

 

 

 

 

 

 

 

 

可见,pipeline的主要布局是elements, Bins 和pads.把上述几个对象继承关系牢记脑海中。PADs是连接器。pipeline的各对象之间的通信通过缓存buffers、事件event、查询query、消息message机制实现, 调度通过时钟clock和队列queue实现。

 

 

 

 

 

 

 

 

 

 

个人阅读顺序:

part-convertions.txt

 

part-overview.txt

初步对gstreamer的设计有个大致的了解。

 

part-gstelement.txt

GstElement 一般是从GstElementFactory中create, 为什么不直接用g_object_new()?

(工厂名,就是插件名, 所以需要加载插件,然后创建对应的Element)

 

GstPad也是从GstObject派生,和GstElement是并行的派生关系,

但是GstPad一般隶属于GstElement.

GstPad是GstElement的property, 在GstElement内部:用几个GList来保存GstPad.

 

part-element-source.txt

 

part-element-sink.txt

sink的设计要被source element复杂一些,都是实际使用的抽象。

现实中,sink就是比source复杂些。

 

 

part-element-transform.txt

根据user case分析内部的运行情况。

 

part-pads.txt 缺失

GstPad和GstPadTemplate是什么关系?

GstPadTemplate就是一个工厂吗?

push/poll模式

chain函数的作用?

part-caps.txt

caps其实是描述媒体类型(media type)的,用GstStructure保存;

caps似附属于gstPads/GstPadTemplate上的。

GstCaps是数据类型。

part-negotiation.txt

caps的negotiation: 规格的协商。

 

 

pipeline的各对象之间的通信通过缓存buffers、事件event、查询query、消息message机制实现, 调度通过时钟clock和队列queue实现。

 

part-buffering.txt

buffering的目的:缓冲数据,使得播放更平顺。

buffer包含由(内存指针,内存大小,时间戳,引用计数等信息)。简单的使用方式是:创建buffer,分配内存,放入数据,传输到后续element,后续element读数据,处理后减去引用计数。更复杂的情况是element就地修改buffer中的内容,而不是分配一个新的buffer。element还写到硬件内存(video-capture src等),bufer还可以是只读的。

 

part-bufferlist.txt

 

 

part-events.txt

Events are objects passed around in parallel to the buffer dataflow to notify elements of various events.
Events are received on pads using the event function. Some events should be interleaved with the data stream so they require taking the STREAM_LOCK, others don't.
Different types of events exist to implement various functionalities.
  GST_EVENT_FLUSH_START:   data is to be discarded
  GST_EVENT_FLUSH_STOP:    data is allowed again
  GST_EVENT_EOS:     no more data is to be expected on a pad. GST_EVENT_NEWSEGMENT:    A new group of buffers with common start time GST_EVENT_TAG:           Stream metadata.
  GST_EVENT_BUFFERSIZE:    Buffer size requirements
  GST_EVENT_QOS:           A notification of the quality of service of the stream GST_EVENT_SEEK:          A seek should be performed to a new position in the stream GST_EVENT_NAVIGATION:    A navigation event.
  GST_EVENT_LATENCY:       Configure the latency in a pipeline
  * GST_EVENT_DRAIN:       Play all data downstream before returning.
* not yet implemented, under investigation, might be needed to do still frames in DVD.

 

Event控制包,可以发送给上/下游element。发送给下游的event统治后续element流状态,是断绝,涮新,流结尾等信息。发送给上游event用在应用交互和event-event交互,用来请求改变流状态,例如seek等。对于应用来说,只有上流event比较重要。下流event仅仅维持一个完整的数据流概念。

 

typedef enum {
  GST_EVENT_UNKNOWN               = GST_EVENT_MAKE_TYPE (0, 0),
  /* bidirectional events */
  GST_EVENT_FLUSH_START           = GST_EVENT_MAKE_TYPE (1, FLAG(BOTH)),
  GST_EVENT_FLUSH_STOP            = GST_EVENT_MAKE_TYPE (2, FLAG(BOTH) | FLAG(SERIALIZED)),
  /* downstream serialized events */
  GST_EVENT_EOS                   = GST_EVENT_MAKE_TYPE (5, FLAG(DOWNSTREAM) | FLAG(SERIALIZED)),
  GST_EVENT_NEWSEGMENT            = GST_EVENT_MAKE_TYPE (6, FLAG(DOWNSTREAM) | FLAG(SERIALIZED)),
  GST_EVENT_TAG                   = GST_EVENT_MAKE_TYPE (7, FLAG(DOWNSTREAM) | FLAG(SERIALIZED)),
  GST_EVENT_BUFFERSIZE            = GST_EVENT_MAKE_TYPE (8, FLAG(DOWNSTREAM) | FLAG(SERIALIZED)),
  GST_EVENT_SINK_MESSAGE          = GST_EVENT_MAKE_TYPE (9, FLAG(DOWNSTREAM) | FLAG(SERIALIZED)),
  /* upstream events */
  GST_EVENT_QOS                   = GST_EVENT_MAKE_TYPE (15, FLAG(UPSTREAM)),
  GST_EVENT_SEEK                  = GST_EVENT_MAKE_TYPE (16, FLAG(UPSTREAM)),
  GST_EVENT_NAVIGATION            = GST_EVENT_MAKE_TYPE (17, FLAG(UPSTREAM)),
  GST_EVENT_LATENCY               = GST_EVENT_MAKE_TYPE (18, FLAG(UPSTREAM)),
  GST_EVENT_STEP                  = GST_EVENT_MAKE_TYPE (19, FLAG(UPSTREAM)),

  /* custom events start here */
  GST_EVENT_CUSTOM_UPSTREAM       = GST_EVENT_MAKE_TYPE (32, FLAG(UPSTREAM)),
  GST_EVENT_CUSTOM_DOWNSTREAM     = GST_EVENT_MAKE_TYPE (32, FLAG(DOWNSTREAM) | FLAG(SERIALIZED)),
  GST_EVENT_CUSTOM_DOWNSTREAM_OOB = GST_EVENT_MAKE_TYPE (32, FLAG(DOWNSTREAM)),
  GST_EVENT_CUSTOM_BOTH           = GST_EVENT_MAKE_TYPE (32, FLAG(BOTH) | FLAG(SERIALIZED)),
  GST_EVENT_CUSTOM_BOTH_OOB       = GST_EVENT_MAKE_TYPE (32, FLAG(BOTH))
} GstEventType;
static GstEventQuarks event_quarks[] = {
  {GST_EVENT_UNKNOWN, "unknown", 0},
  {GST_EVENT_FLUSH_START, "flush-start", 0},
  {GST_EVENT_FLUSH_STOP, "flush-stop", 0},
  {GST_EVENT_EOS, "eos", 0},
  {GST_EVENT_NEWSEGMENT, "newsegment", 0},
  {GST_EVENT_TAG, "tag", 0},
  {GST_EVENT_BUFFERSIZE, "buffersize", 0},
  {GST_EVENT_SINK_MESSAGE, "sink-message", 0},
  {GST_EVENT_QOS, "qos", 0},
  {GST_EVENT_SEEK, "seek", 0},
  {GST_EVENT_NAVIGATION, "navigation", 0},
  {GST_EVENT_LATENCY, "latency", 0},
  {GST_EVENT_STEP, "step", 0},
  {GST_EVENT_CUSTOM_UPSTREAM, "custom-upstream", 0},
  {GST_EVENT_CUSTOM_DOWNSTREAM, "custom-downstream", 0},
  {GST_EVENT_CUSTOM_DOWNSTREAM_OOB, "custom-downstream-oob", 0},
  {GST_EVENT_CUSTOM_BOTH, "custom-both", 0},
  {GST_EVENT_CUSTOM_BOTH_OOB, "custom-both-oob", 0},

  {0, NULL, 0}
};

 

 

part-bus.txt

 

从pipeline线程向应用程序发送发送消息,目的是对应用屏蔽线程的概念。缺省情况下,每个pipeline包含一个bus,所以应用不需要创建bus,仅仅需要在bus上设定一个对象信号处理类似的消息处理。当主循环开始运行后,bus周期性的检查新消息,如果有消息,那么调用注册的回调函数。如果使用glib,那么glib有对应的处理机制,否则使用信号机制。

流过pipeline的数据由buffers和events组成。buffers中是确切的pipeline数据,events中是控制信息,比如seek信息,end-of-stream指示等。src-element通常创建一个新的buffer,通过pad传递到链中的下一个element。

 

Gst各个组件的定义。

Gstreamer学习list.

GObject

  |_____ GstObject

                   |____GstPad

                   |____GstElement

                                 |____GstBin

                                              |___GstPipeline

 |_____GstSignalObject

 

G_DEFINE_ABSTRACT_TYPE (GstObject, gst_object, G_TYPE_OBJECT);

 

G_DEFINE_TYPE (GstSignalObject, gst_signal_object, G_TYPE_OBJECT);

 

G_DEFINE_TYPE_WITH_CODE (GstPad, gst_pad, GST_TYPE_OBJECT, _do_init);

 

G_DEFINE_TYPE (GstPadTemplate, gst_pad_template, GST_TYPE_OBJECT);

 

G_DEFINE_TYPE_WITH_CODE (GstElementFactory, gst_element_factory,
    GST_TYPE_PLUGIN_FEATURE, _do_init);

 

GstElement是显式定义:

GType
gst_element_get_type (void)
{
  static volatile gsize gst_element_type = 0;

  if (g_once_init_enter (&gst_element_type)) {
    GType _type;
    static const GTypeInfo element_info = {
      sizeof (GstElementClass),
      gst_element_base_class_init,
      gst_element_base_class_finalize,
      (GClassInitFunc) gst_element_class_init,
      NULL,
      NULL,
      sizeof (GstElement),
      0,
      (GInstanceInitFunc) gst_element_init,
      NULL
    };

    _type = g_type_register_static (GST_TYPE_OBJECT, "GstElement",
        &element_info, G_TYPE_FLAG_ABSTRACT);

    _gst_elementclass_factory =
        g_quark_from_static_string ("GST_ELEMENTCLASS_FACTORY");
    g_once_init_leave (&gst_element_type, _type);
  }
  return gst_element_type;
}

 

GST_BOILERPLATE_FULL (GstBin, gst_bin, GstElement, GST_TYPE_ELEMENT, _do_init);

 

GST_BOILERPLATE_FULL (GstPipeline, gst_pipeline, GstBin, GST_TYPE_BIN,
    _do_init);

 

GstObject

 |____GstClock

G_DEFINE_TYPE (GstClock, gst_clock, GST_TYPE_OBJECT);

 

GstObject

|____GstTask

G_DEFINE_TYPE_WITH_CODE (GstTask, gst_task, GST_TYPE_OBJECT, _do_init);

GstObject

|____GstTaskPool

G_DEFINE_TYPE_WITH_CODE (GstTaskPool, gst_task_pool, GST_TYPE_OBJECT, _do_init);

 

 

GBoxed

  |____GstCaps

显式定义:

GType
gst_caps_get_type (void)
{
  static GType gst_caps_type = 0;

  if (G_UNLIKELY (gst_caps_type == 0)) {
    gst_caps_type = g_boxed_type_register_static ("GstCaps",
        (GBoxedCopyFunc) gst_caps_copy_conditional,
        (GBoxedFreeFunc) gst_caps_unref);

    g_value_register_transform_func (gst_caps_type,
        G_TYPE_STRING, gst_caps_transform_to_string);
  }

  return gst_caps_type;
}

 

GstMiniObject

 |_____GstEvent

G_DEFINE_TYPE_WITH_CODE (GstEvent, gst_event, GST_TYPE_MINI_OBJECT, _do_init);

 

GstMiniObject

 |_____GstBuffer

G_DEFINE_TYPE_WITH_CODE (GstBuffer, gst_buffer, GST_TYPE_MINI_OBJECT, _do_init);

 

GstMiniObject

|_____GstBufferList

G_DEFINE_TYPE (GstBufferList, gst_buffer_list, GST_TYPE_MINI_OBJECT);

 

 

GType
gst_type_find_get_type (void)
{
  static GType typefind_type = 0;

  if (G_UNLIKELY (typefind_type == 0)) {
    typefind_type = g_pointer_type_register_static ("GstTypeFind");
  }
  return typefind_type;
}

 

GstObject
|____GstPluginFeature

           |_______GstTypeFindFactory

G_DEFINE_TYPE_WITH_CODE (GstTypeFindFactory, gst_type_find_factory,
    GST_TYPE_PLUGIN_FEATURE, _do_init);

 

 

    

Gstreamer学习list.

 

ID Title 简单描述
7 gst-inspect 的使用  
6 Gstreamer design documents. 原始的设计文档, 需要仔细读懂
5 Gst各个组件的定义。  
4 GstBus SubSystem  
3 Gstreamer Objects hierachy.  
2 gst init.  
1 gstreamer的参考资料。  

 

GstBus SubSystem

Gstreamer学习list.

如何查看GType节点,以及父子关系。

 

GstBus: Message+Clock

 

  GstObject GstBus
成员函数

override Gobject的一些:

gobject_class->set_property = gst_object_set_property;
gobject_class->get_property = gst_object_get_property;

gobject_class->dispatch_properties_changed
= GST_DEBUG_FUNCPTR (gst_object_dispatch_properties_changed);

gobject_class->dispose = gst_object_dispose;
gobject_class->finalize = gst_object_finalize;

 

gobject_class->dispose = gst_bus_dispose;
Property "name"  
Signals

"parent-set",it's default handler is NULL?

"parent-unset",it's default handler is NULL?

"object-saved",it's default handler is NULL?

"deep-notify",it's default handler is NULL?

"sync-message",it's default handler is NULL?

"message",it's default handler is NULL?

User register signal handler user可以自己注册上面几个信号的回调: user handler

user可以自己注册上面几个信号的回调: user handler

 

gst_bus_poll()注册了一个回调poll_func for "message"

何时emit signal?

user 调用GstObject的APIs:

gst_object_set_parent()

gst_object_unparent()

gst_object_save_thyself()

gst_bus_post

Quark data - -

 

GstMiniObject 是简化的GObject: 不提供属性;不提供signal.

下面这些都是轻量级的对象(Lightweight objects):

|
 
`GstMiniObject
 
|
 
+GstQuery
 
|
 
+GstMessage
 
|
 
+GstBuffer
 
|
 
+GstEvent
 
|
 
`GstBufferList
 
 
  GstMiniObject GstMessage
成员函数

  mo_class->copy = gst_mini_object_copy_default;
  mo_class->finalize = gst_mini_object_finalize;

override 父类的Methods:

  klass->mini_object_class.copy = (GstMiniObjectCopyFunction) _gst_message_copy;
  klass->mini_object_class.finalize =
      (GstMiniObjectFinalizeFunction) gst_message_finalize;

Quark data - -
 
 
  GstMiniObject GstMessage
成员函数

mo_class->copy = gst_mini_object_copy_default;
mo_class->finalize = gst_mini_object_finalize;

override 父类的Methods:

klass->mini_object_class.copy = (GstMiniObjectCopyFunction) _gst_message_copy;
klass->mini_object_class.finalize =
(GstMiniObjectFinalizeFunction) gst_message_finalize;

Quark data - -
 
 
typedef enum
{
  GST_MESSAGE_UNKNOWN           = 0,
  GST_MESSAGE_EOS               = (1 << 0),
  GST_MESSAGE_ERROR             = (1 << 1),
  GST_MESSAGE_WARNING           = (1 << 2),
  GST_MESSAGE_INFO              = (1 << 3),
  GST_MESSAGE_TAG               = (1 << 4),
  GST_MESSAGE_BUFFERING         = (1 << 5),
  GST_MESSAGE_STATE_CHANGED     = (1 << 6),
  GST_MESSAGE_STATE_DIRTY       = (1 << 7),
  GST_MESSAGE_STEP_DONE         = (1 << 8),
  GST_MESSAGE_CLOCK_PROVIDE     = (1 << 9),
  GST_MESSAGE_CLOCK_LOST        = (1 << 10),
  GST_MESSAGE_NEW_CLOCK         = (1 << 11),
  GST_MESSAGE_STRUCTURE_CHANGE  = (1 << 12),
  GST_MESSAGE_STREAM_STATUS     = (1 << 13),
  GST_MESSAGE_APPLICATION       = (1 << 14),
  GST_MESSAGE_ELEMENT           = (1 << 15),
  GST_MESSAGE_SEGMENT_START     = (1 << 16),
  GST_MESSAGE_SEGMENT_DONE      = (1 << 17),
  GST_MESSAGE_DURATION          = (1 << 18),
  GST_MESSAGE_LATENCY           = (1 << 19),
  GST_MESSAGE_ASYNC_START       = (1 << 20),
  GST_MESSAGE_ASYNC_DONE        = (1 << 21),
  GST_MESSAGE_REQUEST_STATE     = (1 << 22),
  GST_MESSAGE_STEP_START        = (1 << 23),
  GST_MESSAGE_QOS               = (1 << 24),
  GST_MESSAGE_PROGRESS          = (1 << 25),
  GST_MESSAGE_ANY               = ~0
} GstMessageType;
 
typedef enum {
  GST_QUERY_NONE = 0,
  GST_QUERY_POSITION,
  GST_QUERY_DURATION,
  GST_QUERY_LATENCY,
  GST_QUERY_JITTER,     /* not in draft-query, necessary? */
  GST_QUERY_RATE,
  GST_QUERY_SEEKING,
  GST_QUERY_SEGMENT,
  GST_QUERY_CONVERT,
  GST_QUERY_FORMATS,
  GST_QUERY_BUFFERING,
  GST_QUERY_CUSTOM,
  GST_QUERY_URI
} GstQueryType;

 

typedef enum {
  GST_BUFFER_FLAG_READONLY   = GST_MINI_OBJECT_FLAG_READONLY,
  GST_BUFFER_FLAG_MEDIA4     = GST_MINI_OBJECT_FLAG_RESERVED1,
  GST_BUFFER_FLAG_PREROLL    = (GST_MINI_OBJECT_FLAG_LAST << 0),
  GST_BUFFER_FLAG_DISCONT    = (GST_MINI_OBJECT_FLAG_LAST << 1),
  GST_BUFFER_FLAG_IN_CAPS    = (GST_MINI_OBJECT_FLAG_LAST << 2),
  GST_BUFFER_FLAG_GAP        = (GST_MINI_OBJECT_FLAG_LAST << 3),
  GST_BUFFER_FLAG_DELTA_UNIT = (GST_MINI_OBJECT_FLAG_LAST << 4),
  GST_BUFFER_FLAG_MEDIA1     = (GST_MINI_OBJECT_FLAG_LAST << 5),
  GST_BUFFER_FLAG_MEDIA2     = (GST_MINI_OBJECT_FLAG_LAST << 6),
  GST_BUFFER_FLAG_MEDIA3     = (GST_MINI_OBJECT_FLAG_LAST << 7),
  GST_BUFFER_FLAG_LAST       = (GST_MINI_OBJECT_FLAG_LAST << 8)
} GstBufferFlag;

 

typedef enum {
  GST_EVENT_TYPE_UPSTREAM       = 1 << 0,
  GST_EVENT_TYPE_DOWNSTREAM     = 1 << 1,
  GST_EVENT_TYPE_SERIALIZED     = 1 << 2
} GstEventTypeFlags;
typedef enum {
  GST_EVENT_UNKNOWN               = GST_EVENT_MAKE_TYPE (0, 0),
  /* bidirectional events */
  GST_EVENT_FLUSH_START           = GST_EVENT_MAKE_TYPE (1, FLAG(BOTH)),
  GST_EVENT_FLUSH_STOP            = GST_EVENT_MAKE_TYPE (2, FLAG(BOTH) | FLAG(SERIALIZED)),
  /* downstream serialized events */
  GST_EVENT_EOS                   = GST_EVENT_MAKE_TYPE (5, FLAG(DOWNSTREAM) | FLAG(SERIALIZED)),
  GST_EVENT_NEWSEGMENT            = GST_EVENT_MAKE_TYPE (6, FLAG(DOWNSTREAM) | FLAG(SERIALIZED)),
  GST_EVENT_TAG                   = GST_EVENT_MAKE_TYPE (7, FLAG(DOWNSTREAM) | FLAG(SERIALIZED)),
  GST_EVENT_BUFFERSIZE            = GST_EVENT_MAKE_TYPE (8, FLAG(DOWNSTREAM) | FLAG(SERIALIZED)),
  GST_EVENT_SINK_MESSAGE          = GST_EVENT_MAKE_TYPE (9, FLAG(DOWNSTREAM) | FLAG(SERIALIZED)),
  /* upstream events */
  GST_EVENT_QOS                   = GST_EVENT_MAKE_TYPE (15, FLAG(UPSTREAM)),
  GST_EVENT_SEEK                  = GST_EVENT_MAKE_TYPE (16, FLAG(UPSTREAM)),
  GST_EVENT_NAVIGATION            = GST_EVENT_MAKE_TYPE (17, FLAG(UPSTREAM)),
  GST_EVENT_LATENCY               = GST_EVENT_MAKE_TYPE (18, FLAG(UPSTREAM)),
  GST_EVENT_STEP                  = GST_EVENT_MAKE_TYPE (19, FLAG(UPSTREAM)),

  /* custom events start here */
  GST_EVENT_CUSTOM_UPSTREAM       = GST_EVENT_MAKE_TYPE (32, FLAG(UPSTREAM)),
  GST_EVENT_CUSTOM_DOWNSTREAM     = GST_EVENT_MAKE_TYPE (32, FLAG(DOWNSTREAM) | FLAG(SERIALIZED)),
  GST_EVENT_CUSTOM_DOWNSTREAM_OOB = GST_EVENT_MAKE_TYPE (32, FLAG(DOWNSTREAM)),
  GST_EVENT_CUSTOM_BOTH           = GST_EVENT_MAKE_TYPE (32, FLAG(BOTH) | FLAG(SERIALIZED)),
  GST_EVENT_CUSTOM_BOTH_OOB       = GST_EVENT_MAKE_TYPE (32, FLAG(BOTH))
} GstEventType;

 

 

Gstreamer Objects hierachy.

Gstreamer学习list.

如何查看GType节点,以及父子关系。

 

`GObject
  |
  +GstObject
  | |
  | +GstPad
  | |
  | +GstPadTemplate
  | |
  | +GstPluginFeature
  | | |
  | | +GstElementFactory
  | | |
  | | +GstTypeFindFactory
  | | |
  | | `GstIndexFactory
  | |
  | +GstElement
  | | |
  | | `GstBin
  | |   |
  | |   `GstPipeline
  | |
  | +GstBus
  | |
  | +GstTask
  | |
  | +GstTaskPool
  | |
  | +GstClock
  | |
  | +GstPlugin
  | |
  | `GstRegistry
  |
  `GstSignalObject
|
`GstMiniObject
  |
  +GstQuery
  |
  +GstMessage
  |
  +GstBuffer
  |
  +GstEvent
  |
  `GstBufferList

 

 

 GstObject:

/**
 * GstObject:
 * @refcount: unused
 * @lock: object LOCK
 * @name: The name of the object
 * @name_prefix: unused
 * @parent: this object's parent, weak ref
 * @flags: use GST_OBJECT_IS_XXX macros to access the flags
 *
 * GStreamer base object class.
 */
struct _GstObject {
  GObject 	 object;

  /*< public >*/
  gint           refcount;    /* unused (FIXME 0.11: remove) */

  /*< public >*/ /* with LOCK */
  GMutex        *lock;        /* object LOCK */
  gchar         *name;        /* object name */
  gchar         *name_prefix; /* (un)used for debugging (FIXME 0.11: remove) */
  GstObject     *parent;      /* this object's parent, weak ref */
  guint32        flags;

  /*< private >*/
  gpointer _gst_reserved;
};

/**
 * GstObjectClass:
 * @parent_class: parent
 * @path_string_separator: separator used by gst_object_get_path_string()
 * @signal_object: is used to signal to the whole class
 * @lock: class lock to be used with GST_CLASS_GET_LOCK(), GST_CLASS_LOCK(), GST_CLASS_UNLOCK() and others.
 * @parent_set: default signal handler
 * @parent_unset: default signal handler
 * @object_saved: default signal handler
 * @deep_notify: default signal handler
 * @save_thyself: xml serialisation
 * @restore_thyself: xml de-serialisation
 *
 * GStreamer base object class.
 */
struct _GstObjectClass {
  GObjectClass	parent_class;

  const gchar	*path_string_separator;
  GObject	*signal_object;

  /* FIXME-0.11: remove this, plus the above GST_CLASS_*_LOCK macros */
  GStaticRecMutex *lock;

  /* signals */
  /* FIXME-0.11: remove, and pass NULL in g_signal_new(), we never used them */
  void          (*parent_set)       (GstObject * object, GstObject * parent);
  void          (*parent_unset)     (GstObject * object, GstObject * parent);
  /* FIXME 0.11: Remove this, it's deprecated */
  void          (*object_saved)     (GstObject * object, GstXmlNodePtr parent);
  void          (*deep_notify)      (GstObject * object, GstObject * orig, GParamSpec * pspec);

  /*< public >*/
  /* virtual methods for subclasses */
  /* FIXME 0.11: Remove this, it's deprecated */
  GstXmlNodePtr (*save_thyself)     (GstObject * object, GstXmlNodePtr parent);
  void          (*restore_thyself)  (GstObject * object, GstXmlNodePtr self);

  /*< private >*/
  gpointer _gst_reserved[GST_PADDING];
};

 

   GObject GstObject
成员函数   class->constructor = g_object_constructor;
  class->constructed = g_object_constructed;
  class->set_property = g_object_do_set_property;
  class->get_property = g_object_do_get_property;
  class->dispose = g_object_real_dispose;
  class->finalize = g_object_finalize;
  class->dispatch_properties_changed = g_object_dispatch_properties_changed;
  class->notify = NULL;

override Gobject的一些:

  gobject_class->set_property = gst_object_set_property;
  gobject_class->get_property = gst_object_get_property;

  gobject_class->dispatch_properties_changed
      = GST_DEBUG_FUNCPTR (gst_object_dispatch_properties_changed);

  gobject_class->dispose = gst_object_dispose;
  gobject_class->finalize = gst_object_finalize;

 

Property - "name"
Signals "notify" ; default handler: class->notify = NULL;

"parent-set",it's default handler is NULL?

"parent-unset",it's default handler is NULL?

"object-saved",it's default handler is NULL?

"deep-notify",it's default handler is NULL?

User register signal handler  user可以自己注册"notify"的回调: user handler user可以自己注册上面几个信号的回调: user handler
何时emit signal?

user 调用GObject的APIs:

g_object_set()

g_object_notify()

g_object_notify_by_pspec()

user 调用GstObject的APIs:

gst_object_set_parent()

gst_object_unparent()

gst_object_save_thyself()

Quark data

"GObject-closure-array"

"GObject-weak-references"

"GObject-toggle-references"

"GObject-notify-queue"

以及用户自定义的

 

 

GstPad:

/**
 * GstPad:
 * @element_private: private data owned by the parent element
 * @padtemplate: padtemplate for this pad
 * @direction: the direction of the pad, cannot change after creating
 *             the pad.
 * @stream_rec_lock: recursive stream lock of the pad, used to protect
 *                   the data used in streaming.
 * @task: task for this pad if the pad is actively driving dataflow.
 * @preroll_lock: lock used when prerolling
 * @preroll_cond: conf to signal preroll
 * @block_cond: conditional to signal pad block
 * @block_callback: callback for the pad block if any
 * @block_data: user data for @block_callback
 * @caps: the current caps of the pad
 * @getcapsfunc: function to get caps of the pad
 * @setcapsfunc: function to set caps on the pad
 * @acceptcapsfunc: function to check if pad can accept caps
 * @fixatecapsfunc: function to fixate caps
 * @activatefunc: pad activation function
 * @activatepushfunc: function to activate/deactivate pad in push mode
 * @activatepullfunc: function to activate/deactivate pad in pull mode
 * @linkfunc: function called when pad is linked
 * @unlinkfunc: function called when pad is unlinked
 * @peer: the pad this pad is linked to
 * @sched_private: private storage for the scheduler
 * @chainfunc: function to chain buffer to pad
 * @checkgetrangefunc: function to check if pad can operate in pull mode
 * @getrangefunc: function to get a range of data from a pad
 * @eventfunc: function to send an event to a pad
 * @mode: current activation mode of the pad
 * @querytypefunc: get list of supported queries
 * @queryfunc: perform a query on the pad
 * @intlinkfunc: get the internal links of this pad
 * @bufferallocfunc: function to allocate a buffer for this pad
 * @do_buffer_signals: counter counting installed buffer signals
 * @do_event_signals: counter counting installed event signals
 * @iterintlinkfunc: get the internal links iterator of this pad
 * @block_destroy_data: notify function for gst_pad_set_blocked_async_full()
 *
 * The #GstPad structure. Use the functions to update the variables.
 */
struct _GstPad {
  GstObject			object;

  /*< public >*/
  gpointer			element_private;

  GstPadTemplate		*padtemplate;

  GstPadDirection		 direction;

  /*< public >*/ /* with STREAM_LOCK */
  /* streaming rec_lock */
  GStaticRecMutex		*stream_rec_lock;
  GstTask			*task;
  /*< public >*/ /* with PREROLL_LOCK */
  GMutex			*preroll_lock;
  GCond				*preroll_cond;

  /*< public >*/ /* with LOCK */
  /* block cond, mutex is from the object */
  GCond				*block_cond;
  GstPadBlockCallback		 block_callback;
  gpointer			 block_data;

  /* the pad capabilities */
  GstCaps			*caps;
  GstPadGetCapsFunction		getcapsfunc;
  GstPadSetCapsFunction		setcapsfunc;
  GstPadAcceptCapsFunction	 acceptcapsfunc;
  GstPadFixateCapsFunction	 fixatecapsfunc;

  GstPadActivateFunction	 activatefunc;
  GstPadActivateModeFunction	 activatepushfunc;
  GstPadActivateModeFunction	 activatepullfunc;

  /* pad link */
  GstPadLinkFunction		 linkfunc;
  GstPadUnlinkFunction		 unlinkfunc;
  GstPad			*peer;

  gpointer			 sched_private;

  /* data transport functions */
  GstPadChainFunction		 chainfunc;
  GstPadCheckGetRangeFunction	 checkgetrangefunc;
  GstPadGetRangeFunction	 getrangefunc;
  GstPadEventFunction		 eventfunc;

  GstActivateMode		 mode;

  /* generic query method */
  GstPadQueryTypeFunction	 querytypefunc;
  GstPadQueryFunction		 queryfunc;

  /* internal links */
#ifndef GST_DISABLE_DEPRECATED
  GstPadIntLinkFunction		 intlinkfunc;
#else
#ifndef __GTK_DOC_IGNORE__
  gpointer intlinkfunc;
#endif
#endif

  GstPadBufferAllocFunction      bufferallocfunc;

  /* whether to emit signals for have-data. counts number
   * of handlers attached. */
  gint				 do_buffer_signals;
  gint				 do_event_signals;

  /* ABI added */
  /* iterate internal links */
  GstPadIterIntLinkFunction     iterintlinkfunc;

  /* free block_data */
  GDestroyNotify block_destroy_data;

  /*< private >*/
  union {
    struct {
      gboolean                      block_callback_called;
      GstPadPrivate                *priv;
    } ABI;
    gpointer _gst_reserved[GST_PADDING - 2];
  } abidata;
};

struct _GstPadClass {
  GstObjectClass	parent_class;

  /* signal callbacks */
  void		(*linked)		(GstPad *pad, GstPad *peer);
  void		(*unlinked)		(GstPad *pad, GstPad *peer);
  void		(*request_link)		(GstPad *pad);
  gboolean	(*have_data)		(GstPad *pad, GstMiniObject *data);

  /*< private >*/
  gpointer _gst_reserved[GST_PADDING];
};

 

  GObject GstObject GstPad
成员函数  

override Gobject的一些:

gobject_class->set_property = gst_object_set_property;
gobject_class->get_property = gst_object_get_property;

gobject_class->dispatch_properties_changed
= GST_DEBUG_FUNCPTR (gst_object_dispatch_properties_changed);

gobject_class->dispose = gst_object_dispose;
gobject_class->finalize = gst_object_finalize;

 

  gobject_class->dispose = gst_pad_dispose;
  gobject_class->finalize = gst_pad_finalize;
  gobject_class->set_property = gst_pad_set_property;
  gobject_class->get_property = gst_pad_get_property;
Property - "name"

"caps"

"direction"

"template"

enum
{
  PAD_PROP_0,
  PAD_PROP_CAPS,
  PAD_PROP_DIRECTION,
  PAD_PROP_TEMPLATE,
  /* FILL ME */
};

Signals  

"parent-set",it's default handler is NULL?

"parent-unset",it's default handler is NULL?

"object-saved",it's default handler is NULL?

"deep-notify",it's default handler is NULL?

"linked"

"unlinked"

"request-link"

"have-data"

enum
{
  PAD_LINKED,
  PAD_UNLINKED,
  PAD_REQUEST_LINK,
  PAD_HAVE_DATA,
  /* FILL ME */
  LAST_SIGNAL
};
 

User register signal handler   user可以自己注册上面几个信号的回调: user handler  
何时emit signal?

 

user 调用GstObject的APIs:

gst_object_set_parent()

gst_object_unparent()

gst_object_save_thyself()

gst_pad_signals[PAD_LINKED]:

1. gst_pad_link_full()

2. gst_pad_link()

gst_pad_signals[PAD_UNLINKED]:

1. gst_pad_unlink()

gst_pad_signals[PAD_HAVE_DATA]:

1. gst_pad_pull_range()

2. gst_pad_push_event()

3. gst_pad_send_event()

 

 

Quark data

 

  /* quarks for probe signals */
static GQuark buffer_quark;
static GQuark event_quark;

 

GstPadTemplate:

/**
 * GstPadTemplate:
 *
 * The padtemplate object.
 */
struct _GstPadTemplate {
  GstObject	   object;

  gchar           *name_template;
  GstPadDirection  direction;
  GstPadPresence   presence;
  GstCaps	  *caps;

  gpointer _gst_reserved[GST_PADDING];
};

struct _GstPadTemplateClass {
  GstObjectClass   parent_class;

  /* signal callbacks */
  void (*pad_created)	(GstPadTemplate *templ, GstPad *pad);

  gpointer _gst_reserved[GST_PADDING];
};

 

  GObject GstObject GstPadTemplate
成员函数  

override Gobject的一些:

gobject_class->set_property = gst_object_set_property;
gobject_class->get_property = gst_object_get_property;

gobject_class->dispatch_properties_changed
= GST_DEBUG_FUNCPTR (gst_object_dispatch_properties_changed);

gobject_class->dispose = gst_object_dispose;
gobject_class->finalize = gst_object_finalize;

 

  gobject_class->dispose = gst_pad_template_dispose;

  gobject_class->get_property = gst_pad_template_get_property;
  gobject_class->set_property = gst_pad_template_set_property;

Property - "name"

enum
{
  PROP_NAME_TEMPLATE = 1,
  PROP_DIRECTION,
  PROP_PRESENCE,
  PROP_CAPS
};
 

Signals  

"parent-set",it's default handler is NULL?

"parent-unset",it's default handler is NULL?

"object-saved",it's default handler is NULL?

"deep-notify",it's default handler is NULL?

"pad-created"

enum
{
  TEMPL_PAD_CREATED,
  /* FILL ME */
  LAST_SIGNAL
};
 

User register signal handler   user可以自己注册上面几个信号的回调: user handler  
何时emit signal?

 

user 调用GstObject的APIs:

gst_object_set_parent()

gst_object_unparent()

gst_object_save_thyself()

gst_pad_template_signals[TEMPL_PAD_CREATED]:

gst_pad_template_pad_created

 

 

Quark data

 

  /* quarks for probe signals */
static GQuark buffer_quark;
static GQuark event_quark;

 

GstPluginFeature:

/**
 * GstPluginFeature:
 *
 * Opaque #GstPluginFeature structure.
 */
struct _GstPluginFeature {
  GstObject      object;

  /*< private >*/
  gboolean       loaded;
  gchar         *name; /* FIXME-0.11: remove variable, we use GstObject:name */
  guint          rank;

  const gchar   *plugin_name;
  GstPlugin     *plugin;      /* weak ref */

  /*< private >*/
  gpointer _gst_reserved[GST_PADDING - 1];
};

struct _GstPluginFeatureClass {
  GstObjectClass        parent_class;

  /*< private >*/
  gpointer _gst_reserved[GST_PADDING];
};

 

  GObject GstObject GstPluginFeature
成员函数  

override Gobject的一些:

gobject_class->set_property = gst_object_set_property;
gobject_class->get_property = gst_object_get_property;

gobject_class->dispatch_properties_changed
= GST_DEBUG_FUNCPTR (gst_object_dispatch_properties_changed);

gobject_class->dispose = gst_object_dispose;
gobject_class->finalize = gst_object_finalize;

 

G_OBJECT_CLASS (klass)->finalize = gst_plugin_feature_finalize;

Property - "name"

 

Signals  

"parent-set",it's default handler is NULL?

"parent-unset",it's default handler is NULL?

"object-saved",it's default handler is NULL?

"deep-notify",it's default handler is NULL?

 

User register signal handler   user可以自己注册上面几个信号的回调: user handler  
何时emit signal?

 

user 调用GstObject的APIs:

gst_object_set_parent()

gst_object_unparent()

gst_object_save_thyself()

 

 

 

Quark data

 

   

 

GstElementFactory:

/**
 * GstElementFactory:
 *
 * The opaque #GstElementFactory data structure.
 */
struct _GstElementFactory {
  GstPluginFeature      parent;

  GType                 type;                   /* unique GType of element or 0 if not loaded */

  /* FIXME-0.11: deprecate this in favour of meta_data */
  GstElementDetails     details;

  GList *               staticpadtemplates;     /* GstStaticPadTemplate list */
  guint                 numpadtemplates;

  /* URI interface stuff */
  guint                 uri_type;
  gchar **              uri_protocols;

  GList *               interfaces;             /* interface type names this element implements */

  /*< private >*/
  /* FIXME-0.11: move up and replace details */
  gpointer		meta_data;
  gpointer _gst_reserved[GST_PADDING - 1];
};

struct _GstElementFactoryClass {
  GstPluginFeatureClass parent_class;

  gpointer _gst_reserved[GST_PADDING];
};

 

  GObject GstObject GstPluginFeature GstElementFactory
成员函数  

 

 

G_OBJECT_CLASS (klass)->finalize = gst_plugin_feature_finalize;

gobject_class->finalize = gst_element_factory_finalize;
Property    

 

 
Signals  

 

 

 
User register signal handler        
何时emit signal?

 

 

 

 

 

 
Quark data

 

     

 

GstTypeFindFactory:

/**
 * GstTypeFindFactory:
 *
 * Object that stores information about a typefind function.
 */
struct _GstTypeFindFactory {
  GstPluginFeature		feature;
  /* <private> */

  GstTypeFindFunction		function;
  gchar **			extensions;
  GstCaps *			caps; /* FIXME: not yet saved in registry */

  gpointer			user_data;
  GDestroyNotify		user_data_notify;

  gpointer _gst_reserved[GST_PADDING];
};

struct _GstTypeFindFactoryClass {
  GstPluginFeatureClass		parent;
  /* <private> */

  gpointer _gst_reserved[GST_PADDING];
};

 

  GObject GstObject GstPluginFeature GstTypeFindFactory
成员函数  

 

 

G_OBJECT_CLASS (klass)->finalize = gst_plugin_feature_finalize;

object_class->dispose = gst_type_find_factory_dispose;
Property    

 

 
Signals  

 

 

 
User register signal handler        
何时emit signal?

 

 

 

 

 

 
Quark data

 

     

 

GstIndexFactory:

/**
 * GstIndexFactory:
 *
 * The GstIndexFactory object
 */
struct _GstIndexFactory {
  GstPluginFeature feature;

  gchar *longdesc;            /* long description of the index (well, don't overdo it..) */
  GType type;                 /* unique GType of the index */

  gpointer _gst_reserved[GST_PADDING];
};

struct _GstIndexFactoryClass {
  GstPluginFeatureClass parent;

  gpointer _gst_reserved[GST_PADDING];
};

 

  GObject GstObject GstPluginFeature GstIndexFactory
成员函数  

 

 

G_OBJECT_CLASS (klass)->finalize = gst_plugin_feature_finalize;

gobject_class->finalize = gst_index_factory_finalize;

Property    

 

 
Signals  

 

 

 
User register signal handler        
何时emit signal?

 

 

 

 

 

 
Quark data

 

     

 

GstElement:

/**
 * GstElement:
 * @state_lock: Used to serialize execution of gst_element_set_state()
 * @state_cond: Used to signal completion of a state change
 * @state_cookie: Used to detect concurrent execution of
 * gst_element_set_state() and gst_element_get_state()
 * @current_state: the current state of an element
 * @next_state: the next state of an element, can be #GST_STATE_VOID_PENDING if
 * the element is in the correct state.
 * @pending_state: the final state the element should go to, can be
 * #GST_STATE_VOID_PENDING if the element is in the correct state
 * @last_return: the last return value of an element state change
 * @bus: the bus of the element. This bus is provided to the element by the
 * parent element or the application. A #GstPipeline has a bus of its own.
 * @clock: the clock of the element. This clock is usually provided to the
 * element by the toplevel #GstPipeline.
 * @base_time: the time of the clock right before the element is set to
 * PLAYING. Subtracting @base_time from the current clock time in the PLAYING
 * state will yield the running_time against the clock.
 * @numpads: number of pads of the element, includes both source and sink pads.
 * @pads: list of pads
 * @numsrcpads: number of source pads of the element.
 * @srcpads: list of source pads
 * @numsinkpads: number of sink pads of the element.
 * @sinkpads: list of sink pads
 * @pads_cookie: updated whenever the a pad is added or removed
 *
 * GStreamer element abstract base class.
 */
struct _GstElement
{
  GstObject             object;

  /*< public >*/ /* with LOCK */
  GStaticRecMutex      *state_lock;

  /* element state */
  GCond                *state_cond;
  guint32               state_cookie;
  GstState              current_state;
  GstState              next_state;
  GstState              pending_state;
  GstStateChangeReturn  last_return;

  GstBus               *bus;

  /* allocated clock */
  GstClock             *clock;
  GstClockTimeDiff      base_time; /* NULL/READY: 0 - PAUSED: current time - PLAYING: difference to clock */

  /* element pads, these lists can only be iterated while holding
   * the LOCK or checking the cookie after each LOCK. */
  guint16               numpads;
  GList                *pads;
  guint16               numsrcpads;
  GList                *srcpads;
  guint16               numsinkpads;
  GList                *sinkpads;
  guint32               pads_cookie;

  /*< private >*/
  union {
    struct {
      /* state set by application */
      GstState              target_state;
      /* running time of the last PAUSED state */
      GstClockTime          start_time;
    } ABI;
    /* adding + 0 to mark ABI change to be undone later */
    gpointer _gst_reserved[GST_PADDING + 0];
  } abidata;
};

/**
 * GstElementClass:
 * @parent_class: the parent class structure
 * @details: #GstElementDetails for elements of this class
 * @elementfactory: the #GstElementFactory that creates these elements
 * @padtemplates: a #GList of #GstPadTemplate
 * @numpadtemplates: the number of padtemplates
 * @pad_templ_cookie: changed whenever the padtemplates change
 * @request_new_pad: called when a new pad is requested
 * @release_pad: called when a request pad is to be released
 * @get_state: get the state of the element
 * @set_state: set a new state on the element
 * @change_state: called by @set_state to perform an incremental state change
 * @set_bus: set a #GstBus on the element
 * @provide_clock: gets the #GstClock provided by the element
 * @set_clock: set the #GstClock on the element
 * @get_index: set a #GstIndex on the element
 * @set_index: get the #GstIndex of an element
 * @send_event: send a #GstEvent to the element
 * @get_query_types: get the supported #GstQueryType of this element
 * @query: perform a #GstQuery on the element
 * @request_new_pad_full: called when a new pad is requested. Since: 0.10.32.
 * @state_changed: called immediately after a new state was set. Since: 0.10.36.
 *
 * GStreamer element class. Override the vmethods to implement the element
 * functionality.
 */
struct _GstElementClass
{
  GstObjectClass         parent_class;

  /*< public >*/
  /* the element details */
  /* FIXME-0.11: deprecate this in favour of meta_data */
  GstElementDetails      details;

  /* factory that the element was created from */
  GstElementFactory     *elementfactory;

  /* templates for our pads */
  GList                 *padtemplates;
  gint                   numpadtemplates;
  guint32                pad_templ_cookie;

  /*< private >*/
  /* signal callbacks */
  void (*pad_added)     (GstElement *element, GstPad *pad);
  void (*pad_removed)   (GstElement *element, GstPad *pad);
  void (*no_more_pads)  (GstElement *element);

  /*< public >*/
  /* virtual methods for subclasses */

  /* request/release pads */
  GstPad*               (*request_new_pad)      (GstElement *element, GstPadTemplate *templ, const gchar* name);
  void                  (*release_pad)          (GstElement *element, GstPad *pad);

  /* state changes */
  GstStateChangeReturn (*get_state)             (GstElement * element, GstState * state,
                                                 GstState * pending, GstClockTime timeout);
  GstStateChangeReturn (*set_state)             (GstElement *element, GstState state);
  GstStateChangeReturn (*change_state)          (GstElement *element, GstStateChange transition);

  /* bus */
  void                  (*set_bus)              (GstElement * element, GstBus * bus);

  /* set/get clocks */
  GstClock*             (*provide_clock)        (GstElement *element);
  gboolean              (*set_clock)            (GstElement *element, GstClock *clock);

  /* index */
  GstIndex*             (*get_index)            (GstElement *element);
  void                  (*set_index)            (GstElement *element, GstIndex *index);

  /* query functions */
  gboolean              (*send_event)           (GstElement *element, GstEvent *event);

  const GstQueryType*   (*get_query_types)      (GstElement *element);
  gboolean              (*query)                (GstElement *element, GstQuery *query);

  /*< private >*/
  /* FIXME-0.11: move up and replace details */
  gpointer		meta_data;

  /*< public >*/
  /* Virtual method for subclasses (additions) */
  /* FIXME-0.11 Make this the default behaviour */
  GstPad*		(*request_new_pad_full) (GstElement *element, GstPadTemplate *templ,
						 const gchar* name, const GstCaps *caps);

  void                  (*state_changed)        (GstElement *element, GstState oldstate,
                                                 GstState newstate, GstState pending);

  /*< private >*/
  gpointer _gst_reserved[GST_PADDING-3];
};

 

  GObject GstObject GstElement
成员函数  

override Gobject的一些:

gobject_class->set_property = gst_object_set_property;
gobject_class->get_property = gst_object_get_property;

gobject_class->dispatch_properties_changed
= GST_DEBUG_FUNCPTR (gst_object_dispatch_properties_changed);

gobject_class->dispose = gst_object_dispose;
gobject_class->finalize = gst_object_finalize;

 

  gobject_class->dispose = gst_element_dispose;
  gobject_class->finalize = gst_element_finalize;
Property - "name"

 

Signals  

"parent-set",it's default handler is NULL?

"parent-unset",it's default handler is NULL?

"object-saved",it's default handler is NULL?

"deep-notify",it's default handler is NULL?

enum
{
PAD_ADDED,
PAD_REMOVED,
NO_MORE_PADS,
/* add more above */
LAST_SIGNAL
};

User register signal handler   user可以自己注册上面几个信号的回调: user handler  
何时emit signal?

 

user 调用GstObject的APIs:

gst_object_set_parent()

gst_object_unparent()

gst_object_save_thyself()

gst_element_add_pad ()
gst_element_remove_pad()

gst_element_no_more_pads()

 

 

Quark data

 

  _gst_elementclass_factory

 

GstBin:

/**
 * GstBin:
 * @numchildren: the number of children in this bin
 * @children: the list of children in this bin
 * @children_cookie: updated whenever @children changes
 * @child_bus: internal bus for handling child messages
 * @messages: queued and cached messages
 * @polling: the bin is currently calculating its state
 * @state_dirty: the bin needs to recalculate its state (deprecated)
 * @clock_dirty: the bin needs to select a new clock
 * @provided_clock: the last clock selected
 * @clock_provider: the element that provided @provided_clock
 *
 * The GstBin base class. Subclasses can access these fields provided
 * the LOCK is taken.
 */
struct _GstBin {
  GstElement	 element;

  /*< public >*/ /* with LOCK */
  /* our children, subclass are supposed to update these
   * fields to reflect their state with _iterate_*() */
  gint		 numchildren;
  GList		*children;
  guint32	 children_cookie;

  GstBus        *child_bus;
  GList         *messages;

  gboolean	 polling;
  gboolean       state_dirty;

  gboolean       clock_dirty;
  GstClock	*provided_clock;
  GstElement    *clock_provider;

  /*< private >*/
  GstBinPrivate *priv;

  gpointer _gst_reserved[GST_PADDING - 1];
};

/**
 * GstBinClass:
 * @parent_class: bin parent class
 * @add_element: method to add an element to a bin
 * @remove_element: method to remove an element from a bin
 * @handle_message: method to handle a message from the children
 *
 * Subclasses can override the @add_element and @remove_element to
 * update the list of children in the bin.
 *
 * The @handle_message method can be overridden to implement custom
 * message handling.  @handle_message takes ownership of the message, just like
 * #gst_element_post_message.
 */
struct _GstBinClass {
  GstElementClass parent_class;

  /*< private >*/
  GThreadPool  *pool;

  /* signals */
  void		(*element_added)	(GstBin *bin, GstElement *child);
  void		(*element_removed)	(GstBin *bin, GstElement *child);

  /*< public >*/
  /* virtual methods for subclasses */
  gboolean	(*add_element)		(GstBin *bin, GstElement *element);
  gboolean	(*remove_element)	(GstBin *bin, GstElement *element);

  void		(*handle_message)	(GstBin *bin, GstMessage *message);

  /*< private >*/
  /* signal added 0.10.22 */
  gboolean	(*do_latency)           (GstBin *bin);

  /*< private >*/
  gpointer _gst_reserved[GST_PADDING-1];
};

 

  GObject GstObject GstElement GstBin
成员函数  

 

 

gobject_class->dispose = gst_element_dispose;
gobject_class->finalize = gst_element_finalize;
  gobject_class->set_property = gst_bin_set_property;
  gobject_class->get_property = gst_bin_get_property;
Property -  

 

enum
{
  PROP_0,
  PROP_ASYNC_HANDLING,
  PROP_MESSAGE_FORWARD,
  PROP_LAST
};
 
Signals  

 

enum
{
PAD_ADDED,
PAD_REMOVED,
NO_MORE_PADS,
/* add more above */
LAST_SIGNAL
};

enum
{
  ELEMENT_ADDED,
  ELEMENT_REMOVED,
  DO_LATENCY,
  LAST_SIGNAL
};
User register signal handler        
何时emit signal?

 

 

gst_element_add_pad ()
gst_element_remove_pad()

gst_element_no_more_pads()

 

 

  klass->add_element = GST_DEBUG_FUNCPTR (gst_bin_add_func);
  klass->remove_element = GST_DEBUG_FUNCPTR (gst_bin_remove_func);
  klass->handle_message = GST_DEBUG_FUNCPTR (gst_bin_handle_message_func);
Quark data

 

  _gst_elementclass_factory  

 

GstPipeline:

struct _GstPipeline {
  GstBin 	 bin;

  /*< public >*/ /* with LOCK */
  GstClock      *fixed_clock;

  GstClockTime   stream_time;	
  GstClockTime   delay;

  /*< private >*/
  GstPipelinePrivate *priv;

  gpointer _gst_reserved[GST_PADDING-1];
};

struct _GstPipelineClass {
  GstBinClass parent_class;

  /*< private >*/
  gpointer _gst_reserved[GST_PADDING];
};

 

  GObject GstObject GstElement GstBin GstPipeline
成员函数  

 

 

  gobject_class->set_property = gst_bin_set_property;
gobject_class->get_property = gst_bin_get_property;

 override老祖宗:

gobject_class->set_property = gst_pipeline_set_property;
  gobject_class->get_property = gst_pipeline_get_property;

gobject_class->dispose = gst_pipeline_dispose;

 

override父类:

  gstelement_class->change_state =
      GST_DEBUG_FUNCPTR (gst_pipeline_change_state);
  gstelement_class->provide_clock =
      GST_DEBUG_FUNCPTR (gst_pipeline_provide_clock_func);
  gstbin_class->handle_message =
      GST_DEBUG_FUNCPTR (gst_pipeline_handle_message);

Property -  

 

enum
{
PROP_0,
PROP_ASYNC_HANDLING,
PROP_MESSAGE_FORWARD,
PROP_LAST
};
enum
{
  PROP_0,
  PROP_DELAY,
  PROP_AUTO_FLUSH_BUS
};
Signals  

 

 

enum
{
ELEMENT_ADDED,
ELEMENT_REMOVED,
DO_LATENCY,
LAST_SIGNAL
};
 
User register signal handler          
何时emit signal?

 

 

 

 

 

klass->add_element = GST_DEBUG_FUNCPTR (gst_bin_add_func);
klass->remove_element = GST_DEBUG_FUNCPTR (gst_bin_remove_func);
klass->handle_message = GST_DEBUG_FUNCPTR (gst_bin_handle_message_func);
 
Quark data

 

       

 

 

gst init.

Gstreamer学习list.

 

gobject.c中:

static GType gst_signal_object_get_type (void);

其实还有一个宏:

G_DEFINE_ABSTRACT_TYPE (GstObject,gst_object, G_TYPE_OBJECT);

这个宏定义:gtype.h

#define G_DEFINE_ABSTRACT_TYPE(TN, t_n, T_P) G_DEFINE_TYPE_EXTENDED (TN, t_n, T_P, G_TYPE_FLAG_ABSTRACT, {})

#define G_DEFINE_TYPE_EXTENDED(TN, t_n, T_P, _f_, _C_) _G_DEFINE_TYPE_EXTENDED_BEGIN (TN, t_n, T_P, _f_) {_C_;} _G_DEFINE_TYPE_EXTENDED_END()

把宏展开:

#define _G_DEFINE_TYPE_EXTENDED_BEGIN(GstObject, gst_object, G_TYPE_OBJECT, flags) \

\

static void gst_object_init (GstObject *self); \

static void gst_object_class_init (GstObjectClass *klass); \

static gpointer gst_object _parent_class = NULL; \

static void gst_object_class_intern_init (gpointer klass) \

{ \

gst_object_parent_class = g_type_class_peek_parent (klass); \

gst_object_class_init ((GstObject Class*) klass); \

} \

\

GType \

gst_object_get_type (void) \

{ \

static volatile gsize g_define_type_id__volatile = 0; \

if (g_once_init_enter (&g_define_type_id__volatile)) \

{ \

GType g_define_type_id = \

g_type_register_static_simple (G_TYPE_OBJECT, \

g_intern_static_string (“GstObject”), \

sizeof (GstObjectClass), \

(GClassInitFunc)gst_object_class_intern_init, \

sizeof (GstObject), \

(GInstanceInitFunc)gst_object_init, \

(GTypeFlags) flags); \

{ /* custom code follows */

#define _G_DEFINE_TYPE_EXTENDED_END() \

/* following custom code */ \

} \

g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); \

} \

return g_define_type_id__volatile; \

} /* closes gst_object_get_type() */

Gst.c中:

static gboolean

init_post (GOptionContext * context, GOptionGroup * group, gpointer data,

GError ** error)

{

//….

g_type_class_ref (gst_object_get_type ()); //这个是非常重要的,里面执行和很多的东西

这个函数会调用前面定义的函数。

gst_object_get_type()会首先调用:

GType

g_type_register_static_simple (GType parent_type,

const gchar *type_name,

guint class_size,

GClassInitFunc class_init,

guint instance_size,

GInstanceInitFunc instance_init,

GTypeFlags flags)

{

GTypeInfo info;

 

/* Instances are not allowed to be larger than this. If you have a big

* fixed-length array or something, point to it instead.

*/

g_return_val_if_fail (class_size <= G_MAXUINT16, G_TYPE_INVALID);

g_return_val_if_fail (instance_size <= G_MAXUINT16, G_TYPE_INVALID);

 

info.class_size = class_size;

info.base_init = NULL;

info.base_finalize = NULL;

info.class_init = class_init;

info.class_finalize = NULL;

info.class_data = NULL;

info.instance_size = instance_size;

info.n_preallocs = 0;

info.instance_init = instance_init;

info.value_table = NULL;

 

return g_type_register_static (parent_type, type_name, &info, flags);

}

 

//给新类型,分配一块内存;

//和父亲建立联系;

//把定义的新类型的类函数/实例化函数,等都复制过去

GType

g_type_register_static (GType parent_type,

const gchar *type_name,

const GTypeInfo *info,

GTypeFlags flags)

{

TypeNode *pnode, *node;

GType type = 0;

 

g_return_val_if_type_system_uninitialized (0);

g_return_val_if_fail (parent_type > 0, 0);

g_return_val_if_fail (type_name != NULL, 0);

g_return_val_if_fail (info != NULL, 0);

 

if (!check_type_name_I (type_name) ||

!check_derivation_I (parent_type, type_name))

return 0;

if (info->class_finalize)

{

g_warning ("class finalizer specified for static type `%s'",

type_name);

return 0;

}

 

pnode = lookup_type_node_I (parent_type);

G_WRITE_LOCK (&type_rw_lock);

type_data_ref_Wm (pnode);

if (check_type_info_I (pnode, NODE_FUNDAMENTAL_TYPE (pnode), type_name, info))

{

node = type_node_new_W (pnode, type_name, NULL);

type_add_flags_W (node, flags);

type = NODE_TYPE (node);

type_data_make_W (node, info,

check_value_table_I (type_name, info->value_table) ? info->value_table : NULL);

}

G_WRITE_UNLOCK (&type_rw_lock);

 

return type;

}

所以gst_object_get_type(),就是获取一个新类型,并且把定义的一些函数指针赋值过去。

下面看另外一个重要的函数:

g_type_class_ref

gpointer

g_type_class_ref (GType type)

{

TypeNode *node;

GType ptype;

gboolean holds_ref;

GTypeClass *pclass;

 

/* optimize for common code path */

node = lookup_type_node_I (type);

if (!node || !node->is_classed)

{

g_warning ("cannot retrieve class for invalid (unclassed) type `%s'",

type_descriptive_name_I (type));

return NULL;

}

 

if (G_LIKELY (type_data_ref_U (node)))

{

if (G_LIKELY (g_atomic_int_get (&node->data->class.init_state) == INITIALIZED))

return node->data->class.class;

holds_ref = TRUE;

}

else

holds_ref = FALSE;

 

/* here, we either have node->data->class.class == NULL, or a recursive

* call to g_type_class_ref() with a partly initialized class, or

* node->data->class.init_state == INITIALIZED, because any

* concurrently running initialization was guarded by class_init_rec_mutex.

*/

g_rec_mutex_lock (&class_init_rec_mutex); /* required locking order: 1) class_init_rec_mutex, 2) type_rw_lock */

 

/* we need an initialized parent class for initializing derived classes */

ptype = NODE_PARENT_TYPE (node);

pclass = ptype ? g_type_class_ref (ptype) : NULL;//如果父亲的类没有初始化,先递归处理父亲,祖父等的事情

 

G_WRITE_LOCK (&type_rw_lock);

 

if (!holds_ref)

type_data_ref_Wm (node);

 

if (!node->data->class.class) /* class uninitialized */

type_class_init_Wm (node, pclass);//这个地方会调用gst_object_class_init,包括可能递归调用父类的类初始化函数

 

G_WRITE_UNLOCK (&type_rw_lock);

 

if (pclass)

g_type_class_unref (pclass);

 

g_rec_mutex_unlock (&class_init_rec_mutex);

 

return node->data->class.class;

}

 

gstreamer的参考资料。

Gstreamer学习list.

 

Documentation

General

 

document HEAD
Application Development Manual (Read this first) HTML PostScript PDF
Frequently Asked Questions HTML PostScript PDF
Plugin Writer's Guide HTML PostScript PDF
Core Reference HTML
Core Libraries Reference HTML
Core Design Documentation HTML
GStreamer 0.10 to 1.0 porting guide HTML
GStreamer Wiki (see esp. ReleasePlanning and SubmittingPatches) HTML

GStreamer Plugins-Base Module Libraries Reference

 

document HEAD
GStreamer Base Plugins Libraries Reference HTML

Plugin Modules

 

document HEAD
Overview of all Plug-ins HTML
GStreamer Core Plugins Reference HTML
GStreamer Base Plugins Reference HTML
GStreamer Good Plugins Reference HTML
GStreamer Ugly Plugins Reference HTML
GStreamer Bad Plugins Reference HTML
GStreamer OpenGL Plugins Reference HTML
GStreamer Non-Linear Multimedia Editing Plugins Reference HTML

Other modules

 

document HEAD
GStreamer Editing Services Reference HTML
GStreamer RTSP Server Reference HTML
QtGStreamer Reference HTML

 

 

 

1. Gstreamer的中文开发手册

http://wenku.baidu.com/view/41194b35eefdc8d376ee3239.html

 

2. Gstreamer的插件开发手册

http://wenku.baidu.com/view/ffbcc6116c175f0e7cd13734.html

 

3. Gstreamer 编译、安装、测试

http://www.360doc.com/content/12/0416/13/474846_204097848.shtml

http://www.360doc.com/content/12/0416/13/474846_204096042.shtml

http://www.360doc.com/content/12/0416/13/474846_204099329.shtml

http://www.360doc.com/content/12/0428/16/474846_207310882.shtml

 

4. Gstreamer工作原理分析

http://wenku.baidu.com/view/e8565d76a417866fb84a8e7b.html

 

5. Gstreamer Core的理解

http://wenku.baidu.com/view/464fc6728e9951e79b892745.html

 

6. Gstreamer plugin 分析

http://blog.csdn.net/acs713/article/details/7708503

 

7. Gstreamer的一个练习

http://wiki.oz9aec.net/index.php/Gstreamer_cheat_sheet#Video_Wall:_Live_from_Pluto

 

 

图文详解YUV422格式

http://zhongcong386.blog.163.com/blog/static/1347278042013526104349588/?latestBlog