1 /* 2 * Copyright (C) 2010 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.media; 18 19 import java.util.List; 20 import java.util.ArrayList; 21 22 /** 23 * The EncoderCapabilities class is used to retrieve the 24 * capabilities for different video and audio 25 * encoders supported on a specific Android platform. 26 * {@hide} 27 */ 28 public class EncoderCapabilities 29 { 30 private static final String TAG = "EncoderCapabilities"; 31 32 /** 33 * The VideoEncoderCap class represents a video encoder's 34 * supported parameter range in: 35 * 36 * <ul> 37 * <li>Resolution: the frame size (width/height) in pixels; 38 * <li>Bit rate: the compressed output bit rate in bits per second; 39 * <li>Frame rate: the output number of frames per second. 40 * </ul> 41 * 42 */ 43 static public class VideoEncoderCap { 44 // These are not modifiable externally, thus are public accessible 45 public final int mCodec; // @see android.media.MediaRecorder.VideoEncoder 46 public final int mMinBitRate, mMaxBitRate; // min and max bit rate (bps) 47 public final int mMinFrameRate, mMaxFrameRate; // min and max frame rate (fps) 48 public final int mMinFrameWidth, mMaxFrameWidth; // min and max frame width (pixel) 49 public final int mMinFrameHeight, mMaxFrameHeight; // minn and max frame height (pixel) 50 51 // Private constructor called by JNI VideoEncoderCap(int codec, int minBitRate, int maxBitRate, int minFrameRate, int maxFrameRate, int minFrameWidth, int maxFrameWidth, int minFrameHeight, int maxFrameHeight)52 private VideoEncoderCap(int codec, 53 int minBitRate, int maxBitRate, 54 int minFrameRate, int maxFrameRate, 55 int minFrameWidth, int maxFrameWidth, 56 int minFrameHeight, int maxFrameHeight) { 57 mCodec = codec; 58 mMinBitRate = minBitRate; 59 mMaxBitRate = maxBitRate; 60 mMinFrameRate = minFrameRate; 61 mMaxFrameRate = maxFrameRate; 62 mMinFrameWidth = minFrameWidth; 63 mMaxFrameWidth = maxFrameWidth; 64 mMinFrameHeight = minFrameHeight; 65 mMaxFrameHeight = maxFrameHeight; 66 } 67 }; 68 69 /** 70 * The AudioEncoderCap class represents an audio encoder's 71 * parameter range in: 72 * 73 * <ul> 74 * <li>Bit rate: the compressed output bit rate in bits per second; 75 * <li>Sample rate: the sampling rate used for recording the audio in samples per second; 76 * <li>Number of channels: the number of channels the audio is recorded. 77 * </ul> 78 * 79 */ 80 static public class AudioEncoderCap { 81 // These are not modifiable externally, thus are public accessible 82 public final int mCodec; // @see android.media.MediaRecorder.AudioEncoder 83 public final int mMinChannels, mMaxChannels; // min and max number of channels 84 public final int mMinSampleRate, mMaxSampleRate; // min and max sample rate (hz) 85 public final int mMinBitRate, mMaxBitRate; // min and max bit rate (bps) 86 87 // Private constructor called by JNI AudioEncoderCap(int codec, int minBitRate, int maxBitRate, int minSampleRate, int maxSampleRate, int minChannels, int maxChannels)88 private AudioEncoderCap(int codec, 89 int minBitRate, int maxBitRate, 90 int minSampleRate, int maxSampleRate, 91 int minChannels, int maxChannels) { 92 mCodec = codec; 93 mMinBitRate = minBitRate; 94 mMaxBitRate = maxBitRate; 95 mMinSampleRate = minSampleRate; 96 mMaxSampleRate = maxSampleRate; 97 mMinChannels = minChannels; 98 mMaxChannels = maxChannels; 99 } 100 }; 101 102 static { 103 System.loadLibrary("media_jni"); native_init()104 native_init(); 105 } 106 107 /** 108 * Returns the array of supported output file formats. 109 * @see android.media.MediaRecorder.OutputFormat 110 */ getOutputFileFormats()111 public static int[] getOutputFileFormats() { 112 int nFormats = native_get_num_file_formats(); 113 if (nFormats == 0) return null; 114 115 int[] formats = new int[nFormats]; 116 for (int i = 0; i < nFormats; ++i) { 117 formats[i] = native_get_file_format(i); 118 } 119 return formats; 120 } 121 122 /** 123 * Returns the capabilities of the supported video encoders. 124 * @see android.media.EncoderCapabilities.VideoEncoderCap 125 */ getVideoEncoders()126 public static List<VideoEncoderCap> getVideoEncoders() { 127 int nEncoders = native_get_num_video_encoders(); 128 if (nEncoders == 0) return null; 129 130 List<VideoEncoderCap> encoderList = new ArrayList<VideoEncoderCap>(); 131 for (int i = 0; i < nEncoders; ++i) { 132 encoderList.add(native_get_video_encoder_cap(i)); 133 } 134 return encoderList; 135 } 136 137 /** 138 * Returns the capabilities of the supported audio encoders. 139 * @see android.media.EncoderCapabilities.AudioEncoderCap 140 */ getAudioEncoders()141 public static List<AudioEncoderCap> getAudioEncoders() { 142 int nEncoders = native_get_num_audio_encoders(); 143 if (nEncoders == 0) return null; 144 145 List<AudioEncoderCap> encoderList = new ArrayList<AudioEncoderCap>(); 146 for (int i = 0; i < nEncoders; ++i) { 147 encoderList.add(native_get_audio_encoder_cap(i)); 148 } 149 return encoderList; 150 } 151 152 EncoderCapabilities()153 private EncoderCapabilities() {} // Don't call me 154 155 // Implemented by JNI native_init()156 private static native final void native_init(); native_get_num_file_formats()157 private static native final int native_get_num_file_formats(); native_get_file_format(int index)158 private static native final int native_get_file_format(int index); native_get_num_video_encoders()159 private static native final int native_get_num_video_encoders(); native_get_video_encoder_cap(int index)160 private static native final VideoEncoderCap native_get_video_encoder_cap(int index); native_get_num_audio_encoders()161 private static native final int native_get_num_audio_encoders(); native_get_audio_encoder_cap(int index)162 private static native final AudioEncoderCap native_get_audio_encoder_cap(int index); 163 } 164