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

Commit 471dd132 authored by Andreas Huber's avatar Andreas Huber Committed by Android (Google) Code Review
Browse files

Merge "[wfd] Support a low(er) power state by triggering PAUSE/RESUME." into jb-mr1.1-dev

parents 2e6255f1 bf4950aa
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -39,6 +39,9 @@ class IRemoteDisplay : public IInterface
public:
    DECLARE_META_INTERFACE(RemoteDisplay);

    virtual status_t pause() = 0;
    virtual status_t resume() = 0;

    // Disconnects the remote display and stops listening for new connections.
    virtual status_t dispose() = 0;
};
+31 −0
Original line number Diff line number Diff line
@@ -23,6 +23,8 @@ namespace android {

enum {
    DISPOSE = IBinder::FIRST_CALL_TRANSACTION,
    PAUSE,
    RESUME,
};

class BpRemoteDisplay: public BpInterface<IRemoteDisplay>
@@ -33,6 +35,20 @@ public:
    {
    }

    virtual status_t pause() {
        Parcel data, reply;
        data.writeInterfaceToken(IRemoteDisplay::getInterfaceDescriptor());
        remote()->transact(PAUSE, data, &reply);
        return reply.readInt32();
    }

    virtual status_t resume() {
        Parcel data, reply;
        data.writeInterfaceToken(IRemoteDisplay::getInterfaceDescriptor());
        remote()->transact(RESUME, data, &reply);
        return reply.readInt32();
    }

    status_t dispose()
    {
        Parcel data, reply;
@@ -55,6 +71,21 @@ status_t BnRemoteDisplay::onTransact(
            reply->writeInt32(dispose());
            return NO_ERROR;
        }

        case PAUSE:
        {
            CHECK_INTERFACE(IRemoteDisplay, data, reply);
            reply->writeInt32(pause());
            return OK;
        }

        case RESUME:
        {
            CHECK_INTERFACE(IRemoteDisplay, data, reply);
            reply->writeInt32(resume());
            return OK;
        }

        default:
            return BBinder::onTransact(code, data, reply, flags);
    }
+8 −0
Original line number Diff line number Diff line
@@ -40,6 +40,14 @@ RemoteDisplay::RemoteDisplay(
RemoteDisplay::~RemoteDisplay() {
}

status_t RemoteDisplay::pause() {
    return mSource->pause();
}

status_t RemoteDisplay::resume() {
    return mSource->resume();
}

status_t RemoteDisplay::dispose() {
    mSource->stop();

+2 −0
Original line number Diff line number Diff line
@@ -33,6 +33,8 @@ struct WifiDisplaySource;
struct RemoteDisplay : public BnRemoteDisplay {
    RemoteDisplay(const sp<IRemoteDisplayClient> &client, const char *iface);

    virtual status_t pause();
    virtual status_t resume();
    virtual status_t dispose();

protected:
+32 −2
Original line number Diff line number Diff line
@@ -34,7 +34,8 @@ MediaPuller::MediaPuller(
    : mSource(source),
      mNotify(notify),
      mPullGeneration(0),
      mIsAudio(false) {
      mIsAudio(false),
      mPaused(false) {
    sp<MetaData> meta = source->getFormat();
    const char *mime;
    CHECK(meta->findCString(kKeyMIMEType, &mime));
@@ -71,6 +72,14 @@ void MediaPuller::stopAsync(const sp<AMessage> &notify) {
    msg->post();
}

void MediaPuller::pause() {
    (new AMessage(kWhatPause, id()))->post();
}

void MediaPuller::resume() {
    (new AMessage(kWhatResume, id()))->post();
}

void MediaPuller::onMessageReceived(const sp<AMessage> &msg) {
    switch (msg->what()) {
        case kWhatStart:
@@ -95,7 +104,6 @@ void MediaPuller::onMessageReceived(const sp<AMessage> &msg) {

            uint32_t replyID;
            CHECK(msg->senderAwaitsResponse(&replyID));

            response->postReply(replyID);
            break;
        }
@@ -130,6 +138,16 @@ void MediaPuller::onMessageReceived(const sp<AMessage> &msg) {
            MediaBuffer *mbuf;
            status_t err = mSource->read(&mbuf);

            if (mPaused) {
                if (err == OK) {
                    mbuf->release();
                    mbuf = NULL;
                }

                schedulePull();
                break;
            }

            if (err != OK) {
                if (err == ERROR_END_OF_STREAM) {
                    ALOGI("stream ended.");
@@ -176,6 +194,18 @@ void MediaPuller::onMessageReceived(const sp<AMessage> &msg) {
            break;
        }

        case kWhatPause:
        {
            mPaused = true;
            break;
        }

        case kWhatResume:
        {
            mPaused = false;
            break;
        }

        default:
            TRESPASS();
    }
Loading