aboutsummaryrefslogtreecommitdiff
path: root/components/VideoFramePool.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'components/VideoFramePool.cpp')
-rw-r--r--components/VideoFramePool.cpp41
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,