Merge "MediaMuxer: added WebM filetype; open output file RW."
diff --git a/api/current.txt b/api/current.txt
index 9d87336..62154b8 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -13422,6 +13422,7 @@
public static final class MediaMuxer.OutputFormat {
field public static final int MUXER_OUTPUT_MPEG_4 = 0; // 0x0
+ field public static final int MUXER_OUTPUT_WEBM = 1; // 0x1
}
public class MediaPlayer {
diff --git a/media/java/android/media/MediaMuxer.java b/media/java/android/media/MediaMuxer.java
index e5c97e7..f518ab2 100644
--- a/media/java/android/media/MediaMuxer.java
+++ b/media/java/android/media/MediaMuxer.java
@@ -17,13 +17,11 @@
package android.media;
import android.media.MediaCodec.BufferInfo;
-
import dalvik.system.CloseGuard;
-import java.io.File;
import java.io.FileDescriptor;
-import java.io.FileOutputStream;
import java.io.IOException;
+import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.util.Map;
@@ -79,6 +77,7 @@
private OutputFormat() {}
/** MPEG4 media file format*/
public static final int MUXER_OUTPUT_MPEG_4 = 0;
+ public static final int MUXER_OUTPUT_WEBM = 1;
};
// All the native functions are listed here.
@@ -120,20 +119,22 @@
if (path == null) {
throw new IllegalArgumentException("path must not be null");
}
- if (format != OutputFormat.MUXER_OUTPUT_MPEG_4) {
+ if (format != OutputFormat.MUXER_OUTPUT_MPEG_4 &&
+ format != OutputFormat.MUXER_OUTPUT_WEBM) {
throw new IllegalArgumentException("format is invalid");
}
- FileOutputStream fos = null;
+ // Use RandomAccessFile so we can open the file with RW access;
+ // RW access allows the native writer to memory map the output file.
+ RandomAccessFile file = null;
try {
- File file = new File(path);
- fos = new FileOutputStream(file);
- FileDescriptor fd = fos.getFD();
+ file = new RandomAccessFile(path, "rws");
+ FileDescriptor fd = file.getFD();
mNativeObject = nativeSetup(fd, format);
mState = MUXER_STATE_INITIALIZED;
mCloseGuard.open("release");
} finally {
- if (fos != null) {
- fos.close();
+ if (file != null) {
+ file.close();
}
}
}