Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7ffca5d6 authored by Dichen Zhang's avatar Dichen Zhang Committed by android-build-merger
Browse files

Merge "Fix android.media.cts.MediaPlayerFlakyNetworkTest failure" into qt-dev am: e0092766

am: 8fa810a4

Change-Id: I1a58d1b6aa26f34ed4812fac88e9a92398d15aff
parents da953ce8 8fa810a4
Loading
Loading
Loading
Loading
+37 −10
Original line number Diff line number Diff line
@@ -90,8 +90,11 @@ void NuPlayer::GenericSource::resetDataSource() {
    ALOGV("resetDataSource");

    mHTTPService.clear();
    {
        Mutex::Autolock _l_d(mDisconnectLock);
        mHttpSource.clear();
        mDisconnected = false;
    }
    mUri.clear();
    mUriHeaders.clear();
    mSources.clear();
@@ -152,7 +155,10 @@ status_t NuPlayer::GenericSource::setDataSource(const sp<DataSource>& source) {
    ALOGV("setDataSource (source: %p)", source.get());

    resetDataSource();
    {
        Mutex::Autolock _l_d(mDisconnectLock);
        mDataSource = source;
    }
    return OK;
}

@@ -163,8 +169,12 @@ sp<MetaData> NuPlayer::GenericSource::getFileFormatMeta() const {

status_t NuPlayer::GenericSource::initFromDataSource() {
    sp<IMediaExtractor> extractor;
    CHECK(mDataSource != NULL);
    sp<DataSource> dataSource = mDataSource;
    sp<DataSource> dataSource;
    {
        Mutex::Autolock _l_d(mDisconnectLock);
        dataSource = mDataSource;
    }
    CHECK(dataSource != NULL);

    mLock.unlock();
    // This might take long time if data source is not reliable.
@@ -359,6 +369,7 @@ void NuPlayer::GenericSource::prepareAsync() {
}

void NuPlayer::GenericSource::onPrepareAsync() {
    mDisconnectLock.lock();
    ALOGV("onPrepareAsync: mDataSource: %d", (mDataSource != NULL));

    // delayed data source creation
@@ -372,20 +383,30 @@ void NuPlayer::GenericSource::onPrepareAsync() {
            String8 contentType;

            if (!strncasecmp("http://", uri, 7) || !strncasecmp("https://", uri, 8)) {
                mHttpSource = DataSourceFactory::CreateMediaHTTP(mHTTPService);
                if (mHttpSource == NULL) {
                sp<DataSource> httpSource;
                mDisconnectLock.unlock();
                httpSource = DataSourceFactory::CreateMediaHTTP(mHTTPService);
                if (httpSource == NULL) {
                    ALOGE("Failed to create http source!");
                    notifyPreparedAndCleanup(UNKNOWN_ERROR);
                    mDisconnectLock.lock();
                    return;
                }
                mDisconnectLock.lock();

                if (!mDisconnected) {
                    mHttpSource = httpSource;
                }
            }

            mLock.unlock();
            mDisconnectLock.unlock();
            // This might take long time if connection has some issue.
            sp<DataSource> dataSource = DataSourceFactory::CreateFromURI(
                   mHTTPService, uri, &mUriHeaders, &contentType,
                   static_cast<HTTPBase *>(mHttpSource.get()));
            mLock.lock();
            mDisconnectLock.lock();
            if (!mDisconnected) {
                mDataSource = dataSource;
            }
@@ -437,6 +458,8 @@ void NuPlayer::GenericSource::onPrepareAsync() {
        mCachedSource = static_cast<NuCachedSource2 *>(mDataSource.get());
    }

    mDisconnectLock.unlock();

    // For cached streaming cases, we need to wait for enough
    // buffering before reporting prepared.
    mIsStreaming = (mCachedSource != NULL);
@@ -503,9 +526,13 @@ void NuPlayer::GenericSource::finishPrepareAsync() {

void NuPlayer::GenericSource::notifyPreparedAndCleanup(status_t err) {
    if (err != OK) {
        {
            Mutex::Autolock _l_d(mDisconnectLock);
            mDataSource.clear();
        mCachedSource.clear();
            mHttpSource.clear();
        }

        mCachedSource.clear();

        mBitrate = -1;
        mPrevBufferPercentage = -1;
@@ -547,7 +574,7 @@ void NuPlayer::GenericSource::resume() {
void NuPlayer::GenericSource::disconnect() {
    sp<DataSource> dataSource, httpSource;
    {
        Mutex::Autolock _l(mLock);
        Mutex::Autolock _l_d(mDisconnectLock);
        dataSource = mDataSource;
        httpSource = mHttpSource;
        mDisconnected = true;
+1 −0
Original line number Diff line number Diff line
@@ -170,6 +170,7 @@ private:
    sp<ABuffer> mGlobalTimedText;

    mutable Mutex mLock;
    mutable Mutex mDisconnectLock; // Protects mDataSource, mHttpSource and mDisconnected

    sp<ALooper> mLooper;