[v0.6.29] remove resource set after handling the resource conflict 68/113668/1
authorEunhae Choi <eunhae1.choi@samsung.com>
Wed, 8 Feb 2017 09:31:52 +0000 (18:31 +0900)
committerEunhae Choi <eunhae1.choi@samsung.com>
Wed, 8 Feb 2017 09:31:52 +0000 (18:31 +0900)
Change-Id: I3482857bd2aba0262ea939e7009e75b5dc0a585d

packaging/libmm-player.spec
src/mm_player_priv.c
src/mm_player_resource.c

index 2f674c3..8c29ee4 100644 (file)
@@ -1,6 +1,6 @@
 Name:       libmm-player
 Summary:    Multimedia Framework Player Library
-Version:    0.6.28
+Version:    0.6.29
 Release:    0
 Group:      Multimedia/Libraries
 License:    Apache-2.0
index f0f470a..b41627d 100644 (file)
@@ -7663,9 +7663,7 @@ __gst_get_position(mm_player_t* player, int format, unsigned long* position) //
         *(returning zero when getting current position in paused state
         * and when failed to get postion during seeking
         */
-       if ((current_state == MM_PLAYER_STATE_PAUSED)
-               || (!ret)) {
-               //|| (player->last_position != 0 && pos_msec == 0))
+       if ((current_state == MM_PLAYER_STATE_PAUSED) || (!ret)) {
                LOGD("pos_msec = %"GST_TIME_FORMAT" and ret = %d and state = %d", GST_TIME_ARGS(pos_msec), ret, current_state);
 
                if (player->playback_rate < 0.0)
@@ -7687,8 +7685,9 @@ __gst_get_position(mm_player_t* player, int format, unsigned long* position) //
                if (player->sound_focus.keep_last_pos) {
                        LOGD("return last pos as stop by asm, %"GST_TIME_FORMAT, GST_TIME_ARGS(player->last_position));
                        pos_msec = player->last_position;
-               } else
+               } else {
                        player->last_position = pos_msec;
+               }
        }
 
        switch (format) {
@@ -9066,7 +9065,7 @@ _mmplayer_unrealize(MMHandleType hplayer)
                if (ret != MM_ERROR_NONE)
                        LOGE("failed to release sound focus, ret(0x%x)\n", ret);
 
-               if (!player->resource_manager.by_rm_cb &&
+               if (!player->resource_manager.by_rm_cb && /* is being released */
                        _mmplayer_resource_manager_get_state(&player->resource_manager, &resource_state) == MM_ERROR_NONE) {
                        if (resource_state >= RESOURCE_STATE_ACQUIRED) {
                                ret = _mmplayer_resource_manager_release(&player->resource_manager);
index ab95c86..5011e81 100644 (file)
@@ -175,6 +175,17 @@ static void mrp_rset_state_callback(mrp_res_context_t *cx, const mrp_res_resourc
                LOGD(" - resource set is released");
                player->resource_manager.state = RESOURCE_STATE_PREPARED;
                MMPLAYER_RESOURCE_SIGNAL(&player->resource_manager);
+
+               /* mm player was unrealized by resource conflict. */
+               if (player->resource_manager.by_rm_cb == TRUE) {
+                       LOGD(" - delete resource set ");
+                       if (player->resource_manager.rset) {
+                               mrp_res_delete_resource_set(player->resource_manager.rset);
+                               player->resource_manager.rset = NULL;
+                       }
+                       player->resource_manager.state = RESOURCE_STATE_INITIALIZED;
+                       player->resource_manager.by_rm_cb = FALSE;
+               }
        }
 
        MMPLAYER_RESOURCE_UNLOCK(&player->resource_manager);
@@ -222,14 +233,14 @@ static void mrp_resource_release_cb(mrp_res_context_t *cx, const mrp_res_resourc
                LOGW("no need to interrupt, so leave");
        } else {
                if (resource_released) {
-                       player->resource_manager.by_rm_cb = TRUE;
+                       player->resource_manager.by_rm_cb = TRUE; /* will be reset in state cb */
                        LOGD("video resource conflict so, resource will be freed by unrealizing");
                        result = _mmplayer_unrealize((MMHandleType)player);
                        if (result)
                                LOGW("failed to unrealize");
-                       player->resource_manager.by_rm_cb = FALSE;
-               } else
+               } else {
                        LOGW("could not find videobin");
+               }
 
                /* lock is called in __mmplayer_can_do_interrupt() */
                MMPLAYER_CMD_UNLOCK(player);