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

Commit 17af1192 authored by Chong Zhang's avatar Chong Zhang Committed by Android (Google) Code Review
Browse files

Merge "nuplayer: do not use cached source for wvm content"

parents d031aaae fc6cfd83
Loading
Loading
Loading
Loading
+32 −23
Original line number Diff line number Diff line
@@ -130,23 +130,37 @@ sp<MetaData> NuPlayer::GenericSource::getFileFormatMeta() const {

status_t NuPlayer::GenericSource::initFromDataSource() {
    sp<MediaExtractor> extractor;

    CHECK(mDataSource != NULL);

    if (mIsWidevine) {
    String8 mimeType;
    float confidence;
    sp<AMessage> dummy;
        bool success;
    bool isWidevineStreaming = false;

    CHECK(mDataSource != NULL);

        success = SniffWVM(mDataSource, &mimeType, &confidence, &dummy);
        if (!success
                || strcasecmp(
    if (mIsWidevine) {
        isWidevineStreaming = SniffWVM(
                mDataSource, &mimeType, &confidence, &dummy);
        if (!isWidevineStreaming ||
                strcasecmp(
                    mimeType.string(), MEDIA_MIMETYPE_CONTAINER_WVM)) {
            ALOGE("unsupported widevine mime: %s", mimeType.string());
            return UNKNOWN_ERROR;
        }
    } else if (mIsStreaming) {
        if (mSniffedMIME.empty()) {
            if (!mDataSource->sniff(&mimeType, &confidence, &dummy)) {
                return UNKNOWN_ERROR;
            }
            mSniffedMIME = mimeType.string();
        }
        isWidevineStreaming = !strcasecmp(
                mSniffedMIME.c_str(), MEDIA_MIMETYPE_CONTAINER_WVM);
    }

    if (isWidevineStreaming) {
        // we don't want cached source for widevine streaming.
        mCachedSource.clear();
        mDataSource = mHttpSource;
        mWVMExtractor = new WVMExtractor(mDataSource);
        mWVMExtractor->setAdaptiveStreamingMode(true);
        if (mUIDValid) {
@@ -181,14 +195,6 @@ status_t NuPlayer::GenericSource::initFromDataSource() {
            if (mFileMeta->findCString(kKeyMIMEType, &fileMime)
                    && !strncasecmp(fileMime, "video/wvm", 9)) {
                mIsWidevine = true;
                if (!mUri.empty()) {
                  // streaming, but the app forgot to specify widevine:// url
                  mWVMExtractor = static_cast<WVMExtractor *>(extractor.get());
                  mWVMExtractor->setAdaptiveStreamingMode(true);
                  if (mUIDValid) {
                    mWVMExtractor->setUID(mUID);
                  }
                }
            }
        }
    }
@@ -656,10 +662,10 @@ void NuPlayer::GenericSource::sendCacheStats() {
    int32_t kbps = 0;
    status_t err = UNKNOWN_ERROR;

    if (mCachedSource != NULL) {
        err = mCachedSource->getEstimatedBandwidthKbps(&kbps);
    } else if (mWVMExtractor != NULL) {
    if (mWVMExtractor != NULL) {
        err = mWVMExtractor->getEstimatedBandwidthKbps(&kbps);
    } else if (mCachedSource != NULL) {
        err = mCachedSource->getEstimatedBandwidthKbps(&kbps);
    }

    if (err == OK) {
@@ -681,7 +687,13 @@ void NuPlayer::GenericSource::onPollBuffering() {
    int64_t cachedDurationUs = -1ll;
    ssize_t cachedDataRemaining = -1;

    if (mCachedSource != NULL) {
    ALOGW_IF(mWVMExtractor != NULL && mCachedSource != NULL,
            "WVMExtractor and NuCachedSource both present");

    if (mWVMExtractor != NULL) {
        cachedDurationUs =
                mWVMExtractor->getCachedDurationUs(&finalStatus);
    } else if (mCachedSource != NULL) {
        cachedDataRemaining =
                mCachedSource->approxDataRemaining(&finalStatus);

@@ -697,9 +709,6 @@ void NuPlayer::GenericSource::onPollBuffering() {
                cachedDurationUs = cachedDataRemaining * 8000000ll / bitrate;
            }
        }
    } else if (mWVMExtractor != NULL) {
        cachedDurationUs
            = mWVMExtractor->getCachedDurationUs(&finalStatus);
    }

    if (finalStatus != OK) {