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

Commit 8359c43a authored by Robert Shih's avatar Robert Shih Committed by Android Git Automerger
Browse files

am 3af67d03: Merge "GenericSource: support disconnect before NuCachedSource2...

am 3af67d03: Merge "GenericSource: support disconnect before NuCachedSource2 is created" into lmp-dev

* commit '3af67d03': (32 commits)
  GenericSource: support disconnect before NuCachedSource2 is created
  Camera1 shim: If there's no flash, the keys need to be null.
  NuCachedSource2: more fixes for source read hang
  NuPlayer: change assert to conditional check.
  Camera2Client: log an error when autoFocus is called in wrong state
  NuPlayer: use generation to filter out stale message from renderer.
  MediaBuffer: ABuffer will release MediaBuffer when it's destructed.
  AudioEffect acquires session
  Add support for ANDROID_LOOP to NuPlayer
  StagefrightRecorder: default to codec and fps from camcorder low profile
  AudioPolicyManager: Use "safe" speaker for notifications if available
  mediaplayer: release MediaBuffer in stale input buffers
  NuPlayerDriver: do not set to paused state when receiving playback complete and reset is in progress.
  Revert "Fix AAC timestamps for multiple aac frames per input buffer"
  fix failure in MediaCodecTest#testException
  mediaplayer: limit number of outstanding buffer requests
  NuPlayer: make previous decoders obsolete when reset is done.
  NuPlayer::Renderer::onPause() - Converted CHECK(!mPaused) to a warning.
  NuPlayer: check mSource before deferencing it.
  Move stale handler cleanup to constructor
  ...
parents 79e687ed 3af67d03
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ struct AMessage;
struct AString;
struct IMediaHTTPService;
class String8;
struct HTTPBase;

class DataSource : public RefBase {
public:
@@ -48,7 +49,10 @@ public:
            const sp<IMediaHTTPService> &httpService,
            const char *uri,
            const KeyedVector<String8, String8> *headers = NULL,
            String8 *contentType = NULL);
            String8 *contentType = NULL,
            HTTPBase *httpSource = NULL);

    static sp<DataSource> CreateMediaHTTP(const sp<IMediaHTTPService> &httpService);

    DataSource() {}

+20 −2
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@
#include "../../libstagefright/include/DRMExtractor.h"
#include "../../libstagefright/include/NuCachedSource2.h"
#include "../../libstagefright/include/WVMExtractor.h"
#include "../../libstagefright/include/HTTPBase.h"

namespace android {

@@ -64,6 +65,7 @@ void NuPlayer::GenericSource::resetDataSource() {
    mAudioTimeUs = 0;
    mVideoTimeUs = 0;
    mHTTPService.clear();
    mHttpSource.clear();
    mUri.clear();
    mUriHeaders.clear();
    mFd = -1;
@@ -284,10 +286,23 @@ void NuPlayer::GenericSource::onPrepareAsync() {
    // delayed data source creation
    if (mDataSource == NULL) {
        if (!mUri.empty()) {
            mIsWidevine = !strncasecmp(mUri.c_str(), "widevine://", 11);
            const char* uri = mUri.c_str();
            mIsWidevine = !strncasecmp(uri, "widevine://", 11);

            if (!strncasecmp("http://", uri, 7)
                    || !strncasecmp("https://", uri, 8)
                    || mIsWidevine) {
                mHttpSource = DataSource::CreateMediaHTTP(mHTTPService);
                if (mHttpSource == NULL) {
                    ALOGE("Failed to create http source!");
                    notifyPreparedAndCleanup(UNKNOWN_ERROR);
                    return;
                }
            }

            mDataSource = DataSource::CreateFromURI(
                   mHTTPService, mUri.c_str(), &mUriHeaders, &mContentType);
                   mHTTPService, uri, &mUriHeaders, &mContentType,
                   static_cast<HTTPBase *>(mHttpSource.get()));
        } else {
            // set to false first, if the extractor
            // comes back as secure, set it to true then.
@@ -360,6 +375,7 @@ void NuPlayer::GenericSource::notifyPreparedAndCleanup(status_t err) {
        mSniffedMIME = "";
        mDataSource.clear();
        mCachedSource.clear();
        mHttpSource.clear();

        cancelPollBuffering();
    }
@@ -479,6 +495,8 @@ void NuPlayer::GenericSource::disconnect() {
        if (mDataSource->flags() & DataSource::kIsCachingDataSource) {
            static_cast<NuCachedSource2 *>(mDataSource.get())->disconnect();
        }
    } else if (mHttpSource != NULL) {
        static_cast<HTTPBase *>(mHttpSource.get())->disconnect();
    }
}

+1 −0
Original line number Diff line number Diff line
@@ -126,6 +126,7 @@ private:

    sp<DataSource> mDataSource;
    sp<NuCachedSource2> mCachedSource;
    sp<DataSource> mHttpSource;
    sp<WVMExtractor> mWVMExtractor;
    sp<MetaData> mFileMeta;
    DrmManagerClient *mDrmManagerClient;
+22 −7
Original line number Diff line number Diff line
@@ -186,7 +186,8 @@ sp<DataSource> DataSource::CreateFromURI(
        const sp<IMediaHTTPService> &httpService,
        const char *uri,
        const KeyedVector<String8, String8> *headers,
        String8 *contentType) {
        String8 *contentType,
        HTTPBase *httpSource) {
    if (contentType != NULL) {
        *contentType = "";
    }
@@ -204,13 +205,14 @@ sp<DataSource> DataSource::CreateFromURI(
            return NULL;
        }

        if (httpSource == NULL) {
            sp<IMediaHTTPConnection> conn = httpService->makeHTTPConnection();
            if (conn == NULL) {
                ALOGE("Failed to make http connection from http service!");
                return NULL;
            }

        sp<HTTPBase> httpSource = new MediaHTTP(conn);
            httpSource = new MediaHTTP(conn);
        }

        String8 tmp;
        if (isWidevine) {
@@ -264,6 +266,19 @@ sp<DataSource> DataSource::CreateFromURI(
    return source;
}

sp<DataSource> DataSource::CreateMediaHTTP(const sp<IMediaHTTPService> &httpService) {
    if (httpService == NULL) {
        return NULL;
    }

    sp<IMediaHTTPConnection> conn = httpService->makeHTTPConnection();
    if (conn == NULL) {
        return NULL;
    } else {
        return new MediaHTTP(conn);
    }
}

String8 DataSource::getMIMEType() const {
    return String8("application/octet-stream");
}