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;
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;
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();
}
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;
ret = TRUE;
DONE:
+ if (!ret)
+ __mmplayer_release_hw_resource(player, MMPLAYER_RESOURCE_TYPE_AUDIO_OFFLOAD);
+
MMPLAYER_FLEAVE();
return ret;
}