Remove streaming related logic from preview player.
Video editor engine only deals with local file playback/preview.
Change-Id: I8e3414abf8a109a77a1e34a959fb4a090612ae3d
related-to-bug: 5857057
diff --git a/libvideoeditor/lvpp/PreviewPlayerBase.cpp b/libvideoeditor/lvpp/PreviewPlayerBase.cpp
index 84bff9f..2a59095 100644
--- a/libvideoeditor/lvpp/PreviewPlayerBase.cpp
+++ b/libvideoeditor/lvpp/PreviewPlayerBase.cpp
@@ -23,9 +23,6 @@
#include "PreviewPlayerBase.h"
#include "AudioPlayerBase.h"
#include "include/SoftwareRenderer.h"
-#include "include/NuCachedSource2.h"
-#include "include/ThrottledSource.h"
-#include "include/MPEG2TSExtractor.h"
#include <binder/IPCThreadState.h>
#include <binder/IServiceManager.h>
@@ -33,7 +30,6 @@
#include <media/stagefright/foundation/hexdump.h>
#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/DataSource.h>
-#include <media/stagefright/FileSource.h>
#include <media/stagefright/MediaBuffer.h>
#include <media/stagefright/MediaDefs.h>
#include <media/stagefright/MediaExtractor.h>
@@ -52,11 +48,6 @@
namespace android {
-static int64_t kLowWaterMarkUs = 2000000ll; // 2secs
-static int64_t kHighWaterMarkUs = 10000000ll; // 10secs
-static const size_t kLowWaterMarkBytes = 40000;
-static const size_t kHighWaterMarkBytes = 200000;
-
struct AwesomeEvent : public TimedEventQueue::Event {
AwesomeEvent(
PreviewPlayerBase *player,
@@ -186,8 +177,6 @@
mVideoEventPending = false;
mStreamDoneEvent = new AwesomeEvent(this, &PreviewPlayerBase::onStreamDone);
mStreamDoneEventPending = false;
- mBufferingEvent = new AwesomeEvent(this, &PreviewPlayerBase::onBufferingUpdate);
- mBufferingEventPending = false;
mVideoLagEvent = new AwesomeEvent(this, &PreviewPlayerBase::onVideoLagUpdate);
mVideoEventPending = false;
@@ -209,7 +198,7 @@
mClient.disconnect();
}
-void PreviewPlayerBase::cancelPlayerEvents(bool keepBufferingGoing) {
+void PreviewPlayerBase::cancelPlayerEvents() {
mQueue.cancelEvent(mVideoEvent->eventID());
mVideoEventPending = false;
mQueue.cancelEvent(mStreamDoneEvent->eventID());
@@ -218,11 +207,6 @@
mAudioStatusEventPending = false;
mQueue.cancelEvent(mVideoLagEvent->eventID());
mVideoLagEventPending = false;
-
- if (!keepBufferingGoing) {
- mQueue.cancelEvent(mBufferingEvent->eventID());
- mBufferingEventPending = false;
- }
}
void PreviewPlayerBase::setListener(const wp<MediaPlayerBase> &listener) {
@@ -230,31 +214,15 @@
mListener = listener;
}
-status_t PreviewPlayerBase::setDataSource(
- const char *uri, const KeyedVector<String8, String8> *headers) {
+status_t PreviewPlayerBase::setDataSource(const char *path) {
Mutex::Autolock autoLock(mLock);
- return setDataSource_l(uri, headers);
+ return setDataSource_l(path);
}
-status_t PreviewPlayerBase::setDataSource_l(
- const char *uri, const KeyedVector<String8, String8> *headers) {
+status_t PreviewPlayerBase::setDataSource_l(const char *path) {
reset_l();
- mUri = uri;
-
- if (headers) {
- mUriHeaders = *headers;
-
- ssize_t index = mUriHeaders.indexOfKey(String8("x-hide-urls-from-log"));
- if (index >= 0) {
- // Browser is in "incognito" mode, suppress logging URLs.
-
- // This isn't something that should be passed to the server.
- mUriHeaders.removeItemsAt(index);
-
- mFlags |= INCOGNITO;
- }
- }
+ mUri = path;
if (!(mFlags & INCOGNITO)) {
ALOGI("setDataSource_l('%s')", mUri.string());
@@ -269,36 +237,10 @@
return OK;
}
-status_t PreviewPlayerBase::setDataSource(
- int fd, int64_t offset, int64_t length) {
- Mutex::Autolock autoLock(mLock);
-
- reset_l();
-
- sp<DataSource> dataSource = new FileSource(fd, offset, length);
-
- status_t err = dataSource->initCheck();
-
- if (err != OK) {
- return err;
- }
-
- mFileSource = dataSource;
-
- return setDataSource_l(dataSource);
-}
-
status_t PreviewPlayerBase::setDataSource(const sp<IStreamSource> &source) {
return INVALID_OPERATION;
}
-status_t PreviewPlayerBase::setDataSource_l(
- const sp<DataSource> &dataSource) {
-
- sp<MediaExtractor> extractor = MediaExtractor::Create(dataSource);
- return setDataSource_l(extractor);
-}
-
status_t PreviewPlayerBase::setDataSource_l(const sp<MediaExtractor> &extractor) {
if (extractor == NULL) {
return UNKNOWN_ERROR;
@@ -408,10 +350,6 @@
if (mFlags & PREPARING) {
mFlags |= PREPARE_CANCELLED;
- if (mConnectingDataSource != NULL) {
- ALOGI("interrupting the connection process");
- mConnectingDataSource->disconnect();
- }
if (mFlags & PREPARING_CONNECTED) {
// We are basically done preparing, we're just buffering
@@ -426,7 +364,6 @@
cancelPlayerEvents();
- mCachedSource.clear();
mAudioTrack.clear();
mVideoTrack.clear();
@@ -465,9 +402,6 @@
mSeekTimeUs = 0;
mUri.setTo("");
- mUriHeaders.clear();
-
- mFileSource.clear();
mBitrate = -1;
mLastVideoTimeUs = -1;
@@ -483,45 +417,6 @@
}
}
-bool PreviewPlayerBase::getBitrate(int64_t *bitrate) {
- off64_t size;
- if (mDurationUs >= 0 && mCachedSource != NULL
- && mCachedSource->getSize(&size) == OK) {
- *bitrate = size * 8000000ll / mDurationUs; // in bits/sec
- return true;
- }
-
- if (mBitrate >= 0) {
- *bitrate = mBitrate;
- return true;
- }
-
- *bitrate = 0;
-
- return false;
-}
-
-// Returns true iff cached duration is available/applicable.
-bool PreviewPlayerBase::getCachedDuration_l(int64_t *durationUs, bool *eos) {
- int64_t bitrate;
-
- if (mCachedSource != NULL && getBitrate(&bitrate)) {
- status_t finalStatus;
- size_t cachedDataRemaining = mCachedSource->approxDataRemaining(&finalStatus);
- *durationUs = cachedDataRemaining * 8000000ll / bitrate;
- *eos = (finalStatus != OK);
- return true;
- }
-
- return false;
-}
-
-void PreviewPlayerBase::ensureCacheIsFetching_l() {
- if (mCachedSource != NULL) {
- mCachedSource->resumeFetchingIfNecessary();
- }
-}
-
void PreviewPlayerBase::onVideoLagUpdate() {
Mutex::Autolock autoLock(mLock);
if (!mVideoLagEventPending) {
@@ -544,99 +439,6 @@
postVideoLagEvent_l();
}
-void PreviewPlayerBase::onBufferingUpdate() {
- Mutex::Autolock autoLock(mLock);
- if (!mBufferingEventPending) {
- return;
- }
- mBufferingEventPending = false;
-
- if (mCachedSource != NULL) {
- status_t finalStatus;
- size_t cachedDataRemaining = mCachedSource->approxDataRemaining(&finalStatus);
- bool eos = (finalStatus != OK);
-
- if (eos) {
- if (finalStatus == ERROR_END_OF_STREAM) {
- notifyListener_l(MEDIA_BUFFERING_UPDATE, 100);
- }
- if (mFlags & PREPARING) {
- ALOGV("cache has reached EOS, prepare is done.");
- finishAsyncPrepare_l();
- }
- } else {
- int64_t bitrate;
- if (getBitrate(&bitrate)) {
- size_t cachedSize = mCachedSource->cachedSize();
- int64_t cachedDurationUs = cachedSize * 8000000ll / bitrate;
-
- int percentage = 100.0 * (double)cachedDurationUs / mDurationUs;
- if (percentage > 100) {
- percentage = 100;
- }
-
- notifyListener_l(MEDIA_BUFFERING_UPDATE, percentage);
- } else {
- // We don't know the bitrate of the stream, use absolute size
- // limits to maintain the cache.
-
- if ((mFlags & PLAYING) && !eos
- && (cachedDataRemaining < kLowWaterMarkBytes)) {
- ALOGI("cache is running low (< %d) , pausing.",
- kLowWaterMarkBytes);
- mFlags |= CACHE_UNDERRUN;
- pause_l();
- ensureCacheIsFetching_l();
- notifyListener_l(MEDIA_INFO, MEDIA_INFO_BUFFERING_START);
- } else if (eos || cachedDataRemaining > kHighWaterMarkBytes) {
- if (mFlags & CACHE_UNDERRUN) {
- ALOGI("cache has filled up (> %d), resuming.",
- kHighWaterMarkBytes);
- mFlags &= ~CACHE_UNDERRUN;
- play_l();
- notifyListener_l(MEDIA_INFO, MEDIA_INFO_BUFFERING_END);
- } else if (mFlags & PREPARING) {
- ALOGV("cache has filled up (> %d), prepare is done",
- kHighWaterMarkBytes);
- finishAsyncPrepare_l();
- }
- }
- }
- }
- }
-
- int64_t cachedDurationUs;
- bool eos;
- if (getCachedDuration_l(&cachedDurationUs, &eos)) {
- ALOGV("cachedDurationUs = %.2f secs, eos=%d",
- cachedDurationUs / 1E6, eos);
-
- if ((mFlags & PLAYING) && !eos
- && (cachedDurationUs < kLowWaterMarkUs)) {
- ALOGI("cache is running low (%.2f secs) , pausing.",
- cachedDurationUs / 1E6);
- mFlags |= CACHE_UNDERRUN;
- pause_l();
- ensureCacheIsFetching_l();
- notifyListener_l(MEDIA_INFO, MEDIA_INFO_BUFFERING_START);
- } else if (eos || cachedDurationUs > kHighWaterMarkUs) {
- if (mFlags & CACHE_UNDERRUN) {
- ALOGI("cache has filled up (%.2f secs), resuming.",
- cachedDurationUs / 1E6);
- mFlags &= ~CACHE_UNDERRUN;
- play_l();
- notifyListener_l(MEDIA_INFO, MEDIA_INFO_BUFFERING_END);
- } else if (mFlags & PREPARING) {
- ALOGV("cache has filled up (%.2f secs), prepare is done",
- cachedDurationUs / 1E6);
- finishAsyncPrepare_l();
- }
- }
- }
-
- postBufferingEvent_l();
-}
-
void PreviewPlayerBase::onStreamDone() {
// Posted whenever any stream finishes playing.
@@ -919,7 +721,7 @@
return OK;
}
- cancelPlayerEvents(true /* keepBufferingGoing */);
+ cancelPlayerEvents();
if (mAudioPlayer != NULL && (mFlags & AUDIO_RUNNING)) {
if (at_eos) {
@@ -1244,24 +1046,6 @@
mVideoBuffer->release();
mVideoBuffer = NULL;
}
-
- if (mSeeking == SEEK && mCachedSource != NULL && mAudioSource != NULL
- && !(mFlags & SEEK_PREVIEW)) {
- // We're going to seek the video source first, followed by
- // the audio source.
- // In order to avoid jumps in the DataSource offset caused by
- // the audio codec prefetching data from the old locations
- // while the video codec is already reading data from the new
- // locations, we'll "pause" the audio source, causing it to
- // stop reading input data until a subsequent seek.
-
- if (mAudioPlayer != NULL && (mFlags & AUDIO_RUNNING)) {
- mAudioPlayer->pause();
-
- mFlags &= ~AUDIO_RUNNING;
- }
- mAudioSource->pause();
- }
}
if (!mVideoBuffer) {
@@ -1459,14 +1243,6 @@
mQueue.postEvent(mStreamDoneEvent);
}
-void PreviewPlayerBase::postBufferingEvent_l() {
- if (mBufferingEventPending) {
- return;
- }
- mBufferingEventPending = true;
- mQueue.postEventWithDelay(mBufferingEvent, 1000000ll);
-}
-
void PreviewPlayerBase::postVideoLagEvent_l() {
if (mVideoLagEventPending) {
return;
@@ -1573,7 +1349,7 @@
status_t PreviewPlayerBase::finishSetDataSource_l() {
sp<DataSource> dataSource =
- DataSource::CreateFromURI(mUri.string(), &mUriHeaders);
+ DataSource::CreateFromURI(mUri.string(), NULL);
if (dataSource == NULL) {
return UNKNOWN_ERROR;
@@ -1642,11 +1418,7 @@
mFlags |= PREPARING_CONNECTED;
- if (mCachedSource != NULL) {
- postBufferingEvent_l();
- } else {
- finishAsyncPrepare_l();
- }
+ finishAsyncPrepare_l();
}
void PreviewPlayerBase::finishAsyncPrepare_l() {
@@ -1681,12 +1453,4 @@
postCheckAudioStatusEvent_l(0 /* delayUs */);
}
-status_t PreviewPlayerBase::setParameter(int key, const Parcel &request) {
- return OK;
-}
-
-status_t PreviewPlayerBase::getParameter(int key, Parcel *reply) {
- return OK;
-}
-
} // namespace android