diff --git a/osal/android/os_allocator.c b/osal/android/os_allocator.c index 62792e50..d1e602fb 100644 --- a/osal/android/os_allocator.c +++ b/osal/android/os_allocator.c @@ -49,7 +49,8 @@ MPP_RET os_allocator_get(os_allocator *api, MppBufferType type) allocator_std; } break; case MPP_BUFFER_TYPE_DMA_HEAP: { - *api = allocator_dma_heap; + *api = (mpp_rt_allcator_is_valid(MPP_BUFFER_TYPE_DMA_HEAP)) ? allocator_dma_heap : + allocator_std; } break; default : { ret = MPP_NOK; diff --git a/osal/linux/os_allocator.c b/osal/linux/os_allocator.c index a7c4d4c7..b8185513 100644 --- a/osal/linux/os_allocator.c +++ b/osal/linux/os_allocator.c @@ -56,7 +56,8 @@ MPP_RET os_allocator_get(os_allocator *api, MppBufferType type) allocator_std; } break; case MPP_BUFFER_TYPE_DMA_HEAP: { - *api = allocator_dma_heap; + *api = (mpp_rt_allcator_is_valid(MPP_BUFFER_TYPE_DMA_HEAP)) ? allocator_dma_heap : + allocator_std; } break; default : { ret = MPP_NOK; diff --git a/osal/mpp_allocator.cpp b/osal/mpp_allocator.cpp index b1895484..25277fc5 100644 --- a/osal/mpp_allocator.cpp +++ b/osal/mpp_allocator.cpp @@ -176,7 +176,11 @@ MPP_RET mpp_allocator_put(MppAllocator *allocator) } MppAllocatorImpl *p = (MppAllocatorImpl *)*allocator; + + if (!p) + return MPP_OK; *allocator = NULL; + if (p->os_api.close && p->ctx) p->os_api.close(p->ctx); pthread_mutex_destroy(&p->lock);