Bug fix for GStreamer port 79/297379/1 accepted/tizen/unified/20230821.103309
authorJeongmo Yang <jm80.yang@samsung.com>
Thu, 17 Aug 2023 02:52:19 +0000 (11:52 +0900)
committerJeongmo Yang <jm80.yang@samsung.com>
Fri, 18 Aug 2023 01:03:16 +0000 (10:03 +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.34
[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 36ff021061b53b3d9cd6ce7ed27aa5b3bacf70f3..ea359b441efe796c87a7df0ab78f4f3ac75a5c79 100644 (file)
@@ -4,7 +4,7 @@
 
 Name:       capi-media-codec
 Summary:    A Media Codec library in Tizen Native API
-Version:    0.6.33
+Version:    0.6.34
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index 2c86a99b2a35b16652946980d72d30cdbcbac03e..4155664a8caf56f0172fb903429d343c2693dcd6 100644 (file)
@@ -320,6 +320,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;
 
@@ -391,18 +392,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;
 }
 
@@ -1287,9 +1293,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);
@@ -1297,10 +1300,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;
                }
@@ -2203,7 +2212,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;
                        }