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

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

Merge "VT: Mandatory jitter time enlarged as interarrival jitter time" into tm-qpr-dev

parents ed7469bb ab64575c
Loading
Loading
Loading
Loading
+13 −20
Original line number Diff line number Diff line
@@ -46,7 +46,6 @@ AAVCAssembler::AAVCAssembler(const sp<AMessage> &notify)
      mFirstIFrameProvided(false),
      mLastCvo(-1),
      mLastIFrameProvidedAtMs(0),
      mLastRtpTimeJitterDataUs(0),
      mWidth(0),
      mHeight(0) {
}
@@ -123,20 +122,11 @@ ARTPAssembler::AssemblyStatus AAVCAssembler::addNALUnit(
    }

    sp<ABuffer> buffer = *queue->begin();
    uint32_t seqNum = (uint32_t)buffer->int32Data();
    buffer->meta()->setObject("source", source);

    /**
     * RFC3550 calculates the interarrival jitter time for 'ALL packets'.
     * But that is not useful as an ingredient of buffering time.
     * Instead, we calculates the time only for all 'NAL units'.
     */
    int64_t rtpTime = findRTPTime(firstRTPTime, buffer);
    int64_t nowTimeUs = ALooper::GetNowUs();
    if (rtpTime != mLastRtpTimeJitterDataUs) {
        source->putBaseJitterData(rtpTime, nowTimeUs);
        mLastRtpTimeJitterDataUs = rtpTime;
    }
    source->putInterArrivalJitterData(rtpTime, nowTimeUs);

    const int64_t startTimeMs = source->mSysAnchorTime / 1000;
    const int64_t nowTimeMs = nowTimeUs / 1000;
@@ -168,7 +158,7 @@ ARTPAssembler::AssemblyStatus AAVCAssembler::addNALUnit(
    const int32_t dynamicJbTimeMs = std::min(dynamicJitterTimeMs, 150);
    const int64_t dynamicJbTimeRtp = MsToRtp(dynamicJbTimeMs, clockRate);
    /* Fundamental jitter time */
    const int32_t jitterTimeMs = baseJbTimeMs;
    const int32_t jitterTimeMs = baseJbTimeMs + dynamicJbTimeMs;
    const int64_t jitterTimeRtp = MsToRtp(jitterTimeMs, clockRate);

    // Till (T), this assembler waits unconditionally to collect current NAL unit
@@ -177,7 +167,7 @@ ARTPAssembler::AssemblyStatus AAVCAssembler::addNALUnit(
    bool isExpired = (diffTimeRtp >= 0);                    // It's expired if T is passed away

    // From (T), this assembler tries to complete the NAL till (T + try)
    int32_t tryJbTimeMs = baseJitterTimeMs / 2 + dynamicJbTimeMs;
    int32_t tryJbTimeMs = dynamicJbTimeMs;
    int64_t tryJbTimeRtp = MsToRtp(tryJbTimeMs, clockRate);
    bool isFirstLineBroken = (diffTimeRtp > tryJbTimeRtp);

@@ -208,10 +198,10 @@ ARTPAssembler::AssemblyStatus AAVCAssembler::addNALUnit(
        String8 info;
        info.appendFormat("RTP diff from exp =%lld \t MS diff from stamp = %lld\t\t"
                    "Seq# %d \t ExpSeq# %d \t"
                    "JitterMs %d + (%d + %d * %.3f)",
                    "JitterMs [%d + (~%d~)] + %d * %.3f",
                    (long long)diffTimeRtp, (long long)totalDiffTimeMs,
                    buffer->int32Data(), mNextExpectedSeqNo,
                    jitterTimeMs, tryJbTimeMs, dynamicJbTimeMs, JITTER_MULTIPLE);
                    seqNum, mNextExpectedSeqNo,
                    baseJbTimeMs, dynamicJbTimeMs, tryJbTimeMs, JITTER_MULTIPLE);
        if (isSecondLineBroken) {
            ALOGE("%s", info.string());
            printNowTimeMs(startTimeMs, nowTimeMs, playedTimeMs);
@@ -223,6 +213,9 @@ ARTPAssembler::AssemblyStatus AAVCAssembler::addNALUnit(
    }

    if (mNextExpectedSeqNoValid) {
        if (mNextExpectedSeqNo > seqNum) {
            ALOGE("Reversed exp seq# %d \t current head %d", mNextExpectedSeqNo, seqNum);
        }
        mNextExpectedSeqNo = pickStartSeq(queue, firstRTPTime, playedTimeRtp, jitterTimeRtp);
        int32_t cntRemove = deleteUnitUnderSeq(queue, mNextExpectedSeqNo);

@@ -241,10 +234,10 @@ ARTPAssembler::AssemblyStatus AAVCAssembler::addNALUnit(

    if (!mNextExpectedSeqNoValid) {
        mNextExpectedSeqNoValid = true;
        mNextExpectedSeqNo = (uint32_t)buffer->int32Data();
    } else if ((uint32_t)buffer->int32Data() != mNextExpectedSeqNo) {
        ALOGV("Not the sequence number I expected");

        mNextExpectedSeqNo = seqNum;
    } else if (seqNum != mNextExpectedSeqNo) {
        ALOGV("Not the sequence number(%d) I expected. Actual seq# is %d",
                mNextExpectedSeqNo, seqNum);
        return WRONG_SEQUENCE_NUMBER;
    }

+10 −20
Original line number Diff line number Diff line
@@ -53,7 +53,6 @@ AHEVCAssembler::AHEVCAssembler(const sp<AMessage> &notify)
      mFirstIFrameProvided(false),
      mLastCvo(-1),
      mLastIFrameProvidedAtMs(0),
      mLastRtpTimeJitterDataUs(0),
      mWidth(0),
      mHeight(0) {

@@ -133,20 +132,11 @@ ARTPAssembler::AssemblyStatus AHEVCAssembler::addNALUnit(
    }

    sp<ABuffer> buffer = *queue->begin();
    uint32_t seqNum = (uint32_t)buffer->int32Data();
    buffer->meta()->setObject("source", source);

    /**
     * RFC3550 calculates the interarrival jitter time for 'ALL packets'.
     * But that is not useful as an ingredient of buffering time.
     * Instead, we calculates the time only for all 'NAL units'.
     */
    int64_t rtpTime = findRTPTime(firstRTPTime, buffer);
    int64_t nowTimeUs = ALooper::GetNowUs();
    if (rtpTime != mLastRtpTimeJitterDataUs) {
        source->putBaseJitterData(rtpTime, nowTimeUs);
        mLastRtpTimeJitterDataUs = rtpTime;
    }
    source->putInterArrivalJitterData(rtpTime, nowTimeUs);

    const int64_t startTimeMs = source->mSysAnchorTime / 1000;
    const int64_t nowTimeMs = nowTimeUs / 1000;
@@ -178,7 +168,7 @@ ARTPAssembler::AssemblyStatus AHEVCAssembler::addNALUnit(
    const int32_t dynamicJbTimeMs = std::min(dynamicJitterTimeMs, 150);
    const int64_t dynamicJbTimeRtp = MsToRtp(dynamicJbTimeMs, clockRate);
    /* Fundamental jitter time */
    const int32_t jitterTimeMs = baseJbTimeMs;
    const int32_t jitterTimeMs = baseJbTimeMs + dynamicJbTimeMs;
    const int64_t jitterTimeRtp = MsToRtp(jitterTimeMs, clockRate);

    // Till (T), this assembler waits unconditionally to collect current NAL unit
@@ -187,7 +177,7 @@ ARTPAssembler::AssemblyStatus AHEVCAssembler::addNALUnit(
    bool isExpired = (diffTimeRtp >= 0);                    // It's expired if T is passed away

    // From (T), this assembler tries to complete the NAL till (T + try)
    int32_t tryJbTimeMs = baseJitterTimeMs / 2 + dynamicJbTimeMs;
    int32_t tryJbTimeMs = dynamicJbTimeMs;
    int64_t tryJbTimeRtp = MsToRtp(tryJbTimeMs, clockRate);
    bool isFirstLineBroken = (diffTimeRtp > tryJbTimeRtp);

@@ -218,10 +208,10 @@ ARTPAssembler::AssemblyStatus AHEVCAssembler::addNALUnit(
        String8 info;
        info.appendFormat("RTP diff from exp =%lld \t MS diff from stamp = %lld\t\t"
                    "Seq# %d \t ExpSeq# %d \t"
                    "JitterMs %d + (%d + %d * %.3f)",
                    "JitterMs [%d + (~%d~)] + %d * %.3f",
                    (long long)diffTimeRtp, (long long)totalDiffTimeMs,
                    buffer->int32Data(), mNextExpectedSeqNo,
                    jitterTimeMs, tryJbTimeMs, dynamicJbTimeMs, JITTER_MULTIPLE);
                    seqNum, mNextExpectedSeqNo,
                    baseJbTimeMs, dynamicJbTimeMs, tryJbTimeMs, JITTER_MULTIPLE);
        if (isSecondLineBroken) {
            ALOGE("%s", info.string());
            printNowTimeMs(startTimeMs, nowTimeMs, playedTimeMs);
@@ -251,10 +241,10 @@ ARTPAssembler::AssemblyStatus AHEVCAssembler::addNALUnit(

    if (!mNextExpectedSeqNoValid) {
        mNextExpectedSeqNoValid = true;
        mNextExpectedSeqNo = (uint32_t)buffer->int32Data();
    } else if ((uint32_t)buffer->int32Data() != mNextExpectedSeqNo) {
        ALOGV("Not the sequence number I expected");

        mNextExpectedSeqNo = seqNum;
    } else if (seqNum != mNextExpectedSeqNo) {
        ALOGV("Not the sequence number(%d) I expected. Actual seq# is %d",
                mNextExpectedSeqNo, seqNum);
        return WRONG_SEQUENCE_NUMBER;
    }

+15 −11
Original line number Diff line number Diff line
@@ -264,12 +264,12 @@ void ARTPSource::adjustAnchorTimeIfRequired(int64_t nowUs) {

bool ARTPSource::queuePacket(const sp<ABuffer> &buffer) {
    int64_t nowUs = ALooper::GetNowUs();
    int64_t rtpTime = 0;
    uint32_t seqNum = (uint32_t)buffer->int32Data();
    int32_t ssrc = 0, rtpTime = 0;
    int32_t ssrc = 0;

    buffer->meta()->findInt32("ssrc", &ssrc);
    CHECK(buffer->meta()->findInt32("rtp-time", (int32_t *)&rtpTime));
    mLatestRtpTime = rtpTime;

    if (mNumBuffersReceived++ == 0 && mFirstSysTime == 0) {
        mFirstSysTime = nowUs;
@@ -277,7 +277,7 @@ bool ARTPSource::queuePacket(const sp<ABuffer> &buffer) {
        mLastSysAnchorTimeUpdatedUs = nowUs;
        mHighestSeqNumber = seqNum;
        mBaseSeqNumber = seqNum;
        mFirstRtpTime = rtpTime;
        mFirstRtpTime = (uint32_t)rtpTime;
        mFirstSsrc = ssrc;
        ALOGD("first-rtp arrived: first-rtp-time=%u, sys-time=%lld, seq-num=%u, ssrc=%d",
                mFirstRtpTime, (long long)mFirstSysTime, mHighestSeqNumber, mFirstSsrc);
@@ -352,6 +352,18 @@ bool ARTPSource::queuePacket(const sp<ABuffer> &buffer) {

    mQueue.insert(it, buffer);

    /**
     * RFC3550 calculates the interarrival jitter time for 'ALL packets'.
     * We calculate anothor jitter only for all 'Head NAL units'
     */
    ALOGV("<======== Insert %d", seqNum);
    rtpTime = mAssembler->findRTPTime(mFirstRtpTime, buffer);
    if (rtpTime != mLatestRtpTime) {
        mJitterCalc->putBaseData(rtpTime, nowUs);
    }
    mJitterCalc->putInterArrivalData(rtpTime, nowUs);
    mLatestRtpTime = rtpTime;

    return true;
}

@@ -680,14 +692,6 @@ void ARTPSource::setStaticJitterTimeMs(const uint32_t jbTimeMs) {
    mStaticJbTimeMs = jbTimeMs;
}

void ARTPSource::putBaseJitterData(uint32_t timeStamp, int64_t arrivalTime) {
    mJitterCalc->putBaseData(timeStamp, arrivalTime);
}

void ARTPSource::putInterArrivalJitterData(uint32_t timeStamp, int64_t arrivalTime) {
    mJitterCalc->putInterArrivalData(timeStamp, arrivalTime);
}

void ARTPSource::setJbTimer(const sp<AMessage> timer) {
    mJbTimer = timer;
}
+0 −1
Original line number Diff line number Diff line
@@ -50,7 +50,6 @@ private:
    bool mFirstIFrameProvided;
    int32_t mLastCvo;
    uint64_t mLastIFrameProvidedAtMs;
    int64_t mLastRtpTimeJitterDataUs;
    int32_t mWidth;
    int32_t mHeight;
    List<sp<ABuffer> > mNALUnits;
+0 −1
Original line number Diff line number Diff line
@@ -51,7 +51,6 @@ private:
    bool mFirstIFrameProvided;
    int32_t mLastCvo;
    uint64_t mLastIFrameProvidedAtMs;
    int64_t mLastRtpTimeJitterDataUs;
    int32_t mWidth;
    int32_t mHeight;
    List<sp<ABuffer> > mNALUnits;
Loading