[0.6.292] Fix Svace issue (DEREF_OF_NULL.RET.ALLOC)
[platform/core/multimedia/libmm-player.git] / src / mm_player_gst.c
index 8924690..8747a9b 100644 (file)
@@ -766,6 +766,11 @@ __mmplayer_gst_extract_tag_from_msg(mmplayer_t *player, GstMessage *msg)
                if (gst_tag_list_get_date(tag_list, gsttag, &date)) {\
                        if (date != NULL) {\
                                string = g_strdup_printf("%d", g_date_get_year(date));\
+                               if (string == NULL) {\
+                                       LOGD("failed to get date/time from tag");\
+                                       g_date_free(date);\
+                                       break;\
+                               } \
                                mm_player_set_attribute((MMHandleType)player, NULL,\
                                                playertag, string, strlen(string), NULL); \
                                SECURE_LOGD("metainfo year : %s", string);\
@@ -916,10 +921,12 @@ __mmplayer_gst_check_useful_message(mmplayer_t *player, GstMessage *message)
        case GST_MESSAGE_ASYNC_DONE:
        case GST_MESSAGE_STATE_CHANGED:
                /* we only handle messages from pipeline */
+               MMPLAYER_RECONFIGURE_LOCK(player);
                if ((message->src == (GstObject *)player->pipeline->mainbin[MMPLAYER_M_PIPE].gst) && (!player->gapless.reconfigure))
                        retval = TRUE;
                else
                        retval = FALSE;
+               MMPLAYER_RECONFIGURE_UNLOCK(player);
                break;
        case GST_MESSAGE_BUFFERING:
        {
@@ -950,11 +957,6 @@ __mmplayer_gst_check_useful_message(mmplayer_t *player, GstMessage *message)
        {
                if (MMPLAYER_USE_DECODEBIN(player))
                        break; /* drop msg */
-               if (message->src == (GstObject *)player->pipeline->mainbin[MMPLAYER_M_ADAPTIVE_DEMUX].gst) {
-                       LOGD("pipeline is still under construction for adaptive streaming");
-                       retval = TRUE;
-                       break;
-               }
 
                if ((MMPLAYER_IS_HTTP_STREAMING(player)) &&
                        (!player->pipeline->mainbin[MMPLAYER_M_DEMUXED_S_BUFFER].gst) &&
@@ -977,7 +979,8 @@ __mmplayer_gst_check_useful_message(mmplayer_t *player, GstMessage *message)
                LOGD("GST_MESSAGE_STREAMS_SELECTED");
                player->no_more_pad = TRUE;
                _mmplayer_set_reconfigure_state(player, FALSE);
-               _mmplayer_pipeline_complete(NULL, player);
+               if (!MMPLAYER_IS_ADAPTIVE_STREAMING(player))
+                       _mmplayer_pipeline_complete(NULL, player);
                retval = TRUE;
                break;
        }
@@ -1573,7 +1576,6 @@ static void
 __mmplayer_gst_handle_state_message(mmplayer_t *player, GstMessage *msg)
 {
        mmplayer_gst_element_t *mainbin;
-       const GValue *voldstate, *vnewstate, *vpending;
        GstState oldstate = GST_STATE_NULL;
        GstState newstate = GST_STATE_NULL;
        GstState pending = GST_STATE_NULL;
@@ -1587,20 +1589,7 @@ __mmplayer_gst_handle_state_message(mmplayer_t *player, GstMessage *msg)
        if (msg->src != (GstObject *)mainbin[MMPLAYER_M_PIPE].gst)
                return;
 
-       /* get state info from msg */
-       voldstate = gst_structure_get_value(gst_message_get_structure(msg), "old-state");
-       vnewstate = gst_structure_get_value(gst_message_get_structure(msg), "new-state");
-       vpending = gst_structure_get_value(gst_message_get_structure(msg), "pending-state");
-
-       if (!voldstate || !vnewstate) {
-               LOGE("received msg has wrong format.");
-               return;
-       }
-
-       oldstate = (GstState)voldstate->data[0].v_int;
-       newstate = (GstState)vnewstate->data[0].v_int;
-       if (vpending)
-               pending = (GstState)vpending->data[0].v_int;
+       gst_message_parse_state_changed(msg, &oldstate, &newstate, &pending);
 
        LOGD("state changed [%s] : %s ---> %s     final : %s",
                GST_OBJECT_NAME(GST_MESSAGE_SRC(msg)),
@@ -1836,6 +1825,9 @@ __mmplayer_gst_handle_async_done_message(mmplayer_t *player, GstMessage *msg)
                return;
 
        if (player->seek_state == MMPLAYER_SEEK_IN_PROGRESS) {
+               if (player->is_external_subtitle_present)
+                       _mmplayer_sync_subtitle_pipeline(player);
+
                if (MMPLAYER_TARGET_STATE(player) == MM_PLAYER_STATE_PAUSED) {
                        player->seek_state = MMPLAYER_SEEK_NONE;
                        MMPLAYER_POST_MSG(player, MM_MESSAGE_SEEK_COMPLETED, NULL);
@@ -2098,6 +2090,11 @@ __mmplayer_gst_bus_msg_callback(GstMessage *msg, gpointer data)
                                GstStream *stream = gst_message_streams_selected_get_stream(msg, i);
                                mmplayer_track_type_e type = __mmplayer_convert_gst_stream_type_to_track_type(
                                                        gst_stream_get_stream_type(stream));
+                               if (type == MM_PLAYER_TRACK_TYPE_MAX) {
+                                       LOGD("not supported track type");
+                                       gst_object_unref(stream);
+                                       break;
+                               }
                                LOGD ("  Stream #%d : %s\n", i, gst_stream_get_stream_id(stream));
                                if (player->track[type].active_track_index == INVALID_TRACK_INDEX) {
                                        int stream_index = INVALID_TRACK_INDEX;
@@ -2109,7 +2106,7 @@ __mmplayer_gst_bus_msg_callback(GstMessage *msg, gpointer data)
                                }
                                gst_object_unref(stream);
                        }
-                       gst_object_unref (collection);
+                       gst_object_unref(collection);
                }
        } break;
 
@@ -4206,7 +4203,7 @@ _mmplayer_gst_get_buffer_position(mmplayer_t *player, int *start_pos, int *end_p
                                g_object_get(G_OBJECT(mainbin[MMPLAYER_M_DEMUXED_S_BUFFER].gst),
                                        "curr-size-bytes", &curr_size_bytes, NULL);
                                LOGD("curr_size_bytes of multiqueue = %d", curr_size_bytes);
-                               buffered_total += curr_size_bytes;
+                               buffered_total += (gint64)curr_size_bytes;
                        }
 
                        if (avg_byterate > 0)