From: Teemu Katajisto Date: Tue, 21 Sep 2010 13:23:47 +0000 (+0300) Subject: examples: camerabin: add support for setting many post-processing elements X-Git-Tag: RELEASE-0.11.1~480 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4503a85d54878bfe12bcfc8c1e7b83136e7bc24c;p=platform%2Fupstream%2Fgst-plugins-bad.git examples: camerabin: add support for setting many post-processing elements Instead of taking a single element as input for the image post processing option, take a list of comma separated elements that will be used. --- diff --git a/tests/examples/camerabin/gst-camerabin-test.c b/tests/examples/camerabin/gst-camerabin-test.c index b91d486..d52d1f6 100644 --- a/tests/examples/camerabin/gst-camerabin-test.c +++ b/tests/examples/camerabin/gst-camerabin-test.c @@ -392,6 +392,50 @@ create_audioencoder_bin (void) return bin; } +static GstElement * +create_ipp_bin (void) +{ + GstElement *bin = NULL, *element = NULL; + GstPad *pad = NULL; + gchar **elements; + GList *element_list = NULL, *current = NULL, *next = NULL; + int i; + + bin = gst_bin_new ("ippbin"); + + elements = g_strsplit (imagepp_name, ",", 0); + + for (i = 0; elements[i] != NULL; i++) { + element = gst_element_factory_make (elements[i], NULL); + if (element) { + element_list = g_list_append (element_list, element); + gst_bin_add (GST_BIN (bin), element); + } else + GST_WARNING ("Could create element %s for ippbin", elements[i]); + } + + for (i = 1; i < g_list_length (element_list); i++) { + current = g_list_nth (element_list, i - 1); + next = g_list_nth (element_list, i); + gst_element_link (current->data, next->data); + } + + current = g_list_first (element_list); + pad = gst_element_get_static_pad (current->data, "sink"); + gst_element_add_pad (bin, gst_ghost_pad_new ("sink", pad)); + gst_object_unref (GST_OBJECT (pad)); + + current = g_list_last (element_list); + pad = gst_element_get_static_pad (current->data, "src"); + gst_element_add_pad (bin, gst_ghost_pad_new ("src", pad)); + gst_object_unref (GST_OBJECT (pad)); + + g_list_free (element_list); + g_strfreev (elements); + + return bin; +} + static gboolean setup_pipeline (void) { @@ -432,9 +476,16 @@ setup_pipeline (void) GST_WARNING ("Could not make audio encoder element"); } + if (imagepp_name) { + ipp = create_ipp_bin (); + if (ipp) + g_object_set (camera_bin, "image-post-processing", ipp, NULL); + else + GST_WARNING ("Could not create ipp elements"); + } + res &= setup_pipeline_element ("video-encoder", videoenc_name, NULL); res &= setup_pipeline_element ("image-encoder", imageenc_name, &ienc); - res &= setup_pipeline_element ("image-post-processing", imagepp_name, &ipp); res &= setup_pipeline_element ("video-muxer", videomux_name, &vmux); if (!res) { goto error; @@ -656,7 +707,7 @@ main (int argc, char *argv[]) {"image-enc", '\0', 0, G_OPTION_ARG_STRING, &imageenc_name, "Image encoder used in still capture", NULL}, {"image-pp", '\0', 0, G_OPTION_ARG_STRING, &imagepp_name, - "Image post-processing element", NULL}, + "List of image post-processing elements separated with comma", NULL}, {"video-mux", '\0', 0, G_OPTION_ARG_STRING, &videomux_name, "Muxer used in video recording", NULL}, {"viewfinder-sink", '\0', 0, G_OPTION_ARG_STRING, &vfsink_name,