Add VP8 encoder for video encoder bin 94/234694/7
authorHyunil <hyunil46.park@samsung.com>
Thu, 28 May 2020 04:46:37 +0000 (13:46 +0900)
committerHyunil <hyunil46.park@samsung.com>
Thu, 28 May 2020 08:26:22 +0000 (17:26 +0900)
- There's no parser for VP8

[Version] 0.1.46
[Issue Type] New feature

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

index 27bf58a..de43d43 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-streamer
 Summary:    A Media Streamer API
-Version:    0.1.45
+Version:    0.1.46
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index 4eadf70..855bb1f 100644 (file)
@@ -1300,45 +1300,61 @@ static GstElement *__ms_video_encoder_element_create(node_plug_s *plug_info)
        if (!encoder_elem)
                encoder_elem = ms_element_create_by_registry(&encoder_info, MEDIA_STREAMER_NODE_TYPE_VIDEO_ENCODER);
 
-       /* Creating Video Parser */
-       parser_info.info = &node_info;
-       parser_info.src_caps = enc_caps;
-       parser_info.sink_caps = enc_caps;
-       parser_info.exclude_names = NULL;
-
-       encoder_parser = ms_element_create_from_ini(&parser_info, MEDIA_STREAMER_NODE_TYPE_PARSER);
-       if (!encoder_parser)
-               encoder_parser = ms_element_create_by_registry(&parser_info, MEDIA_STREAMER_NODE_TYPE_PARSER);
-
        /* Creating bin - Video Encoder */
        encoder_bin = gst_bin_new("video_encoder");
 
-       if (!video_convert || !video_scale || !encoder_elem || !encoder_parser || !encoder_bin) {
-               ms_error("Error: creating elements for video encoder bin");
+       if (!video_convert || !video_scale || !encoder_elem || !encoder_bin) {
                goto ERROR;
        }
 
-       /* Settings if H264 format is set*/
        MS_GET_CAPS_TYPE(enc_caps, src_type);
        encoder_type = ms_convert_string_format_to_media_format(src_type);
-       if (encoder_type == MEDIA_FORMAT_H264_SP) {
-               g_object_set(GST_OBJECT(encoder_parser), "config-interval", H264_PARSER_CONFIG_INTERVAL, NULL);
-               g_object_set(G_OBJECT(encoder_elem), "tune",  H264_ENCODER_ZEROLATENCY, NULL);
-               g_object_set(G_OBJECT(encoder_elem), "byte-stream", TRUE, NULL);
-               g_object_set(G_OBJECT(encoder_elem), "bitrate", 3000, NULL);
-               g_object_set(G_OBJECT(encoder_elem), "threads", 2, NULL);
-       }
 
-       /* Adding elements to bin Video Encoder */
-       gst_bin_add_many(GST_BIN(encoder_bin), video_convert, video_scale, encoder_elem, encoder_parser, NULL);
-       gst_ret = gst_element_link_many(video_convert, video_scale, encoder_elem, encoder_parser, NULL);
-       if (gst_ret != TRUE) {
-               ms_error("Failed to link elements into encoder_bin");
-               MS_SAFE_UNREF(encoder_bin);
-               return NULL;
-       }
+       if (encoder_type == MEDIA_FORMAT_VP8) {
+               /* VP8 does not have parser */
+               g_object_set(G_OBJECT(encoder_elem), "deadline", 1, NULL);
+
+               /* Adding elements to bin Video Encoder */
+               gst_bin_add_many(GST_BIN(encoder_bin), video_convert, video_scale, encoder_elem, NULL);
+               gst_ret = gst_element_link_many(video_convert, video_scale, encoder_elem, NULL);
+               if (gst_ret != TRUE) {
+                       ms_error("Failed to link elements into encoder_bin");
+                       MS_SAFE_UNREF(encoder_bin);
+                       return NULL;
+               }
+               __ms_add_ghostpad(encoder_elem, "src", encoder_bin, "src");
+       } else {
+               /* Creating Video Parser */
+               parser_info.info = &node_info;
+               parser_info.src_caps = enc_caps;
+               parser_info.sink_caps = enc_caps;
+               parser_info.exclude_names = NULL;
+
+               encoder_parser = ms_element_create_from_ini(&parser_info, MEDIA_STREAMER_NODE_TYPE_PARSER);
+               if (!encoder_parser)
+                       encoder_parser = ms_element_create_by_registry(&parser_info, MEDIA_STREAMER_NODE_TYPE_PARSER);
+               if (!encoder_parser)
+                       goto ERROR;
+
+               /* Settings if H264 format is set*/
+               if (encoder_type == MEDIA_FORMAT_H264_SP) {
+                       g_object_set(GST_OBJECT(encoder_parser), "config-interval", H264_PARSER_CONFIG_INTERVAL, NULL);
+                       g_object_set(G_OBJECT(encoder_elem), "tune",  H264_ENCODER_ZEROLATENCY, NULL);
+                       g_object_set(G_OBJECT(encoder_elem), "byte-stream", TRUE, NULL);
+                       g_object_set(G_OBJECT(encoder_elem), "bitrate", 3000, NULL);
+                       g_object_set(G_OBJECT(encoder_elem), "threads", 2, NULL);
+               }
 
-       __ms_add_ghostpad(encoder_parser, "src", encoder_bin, "src");
+               /* Adding elements to bin Video Encoder */
+               gst_bin_add_many(GST_BIN(encoder_bin), video_convert, video_scale, encoder_elem, encoder_parser, NULL);
+               gst_ret = gst_element_link_many(video_convert, video_scale, encoder_elem, encoder_parser, NULL);
+               if (gst_ret != TRUE) {
+                       ms_error("Failed to link elements into encoder_bin");
+                       MS_SAFE_UNREF(encoder_bin);
+                       return NULL;
+               }
+               __ms_add_ghostpad(encoder_parser, "src", encoder_bin, "src");
+       }
        __ms_add_ghostpad(video_convert, "sink", encoder_bin, "sink");
 
        ms_debug_fleave();
@@ -1346,7 +1362,7 @@ static GstElement *__ms_video_encoder_element_create(node_plug_s *plug_info)
        return encoder_bin;
 
 ERROR:
-
+       ms_error("Error: creating elements for video encoder bin");
        MS_SAFE_UNREF(video_convert);
        MS_SAFE_UNREF(video_scale);
        MS_SAFE_UNREF(encoder_elem);