From 321b95ad4dc3c8686a522da8a984af7128e3b477 Mon Sep 17 00:00:00 2001 From: Herman Chen Date: Wed, 13 Dec 2017 15:31:34 +0800 Subject: [PATCH] [allocator]: Use auto detect on Android and Linux There is case that Android 7.1+3.10 kernel without drm and also Android 7.1+4.4 kernel with both drm and ion. Use the runtime function to support both of them. This patch needs more test. Change-Id: I53f0a30abf057f8e0e6e122e09782896d4789168 Signed-off-by: Herman Chen --- osal/android/os_allocator.c | 29 ++++++++++++++--------------- osal/linux/os_allocator.c | 23 ++++++++++------------- 2 files changed, 24 insertions(+), 28 deletions(-) diff --git a/osal/android/os_allocator.c b/osal/android/os_allocator.c index 849e6b68..f96a8d4a 100644 --- a/osal/android/os_allocator.c +++ b/osal/android/os_allocator.c @@ -18,6 +18,7 @@ #include "allocator_std.h" #include "allocator_ion.h" #include "allocator_drm.h" +#include "mpp_runtime.h" MPP_RET os_allocator_get(os_allocator *api, MppBufferType type) { @@ -27,28 +28,26 @@ MPP_RET os_allocator_get(os_allocator *api, MppBufferType type) case MPP_BUFFER_TYPE_NORMAL : case MPP_BUFFER_TYPE_V4L2 : { *api = allocator_std; - } - break; + } break; case MPP_BUFFER_TYPE_ION : { -#ifdef HAVE_DRM - *api = allocator_drm; -#else - *api = allocator_ion; + *api = (mpp_rt_allcator_is_valid(MPP_BUFFER_TYPE_ION)) ? allocator_ion : +#if HAVE_DRM + (mpp_rt_allcator_is_valid(MPP_BUFFER_TYPE_DRM)) ? allocator_drm : #endif - } - break; + allocator_std; + } break; case MPP_BUFFER_TYPE_DRM : { -#ifdef HAVE_DRM - *api = allocator_drm; +#if HAVE_DRM + *api = (mpp_rt_allcator_is_valid(MPP_BUFFER_TYPE_DRM)) ? allocator_drm : #else - *api = allocator_std; + * api = #endif - } - break; + (mpp_rt_allcator_is_valid(MPP_BUFFER_TYPE_ION)) ? allocator_ion : + allocator_std; + } break; default : { ret = MPP_NOK; - } - break; + } break; } return ret; } diff --git a/osal/linux/os_allocator.c b/osal/linux/os_allocator.c index ad09cc05..9db93a69 100644 --- a/osal/linux/os_allocator.c +++ b/osal/linux/os_allocator.c @@ -16,12 +16,11 @@ #if defined(__gnu_linux__) #include "mpp_log.h" +#include "mpp_runtime.h" #include "allocator_std.h" #include "allocator_ion.h" -#ifdef HAVE_DRM #include "allocator_drm.h" -#endif /* * Linux only support MPP_BUFFER_TYPE_NORMAL so far @@ -36,26 +35,24 @@ MPP_RET os_allocator_get(os_allocator *api, MppBufferType type) *api = allocator_std; } break; case MPP_BUFFER_TYPE_ION : { -#ifdef RKPLATFORM -#ifdef HAVE_DRM - *api = allocator_drm; -#else - *api = allocator_ion; -#endif -#else - *api = allocator_std; + *api = (mpp_rt_allcator_is_valid(MPP_BUFFER_TYPE_ION)) ? allocator_ion : +#if HAVE_DRM + (mpp_rt_allcator_is_valid(MPP_BUFFER_TYPE_DRM)) ? allocator_drm : #endif + allocator_std; } break; case MPP_BUFFER_TYPE_V4L2 : { mpp_err("os_allocator_get Linux MPP_BUFFER_TYPE_V4L2 do not implement yet\n"); *api = allocator_std; } break; case MPP_BUFFER_TYPE_DRM : { -#ifdef HAVE_DRM - *api = allocator_drm; +#if HAVE_DRM + *api = (mpp_rt_allcator_is_valid(MPP_BUFFER_TYPE_DRM)) ? allocator_drm : #else - *api = allocator_std; + * api = #endif + (mpp_rt_allcator_is_valid(MPP_BUFFER_TYPE_ION)) ? allocator_ion : + allocator_std; } break; default : { ret = MPP_NOK;