[0.6.278] Free codec_data from media_packet_get_codec_data()
[platform/core/multimedia/libmm-player.git] / src / mm_player_es.c
index e244397..4df407f 100644 (file)
@@ -876,18 +876,18 @@ __mm_player_is_codec_data_changed(mmplayer_t *player, media_packet_h packet,
                cur_caps = player->v_stream_caps;
        } else {
                LOGW("streamtype is not audio or video");
-               return FALSE;
+               goto __FAILED;
        }
 
        if (!cur_caps) {
                LOGW("Current caps is NULL");
-               return FALSE;
+               goto __FAILED;
        }
 
        str = gst_caps_get_structure(cur_caps, 0);
        if (!str) {
                LOGW("Failed to get caps info");
-               return FALSE;
+               goto __FAILED;
        }
 
        /* Check if the codec data in the saved caps have been changed */
@@ -897,7 +897,7 @@ __mm_player_is_codec_data_changed(mmplayer_t *player, media_packet_h packet,
                buffer = gst_value_get_buffer(value);
                if (!gst_buffer_map(buffer, &codec_data_map, GST_MAP_READ)) {
                        LOGW("codec data buffer map failed");
-                       return FALSE;
+                       goto __FAILED;
                }
                if (codec_data_map.size == codec_data_size) {
                        for (i = 0; i <= codec_data_map.size; i++) {
@@ -905,7 +905,7 @@ __mm_player_is_codec_data_changed(mmplayer_t *player, media_packet_h packet,
                                        break;
                        }
                        gst_buffer_unmap(buffer, &codec_data_map);
-                       return FALSE;
+                       goto __FAILED;
                }
                gst_buffer_unmap(buffer, &codec_data_map);
        }
@@ -913,14 +913,13 @@ __mm_player_is_codec_data_changed(mmplayer_t *player, media_packet_h packet,
        new_caps = gst_caps_copy(cur_caps);
        if (!new_caps) {
                LOGW("Failed to copy caps");
-               return FALSE;
+               goto __FAILED;
        }
 
        new_buffer = gst_buffer_new_allocate(NULL, codec_data_size, NULL);
        if (!new_buffer) {
                LOGW("Failed to alloc gst buffer for codec data");
-               gst_caps_unref(new_caps);
-               return FALSE;
+               goto __FAILED;
        }
        gst_buffer_fill(new_buffer, 0, codec_data, codec_data_size);
        gst_caps_set_simple(new_caps, "codec_data", GST_TYPE_BUFFER, new_buffer, NULL);
@@ -932,7 +931,18 @@ __mm_player_is_codec_data_changed(mmplayer_t *player, media_packet_h packet,
                player->v_stream_caps = new_caps;
 
        gst_caps_unref(cur_caps);
+       free(codec_data);
 
        LOGD("need to update caps due to codec data is changed");
+
        return TRUE;
+
+__FAILED:
+       if (new_caps)
+               gst_caps_unref(new_caps);
+
+       if (codec_data)
+               free(codec_data);
+
+       return FALSE;
 }