From 47c10d42114edbc6a63f3de1bb7d3f93f32d3f75 Mon Sep 17 00:00:00 2001 From: Jeongmo Yang Date: Tue, 25 Oct 2022 12:12:20 +0900 Subject: [PATCH] Set bitrate and properties before PLAYING [Version] 0.6.27 [Issue Type] Update Change-Id: I955d4c5c6ef6c68ab3c9a4748f84af107ad3261e Signed-off-by: Jeongmo Yang --- packaging/capi-media-codec.spec | 2 +- src/media_codec_port_gst.c | 64 ++++++++++++++++++++--------------------- 2 files changed, 32 insertions(+), 34 deletions(-) diff --git a/packaging/capi-media-codec.spec b/packaging/capi-media-codec.spec index ce40850..0e19950 100644 --- a/packaging/capi-media-codec.spec +++ b/packaging/capi-media-codec.spec @@ -4,7 +4,7 @@ Name: capi-media-codec Summary: A Media Codec library in Tizen Native API -Version: 0.6.26 +Version: 0.6.27 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/media_codec_port_gst.c b/src/media_codec_port_gst.c index 9c3e7d7..eaf5f62 100644 --- a/src/media_codec_port_gst.c +++ b/src/media_codec_port_gst.c @@ -1723,7 +1723,6 @@ mc_ret_e mc_gst_prepare(mc_handle_t *mc_handle) int ret = MC_ERROR_NONE; int num_supported_codec = 0; int i = 0; - int bitrate = 0; bool video; bool encoder; bool hardware; @@ -1826,30 +1825,6 @@ mc_ret_e mc_gst_prepare(mc_handle_t *mc_handle) 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; @@ -2120,20 +2095,22 @@ ERROR: 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; @@ -2144,14 +2121,12 @@ mc_ret_e _mc_gst_create_pipeline(mc_gst_core_t *core, const gchar *factory_name) /* 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; @@ -2189,18 +2164,17 @@ mc_ret_e _mc_gst_create_pipeline(mc_gst_core_t *core, const gchar *factory_name) } 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);*/ @@ -2247,11 +2221,35 @@ mc_ret_e _mc_gst_create_pipeline(mc_gst_core_t *core, const gchar *factory_name) 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); -- 2.7.4