<p>I am developing a muxer plugin,where I use the request_new_pad/release_pad from GstElementClass.&nbsp; 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 ?<br>
&nbsp;<br>The following are the request_new_pad and finalize functions. <br>&nbsp;<br>Regards,<br>&nbsp;<br>Yihe<br>/******************************************************************<br>* gst_tidmaireiszer_request_new_pad<br>*&nbsp;&nbsp;&nbsp; request a new pad<br>
******************************************************************/<br>static GstPad *gst_tidmairesizer_request_new_pad(GstElement * element,<br>&nbsp;GstPadTemplate *templ,const gchar *req_name)<br>{<br>GstTIDmaiResizer *dmairesizer;<br>
GstPad *newpad;<br>GstElementClass *klass = GST_ELEMENT_GET_CLASS(element);<br>gchar *name;<br>&nbsp;if(templ != gst_element_class_get_pad_template(klass,&quot;decimage_%d&quot;))<br>&nbsp;goto wrong_template;<br>&nbsp;dmairesizer = GST_TIDMAIRESIZER(element);&nbsp; <br>
&nbsp;//create new pad<br>&nbsp;name = g_strdup_printf(&quot;decimage_%02d&quot;,dmairesizer-&gt;numpads);<br>&nbsp;newpad = gst_pad_new_from_template(templ,name);<br>&nbsp;g_free(name);<br>&nbsp;GstResizerPad *resizerpad;<br>&nbsp;if(dmairesizer-&gt;numpads &gt;= MAX_INPUT_SUPPORT)<br>
&nbsp;{<br>&nbsp; GST_ERROR(&quot;Over the max input hardware can support\n&quot;);<br>&nbsp; gst_object_unref(newpad);<br>&nbsp; return NULL;<br>&nbsp;}<br>&nbsp;resizerpad = (GstResizerPad *) gst_collect_pads_add_pad(dmairesizer-&gt;collect,newpad,sizeof(GstResizerPad));<br>
&nbsp;resizerpad-&gt;x_start = dmairesizer-&gt;x_start[dmairesizer-&gt;numpads];<br>&nbsp;resizerpad-&gt;y_start = dmairesizer-&gt;y_start[dmairesizer-&gt;numpads];&nbsp; <br>&nbsp;resizerpad-&gt;rsFormat = dmairesizer-&gt;rsFormat[dmairesizer-&gt;numpads];<br>
&nbsp;//save a pointer to our data in the pad<br>// gst_pad_set_element_private(newpad,resizerpad);&nbsp;&nbsp; <br>&nbsp;dmairesizer-&gt;numpads++;&nbsp;&nbsp; <br>&nbsp;GST_LOG(&quot;request new pad %d\n&quot;,dmairesizer-&gt;numpads); <br>&nbsp;//set sink pad caps<br>
&nbsp;gst_pad_set_setcaps_function (newpad,GST_DEBUG_FUNCPTR (gst_tidmairesizer_set_sink_caps));<br>&nbsp;//add pad to element<br>&nbsp;gst_element_add_pad(element,newpad);<br>&nbsp;return newpad;<br>wrong_template:<br>&nbsp;{<br>&nbsp; GST_ERROR(&quot;this is not our template pad!\n&quot;);<br>
&nbsp; return NULL;<br>&nbsp;} <br>}<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>static void gst_tidmairesizer_finalize(GObject *object)<br>{<br>GstTIDmaiResizer *dmairesizer = GST_TIDMAIRESIZER(object);</p>
<p>&nbsp;GST_LOG(&quot;finalizer being\n&quot;);<br>&nbsp;//clean up everything<br>&nbsp;gst_tidmairesizer_exit_video(dmairesizer); <br>&nbsp;GST_LOG(&quot;finalizer begin\n&quot;);<br>&nbsp;if(dmairesizer-&gt;collect)<br>&nbsp;{<br>&nbsp; gst_object_unref(dmairesizer-&gt;collect);<br>
&nbsp; dmairesizer-&gt;collect=NULL;<br>&nbsp;}<br>&nbsp;G_OBJECT_CLASS(parent_class)-&gt;finalize(object);<br>&nbsp;GST_LOG(&quot;finalizer Finish\n&quot;); <br>}</p>