0
点赞
收藏
分享

微信扫一扫

[GStreamer] 插件编写 —— source element


Reference : 


源码(finish me):

obtsrc.h

#pragma once

#include <gst/gst.h>
#include <gst/gstbasesrc.h>

#define VERSION 1.0
#define PACKAGE "obtplugin"

G_BEGIN_DECLS

typedef struct _GstObtSrc GstObtSrc;
typedef struct _GstObtSrcClass GstObtSrcClass;
typedef struct _GstObtSrcPrivate GstObtSrcPrivate; //every element instance has it's own private data


/***************************************

instance stuct

***************************************/
struct _GstObtSrc
{
//parent (every element has a parent instance struct instance in it's instance struct)
GstBaseSrc element;

//pubic member vars
gboolean b_working; //work state

//private member vars
GstObtSrcPrivate s_priv;
};



/***************************************

class struct

***************************************/
struct _GstObtSrcClass
{
//parent class (class struct has a parent class struct instance int it's class struct)
GstBaseSrcClass parent_class;

//class meta vars
gchar* s_desc;

};



/***************************************

declare GType

***************************************/
GType gst_obt_src_get_type(void);



/***************************************

boilerplate MACROs

note:every GType has two structs, instance struct and class struct , following macros' input arg are
related struct pointer seperatly, eg. arg of GST_OBT_SRC should be a instance struct pointer,
meanwhile, arg of GST_OBT_SRC_CLASS should be a class struct pointer. If pointer type is mismatch,
MACROS return null represent error arg.

***************************************/
#define GST_TYPE_OBT_SRC (gst_obt_src_get_type())

//if ptr_obj point to a instance of GST_TYPE_OBT_SRC, cast ptr_obj to GstObtSrc* and return , otherwise return null
#define GST_OBT_SRC(ptr_obj) \
(G_TYPE_CHECK_INSTANCE_CAST((ptr_obj),GST_TYPE_OBT_SRC,GstObtSrc))

//if ptr_class point to a instance of GST_TYPE_OBT_SRC, cast ptr_obj to GstObtSrcClass* and return , otherwise return null , ptr_class is a class struct pointer
#define GST_OBT_SRC_CLASS(ptr_class) \
(G_TYPE_CHECK_CLASS_CAST((ptr_class),GST_TYPE_OBT_SRC,GstObtSrcClass))

//if ptr_obj point to a instance of GST_TYPE_OBT_SRC, return true , otherwise return false , ptr_obj is a instance struct pointer
#define GST_IS_OBT_SRC(ptr_obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((ptr_obj),GST_TYPE_OBT_SRC))

//if ptr_class point to a instance of GST_TYPE_OBT_SRC, return ture , otherwise return false, ptr_class is a class struct pointer
#define GST_IS_OBT_SRC_CLASS(ptr_obj) \
(G_TYPE_CHECK_CLASS_TYPE((ptr_obj),GST_TYPE_OBT_SRC))





G_END_DECLS

obtsrc.c

#include "ObtSrc.h"
#include <gst/gst.h>

static gboolean gst_obt_src_event_process(GstPad* recvpad/*pad received event*/, GstObject* parentofpad/*element that own #recvpad */, GstEvent* event);


#define gst_obt_src_parent_class parent_class

struct _GstObtSrcPrivate
{
gboolean b_reserv;
};


/***************************************** boilerplate Funcs [START] *****************************************/

static gboolean gst_obt_src_event(GstPad* recvpad/*pad received event*/, GstObject* parentofpad/*element that own #recvpad */, GstEvent* event)
{
gboolean ret = TRUE;
ret = gst_obt_src_event_process();
if(ret){
ret = gst_pad_event_default(pad,parent,event);
}else{
return ret;
}
}

static GstStateChangeReturn gst_obt_src_state_changed(GstElement* element, GstStateChange transition)
{
GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;

ret = GST_ELEMENT_CLASS(parent_class)->change_state(element,transition);
if (ret == GST_STATE_CHANGE_FAILURE)
return ret;
}

static void gst_obt_src_init(GstObtSrc* ptr_obj)
{

}

static void gst_obt_src_class_init(GstObtSrcClass* ptr_class)
{

}

/***************************************** boilerplate Funcs [END] *****************************************/

static gboolean gst_obt_src_event_process(GstPad* recvpad/*pad received event*/, GstObject* parentofpad/*element that own #recvpad */, GstEvent* event)
{
GstObtSrc* src = GST_OBT_SRC(parentofpad);

switch (GST_EVENT_TYPE(event)) {
case GST_EVENT_CAPS:
//do something
break;
case GST_EVENT_EOS:
//do something
break;
//case ....
//....
default:
//do something
break;
}

return true;
}

/***************************************** Local Funcs [START] *****************************************/

gchar*

/***************************************** Local Funcs [END] *****************************************/

举报

相关推荐

0 条评论