rsGrallocConsumer.h revision 1c19f05bd67126598ae51f1cf4ef5e906039299f
1ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams/* 2ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams * Copyright (C) 2013 The Android Open Source Project 3ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams * 4ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams * you may not use this file except in compliance with the License. 6ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams * You may obtain a copy of the License at 7ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams * 8ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams * http://www.apache.org/licenses/LICENSE-2.0 9ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams * 10ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams * Unless required by applicable law or agreed to in writing, software 11ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams * See the License for the specific language governing permissions and 14ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams * limitations under the License. 15ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams */ 16ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams 17ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams#ifndef ANDROID_RS_GRALLOC_CONSUMER_H 18ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams#define ANDROID_RS_GRALLOC_CONSUMER_H 19ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams 2093d6bc872b7d9fba63abfa7513d56b38d9c3d371Chris Wailes#include <vector> 2193d6bc872b7d9fba63abfa7513d56b38d9c3d371Chris Wailes 22ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams#include <gui/ConsumerBase.h> 23ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams 24ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams#include <ui/GraphicBuffer.h> 25ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams 26ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams#include <utils/threads.h> 27ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams 28ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams 29ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams// --------------------------------------------------------------------------- 30ddceab9a001f07a3395226c5e06e3b420720af0fJason Samsnamespace android { 31ddceab9a001f07a3395226c5e06e3b420720af0fJason Samsnamespace renderscript { 32ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams 33ddceab9a001f07a3395226c5e06e3b420720af0fJason Samsclass Allocation; 34ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams 35ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams/** 36ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams * CpuConsumer is a BufferQueue consumer endpoint that allows direct CPU 37ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams * access to the underlying gralloc buffers provided by BufferQueue. Multiple 38ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams * buffers may be acquired by it at once, to be used concurrently by the 39ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams * CpuConsumer owner. Sets gralloc usage flags to be software-read-only. 40ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams * This queue is synchronous by default. 41ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams */ 42ddceab9a001f07a3395226c5e06e3b420720af0fJason Samsclass GrallocConsumer : public ConsumerBase 43ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams{ 44ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams public: 45ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams typedef ConsumerBase::FrameAvailableListener FrameAvailableListener; 46ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams 471c19f05bd67126598ae51f1cf4ef5e906039299fJason Sams GrallocConsumer(Allocation *, const sp<IGraphicBufferConsumer>& bq, int flags); 48ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams 49ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams virtual ~GrallocConsumer(); 50ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams status_t lockNextBuffer(); 51ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams status_t unlockBuffer(); 52ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams 53ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams private: 54ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams status_t releaseAcquiredBufferLocked(); 55ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams Allocation *mAlloc; 56ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams 57ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams // Tracking for buffers acquired by the user 58ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams struct AcquiredBuffer { 59ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams // Need to track the original mSlot index and the buffer itself because 60ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams // the mSlot entry may be freed/reused before the acquired buffer is 61ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams // released. 62ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams int mSlot; 63ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams sp<GraphicBuffer> mGraphicBuffer; 64ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams void *mBufferPointer; 65ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams 66ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams AcquiredBuffer() : 67ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams mSlot(BufferQueue::INVALID_BUFFER_SLOT), 6844bef6fba6244292b751387f3d6c31cca96c28adChris Wailes mBufferPointer(nullptr) { 69ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams } 70ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams }; 71ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams AcquiredBuffer mAcquiredBuffer; 72ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams}; 73ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams 74ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams} // namespace renderscript 75ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams} // namespace android 76ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams 77ddceab9a001f07a3395226c5e06e3b420720af0fJason Sams#endif // ANDROID_RS_GRALLOC_CONSUMER_H 78