| 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);
|
| }
|
|
|