diff options
Diffstat (limited to 'components/VideoFramePool.cpp')
-rw-r--r-- | components/VideoFramePool.cpp | 41 |
1 files changed, 15 insertions, 26 deletions
diff --git a/components/VideoFramePool.cpp b/components/VideoFramePool.cpp index 665ff73..b6bbfab 100644 --- a/components/VideoFramePool.cpp +++ b/components/VideoFramePool.cpp @@ -26,15 +26,14 @@ using android::hardware::graphics::common::V1_0::BufferUsage; namespace android { // static -std::optional<uint32_t> VideoFramePool::getBufferIdFromGraphicBlock(C2BlockPool& blockPool, +std::optional<uint32_t> VideoFramePool::getBufferIdFromGraphicBlock(const C2BlockPool& blockPool, const C2Block2D& block) { ALOGV("%s() blockPool.getAllocatorId() = %u", __func__, blockPool.getAllocatorId()); if (blockPool.getAllocatorId() == android::V4L2AllocatorId::V4L2_BUFFERPOOL) { return C2VdaPooledBlockPool::getBufferIdFromGraphicBlock(block); } else if (blockPool.getAllocatorId() == C2PlatformAllocatorStore::BUFFERQUEUE) { - C2VdaBqBlockPool* bqPool = static_cast<C2VdaBqBlockPool*>(&blockPool); - return bqPool->getBufferIdFromGraphicBlock(block); + return C2VdaBqBlockPool::getBufferIdFromGraphicBlock(block); } ALOGE("%s(): unknown allocator ID: %u", __func__, blockPool.getAllocatorId()); @@ -42,9 +41,7 @@ std::optional<uint32_t> VideoFramePool::getBufferIdFromGraphicBlock(C2BlockPool& } // static -c2_status_t VideoFramePool::requestNewBufferSet(C2BlockPool& blockPool, int32_t bufferCount, - const ui::Size& size, uint32_t format, - C2MemoryUsage usage) { +c2_status_t VideoFramePool::requestNewBufferSet(C2BlockPool& blockPool, int32_t bufferCount) { ALOGV("%s() blockPool.getAllocatorId() = %u", __func__, blockPool.getAllocatorId()); if (blockPool.getAllocatorId() == android::V4L2AllocatorId::V4L2_BUFFERPOOL) { @@ -52,7 +49,7 @@ c2_status_t VideoFramePool::requestNewBufferSet(C2BlockPool& blockPool, int32_t return bpPool->requestNewBufferSet(bufferCount); } else if (blockPool.getAllocatorId() == C2PlatformAllocatorStore::BUFFERQUEUE) { C2VdaBqBlockPool* bqPool = static_cast<C2VdaBqBlockPool*>(&blockPool); - return bqPool->requestNewBufferSet(bufferCount, size.width, size.height, format, usage); + return bqPool->requestNewBufferSet(bufferCount); } ALOGE("%s(): unknown allocator ID: %u", __func__, blockPool.getAllocatorId()); @@ -72,40 +69,31 @@ bool VideoFramePool::setNotifyBlockAvailableCb(C2BlockPool& blockPool, ::base::O // static std::unique_ptr<VideoFramePool> VideoFramePool::Create( - std::shared_ptr<C2BlockPool> blockPool, const size_t numBuffers, const ui::Size& size, + std::shared_ptr<C2BlockPool> blockPool, const size_t numBuffers, const media::Size& size, HalPixelFormat pixelFormat, bool isSecure, scoped_refptr<::base::SequencedTaskRunner> taskRunner) { ALOG_ASSERT(blockPool != nullptr); - uint64_t usage = static_cast<uint64_t>(BufferUsage::VIDEO_DECODER); - if (isSecure) { - usage |= C2MemoryUsage::READ_PROTECTED; - } else if (blockPool->getAllocatorId() == android::V4L2AllocatorId::V4L2_BUFFERPOOL) { - // CPU access to buffers is only required in byte buffer mode. - usage |= C2MemoryUsage::CPU_READ; - } - const C2MemoryUsage memoryUsage(usage); - - if (requestNewBufferSet(*blockPool, numBuffers, size, static_cast<uint32_t>(pixelFormat), - memoryUsage) != C2_OK) { + if (requestNewBufferSet(*blockPool, numBuffers) != C2_OK) { return nullptr; } std::unique_ptr<VideoFramePool> pool = ::base::WrapUnique(new VideoFramePool( - std::move(blockPool), size, pixelFormat, memoryUsage, std::move(taskRunner))); + std::move(blockPool), size, pixelFormat, isSecure, std::move(taskRunner))); if (!pool->initialize()) return nullptr; return pool; } -VideoFramePool::VideoFramePool(std::shared_ptr<C2BlockPool> blockPool, const ui::Size& size, - HalPixelFormat pixelFormat, C2MemoryUsage memoryUsage, +VideoFramePool::VideoFramePool(std::shared_ptr<C2BlockPool> blockPool, const media::Size& size, + HalPixelFormat pixelFormat, bool isSecure, scoped_refptr<::base::SequencedTaskRunner> taskRunner) : mBlockPool(std::move(blockPool)), mSize(size), mPixelFormat(pixelFormat), - mMemoryUsage(memoryUsage), + mMemoryUsage(isSecure ? C2MemoryUsage::READ_PROTECTED : C2MemoryUsage::CPU_READ, + static_cast<uint64_t>(BufferUsage::VIDEO_DECODER)), mClientTaskRunner(std::move(taskRunner)) { - ALOGV("%s(size=%dx%d)", __func__, size.width, size.height); + ALOGV("%s(size=%dx%d)", __func__, size.width(), size.height()); ALOG_ASSERT(mClientTaskRunner->RunsTasksInCurrentSequence()); DCHECK(mBlockPool); DCHECK(mClientTaskRunner); @@ -180,8 +168,9 @@ void VideoFramePool::getVideoFrameTask() { static size_t sDelay = kFetchRetryDelayInit; std::shared_ptr<C2GraphicBlock> block; - c2_status_t err = mBlockPool->fetchGraphicBlock( - mSize.width, mSize.height, static_cast<uint32_t>(mPixelFormat), mMemoryUsage, &block); + c2_status_t err = mBlockPool->fetchGraphicBlock(mSize.width(), mSize.height(), + static_cast<uint32_t>(mPixelFormat), + mMemoryUsage, &block); if (err == C2_TIMED_OUT || err == C2_BLOCKING) { if (setNotifyBlockAvailableCb(*mBlockPool, ::base::BindOnce(&VideoFramePool::getVideoFrameTaskThunk, |