GStreamer学习八(GstElement)

 
GstElement主要功能: 提供状态机,事件总线,时间,衬垫 ,上下文等功能。
 
1、主要数据结构
/**
* GstElement:
* @state_lock: 在gst_element_set_state()使用 锁住状态
* @state_cond: 通知状态变化
* @state_cookie: 被用检测 gst_element_set_state()和gst_element_get_state()调用
* @target_state: 被设置的目标状态
* @current_state: 当前状态
* @next_state: 元件的下一个状态,当未定义情况的值为GST_STATE_VOID_PENDING
* @pending_state: 最终被设置的状态 ,当未定义情况 的值为 GST_STATE_VOID_PENDING
* @last_return:设置状态的返回值
* @bus:元件的GstBus事件总线,由pipeline指定
* @clock: 元件的时钟, 由pipeline指定
* @base_time: 起始时间点
* @start_time: 最近一次PAUSE运行的时间
* @numpads:元件GstPad的数量
* @pads: :元件GstPad的列表
* @numsrcpads: Source 元件GstPad的数量
* @srcpads: Source 元件GstPad的 列表
* @numsinkpads: Sink 元件GstPad的数量
* @sinkpads: Sink 元件GstPad的 列表
* @pads_cookie: 添加或者删除更新cookie值
* @contexts: 上下文列表
*
* GStreamer元件的虚拟基类
*/
struct  _GstElement
{
        GstObject              object;
        /*< public >*/  /* with LOCK */
        GRecMutex              state_lock;
        /* element state */
        GCond                  state_cond;
        guint32                state_cookie;
        GstState               target_state;
        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 */
        GstClockTime           start_time;
        /* 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;
        /* with object LOCK */
        GList                * contexts;
        /*< private >*/
        gpointer  _gst_reserved[ GST_PADDING - 1];
};
 
2、主要函数
/**
* GstElementClass:
* @parent_class: 父类结构体
* @metadata: 这个类元数据
* @elementfactory: 创建元件的工厂类
* @padtemplates: GstPadTemplates的列表
* @numpadtemplates:   GstPadTemplates的数量
* @pad_templ_cookie:检测 GstPadTemplates是否有变化
* @request_new_pad: 创建一个新的请求型GstPad
* @release_pad: 当一个请求型的GstPad被释放调用
* @get_state: 获取元件的状态
* @set_state: 设置 元件的状态
* @change_state:  set_state会被同时调用
* @set_bus: 设置事件总线
* @provide_clock: 获取时钟
* @set_clock: 设置时钟
* @send_event: 发送事件给元件调用函数
* @query: 发送query给元件调用函数
* @state_changed: 一个新的状态时被调用
* @post_message:发送一个消息时被调用.并 链接到父类的处理程序,以将其发布在总线上。
* @set_context: 设置一个上下文时被调用
*
* GStreamer element class. Override the vmethods to implement the element
* functionality.
*/
struct  _GstElementClass
{
        GstObjectClass          parent_class;
        /*< public >*/
        /* the element metadata */
        gpointer               metadata;
        /* 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 * elementGstPad * pad);
        void(* pad_removed)   ( GstElement * elementGstPad * pad);
        void(* no_more_pads)  ( GstElement * element);
        /*< public >*/
        /* virtual methods for subclasses */
        /* request/release pads */
        /* FIXME 2.0 harmonize naming with gst_element_request_pad */
        GstPad*               (* request_new_pad)      ( GstElement * elementGstPadTemplate * templ,
               const  gcharnameconst  GstCaps * caps);
        void(* release_pad)          ( GstElement * elementGstPad * pad);
        /* state changes */
        GstStateChangeReturn(* get_state)             ( GstElement *  elementGstState *  state,
               GstState *  pendingGstClockTime  timeout);
        GstStateChangeReturn(* set_state)             ( GstElement * elementGstState  state);
        GstStateChangeReturn(* change_state)          ( GstElement * elementGstStateChange  transition);
        void(* state_changed)         ( GstElement * elementGstState  oldstate,
               GstState  newstateGstState  pending);
        /* bus */
        void(* set_bus)              ( GstElement *  elementGstBus *  bus);
        /* set/get clocks */
        GstClock*             (* provide_clock)        ( GstElement * element);
        gboolean(* set_clock)            ( GstElement * elementGstClock * clock);
        /* query functions */
        gboolean(* send_event)           ( GstElement * elementGstEvent * event);
        gboolean(* query)                ( GstElement * elementGstQuery * query);
        gboolean(* post_message)         ( GstElement * elementGstMessage * message);
        void(* set_context)          ( GstElement * elementGstContext * context);
        /*< private >*/
        gpointer  _gst_reserved[ GST_PADDING_LARGE - 2];
};
类的基本函数
gst_element_class_init()
gst_element_init()
gst_element_base_class_init()
gst_element_constructed()
gst_element_dispose()
gst_element_finalize()
 
扩展函数
gst_element_change_state_func()
gst_element_get_state_func()
gst_element_set_state_func()
gst_element_set_clock_func()
gst_element_set_bus_func()
gst_element_post_message_default()
gst_element_set_context_default()
gst_element_default_send_event()
gst_element_default_query()
gst_element_class_get_request_pad_template()
gst_element_call_async_func()
GStreamer学习八(GstElement)_第1张图片
 
 
3、重要函数解析
3.1、默认的发送事件的函数 gst_element_send_event()
GStreamer学习八(GstElement)_第2张图片
 
 
3.2、默认的查询函数 gst_element_query()
GStreamer学习八(GstElement)_第3张图片
 
3.3、往总线BUS发送事件 gst_element_post_message()
GStreamer学习八(GstElement)_第4张图片

你可能感兴趣的:(GStreamer)