[0.6.195] apply the RM policy about audio offload 29/208029/5
authorEunhye Choi <eunhae1.choi@samsung.com>
Mon, 17 Jun 2019 09:19:17 +0000 (18:19 +0900)
committerEunhye Choi <eunhae1.choi@samsung.com>
Wed, 19 Jun 2019 05:37:01 +0000 (14:37 +0900)
Change-Id: Ibf5592603a6863d69cc29fc0e0715e36ff522210

packaging/libmm-player.spec
src/include/mm_player_priv.h
src/mm_player_priv.c

index 7b1eda9..7db1ad3 100644 (file)
@@ -1,6 +1,6 @@
 Name:       libmm-player
 Summary:    Multimedia Framework Player Library
-Version:    0.6.194
+Version:    0.6.195
 Release:    0
 Group:      Multimedia/Libraries
 License:    Apache-2.0
index 82bfc47..9e79236 100644 (file)
@@ -366,7 +366,7 @@ typedef enum {
 typedef enum {
        MMPLAYER_RESOURCE_TYPE_VIDEO_DECODER,
        MMPLAYER_RESOURCE_TYPE_VIDEO_OVERLAY,
-       /* FIXME: need to add MMPLAYER_RESOURCE_TYPE_AUDIO_OFFLOAD */
+       MMPLAYER_RESOURCE_TYPE_AUDIO_OFFLOAD,
        MMPLAYER_RESOURCE_TYPE_MAX,
 } mmplayer_resource_type_e;
 
index f2d766c..d1a71ef 100644 (file)
@@ -606,6 +606,9 @@ static int __mmplayer_acquire_hw_resource(mmplayer_t *player, mmplayer_resource_
                case MMPLAYER_RESOURCE_TYPE_VIDEO_OVERLAY:
                        rm_res_type = MM_RESOURCE_MANAGER_RES_TYPE_VIDEO_OVERLAY;
                        break;
+               case MMPLAYER_RESOURCE_TYPE_AUDIO_OFFLOAD:
+                       rm_res_type = MM_RESOURCE_MANAGER_RES_TYPE_AUDIO_OFFLOAD;
+                       break;
                default:
                        LOGE("invalid mmplayer resource type %d", type);
                        return MM_ERROR_PLAYER_INTERNAL;
@@ -5149,9 +5152,14 @@ _mmplayer_unrealize(MMHandleType hplayer)
        ret = __mmplayer_gst_unrealize(player);
 
        if (!player->interrupted_by_resource) {
-               if ((__mmplayer_release_hw_resource(player, MMPLAYER_RESOURCE_TYPE_VIDEO_DECODER) != MM_ERROR_NONE) ||
-                       (__mmplayer_release_hw_resource(player, MMPLAYER_RESOURCE_TYPE_VIDEO_OVERLAY) != MM_ERROR_NONE))
-                       LOGE("failed to release video resources");
+               int rm_ret = MM_ERROR_NONE;
+               mmplayer_resource_type_e res_idx = MMPLAYER_RESOURCE_TYPE_MAX;
+
+               for (res_idx = MMPLAYER_RESOURCE_TYPE_VIDEO_DECODER; res_idx < MMPLAYER_RESOURCE_TYPE_MAX; res_idx++) {
+                       rm_ret = __mmplayer_release_hw_resource(player, res_idx);
+                       if (rm_ret != MM_ERROR_NONE)
+                               LOGE("failed to release [%d] resources", res_idx);
+               }
        }
 
        MMPLAYER_FLEAVE();
@@ -6967,6 +6975,12 @@ __mmplayer_can_build_audio_offload_path(mmplayer_t *player)
        }
        gst_object_unref(factory);
 
+       if (__mmplayer_acquire_hw_resource(player,
+                       MMPLAYER_RESOURCE_TYPE_AUDIO_OFFLOAD) != MM_ERROR_NONE) {
+               LOGE("failed to acquire audio offload decoder resource");
+               goto DONE;
+       }
+
        if (!__mmplayer_add_audio_device_connected_cb(player))
                goto DONE;
 
@@ -6977,6 +6991,9 @@ __mmplayer_can_build_audio_offload_path(mmplayer_t *player)
        ret = TRUE;
 
 DONE:
+       if (!ret)
+               __mmplayer_release_hw_resource(player, MMPLAYER_RESOURCE_TYPE_AUDIO_OFFLOAD);
+
        MMPLAYER_FLEAVE();
        return ret;
 }