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

Commit 5e5a6e10 authored by Marco Nelissen's avatar Marco Nelissen Committed by The Android Automerger
Browse files

Add support for ANDROID_LOOP to NuPlayer

Bug: 17518139
Change-Id: I9355ddd4c998d967013dd8bd32d670a9a83dea31
parent 6e584e2b
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -106,6 +106,10 @@ status_t NuPlayer::GenericSource::setDataSource(
    return OK;
}

sp<MetaData> NuPlayer::GenericSource::getFileFormatMeta() const {
    return mFileMeta;
}

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

@@ -144,10 +148,10 @@ status_t NuPlayer::GenericSource::initFromDataSource() {
        checkDrmStatus(mDataSource);
    }

    sp<MetaData> fileMeta = extractor->getMetaData();
    if (fileMeta != NULL) {
    mFileMeta = extractor->getMetaData();
    if (mFileMeta != NULL) {
        int64_t duration;
        if (fileMeta->findInt64(kKeyDuration, &duration)) {
        if (mFileMeta->findInt64(kKeyDuration, &duration)) {
            mDurationUs = duration;
        }
    }
+3 −0
Original line number Diff line number Diff line
@@ -59,6 +59,8 @@ struct NuPlayer::GenericSource : public NuPlayer::Source {

    virtual status_t feedMoreTSData();

    virtual sp<MetaData> getFileFormatMeta() const;

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

    virtual status_t getDuration(int64_t *durationUs);
@@ -125,6 +127,7 @@ private:
    sp<DataSource> mDataSource;
    sp<NuCachedSource2> mCachedSource;
    sp<WVMExtractor> mWVMExtractor;
    sp<MetaData> mFileMeta;
    DrmManagerClient *mDrmManagerClient;
    sp<DecryptHandle> mDecryptHandle;
    bool mStarted;
+4 −0
Original line number Diff line number Diff line
@@ -1730,6 +1730,10 @@ status_t NuPlayer::selectTrack(size_t trackIndex, bool select) {
    return err;
}

sp<MetaData> NuPlayer::getFileMeta() {
    return mSource->getFileFormatMeta();
}

void NuPlayer::schedulePollDuration() {
    sp<AMessage> msg = new AMessage(kWhatPollDuration, id());
    msg->setInt32("generation", mPollDurationGeneration);
+2 −0
Original line number Diff line number Diff line
@@ -67,6 +67,8 @@ struct NuPlayer : public AHandler {
    status_t getSelectedTrack(int32_t type, Parcel* reply) const;
    status_t selectTrack(size_t trackIndex, bool select);

    sp<MetaData> getFileMeta();

    static const size_t kAggregateBufferSizeBytes;

protected:
+11 −1
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ NuPlayerDriver::NuPlayerDriver()
      mPlayerFlags(0),
      mAtEOS(false),
      mLooping(false),
      mAutoLoop(false),
      mStartupSeekTimeUs(-1) {
    mLooper->setName("NuPlayerDriver Looper");

@@ -505,6 +506,7 @@ status_t NuPlayerDriver::invoke(const Parcel &request, Parcel *reply) {

void NuPlayerDriver::setAudioSink(const sp<AudioSink> &audioSink) {
    mPlayer->setAudioSink(audioSink);
    mAudioSink = audioSink;
}

status_t NuPlayerDriver::setParameter(
@@ -634,7 +636,8 @@ void NuPlayerDriver::notifyListener_l(
        case MEDIA_PLAYBACK_COMPLETE:
        {
            if (mState != STATE_RESET_IN_PROGRESS) {
                if (mLooping) {
                if (mLooping || (mAutoLoop
                        && (mAudioSink == NULL || mAudioSink->realtime()))) {
                    mPlayer->seekToAsync(0);
                    break;
                }
@@ -700,6 +703,13 @@ void NuPlayerDriver::notifyPrepareCompleted(status_t err) {
        }
    }

    sp<MetaData> meta = mPlayer->getFileMeta();
    int32_t loop;
    if (meta != NULL
            && meta->findInt32(kKeyAutoLoop, &loop) && loop != 0) {
        mAutoLoop = true;
    }

    mCondition.broadcast();
}

Loading