Fix bug for codec_data setting on appsrc caps 61/137861/2 accepted/tizen/unified/20170717.170740 submit/tizen/20170717.022349
authorGilbok Lee <gilbok.lee@samsung.com>
Mon, 10 Jul 2017 06:01:27 +0000 (15:01 +0900)
committerGilbok Lee <gilbok.lee@samsung.com>
Mon, 10 Jul 2017 07:13:12 +0000 (16:13 +0900)
[Version] 0.1.11
[Profile] Mobile, Wearable, TV
[Issue Type] Fix bugs

Change-Id: I225ef3063bdf00705c79ae66653d9d7232d4eca9

packaging/capi-mediamuxer.spec
src/port_gst/mediamuxer_port_gst.c

index 7d7f2c2..e4a9c15 100755 (executable)
@@ -1,6 +1,6 @@
 Name:       capi-mediamuxer
 Summary:    A Media Muxer library in Tizen Native API
-Version:    0.1.10
+Version:    0.1.11
 Release:    1
 Group:      Multimedia/API
 License:    Apache-2.0
index eca4635..ca4867c 100755 (executable)
@@ -1103,32 +1103,39 @@ static int _gst_copy_media_packet_to_buf(mx_gst_track *current, media_packet_h o
                == MEDIA_PACKET_ERROR_NONE) {
                GstCaps *appsrc_caps = NULL;
                GstCaps *new_appsrc_caps = NULL;
-               GstBuffer *codec_data_buffer = NULL;
-               codec_data_buffer = gst_buffer_new();
-               gchar *codec_data_caps_string = NULL;
-               gst_buffer_append_memory(codec_data_buffer,
-                               gst_memory_new_wrapped(GST_MEMORY_FLAG_READONLY, pkt_codec_data, codec_data_size, 0,
-                                       codec_data_size, pkt_codec_data, NULL));
-
-               g_object_get(G_OBJECT(current->appsrc), "caps", &appsrc_caps, NULL);
-               codec_data_caps_string = gst_caps_to_string(appsrc_caps);
-               MX_I("Appsrc caps is %s", codec_data_caps_string);
-               g_free(codec_data_caps_string);
-               if (appsrc_caps)
-                       new_appsrc_caps = gst_caps_copy(appsrc_caps);
-
-               if (new_appsrc_caps)
-                       gst_caps_set_simple(new_appsrc_caps, "codec_data", GST_TYPE_BUFFER, codec_data_buffer, NULL);
-
-               codec_data_caps_string = gst_caps_to_string(new_appsrc_caps);
-               MX_I("New appsrc caps is %s", codec_data_caps_string);
-               g_free(codec_data_caps_string);
-
-               g_object_set(G_OBJECT(current->appsrc), "caps", new_appsrc_caps, NULL);
-               gst_caps_unref(appsrc_caps);
-               gst_caps_unref(new_appsrc_caps);
-               gst_buffer_unref(codec_data_buffer);
 
+               if (codec_data_size) {
+                       gchar *codec_data_caps_string = NULL;
+
+                       g_object_get(G_OBJECT(current->appsrc), "caps", &appsrc_caps, NULL);
+
+                       codec_data_caps_string = gst_caps_to_string(appsrc_caps);
+                       MX_I("Appsrc caps is %s", codec_data_caps_string);
+                       g_free(codec_data_caps_string);
+
+                       if (appsrc_caps) {
+                               new_appsrc_caps = gst_caps_copy(appsrc_caps);
+                               gst_caps_unref(appsrc_caps);
+                       }
+
+                       if (new_appsrc_caps) {
+                               GstBuffer *codec_data_buffer = gst_buffer_new_allocate(NULL,
+                                       codec_data_size, NULL);
+                               gst_buffer_fill(codec_data_buffer, 0, pkt_codec_data, codec_data_size);
+                               gst_caps_set_simple(new_appsrc_caps, "codec_data", GST_TYPE_BUFFER, codec_data_buffer, NULL);
+                               gst_buffer_unref(codec_data_buffer);
+
+                               codec_data_caps_string = gst_caps_to_string(new_appsrc_caps);
+                               MX_I("New appsrc caps is %s", codec_data_caps_string);
+                               g_free(codec_data_caps_string);
+
+                               g_object_set(G_OBJECT(current->appsrc), "caps", new_appsrc_caps, NULL);
+                               gst_caps_unref(new_appsrc_caps);
+
+                       }
+               } else {
+                       MX_W("codec_data_size is zero");
+               }
        }
 
        /* copy data */
@@ -1142,6 +1149,7 @@ static int _gst_copy_media_packet_to_buf(mx_gst_track *current, media_packet_h o
        if (media_packet_get_buffer_data_ptr(out_pkt, &pkt_data)) {
                MX_E("unable to get the buffer pointer \
                                from media_packet_get_buffer_data_ptr");
+               g_free(data_ptr);
                ret = MX_ERROR_UNKNOWN;
                goto ERROR;
        }