diff --git a/src/Android.mk b/src/Android.mk
index 93f85a0..9c69bfa 100644
--- a/src/Android.mk
+++ b/src/Android.mk
@@ -162,7 +162,7 @@
         system/media/wilhelm/include                                \
         frameworks/base/media/libstagefright                        \
         frameworks/base/media/libstagefright/include                \
-        frameworks/base/include/media/stagefright/openmax           \
+        frameworks/native/include/media/openmax                     \
         system/media/audio_effects/include
 
 # __pthread_gettid
@@ -202,7 +202,7 @@
         system/media/wilhelm/include                                \
         frameworks/base/media/libstagefright                        \
         frameworks/base/media/libstagefright/include                \
-        frameworks/base/include/media/stagefright/openmax
+        frameworks/native/include/media/openmax
 LOCAL_MODULE := libOpenSLES
 LOCAL_PRELINK_MODULE := false
 LOCAL_MODULE_TAGS := optional
@@ -217,7 +217,7 @@
         system/media/wilhelm/include                                \
         frameworks/base/media/libstagefright                        \
         frameworks/base/media/libstagefright/include                \
-        frameworks/base/include/media/stagefright/openmax
+        frameworks/native/include/media/openmax
 LOCAL_MODULE := libOpenMAXAL
 LOCAL_PRELINK_MODULE := false
 LOCAL_MODULE_TAGS := optional
diff --git a/src/android/AudioPlayer_to_android.cpp b/src/android/AudioPlayer_to_android.cpp
index 0e8a8be..ae526fe 100644
--- a/src/android/AudioPlayer_to_android.cpp
+++ b/src/android/AudioPlayer_to_android.cpp
@@ -448,7 +448,7 @@
         SLresult result = EnqueueAsyncCallback_ppi(ap, playCallback, &ap->mPlay.mItf, playContext,
                 SL_PLAYEVENT_HEADATEND);
         if (SL_RESULT_SUCCESS != result) {
-            LOGW("Callback %p(%p, %p, SL_PLAYEVENT_HEADATEND) dropped", playCallback,
+            ALOGW("Callback %p(%p, %p, SL_PLAYEVENT_HEADATEND) dropped", playCallback,
                     &ap->mPlay.mItf, playContext);
         }
 #endif
@@ -462,7 +462,7 @@
     SLresult result = SL_RESULT_SUCCESS;
     SL_LOGV("type %d", type);
 
-    int newStreamType = ANDROID_DEFAULT_OUTPUT_STREAM_TYPE;
+    audio_stream_type_t newStreamType = ANDROID_DEFAULT_OUTPUT_STREAM_TYPE;
     switch(type) {
     case SL_ANDROID_STREAM_VOICE:
         newStreamType = AUDIO_STREAM_VOICE_CALL;
@@ -544,12 +544,6 @@
 
 
 //-----------------------------------------------------------------------------
-void audioPlayer_setInvalid(CAudioPlayer* ap) {
-    ap->mAndroidObjType = INVALID_TYPE;
-}
-
-
-//-----------------------------------------------------------------------------
 /*
  * returns true if the given data sink is supported by AudioPlayer that doesn't
  *   play to an OutputMix object, false otherwise
@@ -831,7 +825,7 @@
             SLresult result = EnqueueAsyncCallback_ppi(ap, callback, &ap->mPlay.mItf,
                     callbackPContext, event);
             if (SL_RESULT_SUCCESS != result) {
-                LOGW("Callback %p(%p, %p, 0x%x) dropped", callback,
+                ALOGW("Callback %p(%p, %p, 0x%x) dropped", callback,
                         &ap->mPlay.mItf, callbackPContext, event);
             }
 #endif
@@ -1251,53 +1245,48 @@
 
 
 //-----------------------------------------------------------------------------
-SLresult android_audioPlayer_create(CAudioPlayer *pAudioPlayer) {
+void android_audioPlayer_create(CAudioPlayer *pAudioPlayer) {
 
-    SLresult result = SL_RESULT_SUCCESS;
-    // pAudioPlayer->mAndroidObjType has been set in audioPlayer_getAndroidObjectTypeForSourceSink()
-    if (INVALID_TYPE == pAudioPlayer->mAndroidObjType) {
-        audioPlayer_setInvalid(pAudioPlayer);
-        result = SL_RESULT_PARAMETER_INVALID;
-    } else {
+    // pAudioPlayer->mAndroidObjType has been set in android_audioPlayer_checkSourceSink()
+    // and if it was == INVALID_TYPE, then IEngine_CreateAudioPlayer would never call us
+    assert(INVALID_TYPE != pAudioPlayer->mAndroidObjType);
 
-        // These initializations are in the same order as the field declarations in classes.h
+    // These initializations are in the same order as the field declarations in classes.h
 
-        // FIXME Consolidate initializations (many of these already in IEngine_CreateAudioPlayer)
-        // mAndroidObjType: see above comment
-        pAudioPlayer->mAndroidObjState = ANDROID_UNINITIALIZED;
-        pAudioPlayer->mSessionId = android::AudioSystem::newAudioSessionId();
-        pAudioPlayer->mStreamType = ANDROID_DEFAULT_OUTPUT_STREAM_TYPE;
+    // FIXME Consolidate initializations (many of these already in IEngine_CreateAudioPlayer)
+    // mAndroidObjType: see above comment
+    pAudioPlayer->mAndroidObjState = ANDROID_UNINITIALIZED;
+    pAudioPlayer->mSessionId = android::AudioSystem::newAudioSessionId();
 
-        // mAudioTrack
-        pAudioPlayer->mCallbackProtector = new android::CallbackProtector();
-        // mAPLayer
-        // mAuxEffect
+    // placeholder: not necessary yet as session ID lifetime doesn't extend beyond player
+    // android::AudioSystem::acquireAudioSessionId(pAudioPlayer->mSessionId);
 
-        pAudioPlayer->mAuxSendLevel = 0;
-        pAudioPlayer->mAmplFromDirectLevel = 1.0f; // matches initial mDirectLevel value
-        pAudioPlayer->mDeferredStart = false;
+    pAudioPlayer->mStreamType = ANDROID_DEFAULT_OUTPUT_STREAM_TYPE;
 
-        // Already initialized in IEngine_CreateAudioPlayer, to be consolidated
-        pAudioPlayer->mDirectLevel = 0; // no attenuation
+    // mAudioTrack
+    pAudioPlayer->mCallbackProtector = new android::CallbackProtector();
+    // mAPLayer
+    // mAuxEffect
 
-        // This section re-initializes interface-specific fields that
-        // can be set or used regardless of whether the interface is
-        // exposed on the AudioPlayer or not
+    pAudioPlayer->mAuxSendLevel = 0;
+    pAudioPlayer->mAmplFromDirectLevel = 1.0f; // matches initial mDirectLevel value
+    pAudioPlayer->mDeferredStart = false;
 
-        // Only AudioTrack supports a non-trivial playback rate
-        switch (pAudioPlayer->mAndroidObjType) {
-        case AUDIOPLAYER_FROM_PCM_BUFFERQUEUE:
-            pAudioPlayer->mPlaybackRate.mMinRate = AUDIOTRACK_MIN_PLAYBACKRATE_PERMILLE;
-            pAudioPlayer->mPlaybackRate.mMaxRate = AUDIOTRACK_MAX_PLAYBACKRATE_PERMILLE;
-            break;
-        default:
-            // use the default range
-            break;
-        }
+    // This section re-initializes interface-specific fields that
+    // can be set or used regardless of whether the interface is
+    // exposed on the AudioPlayer or not
 
+    // Only AudioTrack supports a non-trivial playback rate
+    switch (pAudioPlayer->mAndroidObjType) {
+    case AUDIOPLAYER_FROM_PCM_BUFFERQUEUE:
+        pAudioPlayer->mPlaybackRate.mMinRate = AUDIOTRACK_MIN_PLAYBACKRATE_PERMILLE;
+        pAudioPlayer->mPlaybackRate.mMaxRate = AUDIOTRACK_MAX_PLAYBACKRATE_PERMILLE;
+        break;
+    default:
+        // use the default range
+        break;
     }
 
-    return result;
 }
 
 
@@ -1308,7 +1297,7 @@
     SLresult result;
 
     assert(NULL != ap && NULL != configKey && NULL != pConfigValue);
-    if(strcmp((const char*)configKey, (const char*)SL_ANDROID_KEY_STREAM_TYPE) == 0) {
+    if (strcmp((const char*)configKey, (const char*)SL_ANDROID_KEY_STREAM_TYPE) == 0) {
 
         // stream type
         if (KEY_STREAM_TYPE_PARAMSIZE > valueSize) {
@@ -1334,7 +1323,7 @@
     SLresult result;
 
     assert(NULL != ap && NULL != configKey && NULL != pValueSize);
-    if(strcmp((const char*)configKey, (const char*)SL_ANDROID_KEY_STREAM_TYPE) == 0) {
+    if (strcmp((const char*)configKey, (const char*)SL_ANDROID_KEY_STREAM_TYPE) == 0) {
 
         // stream type
         if (NULL == pConfigValue) {
@@ -1389,7 +1378,7 @@
                 sles_to_android_channelMaskOut(df_pcm->numChannels, df_pcm->channelMask),
                                                                      //channel mask
                 0,                                                   // frameCount (here min)
-                0,                                                   // flags
+                AUDIO_POLICY_OUTPUT_FLAG_NONE,                       // flags
                 audioTrack_callBack_pullFromBuffQueue,               // callback
                 (void *) pAudioPlayer,                               // user
                 0      // FIXME find appropriate frame count         // notificationFrame
@@ -1639,10 +1628,10 @@
         break;
     }
 
-    pAudioPlayer->mCallbackProtector.clear();
+    // placeholder: not necessary yet as session ID lifetime doesn't extend beyond player
+    // android::AudioSystem::releaseAudioSessionId(pAudioPlayer->mSessionId);
 
-    // FIXME might not be needed
-    pAudioPlayer->mAndroidObjType = INVALID_TYPE;
+    pAudioPlayer->mCallbackProtector.clear();
 
     // explicit destructor
     pAudioPlayer->mAudioTrack.~sp();
diff --git a/src/android/AudioPlayer_to_android.h b/src/android/AudioPlayer_to_android.h
index 430b622..12113b5 100644
--- a/src/android/AudioPlayer_to_android.h
+++ b/src/android/AudioPlayer_to_android.h
@@ -28,14 +28,9 @@
 extern SLresult android_audioPlayer_checkSourceSink(CAudioPlayer *pAudioPlayer);
 
 /*
- * Determines the Android media framework object that maps to the given audio source and sink.
- * Return
- *     SL_RESULT_SUCCESS if the Android resources were successfully created
- *     SL_PARAMETER_INVALID if the Android resources couldn't be created due to an invalid or
- *         unsupported parameter or value
- *     SL_RESULT_CONTENT_UNSUPPORTED if a format is not supported (e.g. sample rate too high)
+ * Finish the Android-specific pre-Realize initialization of a CAudioPlayer.
  */
-extern SLresult android_audioPlayer_create(CAudioPlayer *pAudioPlayer);
+extern void android_audioPlayer_create(CAudioPlayer *pAudioPlayer);
 
 /*
  * Allocates and initializes the Android media framework objects intended to be used with the
diff --git a/src/android/AudioRecorder_to_android.cpp b/src/android/AudioRecorder_to_android.cpp
index d7bafcb..326b8c9 100644
--- a/src/android/AudioRecorder_to_android.cpp
+++ b/src/android/AudioRecorder_to_android.cpp
@@ -39,7 +39,7 @@
 SLresult audioRecorder_setPreset(CAudioRecorder* ar, SLuint32 recordPreset) {
     SLresult result = SL_RESULT_SUCCESS;
 
-    int newRecordSource = AUDIO_SOURCE_DEFAULT;
+    audio_source_t newRecordSource = AUDIO_SOURCE_DEFAULT;
     switch (recordPreset) {
     case SL_ANDROID_RECORDING_PRESET_GENERIC:
         newRecordSource = AUDIO_SOURCE_DEFAULT;
@@ -328,7 +328,7 @@
     SLresult result;
 
     assert(NULL != ar && NULL != configKey && NULL != pConfigValue);
-    if(strcmp((const char*)configKey, (const char*)SL_ANDROID_KEY_RECORDING_PRESET) == 0) {
+    if (strcmp((const char*)configKey, (const char*)SL_ANDROID_KEY_RECORDING_PRESET) == 0) {
 
         // recording preset
         if (KEY_RECORDING_PRESET_PARAMSIZE > valueSize) {
@@ -354,7 +354,7 @@
     SLresult result;
 
     assert(NULL != ar && NULL != configKey && NULL != pValueSize);
-    if(strcmp((const char*)configKey, (const char*)SL_ANDROID_KEY_RECORDING_PRESET) == 0) {
+    if (strcmp((const char*)configKey, (const char*)SL_ANDROID_KEY_RECORDING_PRESET) == 0) {
 
         // recording preset
         if (NULL == pConfigValue) {
@@ -401,7 +401,7 @@
             sles_to_android_channelMaskIn(ar->mNumChannels, 0 /*no channel mask*/),
                                    // channel config
             0,                     //frameCount min
-            0,                     // flags
+            (android::AudioRecord::record_flags) 0, // flags
             audioRecorder_callback,// callback_t
             (void*)ar,             // user, callback data, here the AudioRecorder
             0,                     // notificationFrames
diff --git a/src/android/BufferQueueSource.cpp b/src/android/BufferQueueSource.cpp
index 9257f53..6cf04fb 100644
--- a/src/android/BufferQueueSource.cpp
+++ b/src/android/BufferQueueSource.cpp
@@ -19,7 +19,7 @@
 #include "sles_allinclusive.h"
 #include "android/BufferQueueSource.h"
 
-#include <media/stagefright/MediaDebug.h>
+#include <media/stagefright/foundation/ADebug.h>
 #include <sys/types.h>
 #include <unistd.h>
 #include <sys/types.h>
@@ -94,7 +94,7 @@
         }
 
         //assert(mStreamToBqOffset <= offset);
-        CHECK(mStreamToBqOffset <= offset);
+        CHECK_LE(mStreamToBqOffset, offset);
 
         if (offset + size <= mStreamToBqOffset + oldFront->mDataSize) {
             pSrc = ((char*)oldFront->mDataBuffer) + (offset - mStreamToBqOffset);
diff --git a/src/android/MediaPlayer_to_android.cpp b/src/android/MediaPlayer_to_android.cpp
index 692aa5c..981a6bd 100644
--- a/src/android/MediaPlayer_to_android.cpp
+++ b/src/android/MediaPlayer_to_android.cpp
@@ -14,15 +14,17 @@
  * limitations under the License.
  */
 
+#include <system/window.h>
+#include <utils/StrongPointer.h>
+#include <gui/Surface.h>
+
 #include "sles_allinclusive.h"
-#include "utils/RefBase.h"
 #include "android_prompts.h"
 // LocAVPlayer and StreamPlayer derive from GenericMediaPlayer,
 //    so no need to #include "android_GenericMediaPlayer.h"
 #include "android_LocAVPlayer.h"
 #include "android_StreamPlayer.h"
 
-
 //-----------------------------------------------------------------------------
 static void player_handleMediaPlayerEventNotifications(int event, int data1, int data2, void* user)
 {
@@ -142,7 +144,7 @@
                     /*i2*/ 1 /*streamIndex, only one stream supported here, 0 is reserved*/,
                     /*p2*/ NULL /*pEventData, always NULL in OpenMAX AL 1.0.1*/,
                     /*p3*/ callbackPContext /*pContext*/);
-            LOGW_IF(SL_RESULT_SUCCESS != res,
+            ALOGW_IF(SL_RESULT_SUCCESS != res,
                         "Callback %p(%p, XA_STREAMCBEVENT_PROPERTYCHANGE, 1, NULL, %p) dropped",
                         callback, &mp->mStreamInfo.mItf, callbackPContext);
 #endif
@@ -172,7 +174,7 @@
 #else
             SLresult res = EnqueueAsyncCallback_ppi(mp, playCallback, &mp->mPlay.mItf, playContext,
                     XA_PLAYEVENT_HEADATEND);
-            LOGW_IF(SL_RESULT_SUCCESS != res,
+            ALOGW_IF(SL_RESULT_SUCCESS != res,
                     "Callback %p(%p, %p, SL_PLAYEVENT_HEADATEND) dropped", playCallback,
                     &mp->mPlay.mItf, playContext);
 #endif
@@ -382,6 +384,7 @@
         break;
     case XA_DATALOCATOR_ADDRESS: // intended fall-through
     default:
+        mp->mAndroidObjType = INVALID_TYPE;
         SL_LOGE("Unable to create MediaPlayer for data source locator 0x%x", sourceLocator);
         result = XA_RESULT_PARAMETER_INVALID;
         break;
@@ -392,6 +395,9 @@
     mp->mStreamType = ANDROID_DEFAULT_OUTPUT_STREAM_TYPE;
     mp->mSessionId = android::AudioSystem::newAudioSessionId();
 
+    // placeholder: not necessary yet as session ID lifetime doesn't extend beyond player
+    // android::AudioSystem::acquireAudioSessionId(mp->mSessionId);
+
     mp->mCallbackProtector = new android::CallbackProtector();
 
     return result;
@@ -490,6 +496,10 @@
     SL_LOGV("android_Player_destroy(%p)", mp);
 
     mp->mAVPlayer.clear();
+
+    // placeholder: not necessary yet as session ID lifetime doesn't extend beyond player
+    // android::AudioSystem::releaseAudioSessionId(mp->mSessionId);
+
     mp->mCallbackProtector.clear();
 
     // explicit destructor
diff --git a/src/android/MediaPlayer_to_android.h b/src/android/MediaPlayer_to_android.h
index e83439d..1b491cb 100644
--- a/src/android/MediaPlayer_to_android.h
+++ b/src/android/MediaPlayer_to_android.h
@@ -14,9 +14,7 @@
  * limitations under the License.
  */
 
-#include <surfaceflinger/Surface.h>
-#include <gui/ISurfaceTexture.h>
-
+#include <system/window.h>
 
 /**************************************************************************************************
  * Player lifecycle
diff --git a/src/android/VideoCodec_to_android.cpp b/src/android/VideoCodec_to_android.cpp
index 5f3deaa..113bd8c 100644
--- a/src/android/VideoCodec_to_android.cpp
+++ b/src/android/VideoCodec_to_android.cpp
@@ -65,7 +65,7 @@
 
     sp<IOMX> omx(service->getOMX());
     if (omx.get() == NULL) {
-        LOGE("android_videoCodec_expose() couldn't access OMX interface");
+        ALOGE("android_videoCodec_expose() couldn't access OMX interface");
         return false;
     }
 
diff --git a/src/android/android_AudioSfDecoder.cpp b/src/android/android_AudioSfDecoder.cpp
index a29f09f..1a50ccb 100644
--- a/src/android/android_AudioSfDecoder.cpp
+++ b/src/android/android_AudioSfDecoder.cpp
@@ -488,7 +488,7 @@
             mDecodeBuffer->release();
             mDecodeBuffer = NULL;
         }
-        if(!mAudioSourceStarted) {
+        if (!mAudioSourceStarted) {
             return;
         }
         err = mAudioSource->read(&mDecodeBuffer, &readOptions);
@@ -696,7 +696,7 @@
 
             //   fill level is ratio of how much has been played + how much is
             //   cached, divided by total duration
-            uint32_t currentPositionUsec = getPositionUsec();
+            int64_t currentPositionUsec = getPositionUsec();
             if (currentPositionUsec == ANDROID_UNKNOWN_TIME) {
                 // if we don't know where we are, assume the worst for the fill ratio
                 currentPositionUsec = 0;
diff --git a/src/android/android_GenericMediaPlayer.cpp b/src/android/android_GenericMediaPlayer.cpp
index f3cebf5..04f4f8e 100644
--- a/src/android/android_GenericMediaPlayer.cpp
+++ b/src/android/android_GenericMediaPlayer.cpp
@@ -19,9 +19,9 @@
 #include "sles_allinclusive.h"
 #include "android_GenericMediaPlayer.h"
 
+#include <system/window.h>
+
 #include <media/IMediaPlayerService.h>
-#include <surfaceflinger/ISurfaceComposer.h>
-#include <surfaceflinger/SurfaceComposerClient.h>
 #include <media/stagefright/foundation/ADebug.h>
 #include <media/mediaplayer.h>  // media_event_type media_error_type media_info_type
 
@@ -542,7 +542,7 @@
         // now that we know the channel count, re-calculate the volumes
         notify(PLAYEREVENT_CHANNEL_COUNT, channelCount, true /*async*/);
     } else {
-        LOGW("channel count is still unknown after prepare");
+        ALOGW("channel count is still unknown after prepare");
     }
     delete reply;
     // retrieve duration
diff --git a/src/android/android_GenericMediaPlayer.h b/src/android/android_GenericMediaPlayer.h
index 3e8fe81..c0497ba 100644
--- a/src/android/android_GenericMediaPlayer.h
+++ b/src/android/android_GenericMediaPlayer.h
@@ -20,7 +20,6 @@
 #include "android_GenericPlayer.h"
 
 #include <binder/IServiceManager.h>
-#include <surfaceflinger/Surface.h>
 #include <gui/ISurfaceTexture.h>
 
 
@@ -120,7 +119,7 @@
     // Receives notifications about death of media.player service
     const sp<MediaPlayerDeathNotifier> mPlayerDeathNotifier;
 
-    // Return a reference to the media player service, or LOGE and return NULL after retries fail
+    // Return a reference to the media player service, or ALOGE and return NULL after retries fail
     static const sp<IMediaPlayerService> getMediaPlayerService() {
         return IMediaDeathNotifier::getMediaPlayerService();
     }
diff --git a/src/android/android_GenericPlayer.cpp b/src/android/android_GenericPlayer.cpp
index 219c856..0fd975c 100644
--- a/src/android/android_GenericPlayer.cpp
+++ b/src/android/android_GenericPlayer.cpp
@@ -279,7 +279,7 @@
     if (async) {
         msg->post();
     } else {
-        this->onNotify(msg);
+        onNotify(msg);
     }
 }
 
@@ -292,7 +292,7 @@
     if (async) {
         msg->post();
     } else {
-        this->onNotify(msg);
+        onNotify(msg);
     }
 }
 
diff --git a/src/android/android_GenericPlayer.h b/src/android/android_GenericPlayer.h
index d3206a1..bc52846 100644
--- a/src/android/android_GenericPlayer.h
+++ b/src/android/android_GenericPlayer.h
@@ -60,22 +60,22 @@
     GenericPlayer(const AudioPlayback_Parameters* params);
     virtual ~GenericPlayer();
 
-    virtual void init(const notif_cbf_t cbf, void* notifUser);
+    void init(const notif_cbf_t cbf, void* notifUser);
     virtual void preDestroy();
 
     void setDataSource(const char *uri);
     void setDataSource(int fd, int64_t offset, int64_t length, bool closeAfterUse = false);
 
-            void prepare();
+    void prepare();
     virtual void play();
-    virtual void pause();
-    virtual void stop();
+    void pause();
+    void stop();
     // timeMsec must be >= 0 or == ANDROID_UNKNOWN_TIME (used by StreamPlayer after discontinuity)
-    virtual void seek(int64_t timeMsec);
-    virtual void loop(bool loop);
-    virtual void setBufferingUpdateThreshold(int16_t thresholdPercent);
+    void seek(int64_t timeMsec);
+    void loop(bool loop);
+    void setBufferingUpdateThreshold(int16_t thresholdPercent);
 
-    virtual void getDurationMsec(int* msec); //msec != NULL, ANDROID_UNKNOWN_TIME if unknown
+    void getDurationMsec(int* msec); //msec != NULL, ANDROID_UNKNOWN_TIME if unknown
     virtual void getPositionMsec(int* msec) = 0; //msec != NULL, ANDROID_UNKNOWN_TIME if unknown
 
     virtual void setVideoSurfaceTexture(const sp<ISurfaceTexture> &surfaceTexture) {}
diff --git a/src/android/android_defs.h b/src/android/android_defs.h
index 5ac11e1..8519226 100644
--- a/src/android/android_defs.h
+++ b/src/android/android_defs.h
@@ -66,7 +66,7 @@
 #define MPEG2_TS_PACKET_SYNC 0x47
 
 struct AudioPlayback_Parameters {
-    int streamType;
+    audio_stream_type_t streamType;
     int sessionId;
 };
 
diff --git a/src/android/android_sles_conversions.h b/src/android/android_sles_conversions.h
index ebef1e6..b818cc4 100644
--- a/src/android/android_sles_conversions.h
+++ b/src/android/android_sles_conversions.h
@@ -44,7 +44,7 @@
     return (uint32_t)(sampleRateMilliHertz / 1000);
 }
 
-static inline int sles_to_android_sampleFormat(SLuint32 pcmFormat) {
+static inline audio_format_t sles_to_android_sampleFormat(SLuint32 pcmFormat) {
     switch (pcmFormat) {
         case SL_PCMSAMPLEFORMAT_FIXED_16:
             return AUDIO_FORMAT_PCM_16_BIT;
diff --git a/src/android/include/AacAdtsExtractor.h b/src/android/include/AacAdtsExtractor.h
index af0b38b..a3c0973 100644
--- a/src/android/include/AacAdtsExtractor.h
+++ b/src/android/include/AacAdtsExtractor.h
@@ -20,9 +20,9 @@
 #include <utils/Vector.h>
 
 #include <media/stagefright/foundation/ABuffer.h>
+#include <media/stagefright/foundation/ADebug.h>
 #include <media/stagefright/DataSource.h>
 #include <media/stagefright/MediaBufferGroup.h>
-#include <media/stagefright/MediaDebug.h>
 #include <media/stagefright/MediaDefs.h>
 #include <media/stagefright/MediaErrors.h>
 #include <media/stagefright/MediaExtractor.h>
diff --git a/src/classes.h b/src/classes.h
index 3c481ee..5ccbbae 100644
--- a/src/classes.h
+++ b/src/classes.h
@@ -95,7 +95,7 @@
     /** identifies which group of effects ("session") this player belongs to */
     int mSessionId;
     /** identifies the Android stream type playback will occur on */
-    int mStreamType;
+    audio_stream_type_t mStreamType;
     // FIXME consolidate the next several variables into one class to avoid placement new
     /** plays the PCM data for this player */
     android::sp<android::AudioTrack> mAudioTrack;
@@ -149,7 +149,7 @@
 #ifdef ANDROID
     enum AndroidObjectType mAndroidObjType;
     android::AudioRecord *mAudioRecord; //FIXME candidate to be encapsulated in a ARecorder subclass
-    int mRecordSource;                  //FIXME candidate to be encapsulated in a ARecorder subclass
+    audio_source_t mRecordSource;       //FIXME candidate to be encapsulated in a ARecorder subclass
 #endif
 } /*CAudioRecorder*/;
 
@@ -340,6 +340,6 @@
     /** identifies which group of effects ("session") this player belongs to */
     int mSessionId;
     /** identifies the Android stream type playback will occur on */
-    int mStreamType;
+    audio_stream_type_t mStreamType;
 #endif
 } CMediaPlayer;
diff --git a/src/itf/IEngine.c b/src/itf/IEngine.c
index b024fca..4b6d2b6 100644
--- a/src/itf/IEngine.c
+++ b/src/itf/IEngine.c
@@ -212,7 +212,7 @@
                     thiz->mSampleRateMilliHz = UNKNOWN_SAMPLERATE;
 
                     // More default values, in case destructor needs to be called early
-                    thiz->mDirectLevel = 0;
+                    thiz->mDirectLevel = 0; // no attenuation
 #ifdef USE_OUTPUTMIXEXT
                     thiz->mTrack = NULL;
                     thiz->mGains[0] = 1.0f;
@@ -237,6 +237,8 @@
                             android::sp<android::CallbackProtector>();
                     (void) new (&thiz->mAuxEffect) android::sp<android::AudioEffect>();
                     (void) new (&thiz->mAPlayer) android::sp<android::GenericPlayer>();
+                    // Android-specific POD fields are initialized in android_audioPlayer_create,
+                    // and assume calloc or memset 0 during allocation
 #endif
 
                     // Check the source and sink parameters against generic constraints,
@@ -1087,8 +1089,6 @@
                     // More default values, in case destructor needs to be called early
                     thiz->mNumChannels = UNKNOWN_NUMCHANNELS;
 
-                    // (assume calloc or memset 0 during allocation)
-                    // placement new
 #ifdef ANDROID
                     // placement new (explicit constructor)
                     // FIXME unnecessary once those fields are encapsulated in one class, rather
@@ -1096,6 +1096,8 @@
                     (void) new (&thiz->mAVPlayer) android::sp<android::GenericPlayer>();
                     (void) new (&thiz->mCallbackProtector)
                             android::sp<android::CallbackProtector>();
+                    // Android-specific POD fields are initialized in android_Player_create,
+                    // and assume calloc or memset 0 during allocation
 #endif
 
                     // Check the source and sink parameters against generic constraints
diff --git a/src/itf/IPlay.c b/src/itf/IPlay.c
index 458ea30..8e44463 100644
--- a/src/itf/IPlay.c
+++ b/src/itf/IPlay.c
@@ -395,8 +395,9 @@
                 CAudioPlayer *audioPlayer = (CAudioPlayer *) thiz->mThis;
                 SLuint32 frameUpdatePeriod = ((long long) mSec *
                     (long long) audioPlayer->mSampleRateMilliHz) / 1000000LL;
-                if (0 == frameUpdatePeriod)
+                if (0 == frameUpdatePeriod) {
                     frameUpdatePeriod = ~0;
+                }
                 thiz->mFrameUpdatePeriod = frameUpdatePeriod;
                 // setting a new update period postpones the next callback
                 thiz->mFramesSincePositionUpdate = 0;
diff --git a/src/itf/IVolume.c b/src/itf/IVolume.c
index 52f4da4..aaef4a9 100644
--- a/src/itf/IVolume.c
+++ b/src/itf/IVolume.c
@@ -32,8 +32,9 @@
         if (oldLevel != level) {
             thiz->mLevel = level;
             interface_unlock_exclusive_attributes(thiz, ATTR_GAIN);
-        } else
+        } else {
             interface_unlock_exclusive(thiz);
+        }
         result = SL_RESULT_SUCCESS;
     }
 
@@ -86,8 +87,9 @@
     if (oldMute != mute) {
         thiz->mMute = (SLuint8) mute;
         interface_unlock_exclusive_attributes(thiz, ATTR_GAIN);
-    } else
+    } else {
         interface_unlock_exclusive(thiz);
+    }
     result = SL_RESULT_SUCCESS;
 
     SL_LEAVE_INTERFACE
@@ -165,8 +167,9 @@
         if (oldStereoPosition != stereoPosition) {
             thiz->mStereoPosition = stereoPosition;
             interface_unlock_exclusive_attributes(thiz, ATTR_GAIN);
-        } else
+        } else {
             interface_unlock_exclusive(thiz);
+        }
         result = SL_RESULT_SUCCESS;
     }
 
diff --git a/src/objects/CMediaPlayer.c b/src/objects/CMediaPlayer.c
index 7b995c5..f77720e 100644
--- a/src/objects/CMediaPlayer.c
+++ b/src/objects/CMediaPlayer.c
@@ -19,7 +19,6 @@
 #include "sles_allinclusive.h"
 
 #ifdef ANDROID
-#include <gui/SurfaceTextureClient.h>
 #include "android/android_GenericMediaPlayer.h"
 using namespace android;
 #endif
diff --git a/src/sles.c b/src/sles.c
index 270d01a..5c4d3eb 100644
--- a/src/sles.c
+++ b/src/sles.c
@@ -58,8 +58,9 @@
     const ClassTable *clazz = thiz->mClass;
     assert(NULL != clazz);
     SLuint32 id = clazz->mSLObjectID;
-    if (!id)
+    if (!id) {
         id = clazz->mXAObjectID;
+    }
     return id;
 }
 
diff --git a/src/sles_allinclusive.h b/src/sles_allinclusive.h
index 0b33dcb..a202242 100644
--- a/src/sles_allinclusive.h
+++ b/src/sles_allinclusive.h
@@ -442,7 +442,7 @@
 //  SLresult result = EnqueueAsyncCallback_ppi(ap, playCallback, &ap->mPlay.mItf, playContext,
 //       SL_PLAYEVENT_HEADATEND);
 //  if (SL_RESULT_SUCCESS != result) {
-//    LOGW("Callback %p(%p, %p, SL_PLAYEVENT_HEADATEND) dropped", playCallback, &ap->mPlay.mItf,
+//    ALOGW("Callback %p(%p, %p, SL_PLAYEVENT_HEADATEND) dropped", playCallback, &ap->mPlay.mItf,
 //        playContext);
 //  }
 // which replaces:
diff --git a/tests/native-media/jni/native-media-jni.c b/tests/native-media/jni/native-media-jni.c
index e8db6f2..6d7ec28 100644
--- a/tests/native-media/jni/native-media-jni.c
+++ b/tests/native-media/jni/native-media-jni.c
@@ -248,7 +248,7 @@
             XAVideoStreamInformation videoInfo;
             res = (*caller)->QueryStreamInformation(caller, streamIndex, &videoInfo);
             assert(XA_RESULT_SUCCESS == res);
-            LOGI("Found video size %u x %u, codec ID=%u, frameRate=%u, bitRate=%u, duration=%u ms",
+            ALOGI("Found video size %u x %u, codec ID=%u, frameRate=%u, bitRate=%u, duration=%u ms",
                         videoInfo.width, videoInfo.height, videoInfo.codecId, videoInfo.frameRate,
                         videoInfo.bitRate, videoInfo.duration);
         } break;
@@ -301,7 +301,7 @@
     nbRead = fread(dataCache, BUFFER_SIZE, NB_BUFFERS, file);
     if (nbRead <= 0) {
         // could be premature EOF or I/O error
-        LOGE("Error filling cache, exiting\n");
+        ALOGE("Error filling cache, exiting\n");
         return JNI_FALSE;
     }
     assert(1 <= nbRead && nbRead <= NB_BUFFERS);
@@ -349,7 +349,7 @@
     // open the file to play
     file = fopen(utf8, "rb");
     if (file == NULL) {
-        LOGE("Failed to open %s", utf8);
+        ALOGE("Failed to open %s", utf8);
         return JNI_FALSE;
     }
 
diff --git a/tests/sandbox/nativewindow.cpp b/tests/sandbox/nativewindow.cpp
index 8fe7fb0..9f5b6ae 100644
--- a/tests/sandbox/nativewindow.cpp
+++ b/tests/sandbox/nativewindow.cpp
@@ -20,8 +20,8 @@
 // that are not part of the NDK supported APIs, and are subject to change at any time.
 
 #include <binder/ProcessState.h>
-#include <surfaceflinger/ISurfaceComposer.h>
-#include <surfaceflinger/SurfaceComposerClient.h>
+#include <gui/Surface.h>
+#include <gui/SurfaceComposerClient.h>
 #include <utils/String8.h>
 
 #include "nativewindow.h"
diff --git a/tests/sandbox/playbq.c b/tests/sandbox/playbq.c
index aaa72f1..c0f71a7 100644
--- a/tests/sandbox/playbq.c
+++ b/tests/sandbox/playbq.c
@@ -21,6 +21,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <time.h>
 #include <unistd.h>
 
 #include <SLES/OpenSLES.h>
@@ -30,6 +31,9 @@
 #include <sndfile.h>
 #endif
 
+#define max(a, b) ((a) > (b) ? (a) : (b))
+#define min(a, b) ((a) < (b) ? (a) : (b))
+
 unsigned numBuffers = 2;
 int framesPerBuffer = 512;
 SNDFILE *sndfile;
@@ -114,14 +118,18 @@
     byteOrder = nativeByteOrder;
 
     SLboolean enableReverb = SL_BOOLEAN_FALSE;
-    SLpermille rate = 1000;
+    SLpermille initialRate = 0;
+    SLpermille finalRate = 0;
+    SLpermille deltaRate = 1;
+    SLmillisecond deltaRateMs = 0;
 
     // process command-line options
     int i;
     for (i = 1; i < argc; ++i) {
         char *arg = argv[i];
-        if (arg[0] != '-')
+        if (arg[0] != '-') {
             break;
+        }
         if (!strcmp(arg, "-b")) {
             byteOrder = SL_BYTEORDER_BIGENDIAN;
         } else if (!strcmp(arg, "-l")) {
@@ -133,7 +141,17 @@
         } else if (!strncmp(arg, "-n", 2)) {
             numBuffers = atoi(&arg[2]);
         } else if (!strncmp(arg, "-p", 2)) {
-            rate = atoi(&arg[2]);
+            initialRate = atoi(&arg[2]);
+        } else if (!strncmp(arg, "-P", 2)) {
+            finalRate = atoi(&arg[2]);
+        } else if (!strncmp(arg, "-q", 2)) {
+            deltaRate = atoi(&arg[2]);
+            // deltaRate is a magnitude, so take absolute value
+            if (deltaRate < 0) {
+                deltaRate = -deltaRate;
+            }
+        } else if (!strncmp(arg, "-Q", 2)) {
+            deltaRateMs = atoi(&arg[2]);
         } else if (!strcmp(arg, "-r")) {
             enableReverb = SL_BOOLEAN_TRUE;
         } else {
@@ -143,6 +161,16 @@
 
     if (argc - i != 1) {
         fprintf(stderr, "usage: [-b/l] [-8] [-f#] [-n#] [-p#] [-r] %s filename\n", argv[0]);
+        fprintf(stderr, "    -b  force big-endian byte order (default is native byte order)\n");
+        fprintf(stderr, "    -l  force little-endian byte order (default is native byte order)\n");
+        fprintf(stderr, "    -8  output 8-bits per sample (default is 16-bits per sample)\n");
+        fprintf(stderr, "    -f# frames per buffer (default 512)\n");
+        fprintf(stderr, "    -n# number of buffers (default 2)\n");
+        fprintf(stderr, "    -p# initial playback rate in per mille (default 1000)\n");
+        fprintf(stderr, "    -P# final playback rate in per mille (default same as -p#)\n");
+        fprintf(stderr, "    -q# magnitude of playback rate changes in per mille (default 1)\n");
+        fprintf(stderr, "    -Q# period between playback rate changes in ms (default 50)\n");
+        fprintf(stderr, "    -r  enable reverb (default disabled)\n");
         return EXIT_FAILURE;
     }
 
@@ -162,8 +190,9 @@
         break;
     default:
         fprintf(stderr, "unsupported channel count %d\n", sfinfo.channels);
-        break;
+        goto close_sndfile;
     }
+
     switch (sfinfo.samplerate) {
     case  8000:
     case 11025:
@@ -177,15 +206,17 @@
         break;
     default:
         fprintf(stderr, "unsupported sample rate %d\n", sfinfo.samplerate);
-        break;
+        goto close_sndfile;
     }
+
     switch (sfinfo.format & SF_FORMAT_TYPEMASK) {
     case SF_FORMAT_WAV:
         break;
     default:
         fprintf(stderr, "unsupported format type 0x%x\n", sfinfo.format & SF_FORMAT_TYPEMASK);
-        break;
+        goto close_sndfile;
     }
+
     switch (sfinfo.format & SF_FORMAT_SUBMASK) {
     case SF_FORMAT_PCM_16:
     case SF_FORMAT_PCM_U8:
@@ -195,7 +226,7 @@
         break;
     default:
         fprintf(stderr, "unsupported sub-format 0x%x\n", sfinfo.format & SF_FORMAT_SUBMASK);
-        break;
+        goto close_sndfile;
     }
 
     buffers = (short *) malloc(framesPerBuffer * sfinfo.channels * sizeof(short) * numBuffers);
@@ -264,7 +295,10 @@
     SLObjectItf playerObject;
     result = (*engineEngine)->CreateAudioPlayer(engineEngine, &playerObject, &audioSrc,
             &audioSnk, enableReverb ? 3 : 2, ids2, req2);
-    assert(SL_RESULT_SUCCESS == result);
+    if (SL_RESULT_SUCCESS != result) {
+        fprintf(stderr, "can't create audio player\n");
+        goto no_player;
+    }
 
     // realize the player
     result = (*playerObject)->Realize(playerObject, SL_BOOLEAN_FALSE);
@@ -291,14 +325,29 @@
     result = (*playerPlaybackRate)->GetProperties(playerPlaybackRate, &defaultProperties);
     assert(SL_RESULT_SUCCESS == result);
     printf("default playback rate %d per mille, properties 0x%x\n", defaultRate, defaultProperties);
-    if (rate != defaultRate) {
-        result = (*playerPlaybackRate)->SetRate(playerPlaybackRate, rate);
+    if (initialRate <= 0) {
+        initialRate = defaultRate;
+    }
+    if (finalRate <= 0) {
+        finalRate = initialRate;
+    }
+    SLpermille currentRate = defaultRate;
+    if (finalRate == initialRate) {
+        deltaRate = 0;
+    } else if (finalRate < initialRate) {
+        deltaRate = -deltaRate;
+    }
+    if (initialRate != defaultRate) {
+        result = (*playerPlaybackRate)->SetRate(playerPlaybackRate, initialRate);
         if (SL_RESULT_FEATURE_UNSUPPORTED == result) {
-            fprintf(stderr, "playback rate %d is unsupported\n", rate);
+            fprintf(stderr, "initial playback rate %d is unsupported\n", initialRate);
+            deltaRate = 0;
         } else if (SL_RESULT_PARAMETER_INVALID == result) {
-            fprintf(stderr, "playback rate %d is invalid", rate);
+            fprintf(stderr, "initial playback rate %d is invalid\n", initialRate);
+            deltaRate = 0;
         } else {
             assert(SL_RESULT_SUCCESS == result);
+            currentRate = initialRate;
         }
     }
 
@@ -336,8 +385,9 @@
         result = (*playerBufferQueue)->Enqueue(playerBufferQueue, buffer, nbytes);
         assert(SL_RESULT_SUCCESS == result);
     }
-    if (which >= numBuffers)
+    if (which >= numBuffers) {
         which = 0;
+    }
 
     // register a callback on the buffer queue
     result = (*playerBufferQueue)->RegisterCallback(playerBufferQueue, callback, NULL);
@@ -347,6 +397,12 @@
     result = (*playerPlay)->SetPlayState(playerPlay, SL_PLAYSTATE_PLAYING);
     assert(SL_RESULT_SUCCESS == result);
 
+    // get the initial time
+    struct timespec prevTs;
+    clock_gettime(CLOCK_MONOTONIC, &prevTs);
+    long elapsedNs = 0;
+    long deltaRateNs = deltaRateMs * 1000000;
+
     // wait until the buffer queue is empty
     SLBufferQueueState bufqstate;
     for (;;) {
@@ -355,17 +411,54 @@
         if (0 >= bufqstate.count) {
             break;
         }
-        sleep(1);
+        if (deltaRate == 0) {
+            sleep(1);
+        } else {
+            struct timespec curTs;
+            clock_gettime(CLOCK_MONOTONIC, &curTs);
+            elapsedNs += (curTs.tv_sec - prevTs.tv_sec) * 1000000000 +
+                    // this term can be negative
+                    (curTs.tv_nsec - prevTs.tv_nsec);
+            prevTs = curTs;
+            if (elapsedNs < deltaRateNs) {
+                usleep((deltaRateNs - elapsedNs) / 1000);
+                continue;
+            }
+            elapsedNs -= deltaRateNs;
+            SLpermille nextRate = currentRate + deltaRate;
+            result = (*playerPlaybackRate)->SetRate(playerPlaybackRate, nextRate);
+            if (SL_RESULT_SUCCESS != result) {
+                fprintf(stderr, "next playback rate %d is unsupported\n", nextRate);
+            } else if (SL_RESULT_PARAMETER_INVALID == result) {
+                fprintf(stderr, "next playback rate %d is invalid\n", nextRate);
+            } else {
+                assert(SL_RESULT_SUCCESS == result);
+            }
+            currentRate = nextRate;
+            if (currentRate >= max(initialRate, finalRate)) {
+                currentRate = max(initialRate, finalRate);
+                deltaRate = -abs(deltaRate);
+            } else if (currentRate <= min(initialRate, finalRate)) {
+                currentRate = min(initialRate, finalRate);
+                deltaRate = abs(deltaRate);
+            }
+        }
     }
 
     // destroy audio player
     (*playerObject)->Destroy(playerObject);
 
+no_player:
+
     // destroy output mix
     (*outputMixObject)->Destroy(outputMixObject);
 
     // destroy engine
     (*engineObject)->Destroy(engineObject);
 
+close_sndfile:
+
+    (void) sf_close(sndfile);
+
     return EXIT_SUCCESS;
 }
