summaryrefslogtreecommitdiff
path: root/rsGrallocConsumer.h
diff options
context:
space:
mode:
authorJason Sams <jsams@google.com>2013-08-07 13:02:32 -0700
committerJason Sams <jsams@google.com>2013-08-07 13:02:32 -0700
commitddceab9a001f07a3395226c5e06e3b420720af0f (patch)
tree1ad02205c75ba84552509c3748fb68d28b5b2a91 /rsGrallocConsumer.h
parent126adc5dee94b157b0040ab3c543af02d4277990 (diff)
downloadrs-ddceab9a001f07a3395226c5e06e3b420720af0f.tar.gz
Refactor hal to remove cpuConsumer from drivers
This CL should minimize build breaks due to BufferQueue changes in the future. Change-Id: I565a6eae5cc25603741fef32f2cfcb31a32eb757
Diffstat (limited to 'rsGrallocConsumer.h')
-rw-r--r--rsGrallocConsumer.h78
1 files changed, 78 insertions, 0 deletions
diff --git a/rsGrallocConsumer.h b/rsGrallocConsumer.h
new file mode 100644
index 00000000..9e4fc586
--- /dev/null
+++ b/rsGrallocConsumer.h
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ANDROID_RS_GRALLOC_CONSUMER_H
+#define ANDROID_RS_GRALLOC_CONSUMER_H
+
+#include <gui/ConsumerBase.h>
+
+#include <ui/GraphicBuffer.h>
+
+#include <utils/String8.h>
+#include <utils/Vector.h>
+#include <utils/threads.h>
+
+
+// ---------------------------------------------------------------------------
+namespace android {
+namespace renderscript {
+
+class Allocation;
+
+/**
+ * CpuConsumer is a BufferQueue consumer endpoint that allows direct CPU
+ * access to the underlying gralloc buffers provided by BufferQueue. Multiple
+ * buffers may be acquired by it at once, to be used concurrently by the
+ * CpuConsumer owner. Sets gralloc usage flags to be software-read-only.
+ * This queue is synchronous by default.
+ */
+class GrallocConsumer : public ConsumerBase
+{
+ public:
+ typedef ConsumerBase::FrameAvailableListener FrameAvailableListener;
+
+ GrallocConsumer(Allocation *, const sp<IGraphicBufferConsumer>& bq);
+
+ virtual ~GrallocConsumer();
+ status_t lockNextBuffer();
+ status_t unlockBuffer();
+
+ private:
+ status_t releaseAcquiredBufferLocked();
+ Allocation *mAlloc;
+
+ // Tracking for buffers acquired by the user
+ struct AcquiredBuffer {
+ // Need to track the original mSlot index and the buffer itself because
+ // the mSlot entry may be freed/reused before the acquired buffer is
+ // released.
+ int mSlot;
+ sp<GraphicBuffer> mGraphicBuffer;
+ void *mBufferPointer;
+
+ AcquiredBuffer() :
+ mSlot(BufferQueue::INVALID_BUFFER_SLOT),
+ mBufferPointer(NULL) {
+ }
+ };
+ AcquiredBuffer mAcquiredBuffer;
+};
+
+} // namespace renderscript
+} // namespace android
+
+#endif // ANDROID_RS_GRALLOC_CONSUMER_H
+