OSDN Git Service

Bug 5249076 When starting to stream, have at least one buffer in shared mem
[android-x86/system-media.git] / wilhelm / src / android / android_StreamPlayer.h
index 30014b0..2bd745c 100644 (file)
  * limitations under the License.
  */
 
+#include <media/IStreamSource.h>
 #include <binder/IServiceManager.h>
+#include "android/android_GenericMediaPlayer.h"
 
+// number of SLuint32 fields to store a buffer event message in an item, by mapping each
+//   to the item key (SLuint32), the item size (SLuint32), and the item data (mask on SLuint32)
+#define NB_BUFFEREVENT_ITEM_FIELDS 3
 
 //--------------------------------------------------------------------------------------------------
 namespace android {
@@ -26,9 +31,13 @@ public:
     StreamSourceAppProxy(
             const void* user, bool userIsAudioPlayer,
             void *appContext,
-            const void *caller);
+            const void *caller,
+            const sp<CallbackProtector> &callbackProtector);
     virtual ~StreamSourceAppProxy();
 
+    // store an item structure to indicate a processed buffer
+    static const SLuint32 kItemProcessed[NB_BUFFEREVENT_ITEM_FIELDS];
+
     // IStreamSource implementation
     virtual void setListener(const sp<IStreamListener> &listener);
     virtual void setBuffers(const Vector<sp<IMemory> > &buffers);
@@ -57,6 +66,8 @@ private:
     void *mAppContext;
     const void *mCaller;
 
+    sp<CallbackProtector> mCallbackProtector;
+
     DISALLOW_EVIL_CONSTRUCTORS(StreamSourceAppProxy);
 };
 
@@ -76,7 +87,7 @@ public:
             void *context,
             const void *caller);
     void queueRefilled_l();
-    void appClear();
+    void appClear_l();
 
 protected:
 
@@ -89,6 +100,7 @@ protected:
 
     // overridden from GenericMediaPlayer
     virtual void onPrepare();
+    virtual void onPlay();
 
     void onQueueRefilled();
 
@@ -108,4 +120,3 @@ private:
  */
 extern void android_StreamPlayer_realize_l(CAudioPlayer *ap, const notif_cbf_t cbf,
         void* notifUser);
-extern void android_StreamPlayer_clear_l(CAudioPlayer *ap);