From 71e27598c6c7cbba1792fffceaf653946a3bd2e4 Mon Sep 17 00:00:00 2001 From: ztenghui Date: Wed, 28 Aug 2013 14:33:25 -0700 Subject: [PATCH] Fix ISE in Gallery related to muxer. bug:10512258 Change-Id: I45f579a3b0b16e8378c1e5937da98a0f45de6d6c --- src/com/android/gallery3d/app/VideoUtils.java | 47 +++++++++++++++------------ 1 file 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; } -- 2.11.0