int ret = MC_ERROR_NONE;
int num_supported_codec = 0;
int i = 0;
- int bitrate = 0;
bool video;
bool encoder;
bool hardware;
g_object_set(new_core->capsfilter, "caps", caps, NULL);
gst_caps_unref(caps);
- if (new_core->encoder) {
- if (new_core->video)
- bitrate = mc_handle->info.video.bitrate;
- else
- bitrate = mc_handle->info.audio.bitrate;
-
- LOGI("set encoder bitrate[property:%s,v:%d] %d",
- new_core->codec_type->property->bitrate_name, new_core->video, bitrate);
-
- g_object_set(new_core->codec,
- new_core->codec_type->property->bitrate_name, bitrate,
- NULL);
- }
-
- for (i = 0 ; i < new_core->codec_type->property->ext_num ; i++) {
- LOGI("set property [%s] -> [%s]",
- new_core->codec_type->property->ext_name[i],
- new_core->codec_type->property->ext_value[i]);
-
- gst_util_set_object_arg((GObject *)new_core->codec,
- new_core->codec_type->property->ext_name[i],
- new_core->codec_type->property->ext_value[i]);
- }
-
_mc_gst_feed_task_new(new_core);
mc_handle->core = new_core;
mc_ret_e _mc_gst_create_pipeline(mc_gst_core_t *core, const gchar *factory_name)
{
+ int i = 0;
+ int bitrate = 0;
GstBus *bus = NULL;
MEDIACODEC_FENTER();
g_mutex_lock(&core->prepare_lock);
- if (core->prepare_count == 0) {
+ if (core->prepare_count == 0) {
if (!__mc_gst_init_gstreamer()) {
LOGE("gstreamer initialize fail");
g_mutex_unlock(&core->prepare_lock);
return MC_NOT_INITIALIZED;
}
- core->codec = gst_element_factory_make(factory_name, NULL);
+ core->codec = gst_element_factory_make(factory_name, NULL);
if (!core->codec) {
LOGE("codec element create fail");
goto ERROR;
/* create common elements */
core->pipeline = gst_pipeline_new(NULL);
-
if (!core->pipeline) {
LOGE("pipeline create fail");
goto ERROR;
}
core->appsrc = gst_element_factory_make("appsrc", NULL);
-
if (!core->appsrc) {
LOGE("appsrc can't create");
goto ERROR;
}
core->capsfilter = gst_element_factory_make("capsfilter", NULL);
-
if (!core->capsfilter) {
LOGE("capsfilter can't create");
goto ERROR;
}
core->fakesink = gst_element_factory_make("fakesink", NULL);
-
if (!core->fakesink) {
LOGE("fakesink create fail");
goto ERROR;
}
+
g_object_set(core->fakesink, "enable-last-sample", FALSE, NULL);
/*__mc_link_elements(core);*/
g_object_set(GST_OBJECT(core->fakesink), "signal-handoffs", TRUE, NULL);
core->signal_handoff = g_signal_connect(core->fakesink, "handoff", G_CALLBACK(__mc_gst_buffer_add), core);
- /* set state PLAYING */
- MEDIACODEC_ELEMENT_SET_STATE(GST_ELEMENT_CAST(core->pipeline), GST_STATE_PLAYING);
+ /* set bitrate and properties */
+ if (core->encoder) {
+ if (core->video)
+ bitrate = core->ports[in_port_index]->port_def.info.video.bitrate;
+ else
+ bitrate = core->ports[in_port_index]->port_def.info.audio.bitrate;
+ LOGI("set encoder bitrate[property:%s,v:%d] %d",
+ core->codec_type->property->bitrate_name, core->video, bitrate);
+ g_object_set(core->codec,
+ core->codec_type->property->bitrate_name, bitrate,
+ NULL);
+ }
+
+ for (i = 0 ; i < core->codec_type->property->ext_num ; i++) {
+ LOGI("set property [%s] -> [%s]",
+ core->codec_type->property->ext_name[i],
+ core->codec_type->property->ext_value[i]);
+
+ gst_util_set_object_arg((GObject *)core->codec,
+ core->codec_type->property->ext_name[i],
+ core->codec_type->property->ext_value[i]);
+ }
+
+ /* set state PLAYING */
+ MEDIACODEC_ELEMENT_SET_STATE(GST_ELEMENT_CAST(core->pipeline), GST_STATE_PLAYING);
}
+
core->prepare_count++;
g_mutex_unlock(&core->prepare_lock);