diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp
index 935b0e1..2b403f8 100644
--- a/media/libstagefright/AwesomePlayer.cpp
+++ b/media/libstagefright/AwesomePlayer.cpp
@@ -304,7 +304,7 @@
     if (mDurationUs >= 0) {
         int64_t cachedDurationUs = mPrefetcher->getCachedDurationUs();
         int64_t positionUs = 0;
-        if (mVideoRenderer != NULL) {
+        if (mVideoSource != NULL) {
             positionUs = mVideoTimeUs;
         } else if (mAudioPlayer != NULL) {
             positionUs = mAudioPlayer->getMediaTimeUs();
@@ -328,7 +328,7 @@
     if (mFlags & LOOPING) {
         seekTo_l(0);
 
-        if (mVideoRenderer != NULL) {
+        if (mVideoSource != NULL) {
             postVideoEvent_l();
         }
     } else {
@@ -386,14 +386,8 @@
     }
 
     if (mVideoSource != NULL) {
-        if (mVideoRenderer == NULL) {
-            initRenderer_l();
-        }
-
-        if (mVideoRenderer != NULL) {
-            // Kick off video playback
-            postVideoEvent_l();
-        }
+        // Kick off video playback
+        postVideoEvent_l();
     }
 
     if (deferredAudioSeek) {
@@ -514,7 +508,7 @@
 status_t AwesomePlayer::getPosition(int64_t *positionUs) {
     Mutex::Autolock autoLock(mLock);
 
-    if (mVideoRenderer != NULL) {
+    if (mVideoSource != NULL) {
         *positionUs = mVideoTimeUs;
     } else if (mAudioPlayer != NULL) {
         *positionUs = mAudioPlayer->getMediaTimeUs();
@@ -540,7 +534,7 @@
 }
 
 void AwesomePlayer::seekAudioIfNecessary_l() {
-    if (mSeeking && mVideoRenderer == NULL && mAudioPlayer != NULL) {
+    if (mSeeking && mVideoSource == NULL && mAudioPlayer != NULL) {
         mAudioPlayer->seekTo(mSeekTimeUs);
 
         mWatchForAudioSeekComplete = true;
@@ -674,7 +668,9 @@
                 if (err == INFO_FORMAT_CHANGED) {
                     LOGV("VideoSource signalled format change.");
 
-                    initRenderer_l();
+                    if (mVideoRenderer != NULL) {
+                        initRenderer_l();
+                    }
                     continue;
                 }
 
@@ -751,7 +747,13 @@
         return;
     }
 
-    mVideoRenderer->render(mVideoBuffer);
+    if (mVideoRenderer == NULL) {
+        initRenderer_l();
+    }
+
+    if (mVideoRenderer != NULL) {
+        mVideoRenderer->render(mVideoBuffer);
+    }
 
     if (mLastVideoBuffer) {
         mLastVideoBuffer->release();
