Bug fix for GStreamer port 28/297328/2 accepted/tizen/7.0/unified/20230821.170214
authorJeongmo Yang <jm80.yang@samsung.com>
Thu, 17 Aug 2023 02:52:19 +0000 (11:52 +0900)
committerJeongmo Yang <jm80.yang@samsung.com>
Thu, 17 Aug 2023 03:00:43 +0000 (12:00 +0900)
1. The capsfilter element is missed for video encoder pipeline.
2. The bitrate property is set even though it's not encoder.
3. The GstMemory is not appended in GstBuffer for SW video encoder.

[Version] 0.6.30
[Issue Type] Bug fix

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

index 90c148000a779a7199168cdc07cfb87c1777f9e9..664242c49314b37bf892629638e14548af567067 100644 (file)
@@ -4,7 +4,7 @@
 
 Name:       capi-media-codec
 Summary:    A Media Codec library in Tizen Native API
-Version:    0.6.29
+Version:    0.6.30
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index 1eb6e842123b94e34ab9b3ee1e9097aab4c4e371..5b244fe37e052b4296e266fae69f71bca453ebb7 100644 (file)
@@ -317,6 +317,7 @@ static int __mc_fill_input_buffer_with_venc_packet(mc_gst_core_t *core, media_pa
        gint height;
        uint32_t plane_num;
        guint8 *planes[2];
+       GstMemory *mem = NULL;
 
        mc_gst_port_def_t *port_def = &core->ports[in_port_index]->port_def;
 
@@ -388,18 +389,23 @@ static int __mc_fill_input_buffer_with_venc_packet(mc_gst_core_t *core, media_pa
                                mcbuffer->buf_size += buf_size;
                        }
                }
-       } else {
-               GstMemory *mem = NULL;
 
+               mem = gst_memory_new_wrapped(GST_MEMORY_FLAG_READONLY,
+                               planes[0], mcbuffer->buf_size, 0,
+                               mcbuffer->buf_size, mcbuffer,
+                               (GDestroyNotify)__mc_input_buffer_finalize_cb);
+       } else {
                mem = __mc_gst_make_tbm_buffer(core, mcbuffer);
-               if (mem == NULL) {
-                       LOGW("Failed to make tizen memory");
-                       return MC_ERROR;
-               }
+               LOGD("tizen memory[%p]", mem);
+       }
 
-               gst_buffer_append_memory(mcbuffer->buffer, mem);
-               LOGD("tizen memory appended");
+       if (mem == NULL) {
+               LOGE("gstmemory failed[is_hw:%d]", core->is_hw);
+               return MC_ERROR;
        }
+
+       gst_buffer_append_memory(mcbuffer->buffer, mem);
+
        return ret;
 }
 
@@ -1277,9 +1283,6 @@ static gpointer feed_task(gpointer data)
                }
 
                if (is_format_change) {
-                       int bitrate = core->video ? \
-                               core->ports[in_port_index]->port_def.info.video.bitrate : \
-                               core->ports[in_port_index]->port_def.info.audio.bitrate;
                        GstCaps *caps = core->mc_caps_new(core, core->codec_id, in_port_index);
 
                        g_object_set(core->appsrc, "caps", caps, NULL);
@@ -1287,10 +1290,16 @@ static gpointer feed_task(gpointer data)
 
                        LOGD("caps updated");
 
-                       g_object_set(core->codec, core->codec_type->property->bitrate_name, bitrate, NULL);
+                       if (core->encoder) {
+                               int bitrate = core->video ? \
+                                       core->ports[in_port_index]->port_def.info.video.bitrate : \
+                                       core->ports[in_port_index]->port_def.info.audio.bitrate;
 
-                       LOGI("bitrate[property:%s,v:%d] %d updated",
-                               core->codec_type->property->bitrate_name, core->video, bitrate);
+                               g_object_set(core->codec, core->codec_type->property->bitrate_name, bitrate, NULL);
+
+                               LOGI("bitrate[property:%s,v:%d] %d updated",
+                                       core->codec_type->property->bitrate_name, core->video, bitrate);
+                       }
 
                        is_format_change = FALSE;
                }
@@ -2193,7 +2202,7 @@ mc_ret_e _mc_gst_create_pipeline(mc_gst_core_t *core, const gchar *factory_name)
                        gst_bin_add_many(GST_BIN(core->pipeline), core->appsrc, core->capsfilter, core->codec, core->fakesink, NULL);
 
                        /* link elements */
-                       if (!(gst_element_link_many(core->appsrc, core->codec, core->fakesink, NULL))) {
+                       if (!(gst_element_link_many(core->appsrc, core->capsfilter, core->codec, core->fakesink, NULL))) {
                                LOGE("gst_element_link_many is failed");
                                goto ERROR;
                        }