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

Commit 41929fb5 authored by Dongwon Kang's avatar Dongwon Kang
Browse files

MediaPlayer2: use protobuf instead of parcel for notification message

Test: MediaPlayer2Test
Bug: 112767225
Change-Id: I7f5bd177c138a8ad5c005f4505d4d9c5042486a8
parent 55071964
Loading
Loading
Loading
Loading
+3 −2
Original line number Original line Diff line number Diff line
@@ -60,7 +60,8 @@ struct ANativeWindowWrapper;
class MediaPlayer2InterfaceListener: public RefBase
class MediaPlayer2InterfaceListener: public RefBase
{
{
public:
public:
    virtual void notify(int64_t srcId, int msg, int ext1, int ext2, const Parcel *obj) = 0;
    virtual void notify(int64_t srcId, int msg, int ext1, int ext2,
           const PlayerMessage *obj) = 0;
};
};


class MediaPlayer2Interface : public AHandler {
class MediaPlayer2Interface : public AHandler {
@@ -240,7 +241,7 @@ public:
        mListener = listener;
        mListener = listener;
    }
    }


    void sendEvent(int64_t srcId, int msg, int ext1=0, int ext2=0, const Parcel *obj=NULL) {
    void sendEvent(int64_t srcId, int msg, int ext1=0, int ext2=0, const PlayerMessage *obj=NULL) {
        sp<MediaPlayer2InterfaceListener> listener;
        sp<MediaPlayer2InterfaceListener> listener;
        {
        {
            Mutex::Autolock autoLock(mListenerLock);
            Mutex::Autolock autoLock(mListenerLock);
+3 −2
Original line number Original line Diff line number Diff line
@@ -42,7 +42,8 @@ class MediaPlayer2AudioOutput;
class MediaPlayer2Listener: virtual public RefBase
class MediaPlayer2Listener: virtual public RefBase
{
{
public:
public:
    virtual void notify(int64_t srcId, int msg, int ext1, int ext2, const Parcel *obj) = 0;
    virtual void notify(int64_t srcId, int msg, int ext1, int ext2,
            const PlayerMessage *obj = NULL) = 0;
};
};


class MediaPlayer2 : public MediaPlayer2InterfaceListener
class MediaPlayer2 : public MediaPlayer2InterfaceListener
@@ -89,7 +90,7 @@ public:
            bool            isLooping();
            bool            isLooping();
            status_t        setVolume(float leftVolume, float rightVolume);
            status_t        setVolume(float leftVolume, float rightVolume);
            void            notify(int64_t srcId, int msg, int ext1, int ext2,
            void            notify(int64_t srcId, int msg, int ext1, int ext2,
                                   const Parcel *obj = NULL);
                                   const PlayerMessage *obj = NULL);
            status_t        invoke(const PlayerMessage &request, PlayerMessage *reply);
            status_t        invoke(const PlayerMessage &request, PlayerMessage *reply);
            status_t        setMetadataFilter(const Parcel& filter);
            status_t        setMetadataFilter(const Parcel& filter);
            status_t        getMetadata(bool update_only, bool apply_filter, Parcel *metadata);
            status_t        getMetadata(bool update_only, bool apply_filter, Parcel *metadata);
+3 −2
Original line number Original line Diff line number Diff line
@@ -223,7 +223,8 @@ public:


    ~proxyListener() { };
    ~proxyListener() { };


    virtual void notify(int64_t srcId, int msg, int ext1, int ext2, const Parcel *obj) override {
    virtual void notify(int64_t srcId, int msg, int ext1, int ext2,
            const PlayerMessage *obj) override {
        sp<MediaPlayer2> player = mPlayer.promote();
        sp<MediaPlayer2> player = mPlayer.promote();
        if (player != NULL) {
        if (player != NULL) {
            player->notify(srcId, msg, ext1, ext2, obj);
            player->notify(srcId, msg, ext1, ext2, obj);
@@ -1271,7 +1272,7 @@ void MediaPlayer2::addNewMetadataUpdate(media::Metadata::Type metadata_type) {
    }
    }
}
}


void MediaPlayer2::notify(int64_t srcId, int msg, int ext1, int ext2, const Parcel *obj) {
void MediaPlayer2::notify(int64_t srcId, int msg, int ext1, int ext2, const PlayerMessage *obj) {
    ALOGV("message received srcId=%lld, msg=%d, ext1=%d, ext2=%d",
    ALOGV("message received srcId=%lld, msg=%d, ext1=%d, ext2=%d",
          (long long)srcId, msg, ext1, ext2);
          (long long)srcId, msg, ext1, ext2);


+10 −5
Original line number Original line Diff line number Diff line
@@ -1590,15 +1590,20 @@ status_t NuPlayer2::GenericSource2::checkDrmInfo()
        return OK; // source without DRM info
        return OK; // source without DRM info
    }
    }


    sp<ABuffer> drmInfoBuffer = NuPlayer2Drm::retrieveDrmInfo(psshInfo);
    PlayerMessage playerMsg;
    ALOGV("checkDrmInfo: MEDIA_DRM_INFO PSSH drm info size: %d", (int)drmInfoBuffer->size());
    status_t ret = NuPlayer2Drm::retrieveDrmInfo(psshInfo, &playerMsg);
    ALOGV("checkDrmInfo: MEDIA_DRM_INFO PSSH drm info size: %d", (int)playerMsg.ByteSize());


    if (drmInfoBuffer->size() == 0) {
    if (ret != OK) {
        ALOGE("checkDrmInfo: Unexpected parcel size: 0");
        ALOGE("checkDrmInfo: failed to retrive DrmInfo %d", ret);
        return UNKNOWN_ERROR;
        return UNKNOWN_ERROR;
    }
    }


    notifyDrmInfo(drmInfoBuffer);
    int size = playerMsg.ByteSize();
    sp<ABuffer> drmInfoBuf = new ABuffer(size);
    playerMsg.SerializeToArray(drmInfoBuf->data(), size);
    drmInfoBuf->setRange(0, size);
    notifyDrmInfo(drmInfoBuf);


    return OK;
    return OK;
}
}
+19 −21
Original line number Original line Diff line number Diff line
@@ -2145,7 +2145,8 @@ void NuPlayer2::updateVideoSize(
            displayHeight);
            displayHeight);
}
}


void NuPlayer2::notifyListener(int64_t srcId, int msg, int ext1, int ext2, const Parcel *in) {
void NuPlayer2::notifyListener(
        int64_t srcId, int msg, int ext1, int ext2, const PlayerMessage *in) {
    if (mDriver == NULL) {
    if (mDriver == NULL) {
        return;
        return;
    }
    }
@@ -2616,15 +2617,15 @@ void NuPlayer2::onSourceNotify(const sp<AMessage> &msg) {
        // Modular DRM
        // Modular DRM
        case Source::kWhatDrmInfo:
        case Source::kWhatDrmInfo:
        {
        {
            Parcel parcel;
            PlayerMessage playerMsg;
            sp<ABuffer> drmInfo;
            sp<ABuffer> drmInfo;
            CHECK(msg->findBuffer("drmInfo", &drmInfo));
            CHECK(msg->findBuffer("drmInfo", &drmInfo));
            parcel.setData(drmInfo->data(), drmInfo->size());
            playerMsg.ParseFromArray(drmInfo->data(), drmInfo->size());


            ALOGV("onSourceNotify() kWhatDrmInfo MEDIA2_DRM_INFO drmInfo: %p  parcel size: %zu",
            ALOGV("onSourceNotify() kWhatDrmInfo MEDIA2_DRM_INFO drmInfo: %p  playerMsg size: %d",
                    drmInfo.get(), parcel.dataSize());
                    drmInfo.get(), playerMsg.ByteSize());


            notifyListener(srcId, MEDIA2_DRM_INFO, 0 /* ext1 */, 0 /* ext2 */, &parcel);
            notifyListener(srcId, MEDIA2_DRM_INFO, 0 /* ext1 */, 0 /* ext2 */, &playerMsg);


            break;
            break;
        }
        }
@@ -2845,28 +2846,24 @@ void NuPlayer2::sendSubtitleData(const sp<ABuffer> &buffer, int32_t baseIndex) {
    CHECK(buffer->meta()->findInt64("timeUs", &timeUs));
    CHECK(buffer->meta()->findInt64("timeUs", &timeUs));
    CHECK(buffer->meta()->findInt64("durationUs", &durationUs));
    CHECK(buffer->meta()->findInt64("durationUs", &durationUs));


    Parcel in;
    PlayerMessage playerMsg;
    in.writeInt32(trackIndex + baseIndex);
    playerMsg.add_values()->set_int32_value(trackIndex + baseIndex);
    in.writeInt64(timeUs);
    playerMsg.add_values()->set_int64_value(timeUs);
    in.writeInt64(durationUs);
    playerMsg.add_values()->set_int64_value(durationUs);
    in.writeInt32(buffer->size());
    playerMsg.add_values()->set_bytes_value(buffer->data(), buffer->size());
    in.writeInt32(buffer->size());
    in.write(buffer->data(), buffer->size());


    notifyListener(mSrcId, MEDIA2_SUBTITLE_DATA, 0, 0, &in);
    notifyListener(mSrcId, MEDIA2_SUBTITLE_DATA, 0, 0, &playerMsg);
}
}


void NuPlayer2::sendTimedMetaData(const sp<ABuffer> &buffer) {
void NuPlayer2::sendTimedMetaData(const sp<ABuffer> &buffer) {
    int64_t timeUs;
    int64_t timeUs;
    CHECK(buffer->meta()->findInt64("timeUs", &timeUs));
    CHECK(buffer->meta()->findInt64("timeUs", &timeUs));


    Parcel in;
    PlayerMessage playerMsg;
    in.writeInt64(timeUs);
    playerMsg.add_values()->set_int64_value(timeUs);
    in.writeInt32(buffer->size());
    playerMsg.add_values()->set_bytes_value(buffer->data(), buffer->size());
    in.writeInt32(buffer->size());
    in.write(buffer->data(), buffer->size());


    notifyListener(mSrcId, MEDIA2_META_DATA, 0, 0, &in);
    notifyListener(mSrcId, MEDIA2_META_DATA, 0, 0, &playerMsg);
}
}


void NuPlayer2::sendTimedTextData(const sp<ABuffer> &buffer) {
void NuPlayer2::sendTimedTextData(const sp<ABuffer> &buffer) {
@@ -2896,7 +2893,8 @@ void NuPlayer2::sendTimedTextData(const sp<ABuffer> &buffer) {
    }
    }


    if ((parcel.dataSize() > 0)) {
    if ((parcel.dataSize() > 0)) {
        notifyListener(mSrcId, MEDIA2_TIMED_TEXT, 0, 0, &parcel);
        // TODO: convert text data to PlayerMessage
        // notifyListener(mSrcId, MEDIA2_TIMED_TEXT, 0, 0, &parcel);
    } else {  // send an empty timed text
    } else {  // send an empty timed text
        notifyListener(mSrcId, MEDIA2_TIMED_TEXT, 0, 0);
        notifyListener(mSrcId, MEDIA2_TIMED_TEXT, 0, 0);
    }
    }
Loading