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

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

Merge "NuPlayer: add missing getSelectedTrack in CCDecoder"

parents c55606b2 039224f1
Loading
Loading
Loading
Loading
+19 −8
Original line number Diff line number Diff line
@@ -825,19 +825,30 @@ void NuPlayer2::onMessageReceived(const sp<AMessage> &msg) {

        case kWhatGetSelectedTrack:
        {
            int32_t type32;
            CHECK(msg->findInt32("type", (int32_t*)&type32));
            media_track_type type = (media_track_type)type32;

            size_t inbandTracks = 0;
            status_t err = INVALID_OPERATION;
            ssize_t selectedTrack = -1;
            if (mCurrentSourceInfo.mSource != NULL) {
                err = OK;
                inbandTracks = mCurrentSourceInfo.mSource->getTrackCount();
                selectedTrack = mCurrentSourceInfo.mSource->getSelectedTrack(type);
            }

                int32_t type32;
                CHECK(msg->findInt32("type", (int32_t*)&type32));
                media_track_type type = (media_track_type)type32;
                ssize_t selectedTrack = mCurrentSourceInfo.mSource->getSelectedTrack(type);
            if (selectedTrack == -1 && mCCDecoder != NULL) {
                err = OK;
                selectedTrack = mCCDecoder->getSelectedTrack(type);
                if (selectedTrack != -1) {
                    selectedTrack += inbandTracks;
                }
            }

            PlayerMessage* reply;
            CHECK(msg->findPointer("reply", (void**)&reply));
            reply->add_values()->set_int32_value(selectedTrack);
            }

            sp<AMessage> response = new AMessage;
            response->setInt32("err", err);
+12 −0
Original line number Diff line number Diff line
@@ -199,6 +199,18 @@ status_t NuPlayer2::CCDecoder::selectTrack(size_t index, bool select) {
    return OK;
}

ssize_t NuPlayer2::CCDecoder::getSelectedTrack(media_track_type type) const {
    if (mSelectedTrack != -1) {
        CCTrack track = mTracks[mSelectedTrack];
        if (track.mTrackType == kTrackTypeCEA608 || track.mTrackType == kTrackTypeCEA708) {
            return (type == MEDIA_TRACK_TYPE_SUBTITLE ? mSelectedTrack : -1);
        }
        return (type == MEDIA_TRACK_TYPE_UNKNOWN ? mSelectedTrack : -1);
    }

    return -1;
}

bool NuPlayer2::CCDecoder::isSelected() const {
    return mSelectedTrack >= 0 && mSelectedTrack < (int32_t)getTrackCount();
}
+1 −0
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ struct NuPlayer2::CCDecoder : public RefBase {
    size_t getTrackCount() const;
    sp<AMessage> getTrackInfo(size_t index) const;
    status_t selectTrack(size_t index, bool select);
    ssize_t getSelectedTrack(media_track_type type) const;
    bool isSelected() const;
    void decode(const sp<ABuffer> &accessUnit);
    void display(int64_t timeUs);
+19 −8
Original line number Diff line number Diff line
@@ -659,19 +659,30 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) {

        case kWhatGetSelectedTrack:
        {
            int32_t type32;
            CHECK(msg->findInt32("type", (int32_t*)&type32));
            media_track_type type = (media_track_type)type32;

            size_t inbandTracks = 0;
            status_t err = INVALID_OPERATION;
            ssize_t selectedTrack = -1;
            if (mSource != NULL) {
                err = OK;
                inbandTracks = mSource->getTrackCount();
                selectedTrack = mSource->getSelectedTrack(type);
            }

                int32_t type32;
                CHECK(msg->findInt32("type", (int32_t*)&type32));
                media_track_type type = (media_track_type)type32;
                ssize_t selectedTrack = mSource->getSelectedTrack(type);
            if (selectedTrack == -1 && mCCDecoder != NULL) {
                err = OK;
                selectedTrack = mCCDecoder->getSelectedTrack(type);
                if (selectedTrack != -1) {
                    selectedTrack += inbandTracks;
                }
            }

            Parcel* reply;
            CHECK(msg->findPointer("reply", (void**)&reply));
            reply->writeInt32(selectedTrack);
            }

            sp<AMessage> response = new AMessage;
            response->setInt32("err", err);
+12 −0
Original line number Diff line number Diff line
@@ -200,6 +200,18 @@ status_t NuPlayer::CCDecoder::selectTrack(size_t index, bool select) {
    return OK;
}

ssize_t NuPlayer::CCDecoder::getSelectedTrack(media_track_type type) const {
    if (mSelectedTrack != -1) {
        CCTrack track = mTracks[mSelectedTrack];
        if (track.mTrackType == kTrackTypeCEA608 || track.mTrackType == kTrackTypeCEA708) {
            return (type == MEDIA_TRACK_TYPE_SUBTITLE ? mSelectedTrack : -1);
        }
        return (type == MEDIA_TRACK_TYPE_UNKNOWN ? mSelectedTrack : -1);
    }

    return -1;
}

bool NuPlayer::CCDecoder::isSelected() const {
    return mSelectedTrack >= 0 && mSelectedTrack < (int32_t)getTrackCount();
}
Loading