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

Commit 85916d83 authored by Gopalakrishnan Nallasamy's avatar Gopalakrishnan Nallasamy
Browse files

MPEG4Writer:Correct track duration BFrames muxing

1. Subtract start time offset from duration of tracks while Bframes muxing
2. Include start time offset while calculating segment_duration for elst
entry.

Bug: 123093098

Test: 1) android.media.cts.MediaMuxerTest
      2) cts-tradefed run cts-dev -m CtsMediaTestCases --compatibility:module-arg \
         CtsMediaTestCases:include-annotation: android.platform.test.annotations.RequiresDevice

Change-Id: I4b5375c3f01c432dbf59e3c34632fa7d0fa66a68
parent 7b6fe4db
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -3595,7 +3595,7 @@ void MPEG4Writer::Track::bufferChunk(int64_t timestampUs) {
}

int64_t MPEG4Writer::Track::getDurationUs() const {
    return mTrackDurationUs + getStartTimeOffsetTimeUs();
    return mTrackDurationUs + getStartTimeOffsetTimeUs() + mOwner->getStartTimeOffsetBFramesUs();
}

int64_t MPEG4Writer::Track::getEstimatedTrackSizeBytes() const {
@@ -4059,7 +4059,7 @@ void MPEG4Writer::Track::writeEdtsBox(){
    // Prepone video playback.
    if (mMinCttsOffsetTicks != mMaxCttsOffsetTicks) {
        int32_t mvhdTimeScale = mOwner->getTimeScale();
        uint32_t tkhdDuration = (mTrackDurationUs * mvhdTimeScale + 5E5) / 1E6;
        uint32_t tkhdDuration = (getDurationUs() * mvhdTimeScale + 5E5) / 1E6;
        int64_t mediaTime = ((kMaxCttsOffsetTimeUs - getMinCttsOffsetTimeUs())
            * mTimeScale + 5E5) / 1E6;
        if (tkhdDuration > 0 && mediaTime > 0) {