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

Commit 20fee56e authored by Gopalakrishnan Nallasamy's avatar Gopalakrishnan Nallasamy Committed by android-build-team Robot
Browse files

MPEG4Extractor:don't set delay and padding from 2nd edit list entry

media time and segment duration entries from 1st edit list entry only is
used for gapless playback, hence don't process the same from second edit
list entry.

Bug: 152372048

Test: atest android.media.cts.MediaMetadataRetrieverTest
      atest android.media.cts.MediaMuxerTest
      atest android.media.cts.MediaExtractorTest
      Gapless playback files played as expected.
Change-Id: I79ce7c69c65f71440e0ba6552e150586fab64aac
(cherry picked from commit 6932d7dd)
parent f4377ba8
Loading
Loading
Loading
Loading
+3 −6
Original line number Original line Diff line number Diff line
@@ -1260,7 +1260,7 @@ status_t MPEG4Extractor::parseChunk(off64_t *offset, int depth) {
                         */
                         */
                        mLastTrack->elst_initial_empty_edit_ticks = segment_duration;
                        mLastTrack->elst_initial_empty_edit_ticks = segment_duration;
                    } else if (media_time >= 0 && i == 0) {
                    } else if (media_time >= 0 && i == 0) {
                        ALOGV("first edit list entry");
                        ALOGV("first edit list entry - from gapless playback files");
                        mLastTrack->elst_media_time = media_time;
                        mLastTrack->elst_media_time = media_time;
                        mLastTrack->elst_segment_duration = segment_duration;
                        mLastTrack->elst_segment_duration = segment_duration;
                        ALOGV("segment_duration: %" PRIu64 " media_time: %" PRId64,
                        ALOGV("segment_duration: %" PRIu64 " media_time: %" PRId64,
@@ -1270,10 +1270,6 @@ status_t MPEG4Extractor::parseChunk(off64_t *offset, int depth) {
                    } else if (empty_edit_present && i == 1) {
                    } else if (empty_edit_present && i == 1) {
                        // Process second entry only when the first entry was an empty edit entry.
                        // Process second entry only when the first entry was an empty edit entry.
                        ALOGV("second edit list entry");
                        ALOGV("second edit list entry");
                        mLastTrack->elst_media_time = media_time;
                        mLastTrack->elst_segment_duration = segment_duration;
                        ALOGV("segment_duration: %" PRIu64 " media_time: %" PRId64,
                              segment_duration, media_time);
                        mLastTrack->elst_shift_start_ticks = media_time;
                        mLastTrack->elst_shift_start_ticks = media_time;
                    } else {
                    } else {
                        ALOGW("for now, unsupported entry in edit list %" PRIu32, entry_count);
                        ALOGW("for now, unsupported entry in edit list %" PRIu32, entry_count);
@@ -5863,7 +5859,7 @@ media_status_t MPEG4Source::read(
    ReadOptions::SeekMode mode;
    ReadOptions::SeekMode mode;


    if (options && options->getSeekTo(&seekTimeUs, &mode)) {
    if (options && options->getSeekTo(&seekTimeUs, &mode)) {

        ALOGV("seekTimeUs:%" PRId64, seekTimeUs);
        if (mIsHeif) {
        if (mIsHeif) {
            CHECK(mSampleTable == NULL);
            CHECK(mSampleTable == NULL);
            CHECK(mItemTable != NULL);
            CHECK(mItemTable != NULL);
@@ -6296,6 +6292,7 @@ media_status_t MPEG4Source::fragmentedRead(
    int64_t seekTimeUs;
    int64_t seekTimeUs;
    ReadOptions::SeekMode mode;
    ReadOptions::SeekMode mode;
    if (options && options->getSeekTo(&seekTimeUs, &mode)) {
    if (options && options->getSeekTo(&seekTimeUs, &mode)) {
        ALOGV("seekTimeUs:%" PRId64, seekTimeUs);
        int64_t elstInitialEmptyEditUs = 0, elstShiftStartUs = 0;
        int64_t elstInitialEmptyEditUs = 0, elstShiftStartUs = 0;
        if (mElstInitialEmptyEditTicks > 0) {
        if (mElstInitialEmptyEditTicks > 0) {
            elstInitialEmptyEditUs = ((long double)mElstInitialEmptyEditTicks * 1000000) /
            elstInitialEmptyEditUs = ((long double)mElstInitialEmptyEditTicks * 1000000) /