Loading media/codec2/vndk/platform/C2IgbaBuffer.cpp +30 −16 Original line number Diff line number Diff line Loading @@ -192,28 +192,25 @@ c2_status_t C2IgbaBlockPool::fetchGraphicBlock( c2_status_t res = _fetchGraphicBlock( width, height, format, usage, kBlockingFetchTimeoutNs, &origId, block, &fence); if (res == C2_BLOCKING) { if (res == C2_TIMED_OUT) { // SyncFence waiting timeout. // Usually HAL treats C2_TIMED_OUT as an irrecoverable error. // We want HAL to re-try. return C2_BLOCKING; } if (res != C2_OK) { return res; } // TODO: bundle the fence to the block. Are API changes required? res = fence.wait(kSyncFenceWaitNs); if (res != C2_OK) { bool aidlRet = true; ::ndk::ScopedAStatus status = mIgba->deallocate(origId, &aidlRet); ALOGE("Waiting a sync fence failed %d aidl(%d: %d)", res, status.isOk(), aidlRet); } return C2_OK; } c2_status_t C2IgbaBlockPool::fetchGraphicBlock( uint32_t width, uint32_t height, uint32_t format, C2MemoryUsage usage, std::shared_ptr<C2GraphicBlock> *block, C2Fence *fence) { uint64_t origId; return _fetchGraphicBlock(width, height, format, usage, 0LL, &origId, block, fence); c2_status_t res = _fetchGraphicBlock(width, height, format, usage, 0LL, &origId, block, fence); if (res == C2_TIMED_OUT) { *fence = C2Fence(); return C2_BLOCKING; } return res; } c2_status_t C2IgbaBlockPool::_fetchGraphicBlock( Loading Loading @@ -263,10 +260,27 @@ c2_status_t C2IgbaBlockPool::_fetchGraphicBlock( } } *fence = _C2FenceFactory::CreateSyncFence(allocation.fence.release()); C2Fence syncFence = _C2FenceFactory::CreateSyncFence(allocation.fence.release()); AHardwareBuffer *ahwb = allocation.buffer.release(); // This is acquired. CHECK(AHardwareBuffer_getId(ahwb, origId) == ::android::OK); c2_status_t res = CreateGraphicBlockFromAhwb(ahwb, mAllocator, mIgba, block); // We are waiting for SyncFence here for backward compatibility. // H/W based Sync Fence could be returned to improve pipeline latency. // // TODO: Add a component configuration for returning sync fence // from fetchGraphicBlock() as the C2Fence output param(b/322283520). // In the case C2_OK along with GraphicBlock must be returned together. c2_status_t res = syncFence.wait(kSyncFenceWaitNs); if (res != C2_OK) { AHardwareBuffer_release(ahwb); bool aidlRet = true; ::ndk::ScopedAStatus status = mIgba->deallocate(*origId, &aidlRet); ALOGE("Waiting a sync fence failed %d aidl(%d: %d)", res, status.isOk(), aidlRet); return C2_TIMED_OUT; } res = CreateGraphicBlockFromAhwb(ahwb, mAllocator, mIgba, block); AHardwareBuffer_release(ahwb); if (res != C2_OK) { bool aidlRet = true; Loading Loading
media/codec2/vndk/platform/C2IgbaBuffer.cpp +30 −16 Original line number Diff line number Diff line Loading @@ -192,28 +192,25 @@ c2_status_t C2IgbaBlockPool::fetchGraphicBlock( c2_status_t res = _fetchGraphicBlock( width, height, format, usage, kBlockingFetchTimeoutNs, &origId, block, &fence); if (res == C2_BLOCKING) { if (res == C2_TIMED_OUT) { // SyncFence waiting timeout. // Usually HAL treats C2_TIMED_OUT as an irrecoverable error. // We want HAL to re-try. return C2_BLOCKING; } if (res != C2_OK) { return res; } // TODO: bundle the fence to the block. Are API changes required? res = fence.wait(kSyncFenceWaitNs); if (res != C2_OK) { bool aidlRet = true; ::ndk::ScopedAStatus status = mIgba->deallocate(origId, &aidlRet); ALOGE("Waiting a sync fence failed %d aidl(%d: %d)", res, status.isOk(), aidlRet); } return C2_OK; } c2_status_t C2IgbaBlockPool::fetchGraphicBlock( uint32_t width, uint32_t height, uint32_t format, C2MemoryUsage usage, std::shared_ptr<C2GraphicBlock> *block, C2Fence *fence) { uint64_t origId; return _fetchGraphicBlock(width, height, format, usage, 0LL, &origId, block, fence); c2_status_t res = _fetchGraphicBlock(width, height, format, usage, 0LL, &origId, block, fence); if (res == C2_TIMED_OUT) { *fence = C2Fence(); return C2_BLOCKING; } return res; } c2_status_t C2IgbaBlockPool::_fetchGraphicBlock( Loading Loading @@ -263,10 +260,27 @@ c2_status_t C2IgbaBlockPool::_fetchGraphicBlock( } } *fence = _C2FenceFactory::CreateSyncFence(allocation.fence.release()); C2Fence syncFence = _C2FenceFactory::CreateSyncFence(allocation.fence.release()); AHardwareBuffer *ahwb = allocation.buffer.release(); // This is acquired. CHECK(AHardwareBuffer_getId(ahwb, origId) == ::android::OK); c2_status_t res = CreateGraphicBlockFromAhwb(ahwb, mAllocator, mIgba, block); // We are waiting for SyncFence here for backward compatibility. // H/W based Sync Fence could be returned to improve pipeline latency. // // TODO: Add a component configuration for returning sync fence // from fetchGraphicBlock() as the C2Fence output param(b/322283520). // In the case C2_OK along with GraphicBlock must be returned together. c2_status_t res = syncFence.wait(kSyncFenceWaitNs); if (res != C2_OK) { AHardwareBuffer_release(ahwb); bool aidlRet = true; ::ndk::ScopedAStatus status = mIgba->deallocate(*origId, &aidlRet); ALOGE("Waiting a sync fence failed %d aidl(%d: %d)", res, status.isOk(), aidlRet); return C2_TIMED_OUT; } res = CreateGraphicBlockFromAhwb(ahwb, mAllocator, mIgba, block); AHardwareBuffer_release(ahwb); if (res != C2_OK) { bool aidlRet = true; Loading