Loading media/extractors/mp4/MPEG4Extractor.cpp +20 −15 Original line number Diff line number Diff line Loading @@ -1487,8 +1487,13 @@ status_t MPEG4Extractor::parseChunk(off64_t *offset, int depth) { } } if (duration != 0 && mLastTrack->timescale != 0) { AMediaFormat_setInt64(mLastTrack->meta, AMEDIAFORMAT_KEY_DURATION, (duration * 1000000) / mLastTrack->timescale); long double durationUs = ((long double)duration * 1000000) / mLastTrack->timescale; if (durationUs < 0 || durationUs > INT64_MAX) { ALOGE("cannot represent %lld * 1000000 / %lld in 64 bits", (long long) duration, (long long) mLastTrack->timescale); return ERROR_MALFORMED; } AMediaFormat_setInt64(mLastTrack->meta, AMEDIAFORMAT_KEY_DURATION, durationUs); } uint8_t lang[2]; Loading Loading @@ -5402,7 +5407,7 @@ media_status_t MPEG4Source::read( break; } if( mode != ReadOptions::SEEK_FRAME_INDEX) { seekTimeUs += ((int64_t)mElstShiftStartTicks * 1000000) / mTimescale; seekTimeUs += ((long double)mElstShiftStartTicks * 1000000) / mTimescale; } uint32_t sampleIndex; Loading Loading @@ -5550,7 +5555,7 @@ media_status_t MPEG4Source::read( AMediaFormat *meta = mBuffer->meta_data(); AMediaFormat_clear(meta); AMediaFormat_setInt64( meta, AMEDIAFORMAT_KEY_TIME_US, ((int64_t)cts * 1000000) / mTimescale); meta, AMEDIAFORMAT_KEY_TIME_US, ((long double)cts * 1000000) / mTimescale); AMediaFormat_setInt32(meta, AMEDIAFORMAT_KEY_IS_SYNC_FRAME, 1); int32_t byteOrder; Loading Loading @@ -5585,9 +5590,9 @@ media_status_t MPEG4Source::read( AMediaFormat *meta = mBuffer->meta_data(); AMediaFormat_clear(meta); AMediaFormat_setInt64( meta, AMEDIAFORMAT_KEY_TIME_US, ((int64_t)cts * 1000000) / mTimescale); meta, AMEDIAFORMAT_KEY_TIME_US, ((long double)cts * 1000000) / mTimescale); AMediaFormat_setInt64( meta, AMEDIAFORMAT_KEY_DURATION, ((int64_t)stts * 1000000) / mTimescale); meta, AMEDIAFORMAT_KEY_DURATION, ((long double)stts * 1000000) / mTimescale); if (targetSampleTimeUs >= 0) { AMediaFormat_setInt64( Loading Loading @@ -5641,9 +5646,9 @@ media_status_t MPEG4Source::read( AMediaFormat *meta = mBuffer->meta_data(); AMediaFormat_clear(meta); AMediaFormat_setInt64( meta, AMEDIAFORMAT_KEY_TIME_US, ((int64_t)cts * 1000000) / mTimescale); meta, AMEDIAFORMAT_KEY_TIME_US, ((long double)cts * 1000000) / mTimescale); AMediaFormat_setInt64( meta, AMEDIAFORMAT_KEY_DURATION, ((int64_t)stts * 1000000) / mTimescale); meta, AMEDIAFORMAT_KEY_DURATION, ((long double)stts * 1000000) / mTimescale); if (targetSampleTimeUs >= 0) { AMediaFormat_setInt64( Loading Loading @@ -5722,9 +5727,9 @@ media_status_t MPEG4Source::read( AMediaFormat *meta = mBuffer->meta_data(); AMediaFormat_clear(meta); AMediaFormat_setInt64( meta, AMEDIAFORMAT_KEY_TIME_US, ((int64_t)cts * 1000000) / mTimescale); meta, AMEDIAFORMAT_KEY_TIME_US, ((long double)cts * 1000000) / mTimescale); AMediaFormat_setInt64( meta, AMEDIAFORMAT_KEY_DURATION, ((int64_t)stts * 1000000) / mTimescale); meta, AMEDIAFORMAT_KEY_DURATION, ((long double)stts * 1000000) / mTimescale); if (targetSampleTimeUs >= 0) { AMediaFormat_setInt64( Loading Loading @@ -5771,7 +5776,7 @@ media_status_t MPEG4Source::fragmentedRead( ReadOptions::SeekMode mode; if (options && options->getSeekTo(&seekTimeUs, &mode)) { seekTimeUs += ((int64_t)mElstShiftStartTicks * 1000000) / mTimescale; seekTimeUs += ((long double)mElstShiftStartTicks * 1000000) / mTimescale; ALOGV("shifted seekTimeUs :%" PRId64 ", mElstShiftStartTicks:%" PRId32, seekTimeUs, mElstShiftStartTicks); Loading Loading @@ -5932,9 +5937,9 @@ media_status_t MPEG4Source::fragmentedRead( CHECK(mBuffer != NULL); mBuffer->set_range(0, size); AMediaFormat_setInt64(bufmeta, AMEDIAFORMAT_KEY_TIME_US, ((int64_t)cts * 1000000) / mTimescale); AMEDIAFORMAT_KEY_TIME_US, ((long double)cts * 1000000) / mTimescale); AMediaFormat_setInt64(bufmeta, AMEDIAFORMAT_KEY_DURATION, ((int64_t)smpl->duration * 1000000) / mTimescale); AMEDIAFORMAT_KEY_DURATION, ((long double)smpl->duration * 1000000) / mTimescale); if (targetSampleTimeUs >= 0) { AMediaFormat_setInt64(bufmeta, AMEDIAFORMAT_KEY_TARGET_TIME, targetSampleTimeUs); Loading Loading @@ -6047,9 +6052,9 @@ media_status_t MPEG4Source::fragmentedRead( AMediaFormat *bufmeta = mBuffer->meta_data(); AMediaFormat_setInt64(bufmeta, AMEDIAFORMAT_KEY_TIME_US, ((int64_t)cts * 1000000) / mTimescale); AMEDIAFORMAT_KEY_TIME_US, ((long double)cts * 1000000) / mTimescale); AMediaFormat_setInt64(bufmeta, AMEDIAFORMAT_KEY_DURATION, ((int64_t)smpl->duration * 1000000) / mTimescale); AMEDIAFORMAT_KEY_DURATION, ((long double)smpl->duration * 1000000) / mTimescale); if (targetSampleTimeUs >= 0) { AMediaFormat_setInt64(bufmeta, AMEDIAFORMAT_KEY_TARGET_TIME, targetSampleTimeUs); Loading Loading
media/extractors/mp4/MPEG4Extractor.cpp +20 −15 Original line number Diff line number Diff line Loading @@ -1487,8 +1487,13 @@ status_t MPEG4Extractor::parseChunk(off64_t *offset, int depth) { } } if (duration != 0 && mLastTrack->timescale != 0) { AMediaFormat_setInt64(mLastTrack->meta, AMEDIAFORMAT_KEY_DURATION, (duration * 1000000) / mLastTrack->timescale); long double durationUs = ((long double)duration * 1000000) / mLastTrack->timescale; if (durationUs < 0 || durationUs > INT64_MAX) { ALOGE("cannot represent %lld * 1000000 / %lld in 64 bits", (long long) duration, (long long) mLastTrack->timescale); return ERROR_MALFORMED; } AMediaFormat_setInt64(mLastTrack->meta, AMEDIAFORMAT_KEY_DURATION, durationUs); } uint8_t lang[2]; Loading Loading @@ -5402,7 +5407,7 @@ media_status_t MPEG4Source::read( break; } if( mode != ReadOptions::SEEK_FRAME_INDEX) { seekTimeUs += ((int64_t)mElstShiftStartTicks * 1000000) / mTimescale; seekTimeUs += ((long double)mElstShiftStartTicks * 1000000) / mTimescale; } uint32_t sampleIndex; Loading Loading @@ -5550,7 +5555,7 @@ media_status_t MPEG4Source::read( AMediaFormat *meta = mBuffer->meta_data(); AMediaFormat_clear(meta); AMediaFormat_setInt64( meta, AMEDIAFORMAT_KEY_TIME_US, ((int64_t)cts * 1000000) / mTimescale); meta, AMEDIAFORMAT_KEY_TIME_US, ((long double)cts * 1000000) / mTimescale); AMediaFormat_setInt32(meta, AMEDIAFORMAT_KEY_IS_SYNC_FRAME, 1); int32_t byteOrder; Loading Loading @@ -5585,9 +5590,9 @@ media_status_t MPEG4Source::read( AMediaFormat *meta = mBuffer->meta_data(); AMediaFormat_clear(meta); AMediaFormat_setInt64( meta, AMEDIAFORMAT_KEY_TIME_US, ((int64_t)cts * 1000000) / mTimescale); meta, AMEDIAFORMAT_KEY_TIME_US, ((long double)cts * 1000000) / mTimescale); AMediaFormat_setInt64( meta, AMEDIAFORMAT_KEY_DURATION, ((int64_t)stts * 1000000) / mTimescale); meta, AMEDIAFORMAT_KEY_DURATION, ((long double)stts * 1000000) / mTimescale); if (targetSampleTimeUs >= 0) { AMediaFormat_setInt64( Loading Loading @@ -5641,9 +5646,9 @@ media_status_t MPEG4Source::read( AMediaFormat *meta = mBuffer->meta_data(); AMediaFormat_clear(meta); AMediaFormat_setInt64( meta, AMEDIAFORMAT_KEY_TIME_US, ((int64_t)cts * 1000000) / mTimescale); meta, AMEDIAFORMAT_KEY_TIME_US, ((long double)cts * 1000000) / mTimescale); AMediaFormat_setInt64( meta, AMEDIAFORMAT_KEY_DURATION, ((int64_t)stts * 1000000) / mTimescale); meta, AMEDIAFORMAT_KEY_DURATION, ((long double)stts * 1000000) / mTimescale); if (targetSampleTimeUs >= 0) { AMediaFormat_setInt64( Loading Loading @@ -5722,9 +5727,9 @@ media_status_t MPEG4Source::read( AMediaFormat *meta = mBuffer->meta_data(); AMediaFormat_clear(meta); AMediaFormat_setInt64( meta, AMEDIAFORMAT_KEY_TIME_US, ((int64_t)cts * 1000000) / mTimescale); meta, AMEDIAFORMAT_KEY_TIME_US, ((long double)cts * 1000000) / mTimescale); AMediaFormat_setInt64( meta, AMEDIAFORMAT_KEY_DURATION, ((int64_t)stts * 1000000) / mTimescale); meta, AMEDIAFORMAT_KEY_DURATION, ((long double)stts * 1000000) / mTimescale); if (targetSampleTimeUs >= 0) { AMediaFormat_setInt64( Loading Loading @@ -5771,7 +5776,7 @@ media_status_t MPEG4Source::fragmentedRead( ReadOptions::SeekMode mode; if (options && options->getSeekTo(&seekTimeUs, &mode)) { seekTimeUs += ((int64_t)mElstShiftStartTicks * 1000000) / mTimescale; seekTimeUs += ((long double)mElstShiftStartTicks * 1000000) / mTimescale; ALOGV("shifted seekTimeUs :%" PRId64 ", mElstShiftStartTicks:%" PRId32, seekTimeUs, mElstShiftStartTicks); Loading Loading @@ -5932,9 +5937,9 @@ media_status_t MPEG4Source::fragmentedRead( CHECK(mBuffer != NULL); mBuffer->set_range(0, size); AMediaFormat_setInt64(bufmeta, AMEDIAFORMAT_KEY_TIME_US, ((int64_t)cts * 1000000) / mTimescale); AMEDIAFORMAT_KEY_TIME_US, ((long double)cts * 1000000) / mTimescale); AMediaFormat_setInt64(bufmeta, AMEDIAFORMAT_KEY_DURATION, ((int64_t)smpl->duration * 1000000) / mTimescale); AMEDIAFORMAT_KEY_DURATION, ((long double)smpl->duration * 1000000) / mTimescale); if (targetSampleTimeUs >= 0) { AMediaFormat_setInt64(bufmeta, AMEDIAFORMAT_KEY_TARGET_TIME, targetSampleTimeUs); Loading Loading @@ -6047,9 +6052,9 @@ media_status_t MPEG4Source::fragmentedRead( AMediaFormat *bufmeta = mBuffer->meta_data(); AMediaFormat_setInt64(bufmeta, AMEDIAFORMAT_KEY_TIME_US, ((int64_t)cts * 1000000) / mTimescale); AMEDIAFORMAT_KEY_TIME_US, ((long double)cts * 1000000) / mTimescale); AMediaFormat_setInt64(bufmeta, AMEDIAFORMAT_KEY_DURATION, ((int64_t)smpl->duration * 1000000) / mTimescale); AMEDIAFORMAT_KEY_DURATION, ((long double)smpl->duration * 1000000) / mTimescale); if (targetSampleTimeUs >= 0) { AMediaFormat_setInt64(bufmeta, AMEDIAFORMAT_KEY_TARGET_TIME, targetSampleTimeUs); Loading