189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project/* 289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** Copyright (C) 2008 The Android Open Source Project 389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** 489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** Licensed under the Apache License, Version 2.0 (the "License"); 589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** you may not use this file except in compliance with the License. 689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** You may obtain a copy of the License at 789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** 889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** http://www.apache.org/licenses/LICENSE-2.0 989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** 1089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** Unless required by applicable law or agreed to in writing, software 1189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** distributed under the License is distributed on an "AS IS" BASIS, 1289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** See the License for the specific language governing permissions and 1489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** 1589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** limitations under the License. 1689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 1789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 1889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#ifndef ANDROID_MEDIARECORDER_H 1989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#define ANDROID_MEDIARECORDER_H 2089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 21273d098cc72a88c797d01c7dff0c1350f315f05fMathias Agopian#include <utils/Log.h> 22273d098cc72a88c797d01c7dff0c1350f315f05fMathias Agopian#include <utils/threads.h> 23273d098cc72a88c797d01c7dff0c1350f315f05fMathias Agopian#include <utils/List.h> 24273d098cc72a88c797d01c7dff0c1350f315f05fMathias Agopian#include <utils/Errors.h> 2537047fceba836f341d0108beed0991b0f8dfc543James Dong#include <media/IMediaRecorderClient.h> 26dd172fce75b2a1c3cb3a5d3b3bbb5020b1ae8675James Dong#include <media/IMediaDeathNotifier.h> 2789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectnamespace android { 2989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 3089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass Surface; 3189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass IMediaRecorder; 324ca2c7c913f8bd4ada13aca56d36045d42d1e00fWu-cheng Liclass ICameraRecordingProxy; 338ba01021b573889802e67e029225a96f0dfa471aAndy McFaddenclass IGraphicBufferProducer; 34e2a2dfcbf0c9d6bb7139263ecf0d8e53b4ca1049Chong Zhangstruct PersistentSurface; 351a2952aee048ca7b1765e2bc09ebe9aeddaeafa3Mathias Agopianclass Surface; 3689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 37d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvalanamespace hardware { 38d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvalaclass ICamera; 39d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala} 40d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 4189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projecttypedef void (*media_completion_f)(status_t status, void *cookie); 4289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 4389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectenum video_source { 4489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project VIDEO_SOURCE_DEFAULT = 0, 4589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project VIDEO_SOURCE_CAMERA = 1, 4672cecca17d735db6532c45f0a7e10c47ee6f065aChong Zhang VIDEO_SOURCE_SURFACE = 2, 479747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang 489747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang VIDEO_SOURCE_LIST_END // must be last - used to validate audio source type 4989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 5089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 519747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang//Please update media/java/android/media/MediaRecorder.java if the following is updated. 5289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectenum output_format { 5389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project OUTPUT_FORMAT_DEFAULT = 0, 549747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang OUTPUT_FORMAT_THREE_GPP = 1, 559747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang OUTPUT_FORMAT_MPEG_4 = 2, 569747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang 579747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang 589747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang OUTPUT_FORMAT_AUDIO_ONLY_START = 3, // Used in validating the output format. Should be the 599747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang // at the start of the audio only output formats. 609747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang 619747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang /* These are audio only file formats */ 629747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang OUTPUT_FORMAT_RAW_AMR = 3, //to be backward compatible 639747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang OUTPUT_FORMAT_AMR_NB = 3, 649747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang OUTPUT_FORMAT_AMR_WB = 4, 659747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang OUTPUT_FORMAT_AAC_ADIF = 5, 669747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang OUTPUT_FORMAT_AAC_ADTS = 6, 679747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang 68114819633470ebd5b346c13c2a82a0025d2d39c0Robert Shih OUTPUT_FORMAT_AUDIO_ONLY_END = 7, // Used in validating the output format. Should be the 69114819633470ebd5b346c13c2a82a0025d2d39c0Robert Shih // at the end of the audio only output formats. 70114819633470ebd5b346c13c2a82a0025d2d39c0Robert Shih 7139ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber /* Stream over a socket, limited to a single stream */ 7239ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber OUTPUT_FORMAT_RTP_AVP = 7, 7339ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber 7459b7dc39ea8332d3418a599e51447d7edb612ac4Andreas Huber /* H.264/AAC data encapsulated in MPEG2/TS */ 7559b7dc39ea8332d3418a599e51447d7edb612ac4Andreas Huber OUTPUT_FORMAT_MPEG2TS = 8, 7659b7dc39ea8332d3418a599e51447d7edb612ac4Andreas Huber 7792b583ad786edcbe0ae0925e2b7cc043e0849b86Robert Shih /* VP8/VORBIS data in a WEBM container */ 7892b583ad786edcbe0ae0925e2b7cc043e0849b86Robert Shih OUTPUT_FORMAT_WEBM = 9, 7992b583ad786edcbe0ae0925e2b7cc043e0849b86Robert Shih 8089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project OUTPUT_FORMAT_LIST_END // must be last - used to validate format type 8189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 8289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 8389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectenum audio_encoder { 8489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project AUDIO_ENCODER_DEFAULT = 0, 8589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project AUDIO_ENCODER_AMR_NB = 1, 869747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang AUDIO_ENCODER_AMR_WB = 2, 879747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang AUDIO_ENCODER_AAC = 3, 88f60c660f048d5f5e2458cff243c20400d73757a7Dave Burke AUDIO_ENCODER_HE_AAC = 4, 89f60c660f048d5f5e2458cff243c20400d73757a7Dave Burke AUDIO_ENCODER_AAC_ELD = 5, 9092b583ad786edcbe0ae0925e2b7cc043e0849b86Robert Shih AUDIO_ENCODER_VORBIS = 6, 919747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang 929747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang AUDIO_ENCODER_LIST_END // must be the last - used to validate the audio encoder type 9389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 9489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 9589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectenum video_encoder { 9689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project VIDEO_ENCODER_DEFAULT = 0, 9789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project VIDEO_ENCODER_H263 = 1, 9889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project VIDEO_ENCODER_H264 = 2, 9989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project VIDEO_ENCODER_MPEG_4_SP = 3, 10092b583ad786edcbe0ae0925e2b7cc043e0849b86Robert Shih VIDEO_ENCODER_VP8 = 4, 1019aa87d4ef502c9700a31fe46dc6e1d6f99cf4e5eWonsik Kim VIDEO_ENCODER_HEVC = 5, 1029747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang 1039747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang VIDEO_ENCODER_LIST_END // must be the last - used to validate the video encoder type 10489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 10589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 10689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project/* 107bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong * The state machine of the media_recorder. 10889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 10989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectenum media_recorder_states { 110bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong // Error state. 11189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_RECORDER_ERROR = 0, 112bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong 113bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong // Recorder was just created. 11489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_RECORDER_IDLE = 1 << 0, 115bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong 116bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong // Recorder has been initialized. 11789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_RECORDER_INITIALIZED = 1 << 1, 118bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong 119bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong // Configuration of the recorder has been completed. 12089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_RECORDER_DATASOURCE_CONFIGURED = 1 << 2, 121bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong 122bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong // Recorder is ready to start. 12389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_RECORDER_PREPARED = 1 << 3, 124bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong 125bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong // Recording is in progress. 12689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_RECORDER_RECORDING = 1 << 4, 12789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 12889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 12989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// The "msg" code passed to the listener in notify. 130c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Projectenum media_recorder_event_type { 131bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong MEDIA_RECORDER_EVENT_LIST_START = 1, 132c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project MEDIA_RECORDER_EVENT_ERROR = 1, 133bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong MEDIA_RECORDER_EVENT_INFO = 2, 134bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong MEDIA_RECORDER_EVENT_LIST_END = 99, 135bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong 136bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong // Track related event types 137bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong MEDIA_RECORDER_TRACK_EVENT_LIST_START = 100, 138bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong MEDIA_RECORDER_TRACK_EVENT_ERROR = 100, 139bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong MEDIA_RECORDER_TRACK_EVENT_INFO = 101, 140bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong MEDIA_RECORDER_TRACK_EVENT_LIST_END = 1000, 14189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 14289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 143bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong/* 144bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong * The (part of) "what" code passed to the listener in notify. 145bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong * When the error or info type is track specific, the what has 146bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong * the following layout: 147bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong * the left-most 16-bit is meant for error or info type. 148bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong * the right-most 4-bit is meant for track id. 149bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong * the rest is reserved. 150bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong * 151bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong * | track id | reserved | error or info type | 152bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong * 31 28 16 0 153bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong * 154bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong */ 155c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Projectenum media_recorder_error_type { 156bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong MEDIA_RECORDER_ERROR_UNKNOWN = 1, 157bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong 158bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong // Track related error type 159bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong MEDIA_RECORDER_TRACK_ERROR_LIST_START = 100, 160bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong MEDIA_RECORDER_TRACK_ERROR_GENERAL = 100, 161bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong MEDIA_RECORDER_ERROR_VIDEO_NO_SYNC_FRAME = 200, 162bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong MEDIA_RECORDER_TRACK_ERROR_LIST_END = 1000, 16389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 16489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 165c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project// The codes are distributed as follow: 166c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project// 0xx: Reserved 167c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project// 8xx: General info/warning 1689747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang// 169c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Projectenum media_recorder_info_type { 170c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project MEDIA_RECORDER_INFO_UNKNOWN = 1, 171bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong 1721179bc9b0e3d17c984e8f4ad38561c049dd102faThe Android Open Source Project MEDIA_RECORDER_INFO_MAX_DURATION_REACHED = 800, 173f0ce2fb0c7bf3a414279e5aba61105f3d9025c0eJames Dong MEDIA_RECORDER_INFO_MAX_FILESIZE_REACHED = 801, 174bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong 175bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong // All track related informtional events start here 176bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong MEDIA_RECORDER_TRACK_INFO_LIST_START = 1000, 177bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong MEDIA_RECORDER_TRACK_INFO_COMPLETION_STATUS = 1000, 178bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong MEDIA_RECORDER_TRACK_INFO_PROGRESS_IN_TIME = 1001, 17943ec1dfc5dc3934680a52a026c5519ddc51bdbd3James Dong MEDIA_RECORDER_TRACK_INFO_TYPE = 1002, 18043ec1dfc5dc3934680a52a026c5519ddc51bdbd3James Dong MEDIA_RECORDER_TRACK_INFO_DURATION_MS = 1003, 18170ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong 18270ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong // The time to measure the max chunk duration 18343ec1dfc5dc3934680a52a026c5519ddc51bdbd3James Dong MEDIA_RECORDER_TRACK_INFO_MAX_CHUNK_DUR_MS = 1004, 18470ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong 18543ec1dfc5dc3934680a52a026c5519ddc51bdbd3James Dong MEDIA_RECORDER_TRACK_INFO_ENCODED_FRAMES = 1005, 18670ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong 18770ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong // The time to measure how well the audio and video 18870ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong // track data is interleaved. 18970ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong MEDIA_RECORDER_TRACK_INTER_CHUNK_TIME_MS = 1006, 19070ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong 19170ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong // The time to measure system response. Note that 19270ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong // the delay does not include the intentional delay 19370ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong // we use to eliminate the recording sound. 19470ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong MEDIA_RECORDER_TRACK_INFO_INITIAL_DELAY_MS = 1007, 19570ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong 19670ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong // The time used to compensate for initial A/V sync. 19770ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong MEDIA_RECORDER_TRACK_INFO_START_OFFSET_MS = 1008, 19870ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong 19907ec01904613a0bac32caaa8444b4690998faed7James Dong // Total number of bytes of the media data. 20007ec01904613a0bac32caaa8444b4690998faed7James Dong MEDIA_RECORDER_TRACK_INFO_DATA_KBYTES = 1009, 20107ec01904613a0bac32caaa8444b4690998faed7James Dong 202bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong MEDIA_RECORDER_TRACK_INFO_LIST_END = 2000, 203c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project}; 204c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project 20589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------------- 20689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ref-counted object for callbacks 20789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass MediaRecorderListener: virtual public RefBase 20889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 20989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic: 21089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual void notify(int msg, int ext1, int ext2) = 0; 21189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 21289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 21337047fceba836f341d0108beed0991b0f8dfc543James Dongclass MediaRecorder : public BnMediaRecorderClient, 214dd172fce75b2a1c3cb3a5d3b3bbb5020b1ae8675James Dong public virtual IMediaDeathNotifier 21589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 21689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic: 217be71aa29a3c86d2e01cd17839d2a72ab09a1bce5Svet Ganov MediaRecorder(const String16& opPackageName); 21889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ~MediaRecorder(); 21989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 220dd172fce75b2a1c3cb3a5d3b3bbb5020b1ae8675James Dong void died(); 22189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t initCheck(); 222d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala status_t setCamera(const sp<hardware::ICamera>& camera, 223d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala const sp<ICameraRecordingProxy>& proxy); 22499617adda9bc46c43f511f0940bc735c73de61deMathias Agopian status_t setPreviewSurface(const sp<IGraphicBufferProducer>& surface); 22589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t setVideoSource(int vs); 22689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t setAudioSource(int as); 22789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t setOutputFormat(int of); 22889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t setVideoEncoder(int ve); 22989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t setAudioEncoder(int ae); 23089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t setOutputFile(int fd, int64_t offset, int64_t length); 23189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t setVideoSize(int width, int height); 23289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t setVideoFrameRate(int frames_per_second); 233c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project status_t setParameters(const String8& params); 23489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t setListener(const sp<MediaRecorderListener>& listener); 235ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala status_t setClientName(const String16& clientName); 23689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t prepare(); 23789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t getMaxAmplitude(int* max); 23889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t start(); 23989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t stop(); 24089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t reset(); 241d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim status_t pause(); 242d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim status_t resume(); 24389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t init(); 24489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t close(); 24589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t release(); 24689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project void notify(int msg, int ext1, int ext2); 2478f469e18c307cb9dc0d16ed9225972aa8be4516fChong Zhang status_t setInputSurface(const sp<PersistentSurface>& surface); 2488ba01021b573889802e67e029225a96f0dfa471aAndy McFadden sp<IGraphicBufferProducer> querySurfaceMediaSourceFromMediaServer(); 24989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 25089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectprivate: 25189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project void doCleanUp(); 25289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t doReset(); 25389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 25489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IMediaRecorder> mMediaRecorder; 25589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<MediaRecorderListener> mListener; 256b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi 2578ba01021b573889802e67e029225a96f0dfa471aAndy McFadden // Reference to IGraphicBufferProducer 258b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi // for encoding GL Frames. That is useful only when the 259b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi // video source is set to VIDEO_SOURCE_GRALLOC_BUFFER 2608ba01021b573889802e67e029225a96f0dfa471aAndy McFadden sp<IGraphicBufferProducer> mSurfaceMediaSource; 261b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi 26289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project media_recorder_states mCurrentState; 26389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project bool mIsAudioSourceSet; 26489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project bool mIsVideoSourceSet; 26589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project bool mIsAudioEncoderSet; 26689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project bool mIsVideoEncoderSet; 26789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project bool mIsOutputFileSet; 26889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Mutex mLock; 26989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Mutex mNotifyLock; 27089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 27189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 27289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; // namespace android 27389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 27489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#endif // ANDROID_MEDIARECORDER_H 275