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

Commit bcaa806d authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge changes from topic "rtsp_resume" into sc-dev am: b486977a

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/av/+/15280158

Change-Id: Icb92014fb2b07b75deb4050d5d5c3026627ee828
parents 58fb6412 b486977a
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -104,6 +104,11 @@ void ARTPConnection::addStream(
    msg->post();
}

void ARTPConnection::seekStream() {
    sp<AMessage> msg = new AMessage(kWhatSeekStream, this);
    msg->post();
}

void ARTPConnection::removeStream(int rtpSocket, int rtcpSocket) {
    sp<AMessage> msg = new AMessage(kWhatRemoveStream, this);
    msg->setInt32("rtp-socket", rtpSocket);
@@ -283,6 +288,12 @@ void ARTPConnection::onMessageReceived(const sp<AMessage> &msg) {
            break;
        }

        case kWhatSeekStream:
        {
            onSeekStream(msg);
            break;
        }

        case kWhatRemoveStream:
        {
            onRemoveStream(msg);
@@ -353,6 +364,18 @@ void ARTPConnection::onAddStream(const sp<AMessage> &msg) {
    }
}

void ARTPConnection::onSeekStream(const sp<AMessage> &msg) {
    (void)msg; // unused param as of now.
    List<StreamInfo>::iterator it = mStreams.begin();
    while (it != mStreams.end()) {
        for (size_t i = 0; i < it->mSources.size(); ++i) {
            sp<ARTPSource> source = it->mSources.valueAt(i);
            source->timeReset();
        }
        ++it;
    }
}

void ARTPConnection::onRemoveStream(const sp<AMessage> &msg) {
    int32_t rtpSocket, rtcpSocket;
    CHECK(msg->findInt32("rtp-socket", &rtpSocket));
+3 −1
Original line number Diff line number Diff line
@@ -40,7 +40,7 @@ struct ARTPConnection : public AHandler {
            const sp<ASessionDescription> &sessionDesc, size_t index,
            const sp<AMessage> &notify,
            bool injected);

    void seekStream();
    void removeStream(int rtpSocket, int rtcpSocket);

    void injectPacket(int index, const sp<ABuffer> &buffer);
@@ -69,6 +69,7 @@ protected:
private:
    enum {
        kWhatAddStream,
        kWhatSeekStream,
        kWhatRemoveStream,
        kWhatPollStreams,
        kWhatInjectPacket,
@@ -94,6 +95,7 @@ private:
    int32_t mCumulativeBytes;

    void onAddStream(const sp<AMessage> &msg);
    void onSeekStream(const sp<AMessage> &msg);
    void onRemoveStream(const sp<AMessage> &msg);
    void onPollStreams();
    void onInjectPacket(const sp<AMessage> &msg);
+23 −0
Original line number Diff line number Diff line
@@ -130,6 +130,24 @@ void ARTPSource::timeUpdate(uint32_t rtpTime, uint64_t ntpTime) {
    notify->post();
}

void ARTPSource::timeReset() {
    mFirstRtpTime = 0;
    mFirstSysTime = 0;
    mFirstSsrc = 0;
    mHighestNackNumber = 0;
    mHighestSeqNumber = 0;
    mPrevExpected = 0;
    mBaseSeqNumber = 0;
    mNumBuffersReceived = 0;
    mPrevNumBuffersReceived = 0;
    mPrevExpectedForRR = 0;
    mPrevNumBuffersReceivedForRR = 0;
    mLastNTPTime = 0;
    mLastNTPTimeUpdateUs = 0;
    mIssueFIRByAssembler = false;
    mLastFIRRequestUs = -1;
}

bool ARTPSource::queuePacket(const sp<ABuffer> &buffer) {
    uint32_t seqNum = (uint32_t)buffer->int32Data();

@@ -147,6 +165,11 @@ bool ARTPSource::queuePacket(const sp<ABuffer> &buffer) {
        ALOGD("first-rtp arrived: first-rtp-time=%u, sys-time=%lld, seq-num=%u, ssrc=%d",
                mFirstRtpTime, (long long)mFirstSysTime, mHighestSeqNumber, mFirstSsrc);
        mJitterCalc->init(mFirstRtpTime, mFirstSysTime, 0, mStaticJbTimeMs * 1000);
        if (mQueue.size() > 0) {
            ALOGD("clearing buffers which belonged to previous timeline"
                    " since a base timeline has been changed.");
            mQueue.clear();
        }
        mQueue.push_back(buffer);
        return true;
    }
+1 −0
Original line number Diff line number Diff line
@@ -56,6 +56,7 @@ struct ARTPSource : public RefBase {
    };

    void processRTPPacket(const sp<ABuffer> &buffer);
    void timeReset();
    void timeUpdate(uint32_t rtpTime, uint64_t ntpTime);
    void byeReceived();

+2 −0
Original line number Diff line number Diff line
@@ -1335,6 +1335,8 @@ struct MyHandler : public AHandler {

                        ALOGV("rtp-info: %s", response->mHeaders.valueAt(i).c_str());

                        mRTPConn->seekStream();

                        ALOGI("seek completed.");
                    }
                }