14344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim/* 24344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim * Copyright (C) 2016 The Android Open Source Project 34344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim * 44344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim * Licensed under the Apache License, Version 2.0 (the "License"); 54344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim * you may not use this file except in compliance with the License. 64344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim * You may obtain a copy of the License at 74344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim * 84344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim * http://www.apache.org/licenses/LICENSE-2.0 94344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim * 104344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim * Unless required by applicable law or agreed to in writing, software 114344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim * distributed under the License is distributed on an "AS IS" BASIS, 124344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim * See the License for the specific language governing permissions and 144344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim * limitations under the License. 154344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim */ 164344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim 174344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim#ifndef STAGEFRIGHT_CODEC2_BUFFER_PRIV_H_ 184344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim#define STAGEFRIGHT_CODEC2_BUFFER_PRIV_H_ 194344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim 204344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim#include <functional> 214344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim 224344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim#include <C2Buffer.h> 23878e45a7f16a9a68b322f7bdb369bf653a0f66cbSungtak Lee#include <android/hardware/media/bufferpool/1.0/IAccessor.h> 244344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim 254344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kimclass C2BasicLinearBlockPool : public C2BlockPool { 264344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kimpublic: 274344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim explicit C2BasicLinearBlockPool(const std::shared_ptr<C2Allocator> &allocator); 284344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim 294344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim virtual ~C2BasicLinearBlockPool() override = default; 304344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim 314344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim virtual C2Allocator::id_t getAllocatorId() const override { 324344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim return mAllocator->getId(); 334344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim } 344344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim 354344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim virtual local_id_t getLocalId() const override { 364344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim return BASIC_LINEAR; 374344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim } 384344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim 394344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim virtual c2_status_t fetchLinearBlock( 404344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim uint32_t capacity, 414344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim C2MemoryUsage usage, 424344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim std::shared_ptr<C2LinearBlock> *block /* nonnull */) override; 434344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim 444344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim // TODO: fetchCircularBlock 454344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim 464344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kimprivate: 474344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim const std::shared_ptr<C2Allocator> mAllocator; 484344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim}; 494344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim 504344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kimclass C2BasicGraphicBlockPool : public C2BlockPool { 514344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kimpublic: 524344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim explicit C2BasicGraphicBlockPool(const std::shared_ptr<C2Allocator> &allocator); 534344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim 544344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim virtual ~C2BasicGraphicBlockPool() override = default; 554344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim 564344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim virtual C2Allocator::id_t getAllocatorId() const override { 574344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim return mAllocator->getId(); 584344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim } 594344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim 604344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim virtual local_id_t getLocalId() const override { 614344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim return BASIC_GRAPHIC; 624344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim } 634344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim 644344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim virtual c2_status_t fetchGraphicBlock( 654344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim uint32_t width, 664344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim uint32_t height, 674344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim uint32_t format, 684344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim C2MemoryUsage usage, 694344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim std::shared_ptr<C2GraphicBlock> *block /* nonnull */) override; 704344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim 714344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kimprivate: 724344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim const std::shared_ptr<C2Allocator> mAllocator; 734344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim}; 744344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim 754344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kimclass C2PooledBlockPool : public C2BlockPool { 764344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kimpublic: 774344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim C2PooledBlockPool(const std::shared_ptr<C2Allocator> &allocator, const local_id_t localId); 784344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim 794344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim virtual ~C2PooledBlockPool() override; 804344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim 814344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim virtual C2Allocator::id_t getAllocatorId() const override { 824344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim return mAllocator->getId(); 834344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim } 844344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim 854344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim virtual local_id_t getLocalId() const override { 864344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim return mLocalId; 874344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim } 884344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim 894344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim virtual c2_status_t fetchLinearBlock( 904344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim uint32_t capacity, 914344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim C2MemoryUsage usage, 924344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim std::shared_ptr<C2LinearBlock> *block /* nonnull */) override; 934344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim 944a3e4577f5c1c9bd9f52f23f42fbc92a1c869b79Pawin Vongmasa virtual c2_status_t fetchGraphicBlock( 954a3e4577f5c1c9bd9f52f23f42fbc92a1c869b79Pawin Vongmasa uint32_t width, 964a3e4577f5c1c9bd9f52f23f42fbc92a1c869b79Pawin Vongmasa uint32_t height, 974a3e4577f5c1c9bd9f52f23f42fbc92a1c869b79Pawin Vongmasa uint32_t format, 984a3e4577f5c1c9bd9f52f23f42fbc92a1c869b79Pawin Vongmasa C2MemoryUsage usage, 994a3e4577f5c1c9bd9f52f23f42fbc92a1c869b79Pawin Vongmasa std::shared_ptr<C2GraphicBlock> *block) override; 100878e45a7f16a9a68b322f7bdb369bf653a0f66cbSungtak Lee 101878e45a7f16a9a68b322f7bdb369bf653a0f66cbSungtak Lee /** 102878e45a7f16a9a68b322f7bdb369bf653a0f66cbSungtak Lee * Retrieves the connection Id for underlying bufferpool 103878e45a7f16a9a68b322f7bdb369bf653a0f66cbSungtak Lee */ 104878e45a7f16a9a68b322f7bdb369bf653a0f66cbSungtak Lee int64_t getConnectionId(); 105878e45a7f16a9a68b322f7bdb369bf653a0f66cbSungtak Lee 106878e45a7f16a9a68b322f7bdb369bf653a0f66cbSungtak Lee /** 107878e45a7f16a9a68b322f7bdb369bf653a0f66cbSungtak Lee * Retrieves the accessor which is used by underlying bufferpool. (It can be 108878e45a7f16a9a68b322f7bdb369bf653a0f66cbSungtak Lee * passed to receiving process.) 109878e45a7f16a9a68b322f7bdb369bf653a0f66cbSungtak Lee * 110878e45a7f16a9a68b322f7bdb369bf653a0f66cbSungtak Lee * \param accessor IAccessor will be written to this out parameter. 111878e45a7f16a9a68b322f7bdb369bf653a0f66cbSungtak Lee * 112878e45a7f16a9a68b322f7bdb369bf653a0f66cbSungtak Lee * \return true IAcessor is writen successfully. 113878e45a7f16a9a68b322f7bdb369bf653a0f66cbSungtak Lee * \return false IAccessor is not written. 114878e45a7f16a9a68b322f7bdb369bf653a0f66cbSungtak Lee */ 115878e45a7f16a9a68b322f7bdb369bf653a0f66cbSungtak Lee bool getAccessor(android::sp<android::hardware::media::bufferpool::V1_0::IAccessor> *accessor); 116878e45a7f16a9a68b322f7bdb369bf653a0f66cbSungtak Lee 1174344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kimprivate: 1184344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim const std::shared_ptr<C2Allocator> mAllocator; 1194344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim const local_id_t mLocalId; 1204344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim 1214344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim class Impl; 1224344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim std::unique_ptr<Impl> mImpl; 1234344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim}; 1244344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim 1254344f091aebaf3aee3ff062a95a05273bd2b1c57Wonsik Kim#endif // STAGEFRIGHT_CODEC2_BUFFER_PRIV_H_ 126