OSDN Git Service

Increase the amount of data buffered at preparation time. Make sure to start preparin...
authorAndreas Huber <andih@google.com>
Mon, 8 Mar 2010 20:28:22 +0000 (12:28 -0800)
committerAndreas Huber <andih@google.com>
Mon, 8 Mar 2010 20:28:22 +0000 (12:28 -0800)
Change-Id: I2c54db085cc76f4069ab381177e94e1b81005b02
related-to-bug: 2474091

media/libstagefright/AwesomePlayer.cpp
media/libstagefright/Prefetcher.cpp

index 5090c39..b8a50bf 100644 (file)
@@ -1064,6 +1064,8 @@ void AwesomePlayer::abortPrepare(status_t err) {
 }
 
 void AwesomePlayer::onPrepareAsyncEvent() {
+    sp<Prefetcher> prefetcher;
+
     {
         Mutex::Autolock autoLock(mLock);
 
@@ -1075,12 +1077,25 @@ void AwesomePlayer::onPrepareAsyncEvent() {
                 return;
             }
         }
-    }
 
-    sp<Prefetcher> prefetcher;
+        if (mVideoTrack != NULL && mVideoSource == NULL) {
+            status_t err = initVideoDecoder();
+
+            if (err != OK) {
+                abortPrepare(err);
+                return;
+            }
+        }
+
+        if (mAudioTrack != NULL && mAudioSource == NULL) {
+            status_t err = initAudioDecoder();
+
+            if (err != OK) {
+                abortPrepare(err);
+                return;
+            }
+        }
 
-    {
-        Mutex::Autolock autoLock(mLock);
         prefetcher = mPrefetcher;
     }
 
@@ -1091,24 +1106,6 @@ void AwesomePlayer::onPrepareAsyncEvent() {
 
     Mutex::Autolock autoLock(mLock);
 
-    if (mVideoTrack != NULL && mVideoSource == NULL) {
-        status_t err = initVideoDecoder();
-
-        if (err != OK) {
-            abortPrepare(err);
-            return;
-        }
-    }
-
-    if (mAudioTrack != NULL && mAudioSource == NULL) {
-        status_t err = initAudioDecoder();
-
-        if (err != OK) {
-            abortPrepare(err);
-            return;
-        }
-    }
-
     if (mIsAsyncPrepare) {
         if (mVideoWidth < 0 || mVideoHeight < 0) {
             notifyListener_l(MEDIA_SET_VIDEO_SIZE, 0, 0);
index 89cd30e..493570a 100644 (file)
@@ -220,13 +220,13 @@ int64_t Prefetcher::getCachedDurationUs(bool *noMoreData) {
 }
 
 status_t Prefetcher::prepare() {
-    // Buffer about 2 secs worth of data on prepare.
+    // Fill the cache.
 
     int64_t duration;
     bool noMoreData;
     do {
         duration = getCachedDurationUs(&noMoreData);
-    } while (!noMoreData && duration < 2000000);
+    } while (!noMoreData && duration < kMaxCacheDurationUs);
 
     return OK;
 }