Index: media/base/android/java/src/org/chromium/media/WebAudioMediaCodecBridge.java |
diff --git a/media/base/android/java/src/org/chromium/media/WebAudioMediaCodecBridge.java b/media/base/android/java/src/org/chromium/media/WebAudioMediaCodecBridge.java |
index 2802439149c759dc5598ad5bba27f0c9099d60a3..25596933b1e40a6f5b4eb7ec22fb39f590585912 100644 |
--- a/media/base/android/java/src/org/chromium/media/WebAudioMediaCodecBridge.java |
+++ b/media/base/android/java/src/org/chromium/media/WebAudioMediaCodecBridge.java |
@@ -26,13 +26,20 @@ class WebAudioMediaCodecBridge { |
// from a file in memory? |
static final long TIMEOUT_MICROSECONDS = 500; |
@CalledByNative |
- private static boolean decodeAudioFile(Context ctx, int nativeMediaCodecBridge, int inputFD) { |
+ private static boolean decodeAudioFile(Context ctx, |
+ int nativeMediaCodecBridge, |
+ int inputFD, |
+ long dataSize) { |
+ |
+ if (dataSize < 0 || dataSize > 0x7fffffff) |
+ return false; |
+ |
MediaExtractor extractor = new MediaExtractor(); |
ParcelFileDescriptor encodedFD; |
encodedFD = ParcelFileDescriptor.adoptFd(inputFD); |
try { |
- extractor.setDataSource(encodedFD.getFileDescriptor()); |
+ extractor.setDataSource(encodedFD.getFileDescriptor(), 0, dataSize); |
} catch (Exception e) { |
e.printStackTrace(); |
encodedFD.detachFd(); |
@@ -50,10 +57,10 @@ class WebAudioMediaCodecBridge { |
int sampleRate = format.getInteger(MediaFormat.KEY_SAMPLE_RATE); |
String mime = format.getString(MediaFormat.KEY_MIME); |
- long duration_microseconds = 0; |
+ long durationMicroseconds = 0; |
if (format.containsKey(MediaFormat.KEY_DURATION)) { |
try { |
- duration_microseconds = format.getLong(MediaFormat.KEY_DURATION); |
+ durationMicroseconds = format.getLong(MediaFormat.KEY_DURATION); |
} catch (Exception e) { |
Log.d(LOG_TAG, "Cannot get duration"); |
} |
@@ -64,20 +71,13 @@ class WebAudioMediaCodecBridge { |
+ " Rate: " + sampleRate |
+ " Channels: " + channelCount |
+ " Mime: " + mime |
- + " Duration: " + duration_microseconds + " microsec"); |
+ + " Duration: " + durationMicroseconds + " microsec"); |
} |
- // For audio/vorbis files, MediaFormat returns a really huge |
- // (multi-year) duration value even for short files. Tell |
- // nativeInitializeDestination that this is a vorbis file so |
- // it can handle it properly. |
- // |
- // See b/8528051 |
nativeInitializeDestination(nativeMediaCodecBridge, |
channelCount, |
sampleRate, |
- duration_microseconds, |
- mime.equals("audio/vorbis")); |
+ durationMicroseconds); |
// Create decoder |
MediaCodec codec = MediaCodec.createDecoderByType(mime); |
@@ -161,6 +161,5 @@ class WebAudioMediaCodecBridge { |
int nativeWebAudioMediaCodecBridge, |
int channelCount, |
int sampleRate, |
- long duration_microseconds, |
- boolean is_vorbis); |
+ long durationMicroseconds); |
} |