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

Commit 00969d2e authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "MediaPlayer2: support start position of data source"

parents 0da910e3 f01e3127
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -403,6 +403,15 @@ status_t MediaPlayer2::setDataSource(const sp<DataSourceDesc> &dsd) {
    if (dsd == NULL) {
        return BAD_VALUE;
    }
    // Microsecond is used in NuPlayer2.
    if (dsd->mStartPositionMs > INT64_MAX / 1000) {
        dsd->mStartPositionMs = INT64_MAX / 1000;
        ALOGW("setDataSource, start poistion clamped to %lld ms", (long long)dsd->mStartPositionMs);
    }
    if (dsd->mEndPositionMs > INT64_MAX / 1000) {
        dsd->mEndPositionMs = INT64_MAX / 1000;
        ALOGW("setDataSource, end poistion clamped to %lld ms", (long long)dsd->mStartPositionMs);
    }
    ALOGV("setDataSource type(%d), srcId(%lld)", dsd->mType, (long long)dsd->mId);

    sp<MediaPlayer2Interface> oldPlayer;
+15 −7
Original line number Diff line number Diff line
@@ -335,7 +335,7 @@ NuPlayer2::GenericSource2::~GenericSource2() {
    resetDataSource();
}

void NuPlayer2::GenericSource2::prepareAsync() {
void NuPlayer2::GenericSource2::prepareAsync(int64_t startTimeUs) {
    Mutex::Autolock _l(mLock);
    ALOGV("prepareAsync: (looper: %d)", (mLooper != NULL));

@@ -350,10 +350,12 @@ void NuPlayer2::GenericSource2::prepareAsync() {
    }

    sp<AMessage> msg = new AMessage(kWhatPrepareAsync, this);
    msg->setInt64("startTimeUs", startTimeUs);

    msg->post();
}

void NuPlayer2::GenericSource2::onPrepareAsync() {
void NuPlayer2::GenericSource2::onPrepareAsync(int64_t startTimeUs) {
    ALOGV("onPrepareAsync: mDataSource: %d", (mDataSource != NULL));

    // delayed data source creation
@@ -429,6 +431,7 @@ void NuPlayer2::GenericSource2::onPrepareAsync() {
            FLAG_CAN_SEEK_FORWARD |
            FLAG_CAN_SEEK);

    doSeek(startTimeUs, MediaPlayer2SeekMode::SEEK_CLOSEST);
    finishPrepareAsync();

    ALOGV("onPrepareAsync: Done");
@@ -440,6 +443,7 @@ void NuPlayer2::GenericSource2::finishPrepareAsync() {
    if (mIsStreaming) {
        mCachedSource->resumeFetchingIfNecessary();
        mPreparing = true;
        ++mPollBufferingGeneration;
        schedulePollBuffering();
    } else {
        notifyPrepared();
@@ -544,7 +548,9 @@ void NuPlayer2::GenericSource2::onMessageReceived(const sp<AMessage> &msg) {
    switch (msg->what()) {
      case kWhatPrepareAsync:
      {
          onPrepareAsync();
          int64_t startTimeUs;
          CHECK(msg->findInt64("startTimeUs", &startTimeUs));
          onPrepareAsync(startTimeUs);
          break;
      }
      case kWhatFetchSubtitleData:
@@ -1443,11 +1449,13 @@ void NuPlayer2::GenericSource2::notifyBufferingUpdate(int32_t percentage) {
}

void NuPlayer2::GenericSource2::schedulePollBuffering() {
    if (mIsStreaming) {
        sp<AMessage> msg = new AMessage(kWhatPollBuffering, this);
        msg->setInt32("generation", mPollBufferingGeneration);
        // Enquires buffering status every second.
        msg->post(1000000ll);
    }
}

void NuPlayer2::GenericSource2::onPollBuffering() {
    status_t finalStatus = UNKNOWN_ERROR;
+2 −2
Original line number Diff line number Diff line
@@ -62,7 +62,7 @@ struct NuPlayer2::GenericSource2 : public NuPlayer2::Source,
            BufferingSettings* buffering /* nonnull */) override;
    virtual status_t setBufferingSettings(const BufferingSettings& buffering) override;

    virtual void prepareAsync();
    virtual void prepareAsync(int64_t startTimeUs);

    virtual void start();
    virtual void stop();
@@ -194,7 +194,7 @@ private:
    void onSeek(const sp<AMessage>& msg);
    status_t doSeek(int64_t seekTimeUs, MediaPlayer2SeekMode mode);

    void onPrepareAsync();
    void onPrepareAsync(int64_t startTimeUs);

    void fetchTextData(
            uint32_t what, media_track_type type,
+2 −1
Original line number Diff line number Diff line
@@ -99,7 +99,8 @@ status_t NuPlayer2::HTTPLiveSource2::setBufferingSettings(const BufferingSetting
    return OK;
}

void NuPlayer2::HTTPLiveSource2::prepareAsync() {
// TODO: fetch data starting from |startTimeUs|
void NuPlayer2::HTTPLiveSource2::prepareAsync(int64_t /* startTimeUs */) {
    if (mLiveLooper == NULL) {
        mLiveLooper = new ALooper;
        mLiveLooper->setName("http live");
+1 −1
Original line number Diff line number Diff line
@@ -38,7 +38,7 @@ struct NuPlayer2::HTTPLiveSource2 : public NuPlayer2::Source {
            BufferingSettings* buffering /* nonnull */) override;
    virtual status_t setBufferingSettings(const BufferingSettings& buffering) override;

    virtual void prepareAsync();
    virtual void prepareAsync(int64_t startTimeUs);
    virtual void start();

    virtual status_t dequeueAccessUnit(bool audio, sp<ABuffer> *accessUnit);
Loading