* Copyright (c) 2023-2023 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#if defined(VIDEO_SUPPORT)
#ifndef HISTREAMER_PLUGIN_CODEC_BUFFER_POOL_H
#define HISTREAMER_PLUGIN_CODEC_BUFFER_POOL_H
#include "v4_0/icodec_component.h"
#include "v4_0/codec_types.h"
#include "codec_buffer.h"
#include "foundation/osal/thread/mutex.h"
#include "foundation/utils/blocking_queue.h"
#include "plugin/common/plugin_types.h"
#include "plugin/common/share_allocator.h"
#include "plugin/common/share_memory.h"
namespace OHOS {
namespace Media {
namespace Plugin {
namespace CodecAdapter {
namespace CodecHDI = OHOS::HDI::Codec::V4_0;
class CodecBufferPool {
public:
CodecBufferPool(sptr<CodecHDI::ICodecComponent>& compType, CodecHDI::CompVerInfo& verInfo,
uint32_t portIndex, uint32_t bufferCnt);
~CodecBufferPool() = default;
* Init codec buffer and create buffer map
* Encoder:
* inBuf is surfaceBuf and allocated dynamic, outBuf is sharedBuf (READ_WRITE_TYPE)
* Decoder:
* inBuf is sharedBuf (READ_ONLY_TYPE), outBuf is surfaceBuf and pre-allocation
*/
Status UseBuffers(OHOS::Media::BlockingQueue<std::shared_ptr<Buffer>>& bufQue, MemoryType bufMemType,
bool isInput, uint32_t bufferSize);
Status FreeBuffers();
uint32_t EmptyBufferCount();
Status UseBufferDone(uint32_t bufId);
std::shared_ptr<CodecBuffer> GetBuffer(int32_t bufferId = -1);
private:
Status ConfigBufType(const MemoryType& bufMemType, bool isInput);
private:
OSAL::Mutex mutex_;
sptr<CodecHDI::ICodecComponent> codecComp_ {nullptr};
CodecHDI::CompVerInfo verInfo_;
uint32_t portIndex_;
OHOS::Media::BlockingQueue<uint32_t> freeBufferId_;
std::map<uint32_t, std::shared_ptr<CodecBuffer>> codecBufMap_;
};
}
}
}
}
#endif
#endif