Set bitrate and properties before PLAYING 48/283348/1 accepted/tizen/unified/20221102.020539
authorJeongmo Yang <jm80.yang@samsung.com>
Tue, 25 Oct 2022 03:12:20 +0000 (12:12 +0900)
committerJeongmo Yang <jm80.yang@samsung.com>
Tue, 25 Oct 2022 03:12:20 +0000 (12:12 +0900)
[Version] 0.6.27
[Issue Type] Update

Change-Id: I955d4c5c6ef6c68ab3c9a4748f84af107ad3261e
Signed-off-by: Jeongmo Yang <jm80.yang@samsung.com>
packaging/capi-media-codec.spec
src/media_codec_port_gst.c

index ce40850..0e19950 100644 (file)
@@ -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
index 9c3e7d7..eaf5f62 100644 (file)
@@ -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);