1e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong/* 2e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * Copyright (C) 2010 The Android Open Source Project 3e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * 4e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * Licensed under the Apache License, Version 2.0 (the "License"); 5e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * you may not use this file except in compliance with the License. 6e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * You may obtain a copy of the License at 7e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * 8e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * http://www.apache.org/licenses/LICENSE-2.0 9e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * 10e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * Unless required by applicable law or agreed to in writing, software 11e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * distributed under the License is distributed on an "AS IS" BASIS, 12e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * See the License for the specific language governing permissions and 14e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * limitations under the License. 15e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong */ 16e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong 17e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dongpackage android.media; 18e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong 19e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong/** 20e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * The CamcorderProfile class is used to retrieve the 21e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * predefined camcorder profile settings for camcorder applications. 22e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong * These settings are read-only. 23e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong * 24e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * The compressed output from a recording session with a given 25e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * CamcorderProfile contains two tracks: one for auido and one for video. 26e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * 27e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * <p>Each profile specifies the following set of parameters: 28e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * <ul> 29e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong * <li> The file output format 30e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong * <li> Video codec format 31e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * <li> Video bit rate in bits per second 32e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * <li> Video frame rate in frames per second 33e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * <li> Video frame width and height, 34e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong * <li> Audio codec format 35e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * <li> Audio bit rate in bits per second, 36e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * <li> Audio sample rate 37e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * <li> Number of audio channels for recording. 38e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * </ul> 39e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong */ 40e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dongpublic class CamcorderProfile 41e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong{ 42e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong /** 43e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong * The output from camcorder recording sessions can have different quality levels. 44e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * 45e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong * Currently, we define two quality levels: high quality and low quality. 46e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong * A camcorder recording session with high quality level usually has higher output bit 47e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong * rate, better video and/or audio recording quality, larger video frame 48e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong * resolution and higher audio sampling rate, etc, than those with low quality 49e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong * level. 50e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong * 51e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong * Do not change these values/ordinals without updating their counterpart 52e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong * in include/media/MediaProfiles.h! 53e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong */ 54e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong public static final int QUALITY_LOW = 0; 55e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong public static final int QUALITY_HIGH = 1; 56e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong 57e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong /** 58e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong * Default recording duration in seconds before the session is terminated. 59e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong * This is useful for applications like MMS has limited file size requirement. 609b433f0b654d32530b0b48a7a653216ae0bb94d8James Dong */ 61e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong public int duration; 629b433f0b654d32530b0b48a7a653216ae0bb94d8James Dong 639b433f0b654d32530b0b48a7a653216ae0bb94d8James Dong /** 64e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * The quality level of the camcorder profile 65e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong */ 66e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong public int quality; 67e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong 68e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong /** 69e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * The file output format of the camcorder profile 70e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * @see android.media.MediaRecorder.OutputFormat 71e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong */ 72e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong public int fileFormat; 73e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong 74e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong /** 75e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * The video encoder being used for the video track 76e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * @see android.media.MediaRecorder.VideoEncoder 77e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong */ 78e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong public int videoCodec; 79e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong 80e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong /** 81e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * The target video output bit rate in bits per second 82e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong */ 83e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong public int videoBitRate; 84e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong 85e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong /** 86e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * The target video frame rate in frames per second 87e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong */ 88e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong public int videoFrameRate; 89e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong 90e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong /** 91e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * The target video frame width in pixels 92e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong */ 93e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong public int videoFrameWidth; 94e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong 95e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong /** 96e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * The target video frame height in pixels 97e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong */ 98e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong public int videoFrameHeight; 99e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong 100e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong /** 101e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * The audio encoder being used for the audio track. 102e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * @see android.media.MediaRecorder.AudioEncoder 103e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong */ 104e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong public int audioCodec; 105e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong 106e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong /** 107e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * The target audio output bit rate in bits per second 108e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong */ 109e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong public int audioBitRate; 110e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong 111e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong /** 112e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * The audio sampling rate used for the audio track 113e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong */ 114e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong public int audioSampleRate; 115e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong 116e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong /** 117e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * The number of audio channels used for the audio track 118e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong */ 119e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong public int audioChannels; 120e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong 121e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong /** 122e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong * Returns the camcorder profile for the given quality level. 123e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * @param quality the target quality level for the camcorder profile 124e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong */ 125e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong public static CamcorderProfile get(int quality) { 126e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong if (quality < QUALITY_LOW || quality > QUALITY_HIGH) { 127e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong String errMessage = "Unsupported quality level: " + quality; 128e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong throw new IllegalArgumentException(errMessage); 129e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong } 130e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong return native_get_camcorder_profile(quality); 131e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong } 132e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong 133e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong static { 134e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong System.loadLibrary("media_jni"); 135e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong native_init(); 136e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong } 137e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong 138e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong // Private constructor called by JNI 1399b433f0b654d32530b0b48a7a653216ae0bb94d8James Dong private CamcorderProfile(int duration, 1409b433f0b654d32530b0b48a7a653216ae0bb94d8James Dong int quality, 141e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong int fileFormat, 142e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong int videoCodec, 143e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong int videoBitRate, 144e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong int videoFrameRate, 145e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong int videoWidth, 146e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong int videoHeight, 147e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong int audioCodec, 148e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong int audioBitRate, 149e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong int audioSampleRate, 150e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong int audioChannels) { 151e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong 152e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong this.duration = duration; 153e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong this.quality = quality; 154e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong this.fileFormat = fileFormat; 155e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong this.videoCodec = videoCodec; 156e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong this.videoBitRate = videoBitRate; 157e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong this.videoFrameRate = videoFrameRate; 158e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong this.videoFrameWidth = videoWidth; 159e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong this.videoFrameHeight = videoHeight; 160e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong this.audioCodec = audioCodec; 161e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong this.audioBitRate = audioBitRate; 162e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong this.audioSampleRate = audioSampleRate; 163e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong this.audioChannels = audioChannels; 164e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong } 165e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong 166e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong // Methods implemented by JNI 167e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong private static native final void native_init(); 168e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong private static native final CamcorderProfile native_get_camcorder_profile(int quality); 169e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong} 170