CamcorderProfile.java revision b67c3102c9e67b4d199000bbfe9ec656ae5e9ca3
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 195680635f39b3098539cbfd120f95fdc4479bab0fWu-cheng Liimport android.hardware.Camera; 205680635f39b3098539cbfd120f95fdc4479bab0fWu-cheng Liimport android.hardware.Camera.CameraInfo; 215680635f39b3098539cbfd120f95fdc4479bab0fWu-cheng Li 22e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong/** 2352bfc243684b2f340da326aaa38e9021e4e3b2e6Scott Main * Retrieves the 24e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * predefined camcorder profile settings for camcorder applications. 25e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong * These settings are read-only. 26e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong * 2752bfc243684b2f340da326aaa38e9021e4e3b2e6Scott Main * <p>The compressed output from a recording session with a given 2852bfc243684b2f340da326aaa38e9021e4e3b2e6Scott Main * CamcorderProfile contains two tracks: one for audio and one for video. 29e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * 30e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * <p>Each profile specifies the following set of parameters: 31e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * <ul> 32e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong * <li> The file output format 33e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong * <li> Video codec format 34e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * <li> Video bit rate in bits per second 35e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * <li> Video frame rate in frames per second 36e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * <li> Video frame width and height, 37e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong * <li> Audio codec format 38e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * <li> Audio bit rate in bits per second, 39e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * <li> Audio sample rate 40e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * <li> Number of audio channels for recording. 41e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * </ul> 42e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong */ 43e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dongpublic class CamcorderProfile 44e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong{ 454af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra // Do not change these values/ordinals without updating their counterpart 464af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra // in include/media/MediaProfiles.h! 474af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra 48e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong /** 494af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra * Quality level corresponding to the lowest available resolution. 50e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong */ 51e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong public static final int QUALITY_LOW = 0; 524af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra 534af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra /** 544af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra * Quality level corresponding to the highest available resolution. 554af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra */ 56e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong public static final int QUALITY_HIGH = 1; 57e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong 58e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong /** 59522632cde516001429549c60bd570c399ffad800Nipun Kwatra * Quality level corresponding to the qcif (176 x 144) resolution. 604af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra */ 61522632cde516001429549c60bd570c399ffad800Nipun Kwatra public static final int QUALITY_QCIF = 2; 62522632cde516001429549c60bd570c399ffad800Nipun Kwatra 63522632cde516001429549c60bd570c399ffad800Nipun Kwatra /** 64522632cde516001429549c60bd570c399ffad800Nipun Kwatra * Quality level corresponding to the cif (352 x 288) resolution. 65522632cde516001429549c60bd570c399ffad800Nipun Kwatra */ 66522632cde516001429549c60bd570c399ffad800Nipun Kwatra public static final int QUALITY_CIF = 3; 674af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra 684af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra /** 694af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra * Quality level corresponding to the 480p (720 x 480) resolution. 70a00c2939c7263fe421c33364a17e489c7c3a4d1fJames Dong * Note that the horizontal resolution for 480p can also be other 71a00c2939c7263fe421c33364a17e489c7c3a4d1fJames Dong * values, such as 640 or 704, instead of 720. 724af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra */ 73522632cde516001429549c60bd570c399ffad800Nipun Kwatra public static final int QUALITY_480P = 4; 744af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra 754af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra /** 764af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra * Quality level corresponding to the 720p (1280 x 720) resolution. 774af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra */ 78522632cde516001429549c60bd570c399ffad800Nipun Kwatra public static final int QUALITY_720P = 5; 794af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra 804af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra /** 81a00c2939c7263fe421c33364a17e489c7c3a4d1fJames Dong * Quality level corresponding to the 1080p (1920 x 1080) resolution. 82a00c2939c7263fe421c33364a17e489c7c3a4d1fJames Dong * Note that the vertical resolution for 1080p can also be 1088, 83a00c2939c7263fe421c33364a17e489c7c3a4d1fJames Dong * instead of 1080 (used by some vendors to avoid cropping during 84a00c2939c7263fe421c33364a17e489c7c3a4d1fJames Dong * video playback). 854af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra */ 86522632cde516001429549c60bd570c399ffad800Nipun Kwatra public static final int QUALITY_1080P = 6; 874af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra 884af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra /** 8907b9ae33127212fd9e15f96fa89b7d4cab81e55eJames Dong * Quality level corresponding to the QVGA (320x240) resolution. 9007b9ae33127212fd9e15f96fa89b7d4cab81e55eJames Dong */ 9107b9ae33127212fd9e15f96fa89b7d4cab81e55eJames Dong public static final int QUALITY_QVGA = 7; 9207b9ae33127212fd9e15f96fa89b7d4cab81e55eJames Dong 93e414608cb3dae5271104623ec52fe5a04305942aZhijun He /** 94e414608cb3dae5271104623ec52fe5a04305942aZhijun He * Quality level corresponding to the 2160p (3840x2160) resolution. 95e414608cb3dae5271104623ec52fe5a04305942aZhijun He */ 96e414608cb3dae5271104623ec52fe5a04305942aZhijun He public static final int QUALITY_2160P = 8; 97e414608cb3dae5271104623ec52fe5a04305942aZhijun He 9807b9ae33127212fd9e15f96fa89b7d4cab81e55eJames Dong // Start and end of quality list 9907b9ae33127212fd9e15f96fa89b7d4cab81e55eJames Dong private static final int QUALITY_LIST_START = QUALITY_LOW; 100e414608cb3dae5271104623ec52fe5a04305942aZhijun He private static final int QUALITY_LIST_END = QUALITY_2160P; 10107b9ae33127212fd9e15f96fa89b7d4cab81e55eJames Dong 10207b9ae33127212fd9e15f96fa89b7d4cab81e55eJames Dong /** 1034af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra * Time lapse quality level corresponding to the lowest available resolution. 1044af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra */ 105522632cde516001429549c60bd570c399ffad800Nipun Kwatra public static final int QUALITY_TIME_LAPSE_LOW = 1000; 1064af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra 1074af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra /** 1084af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra * Time lapse quality level corresponding to the highest available resolution. 1094af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra */ 110522632cde516001429549c60bd570c399ffad800Nipun Kwatra public static final int QUALITY_TIME_LAPSE_HIGH = 1001; 111522632cde516001429549c60bd570c399ffad800Nipun Kwatra 112522632cde516001429549c60bd570c399ffad800Nipun Kwatra /** 113522632cde516001429549c60bd570c399ffad800Nipun Kwatra * Time lapse quality level corresponding to the qcif (176 x 144) resolution. 114522632cde516001429549c60bd570c399ffad800Nipun Kwatra */ 115522632cde516001429549c60bd570c399ffad800Nipun Kwatra public static final int QUALITY_TIME_LAPSE_QCIF = 1002; 1164af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra 1174af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra /** 118522632cde516001429549c60bd570c399ffad800Nipun Kwatra * Time lapse quality level corresponding to the cif (352 x 288) resolution. 1194af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra */ 120522632cde516001429549c60bd570c399ffad800Nipun Kwatra public static final int QUALITY_TIME_LAPSE_CIF = 1003; 1214af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra 1224af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra /** 1234af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra * Time lapse quality level corresponding to the 480p (720 x 480) resolution. 1244af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra */ 125522632cde516001429549c60bd570c399ffad800Nipun Kwatra public static final int QUALITY_TIME_LAPSE_480P = 1004; 1264af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra 1274af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra /** 1284af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra * Time lapse quality level corresponding to the 720p (1280 x 720) resolution. 1294af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra */ 130522632cde516001429549c60bd570c399ffad800Nipun Kwatra public static final int QUALITY_TIME_LAPSE_720P = 1005; 1314af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra 1324af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra /** 1334af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra * Time lapse quality level corresponding to the 1080p (1920 x 1088) resolution. 1344af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra */ 135522632cde516001429549c60bd570c399ffad800Nipun Kwatra public static final int QUALITY_TIME_LAPSE_1080P = 1006; 1364af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra 1374af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra /** 13807b9ae33127212fd9e15f96fa89b7d4cab81e55eJames Dong * Time lapse quality level corresponding to the QVGA (320 x 240) resolution. 13907b9ae33127212fd9e15f96fa89b7d4cab81e55eJames Dong */ 14007b9ae33127212fd9e15f96fa89b7d4cab81e55eJames Dong public static final int QUALITY_TIME_LAPSE_QVGA = 1007; 14107b9ae33127212fd9e15f96fa89b7d4cab81e55eJames Dong 142e414608cb3dae5271104623ec52fe5a04305942aZhijun He /** 143e414608cb3dae5271104623ec52fe5a04305942aZhijun He * Time lapse quality level corresponding to the 2160p (3840 x 2160) resolution. 144e414608cb3dae5271104623ec52fe5a04305942aZhijun He */ 145e414608cb3dae5271104623ec52fe5a04305942aZhijun He public static final int QUALITY_TIME_LAPSE_2160P = 1008; 146e414608cb3dae5271104623ec52fe5a04305942aZhijun He 14707b9ae33127212fd9e15f96fa89b7d4cab81e55eJames Dong // Start and end of timelapse quality list 14807b9ae33127212fd9e15f96fa89b7d4cab81e55eJames Dong private static final int QUALITY_TIME_LAPSE_LIST_START = QUALITY_TIME_LAPSE_LOW; 149e414608cb3dae5271104623ec52fe5a04305942aZhijun He private static final int QUALITY_TIME_LAPSE_LIST_END = QUALITY_TIME_LAPSE_2160P; 15007b9ae33127212fd9e15f96fa89b7d4cab81e55eJames Dong 15107b9ae33127212fd9e15f96fa89b7d4cab81e55eJames Dong /** 152f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He * High speed ( >= 100fps) quality level corresponding to the lowest available resolution. 153f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He */ 154f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He public static final int QUALITY_HIGH_SPEED_LOW = 2000; 155f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He 156f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He /** 157f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He * High speed ( >= 100fps) quality level corresponding to the highest available resolution. 158f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He */ 159f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He public static final int QUALITY_HIGH_SPEED_HIGH = 2001; 160f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He 161f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He /** 162f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He * High speed ( >= 100fps) quality level corresponding to the 480p (720 x 480) resolution. 163f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He * 164f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He * Note that the horizontal resolution for 480p can also be other 165f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He * values, such as 640 or 704, instead of 720. 166f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He */ 167f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He public static final int QUALITY_HIGH_SPEED_480P = 2002; 168f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He 169f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He /** 170f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He * High speed ( >= 100fps) quality level corresponding to the 720p (1280 x 720) resolution. 171f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He */ 172f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He public static final int QUALITY_HIGH_SPEED_720P = 2003; 173f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He 174f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He /** 175f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He * High speed ( >= 100fps) quality level corresponding to the 1080p (1920 x 1080 or 1920x1088) 176f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He * resolution. 177f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He */ 178f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He public static final int QUALITY_HIGH_SPEED_1080P = 2004; 179f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He 180b67c3102c9e67b4d199000bbfe9ec656ae5e9ca3Zhijun He /** 181b67c3102c9e67b4d199000bbfe9ec656ae5e9ca3Zhijun He * High speed ( >= 100fps) quality level corresponding to the 2160p (3840 x 2160) 182b67c3102c9e67b4d199000bbfe9ec656ae5e9ca3Zhijun He * resolution. 183b67c3102c9e67b4d199000bbfe9ec656ae5e9ca3Zhijun He */ 184b67c3102c9e67b4d199000bbfe9ec656ae5e9ca3Zhijun He public static final int QUALITY_HIGH_SPEED_2160P = 2005; 185b67c3102c9e67b4d199000bbfe9ec656ae5e9ca3Zhijun He 186f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He // Start and end of high speed quality list 187f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He private static final int QUALITY_HIGH_SPEED_LIST_START = QUALITY_HIGH_SPEED_LOW; 188b67c3102c9e67b4d199000bbfe9ec656ae5e9ca3Zhijun He private static final int QUALITY_HIGH_SPEED_LIST_END = QUALITY_HIGH_SPEED_2160P; 189f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He 190f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He /** 191e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong * Default recording duration in seconds before the session is terminated. 192e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong * This is useful for applications like MMS has limited file size requirement. 1939b433f0b654d32530b0b48a7a653216ae0bb94d8James Dong */ 194e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong public int duration; 1959b433f0b654d32530b0b48a7a653216ae0bb94d8James Dong 1969b433f0b654d32530b0b48a7a653216ae0bb94d8James Dong /** 197e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * The quality level of the camcorder profile 198e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong */ 199e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong public int quality; 200e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong 201e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong /** 202e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * The file output format of the camcorder profile 203e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * @see android.media.MediaRecorder.OutputFormat 204e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong */ 205e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong public int fileFormat; 206e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong 207e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong /** 208e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * The video encoder being used for the video track 209e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * @see android.media.MediaRecorder.VideoEncoder 210e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong */ 211e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong public int videoCodec; 212e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong 213e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong /** 214e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * The target video output bit rate in bits per second 215e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong */ 216e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong public int videoBitRate; 217e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong 218e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong /** 219e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * The target video frame rate in frames per second 220e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong */ 221e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong public int videoFrameRate; 222e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong 223e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong /** 224e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * The target video frame width in pixels 225e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong */ 226e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong public int videoFrameWidth; 227e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong 228e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong /** 229e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * The target video frame height in pixels 230e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong */ 231e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong public int videoFrameHeight; 232e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong 233e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong /** 234e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * The audio encoder being used for the audio track. 235e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * @see android.media.MediaRecorder.AudioEncoder 236e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong */ 237e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong public int audioCodec; 238e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong 239e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong /** 240e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * The target audio output bit rate in bits per second 241e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong */ 242e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong public int audioBitRate; 243e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong 244e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong /** 245e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * The audio sampling rate used for the audio track 246e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong */ 247e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong public int audioSampleRate; 248e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong 249e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong /** 250e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * The number of audio channels used for the audio track 251e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong */ 252e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong public int audioChannels; 253e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong 254e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong /** 2555680635f39b3098539cbfd120f95fdc4479bab0fWu-cheng Li * Returns the camcorder profile for the first back-facing camera on the 2565680635f39b3098539cbfd120f95fdc4479bab0fWu-cheng Li * device at the given quality level. If the device has no back-facing 2575680635f39b3098539cbfd120f95fdc4479bab0fWu-cheng Li * camera, this returns null. 258e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong * @param quality the target quality level for the camcorder profile 2594af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra * @see #get(int, int) 260e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong */ 261e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong public static CamcorderProfile get(int quality) { 2625680635f39b3098539cbfd120f95fdc4479bab0fWu-cheng Li int numberOfCameras = Camera.getNumberOfCameras(); 2635680635f39b3098539cbfd120f95fdc4479bab0fWu-cheng Li CameraInfo cameraInfo = new CameraInfo(); 2645680635f39b3098539cbfd120f95fdc4479bab0fWu-cheng Li for (int i = 0; i < numberOfCameras; i++) { 2655680635f39b3098539cbfd120f95fdc4479bab0fWu-cheng Li Camera.getCameraInfo(i, cameraInfo); 2665680635f39b3098539cbfd120f95fdc4479bab0fWu-cheng Li if (cameraInfo.facing == CameraInfo.CAMERA_FACING_BACK) { 2675680635f39b3098539cbfd120f95fdc4479bab0fWu-cheng Li return get(i, quality); 2685680635f39b3098539cbfd120f95fdc4479bab0fWu-cheng Li } 2695680635f39b3098539cbfd120f95fdc4479bab0fWu-cheng Li } 2705680635f39b3098539cbfd120f95fdc4479bab0fWu-cheng Li return null; 27109b9005769f2b717f637131578ce6cfa6bd62bd9Chih-Chung Chang } 27209b9005769f2b717f637131578ce6cfa6bd62bd9Chih-Chung Chang 27309b9005769f2b717f637131578ce6cfa6bd62bd9Chih-Chung Chang /** 27409b9005769f2b717f637131578ce6cfa6bd62bd9Chih-Chung Chang * Returns the camcorder profile for the given camera at the given 27509b9005769f2b717f637131578ce6cfa6bd62bd9Chih-Chung Chang * quality level. 2764af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra * 2774af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra * Quality levels QUALITY_LOW, QUALITY_HIGH are guaranteed to be supported, while 278522632cde516001429549c60bd570c399ffad800Nipun Kwatra * other levels may or may not be supported. The supported levels can be checked using 279522632cde516001429549c60bd570c399ffad800Nipun Kwatra * {@link #hasProfile(int, int)}. 2804af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra * QUALITY_LOW refers to the lowest quality available, while QUALITY_HIGH refers to 2814af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra * the highest quality available. 282f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He * QUALITY_LOW/QUALITY_HIGH have to match one of qcif, cif, 480p, 720p, 1080p or 2160p. 283f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He * E.g. if the device supports 480p, 720p, 1080p and 2160p, then low is 480p and high is 284f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He * 2160p. 2854af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra * 286d48a15c3fead59a1aa710a16bb5f923164475918Nipun Kwatra * The same is true for time lapse quality levels, i.e. QUALITY_TIME_LAPSE_LOW, 287d48a15c3fead59a1aa710a16bb5f923164475918Nipun Kwatra * QUALITY_TIME_LAPSE_HIGH are guaranteed to be supported and have to match one of 288f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He * qcif, cif, 480p, 720p, 1080p, or 2160p. 289f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He * 290f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He * For high speed quality levels, they may or may not be supported. If a subset of the levels 291f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He * are supported, QUALITY_HIGH_SPEED_LOW and QUALITY_HIGH_SPEED_HIGH are guaranteed to be 292f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He * supported and have to match one of 480p, 720p, or 1080p. 293d48a15c3fead59a1aa710a16bb5f923164475918Nipun Kwatra * 2944af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra * A camcorder recording session with higher quality level usually has higher output 2954af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra * bit rate, better video and/or audio recording quality, larger video frame 2964af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra * resolution and higher audio sampling rate, etc, than those with lower quality 2974af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra * level. 2984af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra * 29909b9005769f2b717f637131578ce6cfa6bd62bd9Chih-Chung Chang * @param cameraId the id for the camera 3004af0dfd6cbc13fa6a89ec1430cbe6f619cd64d8aNipun Kwatra * @param quality the target quality level for the camcorder profile. 301522632cde516001429549c60bd570c399ffad800Nipun Kwatra * @see #QUALITY_LOW 302522632cde516001429549c60bd570c399ffad800Nipun Kwatra * @see #QUALITY_HIGH 303522632cde516001429549c60bd570c399ffad800Nipun Kwatra * @see #QUALITY_QCIF 304522632cde516001429549c60bd570c399ffad800Nipun Kwatra * @see #QUALITY_CIF 305522632cde516001429549c60bd570c399ffad800Nipun Kwatra * @see #QUALITY_480P 306522632cde516001429549c60bd570c399ffad800Nipun Kwatra * @see #QUALITY_720P 307522632cde516001429549c60bd570c399ffad800Nipun Kwatra * @see #QUALITY_1080P 308f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He * @see #QUALITY_2160P 309522632cde516001429549c60bd570c399ffad800Nipun Kwatra * @see #QUALITY_TIME_LAPSE_LOW 310522632cde516001429549c60bd570c399ffad800Nipun Kwatra * @see #QUALITY_TIME_LAPSE_HIGH 311522632cde516001429549c60bd570c399ffad800Nipun Kwatra * @see #QUALITY_TIME_LAPSE_QCIF 312522632cde516001429549c60bd570c399ffad800Nipun Kwatra * @see #QUALITY_TIME_LAPSE_CIF 313522632cde516001429549c60bd570c399ffad800Nipun Kwatra * @see #QUALITY_TIME_LAPSE_480P 314522632cde516001429549c60bd570c399ffad800Nipun Kwatra * @see #QUALITY_TIME_LAPSE_720P 315522632cde516001429549c60bd570c399ffad800Nipun Kwatra * @see #QUALITY_TIME_LAPSE_1080P 316f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He * @see #QUALITY_TIME_LAPSE_2160P 317f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He * @see #QUALITY_HIGH_SPEED_LOW 318f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He * @see #QUALITY_HIGH_SPEED_HIGH 319f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He * @see #QUALITY_HIGH_SPEED_480P 320f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He * @see #QUALITY_HIGH_SPEED_720P 321f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He * @see #QUALITY_HIGH_SPEED_1080P 322b67c3102c9e67b4d199000bbfe9ec656ae5e9ca3Zhijun He * @see #QUALITY_HIGH_SPEED_2160P 323f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He */ 32409b9005769f2b717f637131578ce6cfa6bd62bd9Chih-Chung Chang public static CamcorderProfile get(int cameraId, int quality) { 32507b9ae33127212fd9e15f96fa89b7d4cab81e55eJames Dong if (!((quality >= QUALITY_LIST_START && 32607b9ae33127212fd9e15f96fa89b7d4cab81e55eJames Dong quality <= QUALITY_LIST_END) || 32707b9ae33127212fd9e15f96fa89b7d4cab81e55eJames Dong (quality >= QUALITY_TIME_LAPSE_LIST_START && 328f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He quality <= QUALITY_TIME_LAPSE_LIST_END) || 329f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He (quality >= QUALITY_HIGH_SPEED_LIST_START && 330f7badff8bbcbd45939c2f60cfcc88c6d3b07c6b2Zhijun He quality <= QUALITY_HIGH_SPEED_LIST_END))) { 331e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong String errMessage = "Unsupported quality level: " + quality; 332e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong throw new IllegalArgumentException(errMessage); 333e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong } 33409b9005769f2b717f637131578ce6cfa6bd62bd9Chih-Chung Chang return native_get_camcorder_profile(cameraId, quality); 335e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong } 336e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong 3379d619542bea7d4c376a5a8b4a55c795a796adef3Nipun Kwatra /** 3385680635f39b3098539cbfd120f95fdc4479bab0fWu-cheng Li * Returns true if camcorder profile exists for the first back-facing 3395680635f39b3098539cbfd120f95fdc4479bab0fWu-cheng Li * camera at the given quality level. 3409d619542bea7d4c376a5a8b4a55c795a796adef3Nipun Kwatra * @param quality the target quality level for the camcorder profile 3419d619542bea7d4c376a5a8b4a55c795a796adef3Nipun Kwatra */ 3429d619542bea7d4c376a5a8b4a55c795a796adef3Nipun Kwatra public static boolean hasProfile(int quality) { 3435680635f39b3098539cbfd120f95fdc4479bab0fWu-cheng Li int numberOfCameras = Camera.getNumberOfCameras(); 3445680635f39b3098539cbfd120f95fdc4479bab0fWu-cheng Li CameraInfo cameraInfo = new CameraInfo(); 3455680635f39b3098539cbfd120f95fdc4479bab0fWu-cheng Li for (int i = 0; i < numberOfCameras; i++) { 3465680635f39b3098539cbfd120f95fdc4479bab0fWu-cheng Li Camera.getCameraInfo(i, cameraInfo); 3475680635f39b3098539cbfd120f95fdc4479bab0fWu-cheng Li if (cameraInfo.facing == CameraInfo.CAMERA_FACING_BACK) { 3485680635f39b3098539cbfd120f95fdc4479bab0fWu-cheng Li return hasProfile(i, quality); 3495680635f39b3098539cbfd120f95fdc4479bab0fWu-cheng Li } 3505680635f39b3098539cbfd120f95fdc4479bab0fWu-cheng Li } 3515680635f39b3098539cbfd120f95fdc4479bab0fWu-cheng Li return false; 3529d619542bea7d4c376a5a8b4a55c795a796adef3Nipun Kwatra } 3539d619542bea7d4c376a5a8b4a55c795a796adef3Nipun Kwatra 3549d619542bea7d4c376a5a8b4a55c795a796adef3Nipun Kwatra /** 3559d619542bea7d4c376a5a8b4a55c795a796adef3Nipun Kwatra * Returns true if camcorder profile exists for the given camera at 3569d619542bea7d4c376a5a8b4a55c795a796adef3Nipun Kwatra * the given quality level. 3579d619542bea7d4c376a5a8b4a55c795a796adef3Nipun Kwatra * @param cameraId the id for the camera 3589d619542bea7d4c376a5a8b4a55c795a796adef3Nipun Kwatra * @param quality the target quality level for the camcorder profile 3599d619542bea7d4c376a5a8b4a55c795a796adef3Nipun Kwatra */ 3609d619542bea7d4c376a5a8b4a55c795a796adef3Nipun Kwatra public static boolean hasProfile(int cameraId, int quality) { 3619d619542bea7d4c376a5a8b4a55c795a796adef3Nipun Kwatra return native_has_camcorder_profile(cameraId, quality); 3629d619542bea7d4c376a5a8b4a55c795a796adef3Nipun Kwatra } 3639d619542bea7d4c376a5a8b4a55c795a796adef3Nipun Kwatra 364e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong static { 365e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong System.loadLibrary("media_jni"); 366e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong native_init(); 367e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong } 368e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong 369e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong // Private constructor called by JNI 3709b433f0b654d32530b0b48a7a653216ae0bb94d8James Dong private CamcorderProfile(int duration, 3719b433f0b654d32530b0b48a7a653216ae0bb94d8James Dong int quality, 372e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong int fileFormat, 373e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong int videoCodec, 374e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong int videoBitRate, 375e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong int videoFrameRate, 376e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong int videoWidth, 377e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong int videoHeight, 378e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong int audioCodec, 379e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong int audioBitRate, 380e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong int audioSampleRate, 381e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong int audioChannels) { 382e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong 383e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong this.duration = duration; 384e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong this.quality = quality; 385e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong this.fileFormat = fileFormat; 386e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong this.videoCodec = videoCodec; 387e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong this.videoBitRate = videoBitRate; 388e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong this.videoFrameRate = videoFrameRate; 389e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong this.videoFrameWidth = videoWidth; 390e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong this.videoFrameHeight = videoHeight; 391e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong this.audioCodec = audioCodec; 392e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong this.audioBitRate = audioBitRate; 393e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong this.audioSampleRate = audioSampleRate; 394e64d9a236e4704abf53d3b7eea2eb066f23cf402James Dong this.audioChannels = audioChannels; 395e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong } 396e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong 397e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong // Methods implemented by JNI 398e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong private static native final void native_init(); 39909b9005769f2b717f637131578ce6cfa6bd62bd9Chih-Chung Chang private static native final CamcorderProfile native_get_camcorder_profile( 40009b9005769f2b717f637131578ce6cfa6bd62bd9Chih-Chung Chang int cameraId, int quality); 4019d619542bea7d4c376a5a8b4a55c795a796adef3Nipun Kwatra private static native final boolean native_has_camcorder_profile( 4029d619542bea7d4c376a5a8b4a55c795a796adef3Nipun Kwatra int cameraId, int quality); 403e7038ace44ed6e6cd27be35b003e6dd0412e936fJames Dong} 404