Change BufferQueue into producer/consumer wrapper

Now that BufferQueue has been split into core + producer + consumer,
rewrite BufferQueue to be a thin layer over a producer and consumer
interface. Eventually, this layer will be deprecated in favor of
only using either the producer or consumer interface, as applicable.

Change-Id: I340ae5f5b633b244fb594615ff52ba50b9e2f7e4
diff --git a/include/gui/BufferQueueProducer.h b/include/gui/BufferQueueProducer.h
index 7f063aa..8912097 100644
--- a/include/gui/BufferQueueProducer.h
+++ b/include/gui/BufferQueueProducer.h
@@ -17,7 +17,7 @@
 #ifndef ANDROID_GUI_BUFFERQUEUEPRODUCER_H
 #define ANDROID_GUI_BUFFERQUEUEPRODUCER_H
 
-#include <gui/BufferQueueCore.h>
+#include <gui/BufferQueueDefs.h>
 #include <gui/IGraphicBufferProducer.h>
 
 namespace android {
@@ -26,8 +26,9 @@
 
 class BufferQueueProducer : public BnGraphicBufferProducer,
                             private IBinder::DeathRecipient {
-
 public:
+    friend class BufferQueue; // Needed to access binderDied
+
     BufferQueueProducer(const sp<BufferQueueCore>& core);
     virtual ~BufferQueueProducer();
 
@@ -151,7 +152,9 @@
     virtual void binderDied(const wp<IBinder>& who);
 
     sp<BufferQueueCore> mCore;
-    BufferQueueCore::SlotsType& mSlots;
+
+    // This references mCore->mSlots. Lock mCore->mMutex while accessing.
+    BufferQueueDefs::SlotsType& mSlots;
 
     // This is a cached copy of the name stored in the BufferQueueCore.
     // It's updated during connect and dequeueBuffer (which should catch