diff options
author | ztenghui <ztenghui@google.com> | 2013-08-28 14:33:25 -0700 |
---|---|---|
committer | ztenghui <ztenghui@google.com> | 2013-08-28 14:37:36 -0700 |
commit | 71e27598c6c7cbba1792fffceaf653946a3bd2e4 (patch) | |
tree | c42e1474ea6ec451cd935ae095ec32fde8668bdc /src/com/android/gallery3d/app/VideoUtils.java | |
parent | e40690d73eb611f3f461f51a2841e73bcbd01f79 (diff) | |
download | android_packages_apps_Gallery2-71e27598c6c7cbba1792fffceaf653946a3bd2e4.tar.gz android_packages_apps_Gallery2-71e27598c6c7cbba1792fffceaf653946a3bd2e4.tar.bz2 android_packages_apps_Gallery2-71e27598c6c7cbba1792fffceaf653946a3bd2e4.zip |
Fix ISE in Gallery related to muxer.
bug:10512258
Change-Id: I45f579a3b0b16e8378c1e5937da98a0f45de6d6c
Diffstat (limited to 'src/com/android/gallery3d/app/VideoUtils.java')
-rw-r--r-- | src/com/android/gallery3d/app/VideoUtils.java | 47 |
1 files changed, 26 insertions, 21 deletions
diff --git a/src/com/android/gallery3d/app/VideoUtils.java b/src/com/android/gallery3d/app/VideoUtils.java index a3c3ef273..359cf76f5 100644 --- a/src/com/android/gallery3d/app/VideoUtils.java +++ b/src/com/android/gallery3d/app/VideoUtils.java @@ -192,33 +192,38 @@ public class VideoUtils { int trackIndex = -1; ByteBuffer dstBuf = ByteBuffer.allocate(bufferSize); BufferInfo bufferInfo = new BufferInfo(); - - muxer.start(); - while (true) { - bufferInfo.offset = offset; - bufferInfo.size = extractor.readSampleData(dstBuf, offset); - if (bufferInfo.size < 0) { - Log.d(LOGTAG, "Saw input EOS."); - bufferInfo.size = 0; - break; - } else { - bufferInfo.presentationTimeUs = extractor.getSampleTime(); - if (endMs > 0 && bufferInfo.presentationTimeUs > (endMs * 1000)) { - Log.d(LOGTAG, "The current sample is over the trim end time."); + try { + muxer.start(); + while (true) { + bufferInfo.offset = offset; + bufferInfo.size = extractor.readSampleData(dstBuf, offset); + if (bufferInfo.size < 0) { + Log.d(LOGTAG, "Saw input EOS."); + bufferInfo.size = 0; break; } else { - bufferInfo.flags = extractor.getSampleFlags(); - trackIndex = extractor.getSampleTrackIndex(); + bufferInfo.presentationTimeUs = extractor.getSampleTime(); + if (endMs > 0 && bufferInfo.presentationTimeUs > (endMs * 1000)) { + Log.d(LOGTAG, "The current sample is over the trim end time."); + break; + } else { + bufferInfo.flags = extractor.getSampleFlags(); + trackIndex = extractor.getSampleTrackIndex(); - muxer.writeSampleData(indexMap.get(trackIndex), dstBuf, - bufferInfo); - extractor.advance(); + muxer.writeSampleData(indexMap.get(trackIndex), dstBuf, + bufferInfo); + extractor.advance(); + } } } - } - muxer.stop(); - muxer.release(); + muxer.stop(); + } catch (IllegalStateException e) { + // Swallow the exception due to malformed source. + Log.w(LOGTAG, "The source video file is malformed"); + } finally { + muxer.release(); + } return; } |