From: Hyunil Date: Thu, 28 May 2020 04:46:37 +0000 (+0900) Subject: Add VP8 encoder for video encoder bin X-Git-Tag: submit/tizen/20200714.065000~47 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F94%2F234694%2F7;p=platform%2Fcore%2Fapi%2Fmediastreamer.git Add VP8 encoder for video encoder bin - There's no parser for VP8 [Version] 0.1.46 [Issue Type] New feature Change-Id: I5e859b937aab400feb1d5a262447cde1f9155502 Signed-off-by: Hyunil --- diff --git a/packaging/capi-media-streamer.spec b/packaging/capi-media-streamer.spec index 27bf58a..de43d43 100644 --- a/packaging/capi-media-streamer.spec +++ b/packaging/capi-media-streamer.spec @@ -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 diff --git a/src/media_streamer_gst.c b/src/media_streamer_gst.c index 4eadf70..855bb1f 100644 --- a/src/media_streamer_gst.c +++ b/src/media_streamer_gst.c @@ -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);