13d0407baSopenharmony_ci/*
23d0407baSopenharmony_ci * Copyright (c) 2021 Rockchip Electronics Co., Ltd.
33d0407baSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
43d0407baSopenharmony_ci * you may not use this file except in compliance with the License.
53d0407baSopenharmony_ci * You may obtain a copy of the License at
63d0407baSopenharmony_ci *
73d0407baSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
83d0407baSopenharmony_ci *
93d0407baSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
103d0407baSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
113d0407baSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
123d0407baSopenharmony_ci * See the License for the specific language governing permissions and
133d0407baSopenharmony_ci * limitations under the License.
143d0407baSopenharmony_ci */
153d0407baSopenharmony_ci
163d0407baSopenharmony_ci#ifndef __MPP_ALLOCATOR_H__
173d0407baSopenharmony_ci#define __MPP_ALLOCATOR_H__
183d0407baSopenharmony_ci
193d0407baSopenharmony_ci#include "rk_type.h"
203d0407baSopenharmony_ci#include "mpp_buffer.h"
213d0407baSopenharmony_ci
223d0407baSopenharmony_citypedef void *MppAllocator;
233d0407baSopenharmony_ci
243d0407baSopenharmony_citypedef struct MppAllocatorCfg_t {
253d0407baSopenharmony_ci    // input
263d0407baSopenharmony_ci    size_t          alignment;
273d0407baSopenharmony_ci    RK_U32          flags;
283d0407baSopenharmony_ci} MppAllocatorCfg;
293d0407baSopenharmony_ci
303d0407baSopenharmony_citypedef struct MppAllocatorApi_t {
313d0407baSopenharmony_ci    RK_U32  size;
323d0407baSopenharmony_ci    RK_U32  version;
333d0407baSopenharmony_ci
343d0407baSopenharmony_ci    MPP_RET (*alloc)(MppAllocator allocator, MppBufferInfo *data);
353d0407baSopenharmony_ci    MPP_RET (*free)(MppAllocator allocator, MppBufferInfo *data);
363d0407baSopenharmony_ci    MPP_RET (*import)(MppAllocator allocator, MppBufferInfo *data);
373d0407baSopenharmony_ci    MPP_RET (*release)(MppAllocator allocator, MppBufferInfo *data);
383d0407baSopenharmony_ci    MPP_RET (*mmap)(MppAllocator allocator, MppBufferInfo *data);
393d0407baSopenharmony_ci} MppAllocatorApi;
403d0407baSopenharmony_ci
413d0407baSopenharmony_ci#ifdef __cplusplus
423d0407baSopenharmony_ciextern "C" {
433d0407baSopenharmony_ci#endif
443d0407baSopenharmony_ci
453d0407baSopenharmony_ciMPP_RET mpp_allocator_get(MppAllocator *allocator,
463d0407baSopenharmony_ci                          MppAllocatorApi **api, MppBufferType type);
473d0407baSopenharmony_ciMPP_RET mpp_allocator_put(MppAllocator *allocator);
483d0407baSopenharmony_ci
493d0407baSopenharmony_ci#ifdef __cplusplus
503d0407baSopenharmony_ci}
513d0407baSopenharmony_ci#endif
523d0407baSopenharmony_ci
533d0407baSopenharmony_ci#endif /* __MPP_ALLOCATOR_H__ */
543d0407baSopenharmony_ci
55