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

Commit a2e14302 authored by Lajos Molnar's avatar Lajos Molnar
Browse files

mediaplayer: add looping support to NuPlayer

Bug: 16641557
Change-Id: I433158e6e585b4714cfd6d89562ecd0587a07ae2
parent a2981013
Loading
Loading
Loading
Loading
+26 −4
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ NuPlayerDriver::NuPlayerDriver()
      mLooper(new ALooper),
      mPlayerFlags(0),
      mAtEOS(false),
      mLooping(false),
      mStartupSeekTimeUs(-1) {
    mLooper->setName("NuPlayerDriver Looper");

@@ -76,6 +77,7 @@ status_t NuPlayerDriver::setDataSource(
        const KeyedVector<String8, String8> *headers) {
    Mutex::Autolock autoLock(mLock);

    ALOGV("setDataSource: url=%s", url);
    if (mState != STATE_IDLE) {
        return INVALID_OPERATION;
    }
@@ -94,6 +96,7 @@ status_t NuPlayerDriver::setDataSource(
status_t NuPlayerDriver::setDataSource(int fd, int64_t offset, int64_t length) {
    Mutex::Autolock autoLock(mLock);

    ALOGV("setDataSource: fd=%d", fd);
    if (mState != STATE_IDLE) {
        return INVALID_OPERATION;
    }
@@ -112,6 +115,7 @@ status_t NuPlayerDriver::setDataSource(int fd, int64_t offset, int64_t length) {
status_t NuPlayerDriver::setDataSource(const sp<IStreamSource> &source) {
    Mutex::Autolock autoLock(mLock);

    ALOGV("setDataSource: stream source");
    if (mState != STATE_IDLE) {
        return INVALID_OPERATION;
    }
@@ -367,12 +371,14 @@ status_t NuPlayerDriver::reset() {
    mDurationUs = -1;
    mPositionUs = -1;
    mStartupSeekTimeUs = -1;
    mLooping = false;

    return OK;
}

status_t NuPlayerDriver::setLooping(int /* loop */) {
    return INVALID_OPERATION;
status_t NuPlayerDriver::setLooping(int loop) {
    mLooping = loop != 0;
    return OK;
}

player_type NuPlayerDriver::playerType() {
@@ -523,8 +529,24 @@ status_t NuPlayerDriver::dump(

void NuPlayerDriver::notifyListener(
        int msg, int ext1, int ext2, const Parcel *in) {
    if (msg == MEDIA_PLAYBACK_COMPLETE || msg == MEDIA_ERROR) {
    switch (msg) {
        case MEDIA_PLAYBACK_COMPLETE:
        {
            if (mLooping) {
                mPlayer->seekToAsync(0);
                break;
            }
            // fall through
        }

        case MEDIA_ERROR:
        {
            mAtEOS = true;
            break;
        }

        default:
            break;
    }

    sendEvent(msg, ext1, ext2, in);
+1 −0
Original line number Diff line number Diff line
@@ -111,6 +111,7 @@ private:
    uint32_t mPlayerFlags;

    bool mAtEOS;
    bool mLooping;

    int64_t mStartupSeekTimeUs;