static void gst_encode_bin_release_pad (GstElement * element, GstPad * pad);
static gint pad_compare_name (GstPad * pad1, const gchar * name);
static gboolean gst_encode_bin_add_element_by_name (GstEncodeBin *encodebin, GstEncodeBinElement type, const gchar *name);
-#if 0 //disable unused function
-static gboolean gst_encode_bin_change_profile(GstEncodeBin *encodebin, gboolean profile);
-static void gst_encode_bin_replace_element (GstEncodeBin *encodebin, gint type, GstElement * newelement);
-static gboolean gst_encode_bin_replace_element_by_name(GstEncodeBin *encodebin, GstEncodeBinElement type, const gchar *name);
-static gboolean gst_encode_bin_replace_element_by_object(GstEncodeBin *encodebin, GstEncodeBinElement type, GstElement * element);
-#endif //disable unused function
static gboolean gst_encode_bin_remove_element (GstEncodeBin *encodebin, GstElement * element);
static gboolean gst_encode_bin_link_elements (GstEncodeBin *encodebin);
static gboolean gst_encode_bin_unlink_elements (GstEncodeBin *encodebin);
return FALSE;
}
-#if 0 //disable unused function
-static gboolean
-gst_encode_bin_change_profile(GstEncodeBin *encodebin, gboolean newprofile)
-{
-
- gst_encode_bin_remove_element(encodebin, encodebin->video_encode);
- gst_encode_bin_remove_element(encodebin, encodebin->audio_encode);
- gst_encode_bin_remove_element(encodebin, encodebin->image_encode);
- gst_encode_bin_remove_element(encodebin, encodebin->mux);
-
- switch (newprofile) {
- case GST_ENCODE_BIN_PROFILE_AV :
- encodebin->audio_encode = gst_element_factory_make (encodebin->aenc_name, "audio_encode");
- encodebin->video_encode = gst_element_factory_make (encodebin->venc_name,"video_encode");
- encodebin->mux = gst_element_factory_make (encodebin->mux_name,"mux");
-
- gst_bin_add_many (GST_BIN (encodebin),
- encodebin->audio_encode,
- encodebin->video_encode,
- encodebin->mux,
- NULL);
- break;
- case GST_ENCODE_BIN_PROFILE_AUDIO :
- encodebin->audio_encode = gst_element_factory_make (encodebin->aenc_name, "audio_encode");
- encodebin->mux = gst_element_factory_make (encodebin->mux_name,"mux");
-
- gst_bin_add_many (GST_BIN (encodebin),
- encodebin->audio_encode,
- encodebin->mux,
- NULL);
- break;
- case GST_ENCODE_BIN_PROFILE_IMAGE :
- encodebin->image_encode = gst_element_factory_make (encodebin->ienc_name,"image_encode");
-
- gst_bin_add_many (GST_BIN (encodebin),
- encodebin->image_encode,
- NULL);
- break;
- default:
- GST_WARNING_OBJECT(encodebin, "Invalid profile number = %d", encodebin->profile);
- return FALSE;
- break;
- }
- return TRUE;
-
-}
-
-static void
-gst_encode_bin_replace_element (GstEncodeBin *encodebin, gint type, GstElement * newelement)
-{
- if(newelement == NULL) {
- GST_ERROR_OBJECT(encodebin, "some elements are null\n");
- return;
- }
- switch(type) {
- case PROP_VIDEO_ENC:
- gst_encode_bin_remove_element(encodebin, encodebin->video_encode);
- encodebin->video_encode = newelement;
- gst_object_ref (encodebin->video_encode);
- gst_object_sink (GST_OBJECT_CAST (encodebin->video_encode)); // take ownership ??
- gst_bin_add(GST_BIN(encodebin), encodebin->video_encode);
- break;
- case PROP_AUDIO_ENC:
- gst_encode_bin_remove_element(encodebin, encodebin->audio_encode);
- encodebin->audio_encode = newelement;
- gst_object_ref (encodebin->audio_encode);
- gst_object_sink (GST_OBJECT_CAST (encodebin->audio_encode));
- gst_bin_add(GST_BIN(encodebin), encodebin->audio_encode);
- break;
- case PROP_IMAGE_ENC:
- gst_encode_bin_remove_element(encodebin, encodebin->image_encode);
- encodebin->image_encode = newelement;
- gst_object_ref (encodebin->image_encode);
- gst_object_sink (GST_OBJECT_CAST (encodebin->image_encode));
- gst_bin_add(GST_BIN(encodebin), encodebin->image_encode);
- break;
- case PROP_MUX:
- gst_encode_bin_remove_element(encodebin, encodebin->mux);
- encodebin->mux = newelement;
- gst_object_ref (encodebin->mux);
- gst_object_sink (GST_OBJECT_CAST (encodebin->mux));
- gst_bin_add(GST_BIN(encodebin), encodebin->mux);
- break;
- default:
- GST_WARNING_OBJECT(encodebin, "Invalid type = %d", type);
- return;
- break;
- }
-}
-
-static gboolean
-gst_encode_bin_replace_element_by_name(GstEncodeBin *encodebin, GstEncodeBinElement type, const gchar *name)
-{
- GstPad *sink1, *sink2, *src, *peersink1, *peersink2, *peersrc;
-
- switch(type) {
- case ENCODEBIN_ELEMENT_VENC:
- if(encodebin->video_encode == NULL) {
- encodebin->video_encode = gst_element_factory_make (name, "video_encode");
- gst_bin_add(GST_BIN(encodebin), encodebin->video_encode);
- } else {
- sink1 = gst_element_get_static_pad(encodebin->video_encode, "sink");
- src = gst_element_get_static_pad(encodebin->video_encode, "src");
- if(sink1 != NULL) {
- peersink1 = gst_pad_get_peer(sink1);
- if(peersink1 != NULL) {
- if(!gst_pad_unlink(peersink1, sink1)) {
- goto unlink_fail;
- }
- }
- }
-
- if(src !=NULL) {
- peersrc = gst_pad_get_peer(src);
- if(peersrc != NULL) {
- if(!gst_pad_unlink(src, peersrc)) {
- goto unlink_fail;
- }
- }
- }
-
- if(gst_encode_bin_remove_element(encodebin, encodebin->video_encode)) {
- if(encodebin->video_encode = gst_element_factory_make (name, "video_encode") != NULL) {
- gst_bin_add(GST_BIN(encodebin), encodebin->video_encode);
- if(peersink1 != NULL) {
- if(!gst_pad_link(peersink1, gst_element_get_pad(encodebin->video_encode, "sink"))) {
- goto link_fail;
- }
- }
-
- if(peersrc != NULL) {
- if(!gst_pad_link(gst_element_get_pad(encodebin->video_encode, "src"), peersrc)) {
- goto link_fail;
- }
- }
- } else {
- GST_ERROR_OBJECT(encodebin, "gst_encode_bin_replace_element_by_name() new element[%d] make fail\n", type);
- return FALSE;
- }
- } else {
- GST_ERROR_OBJECT(encodebin, "gst_encode_bin_replace_element_by_name() old element[%d] remove fail\n", type);
- return FALSE;
- }
- }
- break;
- case ENCODEBIN_ELEMENT_AENC:
- break;
- case ENCODEBIN_ELEMENT_IENC:
- break;
- case ENCODEBIN_ELEMENT_MUX:
- break;
- default :
- GST_WARNING_OBJECT(encodebin, "Invalid element type = %d", type);
- break;
- }
- gst_object_unref(sink1);
- gst_object_unref(sink2);
- gst_object_unref(src);
- gst_object_unref(peersink1);
- gst_object_unref(peersink2);
- gst_object_unref(peersrc);
- return TRUE;
-
-unlink_fail:
- gst_object_unref(sink1);
- gst_object_unref(sink2);
- gst_object_unref(src);
- gst_object_unref(peersink1);
- gst_object_unref(peersink2);
- gst_object_unref(peersrc);
- GST_ERROR_OBJECT(encodebin, "gst_encode_bin_replace_element_by_name() old element[%d] unlink fail\n", type);
- return FALSE;
-
-
-link_fail:
- gst_object_unref(sink1);
- gst_object_unref(sink2);
- gst_object_unref(src);
- gst_object_unref(peersink1);
- gst_object_unref(peersink2);
- gst_object_unref(peersrc);
- GST_ERROR_OBJECT(encodebin, "gst_encode_bin_replace_element_by_name() new element[%d] link fail\n", type);
- return FALSE;
-}
-
-static gboolean
-gst_encode_bin_replace_element_by_object(GstEncodeBin *encodebin, GstEncodeBinElement type, GstElement * element)
-{
- GstPad *sink1, *sink2, *src, *peersink1, *peersink2, *peersrc;
-
- switch(type)
- case ENCODEBIN_ELEMENT_VENC:
- if(encodebin->video_encode == NULL) {
- encodebin->video_encode = element
- }
- break;
- case ENCODEBIN_ELEMENT_AENC:
- break;
- case ENCODEBIN_ELEMENT_IENC:
- break;
- case ENCODEBIN_ELEMENT_MUX:
- break;
- default :
- GST_WARNING_OBJECT (encodebin,"Invalid element type = %d", type);
- break;
-}
-#endif //disable unused function
static gboolean
gst_encode_bin_remove_element (GstEncodeBin *encodebin, GstElement * element)
}
return TRUE;
- }
+}
static gboolean
gst_encode_bin_link_elements (GstEncodeBin *encodebin) // need to return ????