summaryrefslogtreecommitdiffstats
path: root/services/surfaceflinger/SurfaceFlingerConsumer.h
diff options
context:
space:
mode:
authorAndy McFadden <fadden@android.com>2012-12-04 16:51:15 -0800
committerAndy McFadden <fadden@android.com>2012-12-11 09:42:51 -0800
commitbf974abe92f7495529916fe0f483f3b56e7c30e3 (patch)
tree147906c9c1e1f7f67dba5c8965c9c5d507a93b91 /services/surfaceflinger/SurfaceFlingerConsumer.h
parent0e1e53e376ccb3c173ff8e5efeab39b2c5dfd6bd (diff)
downloadframeworks_native-bf974abe92f7495529916fe0f483f3b56e7c30e3.zip
frameworks_native-bf974abe92f7495529916fe0f483f3b56e7c30e3.tar.gz
frameworks_native-bf974abe92f7495529916fe0f483f3b56e7c30e3.tar.bz2
Refactor SurfaceTexture a bit.
Rearranges updateTexImage() so that the SurfaceFlinger-specific behavior is in a new SurfaceFlingerConsumer subclass. SurfaceTexture behavior should not be altered. Instead of acquire-bind-release we now do acquire-release-bind, but since it's all done with the lock held there shouldn't be any externally-visible change. Change-Id: Ia566e4727945e2cfb9359fc6d2a8f8af64d7b7b7
Diffstat (limited to 'services/surfaceflinger/SurfaceFlingerConsumer.h')
-rw-r--r--services/surfaceflinger/SurfaceFlingerConsumer.h59
1 files changed, 59 insertions, 0 deletions
diff --git a/services/surfaceflinger/SurfaceFlingerConsumer.h b/services/surfaceflinger/SurfaceFlingerConsumer.h
new file mode 100644
index 0000000..d91f27e
--- /dev/null
+++ b/services/surfaceflinger/SurfaceFlingerConsumer.h
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2012 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_SURFACEFLINGERCONSUMER_H
+#define ANDROID_SURFACEFLINGERCONSUMER_H
+
+#include <gui/SurfaceTexture.h>
+
+namespace android {
+// ----------------------------------------------------------------------------
+
+/*
+ * This is a thin wrapper around SurfaceTexture.
+ */
+class SurfaceFlingerConsumer : public SurfaceTexture {
+public:
+ SurfaceFlingerConsumer(GLuint tex, bool allowSynchronousMode = true,
+ GLenum texTarget = GL_TEXTURE_EXTERNAL_OES, bool useFenceSync = true,
+ const sp<BufferQueue> &bufferQueue = 0)
+ : SurfaceTexture(tex, allowSynchronousMode, texTarget, useFenceSync,
+ bufferQueue)
+ {}
+
+ class BufferRejecter {
+ friend class SurfaceFlingerConsumer;
+ virtual bool reject(const sp<GraphicBuffer>& buf,
+ const BufferQueue::BufferItem& item) = 0;
+
+ protected:
+ virtual ~BufferRejecter() { }
+ };
+
+ // This version of updateTexImage() takes a functor that may be used to
+ // reject the newly acquired buffer. Unlike the SurfaceTexture version,
+ // this does not guarantee that the buffer has been bound to the GL
+ // texture.
+ status_t updateTexImage(BufferRejecter* rejecter);
+
+ // Pass-through to SurfaceTexture implementation.
+ status_t bindTextureImage() { return SurfaceTexture::bindTextureImage(); }
+};
+
+// ----------------------------------------------------------------------------
+}; // namespace android
+
+#endif // ANDROID_SURFACEFLINGERCONSUMER_H