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
gugelfrei
Gopalakrishnan Nallasamy 4 years ago
parent 7bb5d6abf9
commit 6932d7dd13

@ -1260,7 +1260,7 @@ status_t MPEG4Extractor::parseChunk(off64_t *offset, int depth) {
*/
mLastTrack->elst_initial_empty_edit_ticks = segment_duration;
} 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_segment_duration = segment_duration;
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) {
// Process second entry only when the first entry was an empty edit 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;
} else {
ALOGW("for now, unsupported entry in edit list %" PRIu32, entry_count);
@ -5863,7 +5859,7 @@ media_status_t MPEG4Source::read(
ReadOptions::SeekMode mode;
if (options && options->getSeekTo(&seekTimeUs, &mode)) {
ALOGV("seekTimeUs:%" PRId64, seekTimeUs);
if (mIsHeif) {
CHECK(mSampleTable == NULL);
CHECK(mItemTable != NULL);
@ -6296,6 +6292,7 @@ media_status_t MPEG4Source::fragmentedRead(
int64_t seekTimeUs;
ReadOptions::SeekMode mode;
if (options && options->getSeekTo(&seekTimeUs, &mode)) {
ALOGV("seekTimeUs:%" PRId64, seekTimeUs);
int64_t elstInitialEmptyEditUs = 0, elstShiftStartUs = 0;
if (mElstInitialEmptyEditTicks > 0) {
elstInitialEmptyEditUs = ((long double)mElstInitialEmptyEditTicks * 1000000) /

Loading…
Cancel
Save