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