| /* | |
| * Copyright (C) 2010 The Android Open Source Project | |
| * | |
| * Licensed under the Apache License, Version 2.0 (the "License"); | |
| * you may not use this file except in compliance with the License. | |
| * You may obtain a copy of the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, software | |
| * distributed under the License is distributed on an "AS IS" BASIS, | |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| * See the License for the specific language governing permissions and | |
| * limitations under the License. | |
| */ | |
| package android.media; | |
| import android.compat.annotation.UnsupportedAppUsage; | |
| import android.os.Build; | |
| import java.util.ArrayList; | |
| import java.util.List; | |
| /** | |
| * The EncoderCapabilities class is used to retrieve the | |
| * capabilities for different video and audio | |
| * encoders supported on a specific Android platform. | |
| * {@hide} | |
| */ | |
| public class EncoderCapabilities | |
| { | |
| private static final String TAG = "EncoderCapabilities"; | |
| /** | |
| * The VideoEncoderCap class represents a video encoder's | |
| * supported parameter range in: | |
| * | |
| * <ul> | |
| * <li>Resolution: the frame size (width/height) in pixels; | |
| * <li>Bit rate: the compressed output bit rate in bits per second; | |
| * <li>Frame rate: the output number of frames per second. | |
| * </ul> | |
| * | |
| */ | |
| static public class VideoEncoderCap { | |
| // These are not modifiable externally, thus are public accessible | |
| @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) | |
| public final int mCodec; // @see android.media.MediaRecorder.VideoEncoder | |
| public final int mMinBitRate; // min bit rate (bps) | |
| public final int mMaxBitRate; // max bit rate (bps) | |
| public final int mMinFrameRate; // min frame rate (fps) | |
| public final int mMaxFrameRate; // max frame rate (fps) | |
| @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) | |
| public final int mMinFrameWidth; // min frame width (pixel) | |
| @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) | |
| public final int mMaxFrameWidth; // max frame width (pixel) | |
| @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) | |
| public final int mMinFrameHeight; // min frame height (pixel) | |
| @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) | |
| public final int mMaxFrameHeight; // max frame height (pixel) | |
| // Private constructor called by JNI | |
| private VideoEncoderCap(int codec, | |
| int minBitRate, int maxBitRate, | |
| int minFrameRate, int maxFrameRate, | |
| int minFrameWidth, int maxFrameWidth, | |
| int minFrameHeight, int maxFrameHeight) { | |
| mCodec = codec; | |
| mMinBitRate = minBitRate; | |
| mMaxBitRate = maxBitRate; | |
| mMinFrameRate = minFrameRate; | |
| mMaxFrameRate = maxFrameRate; | |
| mMinFrameWidth = minFrameWidth; | |
| mMaxFrameWidth = maxFrameWidth; | |
| mMinFrameHeight = minFrameHeight; | |
| mMaxFrameHeight = maxFrameHeight; | |
| } | |
| }; | |
| /** | |
| * The AudioEncoderCap class represents an audio encoder's | |
| * parameter range in: | |
| * | |
| * <ul> | |
| * <li>Bit rate: the compressed output bit rate in bits per second; | |
| * <li>Sample rate: the sampling rate used for recording the audio in samples per second; | |
| * <li>Number of channels: the number of channels the audio is recorded. | |
| * </ul> | |
| * | |
| */ | |
| static public class AudioEncoderCap { | |
| // These are not modifiable externally, thus are public accessible | |
| public final int mCodec; // @see android.media.MediaRecorder.AudioEncoder | |
| public final int mMinChannels, mMaxChannels; // min and max number of channels | |
| public final int mMinSampleRate, mMaxSampleRate; // min and max sample rate (hz) | |
| public final int mMinBitRate, mMaxBitRate; // min and max bit rate (bps) | |
| // Private constructor called by JNI | |
| private AudioEncoderCap(int codec, | |
| int minBitRate, int maxBitRate, | |
| int minSampleRate, int maxSampleRate, | |
| int minChannels, int maxChannels) { | |
| mCodec = codec; | |
| mMinBitRate = minBitRate; | |
| mMaxBitRate = maxBitRate; | |
| mMinSampleRate = minSampleRate; | |
| mMaxSampleRate = maxSampleRate; | |
| mMinChannels = minChannels; | |
| mMaxChannels = maxChannels; | |
| } | |
| }; | |
| static { | |
| System.loadLibrary("media_jni"); | |
| native_init(); | |
| } | |
| /** | |
| * Returns the array of supported output file formats. | |
| * @see android.media.MediaRecorder.OutputFormat | |
| */ | |
| public static int[] getOutputFileFormats() { | |
| int nFormats = native_get_num_file_formats(); | |
| if (nFormats == 0) return null; | |
| int[] formats = new int[nFormats]; | |
| for (int i = 0; i < nFormats; ++i) { | |
| formats[i] = native_get_file_format(i); | |
| } | |
| return formats; | |
| } | |
| /** | |
| * Returns the capabilities of the supported video encoders. | |
| * @see android.media.EncoderCapabilities.VideoEncoderCap | |
| */ | |
| @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) | |
| public static List<VideoEncoderCap> getVideoEncoders() { | |
| int nEncoders = native_get_num_video_encoders(); | |
| if (nEncoders == 0) return null; | |
| List<VideoEncoderCap> encoderList = new ArrayList<VideoEncoderCap>(); | |
| for (int i = 0; i < nEncoders; ++i) { | |
| encoderList.add(native_get_video_encoder_cap(i)); | |
| } | |
| return encoderList; | |
| } | |
| /** | |
| * Returns the capabilities of the supported audio encoders. | |
| * @see android.media.EncoderCapabilities.AudioEncoderCap | |
| */ | |
| public static List<AudioEncoderCap> getAudioEncoders() { | |
| int nEncoders = native_get_num_audio_encoders(); | |
| if (nEncoders == 0) return null; | |
| List<AudioEncoderCap> encoderList = new ArrayList<AudioEncoderCap>(); | |
| for (int i = 0; i < nEncoders; ++i) { | |
| encoderList.add(native_get_audio_encoder_cap(i)); | |
| } | |
| return encoderList; | |
| } | |
| private EncoderCapabilities() {} // Don't call me | |
| // Implemented by JNI | |
| private static native final void native_init(); | |
| private static native final int native_get_num_file_formats(); | |
| private static native final int native_get_file_format(int index); | |
| private static native final int native_get_num_video_encoders(); | |
| private static native final VideoEncoderCap native_get_video_encoder_cap(int index); | |
| private static native final int native_get_num_audio_encoders(); | |
| private static native final AudioEncoderCap native_get_audio_encoder_cap(int index); | |
| } |