Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1797dc93 authored by Robert Shih's avatar Robert Shih
Browse files

MediaMuxer: added WebM filetype; open output file RW.

Files with RW access can be memory mapped.

Change-Id: Ic5df057e6661b062e834845a19b606c8d01a0608
parent 729b12c7
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -13266,6 +13266,7 @@ package android.media {
  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 {
+11 −10
Original line number Diff line number Diff line
@@ -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 @@ final public class MediaMuxer {
        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 @@ final public class MediaMuxer {
        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();
            }
        }
    }