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();
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);