Loading media/codec2/hidl/1.0/utils/Android.bp +1 −1 Original line number Diff line number Diff line Loading @@ -6,7 +6,7 @@ cc_library { defaults: ["hidl_defaults"], srcs: [ "ClientBlockHelper.cpp", "OutputBufferQueue.cpp", "types.cpp", ], Loading media/codec2/hidl/1.0/utils/ClientBlockHelper.cpp→media/codec2/hidl/1.0/utils/OutputBufferQueue.cpp +335 −0 Original line number Diff line number Diff line Loading @@ -15,11 +15,11 @@ */ //#define LOG_NDEBUG 0 #define LOG_TAG "Codec2-block_helper" #define LOG_TAG "Codec2-OutputBufferQueue" #include <android-base/logging.h> #include <android/hardware/graphics/bufferqueue/2.0/IGraphicBufferProducer.h> #include <codec2/hidl/1.0/ClientBlockHelper.h> #include <codec2/hidl/1.0/OutputBufferQueue.h> #include <gui/bufferqueue/2.0/B2HGraphicBufferProducer.h> #include <C2AllocatorGralloc.h> Loading Loading @@ -145,23 +145,17 @@ bool getBufferQueueAssignment(const C2ConstGraphicBlock& block, _C2BlockFactory::GetGraphicBlockPoolData(block), generation, bqId, bqSlot); } } // unnamed namespace class OutputBufferQueue::Impl { std::mutex mMutex; sp<IGraphicBufferProducer> mIgbp; uint32_t mGeneration; uint64_t mBqId; std::shared_ptr<int> mOwner; // To migrate existing buffers sp<GraphicBuffer> mBuffers[BufferQueueDefs::NUM_BUFFER_SLOTS]; // find a better way std::weak_ptr<_C2BlockPoolData> mPoolDatas[BufferQueueDefs::NUM_BUFFER_SLOTS]; OutputBufferQueue::OutputBufferQueue() : mGeneration{0}, mBqId{0} { } public: Impl(): mGeneration(0), mBqId(0) {} OutputBufferQueue::~OutputBufferQueue() { } bool configure(const sp<IGraphicBufferProducer>& igbp, bool OutputBufferQueue::configure(const sp<IGraphicBufferProducer>& igbp, uint32_t generation, uint64_t bqId) { size_t tryNum = 0; Loading Loading @@ -215,7 +209,7 @@ public: return true; } bool registerBuffer(const C2ConstGraphicBlock& block) { bool OutputBufferQueue::registerBuffer(const C2ConstGraphicBlock& block) { std::shared_ptr<_C2BlockPoolData> data = _C2BlockFactory::GetGraphicBlockPoolData(block); if (!data) { Loading Loading @@ -255,7 +249,7 @@ public: return false; } status_t outputBuffer( status_t OutputBufferQueue::outputBuffer( const C2ConstGraphicBlock& block, const BnGraphicBufferProducer::QueueBufferInput& input, BnGraphicBufferProducer::QueueBufferOutput* output) { Loading Loading @@ -325,41 +319,11 @@ public: return OK; } Impl *getPtr() { return this; } ~Impl() {} }; OutputBufferQueue::OutputBufferQueue(): mImpl(new Impl()) {} OutputBufferQueue::~OutputBufferQueue() {} bool OutputBufferQueue::configure(const sp<IGraphicBufferProducer>& igbp, uint32_t generation, uint64_t bqId) { return mImpl && mImpl->configure(igbp, generation, bqId); } status_t OutputBufferQueue::outputBuffer( const C2ConstGraphicBlock& block, const BnGraphicBufferProducer::QueueBufferInput& input, BnGraphicBufferProducer::QueueBufferOutput* output) { if (mImpl) { return mImpl->outputBuffer(block, input, output); } return DEAD_OBJECT; } void OutputBufferQueue::holdBufferQueueBlocks( const std::list<std::unique_ptr<C2Work>>& workList) { if (!mImpl) { return; } forEachBlock(workList, std::bind(&OutputBufferQueue::Impl::registerBuffer, mImpl->getPtr(), std::placeholders::_1)); std::bind(&OutputBufferQueue::registerBuffer, this, std::placeholders::_1)); } } // namespace utils Loading media/codec2/hidl/1.0/utils/include/codec2/hidl/1.0/ClientBlockHelper.h→media/codec2/hidl/1.0/utils/include/codec2/hidl/1.0/OutputBufferQueue.h +15 −5 Original line number Diff line number Diff line Loading @@ -14,13 +14,15 @@ * limitations under the License. */ #ifndef CLIENT_BLOCK_HELPER_H #define CLIENT_BLOCK_HELPER_H #ifndef CODEC2_HIDL_V1_0_UTILS_OUTPUT_BUFFER_QUEUE #define CODEC2_HIDL_V1_0_UTILS_OUTPUT_BUFFER_QUEUE #include <gui/IGraphicBufferProducer.h> #include <codec2/hidl/1.0/types.h> #include <C2Work.h> struct C2_HIDE _C2BlockPoolData; namespace android { namespace hardware { namespace media { Loading Loading @@ -61,8 +63,16 @@ struct OutputBufferQueue { private: class Impl; std::unique_ptr<Impl> mImpl; std::mutex mMutex; sp<IGraphicBufferProducer> mIgbp; uint32_t mGeneration; uint64_t mBqId; std::shared_ptr<int> mOwner; // To migrate existing buffers sp<GraphicBuffer> mBuffers[BufferQueueDefs::NUM_BUFFER_SLOTS]; // find a better way std::weak_ptr<_C2BlockPoolData> mPoolDatas[BufferQueueDefs::NUM_BUFFER_SLOTS]; bool registerBuffer(const C2ConstGraphicBlock& block); }; } // namespace utils Loading @@ -72,4 +82,4 @@ private: } // namespace hardware } // namespace android #endif // CLIENT_BLOCK_HELPER_H #endif // CODEC2_HIDL_V1_0_UTILS_OUTPUT_BUFFER_QUEUE media/codec2/hidl/client/include/codec2/hidl/client.h +1 −1 Original line number Diff line number Diff line Loading @@ -18,7 +18,7 @@ #define CODEC2_HIDL_CLIENT_H #include <gui/IGraphicBufferProducer.h> #include <codec2/hidl/1.0/ClientBlockHelper.h> #include <codec2/hidl/1.0/OutputBufferQueue.h> #include <C2PlatformSupport.h> #include <C2Component.h> #include <C2Buffer.h> Loading Loading
media/codec2/hidl/1.0/utils/Android.bp +1 −1 Original line number Diff line number Diff line Loading @@ -6,7 +6,7 @@ cc_library { defaults: ["hidl_defaults"], srcs: [ "ClientBlockHelper.cpp", "OutputBufferQueue.cpp", "types.cpp", ], Loading
media/codec2/hidl/1.0/utils/ClientBlockHelper.cpp→media/codec2/hidl/1.0/utils/OutputBufferQueue.cpp +335 −0 Original line number Diff line number Diff line Loading @@ -15,11 +15,11 @@ */ //#define LOG_NDEBUG 0 #define LOG_TAG "Codec2-block_helper" #define LOG_TAG "Codec2-OutputBufferQueue" #include <android-base/logging.h> #include <android/hardware/graphics/bufferqueue/2.0/IGraphicBufferProducer.h> #include <codec2/hidl/1.0/ClientBlockHelper.h> #include <codec2/hidl/1.0/OutputBufferQueue.h> #include <gui/bufferqueue/2.0/B2HGraphicBufferProducer.h> #include <C2AllocatorGralloc.h> Loading Loading @@ -145,23 +145,17 @@ bool getBufferQueueAssignment(const C2ConstGraphicBlock& block, _C2BlockFactory::GetGraphicBlockPoolData(block), generation, bqId, bqSlot); } } // unnamed namespace class OutputBufferQueue::Impl { std::mutex mMutex; sp<IGraphicBufferProducer> mIgbp; uint32_t mGeneration; uint64_t mBqId; std::shared_ptr<int> mOwner; // To migrate existing buffers sp<GraphicBuffer> mBuffers[BufferQueueDefs::NUM_BUFFER_SLOTS]; // find a better way std::weak_ptr<_C2BlockPoolData> mPoolDatas[BufferQueueDefs::NUM_BUFFER_SLOTS]; OutputBufferQueue::OutputBufferQueue() : mGeneration{0}, mBqId{0} { } public: Impl(): mGeneration(0), mBqId(0) {} OutputBufferQueue::~OutputBufferQueue() { } bool configure(const sp<IGraphicBufferProducer>& igbp, bool OutputBufferQueue::configure(const sp<IGraphicBufferProducer>& igbp, uint32_t generation, uint64_t bqId) { size_t tryNum = 0; Loading Loading @@ -215,7 +209,7 @@ public: return true; } bool registerBuffer(const C2ConstGraphicBlock& block) { bool OutputBufferQueue::registerBuffer(const C2ConstGraphicBlock& block) { std::shared_ptr<_C2BlockPoolData> data = _C2BlockFactory::GetGraphicBlockPoolData(block); if (!data) { Loading Loading @@ -255,7 +249,7 @@ public: return false; } status_t outputBuffer( status_t OutputBufferQueue::outputBuffer( const C2ConstGraphicBlock& block, const BnGraphicBufferProducer::QueueBufferInput& input, BnGraphicBufferProducer::QueueBufferOutput* output) { Loading Loading @@ -325,41 +319,11 @@ public: return OK; } Impl *getPtr() { return this; } ~Impl() {} }; OutputBufferQueue::OutputBufferQueue(): mImpl(new Impl()) {} OutputBufferQueue::~OutputBufferQueue() {} bool OutputBufferQueue::configure(const sp<IGraphicBufferProducer>& igbp, uint32_t generation, uint64_t bqId) { return mImpl && mImpl->configure(igbp, generation, bqId); } status_t OutputBufferQueue::outputBuffer( const C2ConstGraphicBlock& block, const BnGraphicBufferProducer::QueueBufferInput& input, BnGraphicBufferProducer::QueueBufferOutput* output) { if (mImpl) { return mImpl->outputBuffer(block, input, output); } return DEAD_OBJECT; } void OutputBufferQueue::holdBufferQueueBlocks( const std::list<std::unique_ptr<C2Work>>& workList) { if (!mImpl) { return; } forEachBlock(workList, std::bind(&OutputBufferQueue::Impl::registerBuffer, mImpl->getPtr(), std::placeholders::_1)); std::bind(&OutputBufferQueue::registerBuffer, this, std::placeholders::_1)); } } // namespace utils Loading
media/codec2/hidl/1.0/utils/include/codec2/hidl/1.0/ClientBlockHelper.h→media/codec2/hidl/1.0/utils/include/codec2/hidl/1.0/OutputBufferQueue.h +15 −5 Original line number Diff line number Diff line Loading @@ -14,13 +14,15 @@ * limitations under the License. */ #ifndef CLIENT_BLOCK_HELPER_H #define CLIENT_BLOCK_HELPER_H #ifndef CODEC2_HIDL_V1_0_UTILS_OUTPUT_BUFFER_QUEUE #define CODEC2_HIDL_V1_0_UTILS_OUTPUT_BUFFER_QUEUE #include <gui/IGraphicBufferProducer.h> #include <codec2/hidl/1.0/types.h> #include <C2Work.h> struct C2_HIDE _C2BlockPoolData; namespace android { namespace hardware { namespace media { Loading Loading @@ -61,8 +63,16 @@ struct OutputBufferQueue { private: class Impl; std::unique_ptr<Impl> mImpl; std::mutex mMutex; sp<IGraphicBufferProducer> mIgbp; uint32_t mGeneration; uint64_t mBqId; std::shared_ptr<int> mOwner; // To migrate existing buffers sp<GraphicBuffer> mBuffers[BufferQueueDefs::NUM_BUFFER_SLOTS]; // find a better way std::weak_ptr<_C2BlockPoolData> mPoolDatas[BufferQueueDefs::NUM_BUFFER_SLOTS]; bool registerBuffer(const C2ConstGraphicBlock& block); }; } // namespace utils Loading @@ -72,4 +82,4 @@ private: } // namespace hardware } // namespace android #endif // CLIENT_BLOCK_HELPER_H #endif // CODEC2_HIDL_V1_0_UTILS_OUTPUT_BUFFER_QUEUE
media/codec2/hidl/client/include/codec2/hidl/client.h +1 −1 Original line number Diff line number Diff line Loading @@ -18,7 +18,7 @@ #define CODEC2_HIDL_CLIENT_H #include <gui/IGraphicBufferProducer.h> #include <codec2/hidl/1.0/ClientBlockHelper.h> #include <codec2/hidl/1.0/OutputBufferQueue.h> #include <C2PlatformSupport.h> #include <C2Component.h> #include <C2Buffer.h> Loading