[gst-devel] release_pad in the muxer element

yihe tihpa2004 at gmail.com
Thu Feb 19 19:01:21 CET 2009


I am developing a muxer plugin,where I use the request_new_pad/release_pad
from GstElementClass.  But i never saw the release_pad callback function was
called in my codes thought I did see the finalize(GObjectClass) was called
in the end. I am not quite sure why release_pad was no called. Will it cause
the memory leakage ?

The following are the request_new_pad and finalize functions.

Regards,

Yihe
/******************************************************************
* gst_tidmaireiszer_request_new_pad
*    request a new pad
******************************************************************/
static GstPad *gst_tidmairesizer_request_new_pad(GstElement * element,
 GstPadTemplate *templ,const gchar *req_name)
{
GstTIDmaiResizer *dmairesizer;
GstPad *newpad;
GstElementClass *klass = GST_ELEMENT_GET_CLASS(element);
gchar *name;
 if(templ != gst_element_class_get_pad_template(klass,"decimage_%d"))
 goto wrong_template;
 dmairesizer = GST_TIDMAIRESIZER(element);
 //create new pad
 name = g_strdup_printf("decimage_%02d",dmairesizer->numpads);
 newpad = gst_pad_new_from_template(templ,name);
 g_free(name);
 GstResizerPad *resizerpad;
 if(dmairesizer->numpads >= MAX_INPUT_SUPPORT)
 {
  GST_ERROR("Over the max input hardware can support\n");
  gst_object_unref(newpad);
  return NULL;
 }
 resizerpad = (GstResizerPad *)
gst_collect_pads_add_pad(dmairesizer->collect,newpad,sizeof(GstResizerPad));
 resizerpad->x_start = dmairesizer->x_start[dmairesizer->numpads];
 resizerpad->y_start = dmairesizer->y_start[dmairesizer->numpads];
 resizerpad->rsFormat = dmairesizer->rsFormat[dmairesizer->numpads];
 //save a pointer to our data in the pad
// gst_pad_set_element_private(newpad,resizerpad);
 dmairesizer->numpads++;
 GST_LOG("request new pad %d\n",dmairesizer->numpads);
 //set sink pad caps
 gst_pad_set_setcaps_function (newpad,GST_DEBUG_FUNCPTR
(gst_tidmairesizer_set_sink_caps));
 //add pad to element
 gst_element_add_pad(element,newpad);
 return newpad;
wrong_template:
 {
  GST_ERROR("this is not our template pad!\n");
  return NULL;
 }
}



static void gst_tidmairesizer_finalize(GObject *object)
{
GstTIDmaiResizer *dmairesizer = GST_TIDMAIRESIZER(object);

 GST_LOG("finalizer being\n");
 //clean up everything
 gst_tidmairesizer_exit_video(dmairesizer);
 GST_LOG("finalizer begin\n");
 if(dmairesizer->collect)
 {
  gst_object_unref(dmairesizer->collect);
  dmairesizer->collect=NULL;
 }
 G_OBJECT_CLASS(parent_class)->finalize(object);
 GST_LOG("finalizer Finish\n");
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20090219/2f09cd7b/attachment.htm>


More information about the gstreamer-devel mailing list