prev_caps = gst_pad_query_caps(src_pad, 0);
MS_SAFE_UNREF(src_pad);
}
- node_plug_s plug_info = {node_klass_type, NULL, prev_caps, NULL};
+ node_plug_s plug_info = {node_klass_type, NULL, prev_caps, NULL, NULL};
/* Create Node by ini or registry */
found_element = ms_node_element_create(&plug_info, node_type);
node_info_s node_info = {MEDIA_STREAMER_PARSER_KLASS, DEFAULT_VIDEO_PARSER};
media_format_mimetype_e encoder_type = MEDIA_FORMAT_MAX;
GstCaps *enc_caps = NULL;
+ gint bitrate = 0;
+ media_format_mimetype_e mime;
+ gchar *encoder_name = NULL;
ms_debug_fenter();
ms_debug("No Video encoding format is set! Default will be: [%s]", MEDIA_STREAMER_DEFAULT_VIDEO_FORMAT);
}
-
/* Creating Video Encoder */
encoder_info.info = ms_node_get_klass_by_its_type(MEDIA_STREAMER_NODE_TYPE_VIDEO_ENCODER);
encoder_info.src_caps = enc_caps;
encoder_info.sink_caps = plug_info->sink_caps;
encoder_info.exclude_names = NULL;
+ encoder_info.out_fmt = plug_info->out_fmt;
+
+ if (encoder_info.out_fmt) {
+ if (!media_format_get_video_info(encoder_info.out_fmt, &mime, NULL, NULL, &bitrate, NULL)) {
+ if (mime & MEDIA_FORMAT_ENCODED) {
+ if (bitrate > 0)
+ ms_info("bitrate[%d] is set by user", bitrate);
+ }
+ }
+ }
encoder_elem = ms_element_create_from_ini(&encoder_info, MEDIA_STREAMER_NODE_TYPE_VIDEO_ENCODER);
if (!encoder_elem)
use_zerocopy = ms_ini_get_boolean("general:use zerocopy", DEFAULT_USE_ZEROCOPY);
if (use_zerocopy) {
ms_info("Video encoder uses zerocopy");
+ if (bitrate > 0) {
+ encoder_name = GST_OBJECT_NAME(encoder_elem);
+ if (g_strrstr(encoder_name, "omx"))
+ g_object_set(G_OBJECT(encoder_elem), "target-bitrate", bitrate, NULL);
+ else if (g_strrstr(encoder_name, "sprd"))
+ g_object_set(G_OBJECT(encoder_elem), "bitrate", bitrate, NULL);
+ }
+
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_GET_CAPS_TYPE(enc_caps, src_type);
encoder_type = ms_convert_video_string_format_to_media_format(src_type);
- if (encoder_type == MEDIA_FORMAT_VP8) {
- /* VP8 does not have parser */
- g_object_set(G_OBJECT(encoder_elem), "deadline", 1, NULL);
+ if (encoder_type == MEDIA_FORMAT_VP8 || encoder_type == MEDIA_FORMAT_VP9) {
+ /* VP8 and VP9 does not have parser */
+ if (bitrate > 0)
+ g_object_set(G_OBJECT(encoder_elem), "target-bitrate", bitrate, NULL);
/* Adding elements to bin Video Encoder */
gst_bin_add_many(GST_BIN(encoder_bin), video_convert, video_scale, encoder_elem, NULL);
}
__ms_add_ghostpad(encoder_elem, "src", encoder_bin, "src");
} else {
+ if (bitrate > 0 && encoder_type == MEDIA_FORMAT_H263)
+ g_object_set(G_OBJECT(encoder_elem), "bitrate", bitrate, NULL);
+
/* Creating Video Parser */
parser_info.info = &node_info;
parser_info.src_caps = enc_caps;
if (!media_format_get_audio_info(fmt, &mime, &channel, &samplerate, NULL, NULL)) {
if (MEDIA_FORMAT_RAW == (mime & MEDIA_FORMAT_RAW)) {
caps = gst_caps_new_simple("audio/x-raw", "format", G_TYPE_STRING, ms_convert_audio_mime_to_string_format(mime), NULL);
- } else if (MEDIA_FORMAT_ENCODED == (mime & MEDIA_FORMAT_ENCODED)) {
+ } else if (mime & MEDIA_FORMAT_ENCODED) {
if (mime == MEDIA_FORMAT_AAC)
caps = gst_caps_new_simple(ms_convert_audio_mime_to_string_format(mime), "mpegversion", G_TYPE_INT, 4, NULL);
else if (mime == MEDIA_FORMAT_MP3)
caps = gst_caps_new_simple("video/x-raw", "framerate", GST_TYPE_FRACTION, frame_rate,
1, "format", G_TYPE_STRING, ms_convert_video_mime_to_string_format(mime, node_name),
"width", G_TYPE_INT, width, "height", G_TYPE_INT, height, NULL);
- else if (MEDIA_FORMAT_ENCODED == (mime & MEDIA_FORMAT_ENCODED))
+ else if (mime & MEDIA_FORMAT_ENCODED)
caps = gst_caps_new_simple(ms_convert_video_mime_to_string_format(mime, node_name), "framerate", GST_TYPE_FRACTION, frame_rate,
1, "width", G_TYPE_INT, width, "height", G_TYPE_INT, height, NULL);
caps_name = gst_caps_to_string(caps);
#define VIDEO_WIDTH 352
#define VIDEO_HIGHT 288
#define VIDEO_FRAME_RATE 30
+#define H263_BITRATE 1024000
#define AUDIO_CHANNEL 1
#define AUDIO_SAMPLERATE 8000
media_format_h vfmt_vp8 = NULL;
media_format_h vfmt_i420 = NULL;
media_format_h vfmt_encoded = NULL;
+media_format_h vfmt_h263 = NULL;
media_format_h vfmt_h264 = NULL;
media_format_h afmt_pcm = NULL;
media_format_h afmt_f32le = NULL;
media_format_set_video_height(vfmt_h264, VIDEO_HIGHT);
media_format_set_video_frame_rate(vfmt_h264, VIDEO_FRAME_RATE);
+ media_format_create(&vfmt_h263);
+ if (media_format_set_video_mime(vfmt_h263, MEDIA_FORMAT_H263) != MEDIA_FORMAT_ERROR_NONE)
+ g_print("media_format_set_video_mime failed!");
+
+ media_format_set_video_width(vfmt_h263, VIDEO_WIDTH);
+ media_format_set_video_height(vfmt_h263, VIDEO_HIGHT);
+ media_format_set_video_frame_rate(vfmt_h263, VIDEO_FRAME_RATE);
+ media_format_set_video_avg_bps(vfmt_h263, H263_BITRATE);
+
/* Define audio raw format */
media_format_create(&afmt_pcm);
if (media_format_set_audio_mime(afmt_pcm, MEDIA_FORMAT_PCM) != MEDIA_FORMAT_ERROR_NONE)
static void display_autoplug_select_menu(void)
{
g_print("\n");
- g_print("Please select Media Streamer pluging mode\n");
+ g_print("Please select Media Streamer plugging mode\n");
g_print("By default will be used [%s] mode\n", g_autoplug_mode == TRUE ? "autoplug" : "manual");
g_print("1. Manual mode \n");
g_print("2. Autoplug mode \n");
g_print("Invalid input. Default autoplug mode will be used\n");
}
- g_print("Selected pluging mode is [%s]\n", g_autoplug_mode == TRUE ? "autoplug" : "manual");
+ g_print("Selected plugging mode is [%s]\n", g_autoplug_mode == TRUE ? "autoplug" : "manual");
if (g_menu_preset & PRESET_RTP_STREAMER)
g_sub_menu_state = SUBMENU_STATE_GETTING_IP;