Change media_codec_data string to data 71/83271/3
authorGilbok Lee <gilbok.lee@samsung.com>
Wed, 10 Aug 2016 01:59:41 +0000 (10:59 +0900)
committerGilbok Lee <gilbok.lee@samsung.com>
Tue, 27 Sep 2016 11:21:47 +0000 (20:21 +0900)
Change-Id: I75da38c33aa70309833e02ac739c11050a459a9a
Signed-off-by: Gilbok Lee <gilbok.lee@samsung.com>
packaging/capi-mediademuxer.spec
src/port_gst/mediademuxer_port_gst.c

index d09180c..d2fff33 100755 (executable)
@@ -1,6 +1,6 @@
 Name:       capi-mediademuxer
 Summary:    A Media Demuxer library in Tizen Native API
-Version:    0.1.6
+Version:    0.1.7
 Release:    1
 Group:      Multimedia/API
 License:    Apache-2.0
index 9205e35..6847a35 100755 (executable)
@@ -1197,7 +1197,7 @@ ERROR:
 }
 
 static int _gst_copy_buf_to_media_packet(media_packet_h out_pkt,
-                                                       GstBuffer *buffer, char *codec_data)
+                                                       GstBuffer *buffer, GstBuffer *codec_data)
 {
        MEDIADEMUXER_FENTER();
        int ret = MD_ERROR_NONE;
@@ -1252,12 +1252,22 @@ static int _gst_copy_buf_to_media_packet(media_packet_h out_pkt,
                ret = MD_ERROR_UNKNOWN;
                goto ERROR;
        }
+       /* set codec data into media packet */
        if (codec_data) {
-               if (media_packet_set_codec_data(out_pkt, (void*) codec_data, strlen(codec_data))) {
+               GstMapInfo codec_data_map;
+               if (!gst_buffer_map(codec_data, &codec_data_map, GST_MAP_READ)) {
+                       MD_E("codec data buffer map failed\n");
+                       ret = MD_ERROR_UNKNOWN;
+                       goto ERROR;
+               }
+               if (media_packet_set_codec_data(out_pkt, (void*)codec_data_map.data,
+                       (unsigned int)codec_data_map.size)) {
                        MD_E("unable to set the codec data\n");
                        ret = MD_ERROR_UNKNOWN;
+                       gst_buffer_unmap(codec_data, &codec_data_map);
                        goto ERROR;
                }
+               gst_buffer_unmap(codec_data, &codec_data_map);
        }
 ERROR:
        gst_buffer_unmap(buffer, &map);
@@ -1275,9 +1285,6 @@ static int gst_demuxer_read_sample(MMHandleType pHandle,
 
        media_packet_h mediabuf = NULL;
        int indx = 0;
-       char *codec_data = NULL;
-       char *temp_codec_data = NULL;
-       int index = 0;
 
        track *atrack = demuxer->info.head;
        if ((demuxer->selected_tracks)[track_indx] == false) {
@@ -1342,27 +1349,18 @@ static int gst_demuxer_read_sample(MMHandleType pHandle,
        }
 
        /* Create the codec data and pass to _gst_copy_buf_to_media_packet() to add into the media packet */
-       temp_codec_data = strstr(atrack->caps_string, "codec_data");
-       if (temp_codec_data != NULL) {
-               while (*temp_codec_data != ')')
-                       temp_codec_data++;
-               temp_codec_data++; /* to esacpe ')' */
-               codec_data = (char*) malloc(sizeof(char)*strlen(temp_codec_data));
-               if (codec_data != NULL) {
-                       while (*temp_codec_data != ',') {
-                               codec_data[index++] = *temp_codec_data;
-                               temp_codec_data++;
-                       }
-                       codec_data[index] = '\0';
-               }
-       }
+       GstStructure *structure = NULL;
+       const GValue *value = NULL;
+       GstBuffer *codec_data_buffer = NULL;
+       structure = gst_caps_get_structure(atrack->caps, 0);
+       value = gst_structure_get_value(structure, "codec_data");
+       if (value)
+               codec_data_buffer = gst_value_get_buffer(value);
 
        /* Fill the media_packet with proper information */
-       ret = _gst_copy_buf_to_media_packet(mediabuf, buffer, codec_data);
+       ret = _gst_copy_buf_to_media_packet(mediabuf, buffer, codec_data_buffer);
        gst_sample_unref(sample);
        *outbuf = mediabuf;
-       if (codec_data)
-               free(codec_data);
 
        MEDIADEMUXER_FLEAVE();
        return ret;