Apply zero copy to video encoder 72/238472/4
authorHyunil <hyunil46.park@samsung.com>
Tue, 14 Jul 2020 07:38:18 +0000 (16:38 +0900)
committerHyunil <hyunil46.park@samsung.com>
Wed, 15 Jul 2020 01:23:50 +0000 (10:23 +0900)
- If use zerocopy is set, incoming video is pushed to encoder directly.
- Zero copy formats(SN12, SN21 and etc) are also used.

[Version] 0.1.94
[Issue Type] Improvement

Change-Id: Ic6426f943e7c059ba95fe402ed8a0d777efa095a
Signed-off-by: Hyunil <hyunil46.park@samsung.com>
packaging/capi-media-streamer.spec
src/media_streamer_gst.c

index b1bffa2..4595b48 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-streamer
 Summary:    A Media Streamer API
-Version:    0.1.93
+Version:    0.1.94
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index 8e5c468..6ea7223 100644 (file)
@@ -1345,6 +1345,7 @@ static GstElement *__ms_video_encoder_element_create(node_plug_s *plug_info)
        GstElement *encoder_parser = NULL;
        GstElement *encoder_bin = NULL;
        gboolean gst_ret = FALSE;
+       gboolean use_zerocopy = FALSE;
        const gchar *src_type = NULL;
        node_plug_s encoder_info = {0,};
        node_plug_s parser_info = {0,};
@@ -1362,9 +1363,6 @@ static GstElement *__ms_video_encoder_element_create(node_plug_s *plug_info)
                ms_debug("No Video encoding format is set! Default will be: [%s]", MEDIA_STREAMER_DEFAULT_VIDEO_FORMAT);
        }
 
-       /* Creating Scaler, Converter */
-       video_scale = ms_element_create(DEFAULT_VIDEO_SCALE, NULL);
-       video_convert = ms_element_create(DEFAULT_VIDEO_CONVERT, NULL);
 
        /* Creating Video Encoder */
        encoder_info.info = ms_node_get_klass_by_its_type(MEDIA_STREAMER_NODE_TYPE_VIDEO_ENCODER);
@@ -1379,7 +1377,25 @@ static GstElement *__ms_video_encoder_element_create(node_plug_s *plug_info)
        /* Creating bin - Video Encoder */
        encoder_bin = gst_bin_new("video_encoder");
 
-       if (!video_convert || !video_scale || !encoder_elem || !encoder_bin) {
+       if (!encoder_elem || !encoder_bin)
+               goto ERROR;
+
+       use_zerocopy = ms_ini_get_boolean("general:use zerocopy", DEFAULT_USE_ZEROCOPY);
+       if (use_zerocopy) {
+               ms_info("Video encoder uses zerocopy");
+               gst_bin_add(GST_BIN(encoder_bin), encoder_elem);
+               __ms_add_ghostpad(encoder_elem, "src", encoder_bin, "src");
+               __ms_add_ghostpad(encoder_elem, "sink", encoder_bin, "sink");
+
+               ms_debug_fleave();
+               return encoder_bin;
+       }
+
+       /* Creating Scaler, Converter */
+       video_scale = ms_element_create(DEFAULT_VIDEO_SCALE, NULL);
+       video_convert = ms_element_create(DEFAULT_VIDEO_CONVERT, NULL);
+
+       if (!video_convert || !video_scale) {
                goto ERROR;
        }