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; 3289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass ICamera; 334ca2c7c913f8bd4ada13aca56d36045d42d1e00fWu-cheng Liclass ICameraRecordingProxy; 348ba01021b573889802e67e029225a96f0dfa471aAndy McFaddenclass IGraphicBufferProducer; 35e2a2dfcbf0c9d6bb7139263ecf0d8e53b4ca1049Chong Zhangstruct PersistentSurface; 361a2952aee048ca7b1765e2bc09ebe9aeddaeafa3Mathias Agopianclass Surface; 3789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 3889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projecttypedef void (*media_completion_f)(status_t status, void *cookie); 3989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 4089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectenum video_source { 4189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project VIDEO_SOURCE_DEFAULT = 0, 4289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project VIDEO_SOURCE_CAMERA = 1, 4372cecca17d735db6532c45f0a7e10c47ee6f065aChong Zhang VIDEO_SOURCE_SURFACE = 2, 449747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang 459747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang VIDEO_SOURCE_LIST_END // must be last - used to validate audio source type 4689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 4789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 489747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang//Please update media/java/android/media/MediaRecorder.java if the following is updated. 4989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectenum output_format { 5089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project OUTPUT_FORMAT_DEFAULT = 0, 519747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang OUTPUT_FORMAT_THREE_GPP = 1, 529747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang OUTPUT_FORMAT_MPEG_4 = 2, 539747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang 549747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang 559747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang OUTPUT_FORMAT_AUDIO_ONLY_START = 3, // Used in validating the output format. Should be the 569747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang // at the start of the audio only output formats. 579747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang 589747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang /* These are audio only file formats */ 599747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang OUTPUT_FORMAT_RAW_AMR = 3, //to be backward compatible 609747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang OUTPUT_FORMAT_AMR_NB = 3, 619747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang OUTPUT_FORMAT_AMR_WB = 4, 629747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang OUTPUT_FORMAT_AAC_ADIF = 5, 639747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang OUTPUT_FORMAT_AAC_ADTS = 6, 649747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang 65114819633470ebd5b346c13c2a82a0025d2d39c0Robert Shih OUTPUT_FORMAT_AUDIO_ONLY_END = 7, // Used in validating the output format. Should be the 66114819633470ebd5b346c13c2a82a0025d2d39c0Robert Shih // at the end of the audio only output formats. 67114819633470ebd5b346c13c2a82a0025d2d39c0Robert Shih 6839ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber /* Stream over a socket, limited to a single stream */ 6939ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber OUTPUT_FORMAT_RTP_AVP = 7, 7039ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber 7159b7dc39ea8332d3418a599e51447d7edb612ac4Andreas Huber /* H.264/AAC data encapsulated in MPEG2/TS */ 7259b7dc39ea8332d3418a599e51447d7edb612ac4Andreas Huber OUTPUT_FORMAT_MPEG2TS = 8, 7359b7dc39ea8332d3418a599e51447d7edb612ac4Andreas Huber 7492b583ad786edcbe0ae0925e2b7cc043e0849b86Robert Shih /* VP8/VORBIS data in a WEBM container */ 7592b583ad786edcbe0ae0925e2b7cc043e0849b86Robert Shih OUTPUT_FORMAT_WEBM = 9, 7692b583ad786edcbe0ae0925e2b7cc043e0849b86Robert Shih 7789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project OUTPUT_FORMAT_LIST_END // must be last - used to validate format type 7889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 7989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 8089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectenum audio_encoder { 8189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project AUDIO_ENCODER_DEFAULT = 0, 8289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project AUDIO_ENCODER_AMR_NB = 1, 839747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang AUDIO_ENCODER_AMR_WB = 2, 849747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang AUDIO_ENCODER_AAC = 3, 85f60c660f048d5f5e2458cff243c20400d73757a7Dave Burke AUDIO_ENCODER_HE_AAC = 4, 86f60c660f048d5f5e2458cff243c20400d73757a7Dave Burke AUDIO_ENCODER_AAC_ELD = 5, 8792b583ad786edcbe0ae0925e2b7cc043e0849b86Robert Shih AUDIO_ENCODER_VORBIS = 6, 889747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang 899747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang AUDIO_ENCODER_LIST_END // must be the last - used to validate the audio encoder type 9089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 9189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 9289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectenum video_encoder { 9389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project VIDEO_ENCODER_DEFAULT = 0, 9489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project VIDEO_ENCODER_H263 = 1, 9589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project VIDEO_ENCODER_H264 = 2, 9689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project VIDEO_ENCODER_MPEG_4_SP = 3, 9792b583ad786edcbe0ae0925e2b7cc043e0849b86Robert Shih VIDEO_ENCODER_VP8 = 4, 989747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang 999747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang VIDEO_ENCODER_LIST_END // must be the last - used to validate the video encoder type 10089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 10189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 10289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project/* 103bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong * The state machine of the media_recorder. 10489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 10589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectenum media_recorder_states { 106bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong // Error state. 10789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_RECORDER_ERROR = 0, 108bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong 109bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong // Recorder was just created. 11089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_RECORDER_IDLE = 1 << 0, 111bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong 112bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong // Recorder has been initialized. 11389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_RECORDER_INITIALIZED = 1 << 1, 114bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong 115bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong // Configuration of the recorder has been completed. 11689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_RECORDER_DATASOURCE_CONFIGURED = 1 << 2, 117bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong 118bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong // Recorder is ready to start. 11989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_RECORDER_PREPARED = 1 << 3, 120bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong 121bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong // Recording is in progress. 12289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MEDIA_RECORDER_RECORDING = 1 << 4, 12389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 12489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 12589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// The "msg" code passed to the listener in notify. 126c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Projectenum media_recorder_event_type { 127bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong MEDIA_RECORDER_EVENT_LIST_START = 1, 128c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project MEDIA_RECORDER_EVENT_ERROR = 1, 129bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong MEDIA_RECORDER_EVENT_INFO = 2, 130bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong MEDIA_RECORDER_EVENT_LIST_END = 99, 131bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong 132bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong // Track related event types 133bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong MEDIA_RECORDER_TRACK_EVENT_LIST_START = 100, 134bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong MEDIA_RECORDER_TRACK_EVENT_ERROR = 100, 135bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong MEDIA_RECORDER_TRACK_EVENT_INFO = 101, 136bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong MEDIA_RECORDER_TRACK_EVENT_LIST_END = 1000, 13789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 13889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 139bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong/* 140bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong * The (part of) "what" code passed to the listener in notify. 141bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong * When the error or info type is track specific, the what has 142bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong * the following layout: 143bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong * the left-most 16-bit is meant for error or info type. 144bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong * the right-most 4-bit is meant for track id. 145bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong * the rest is reserved. 146bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong * 147bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong * | track id | reserved | error or info type | 148bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong * 31 28 16 0 149bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong * 150bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong */ 151c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Projectenum media_recorder_error_type { 152bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong MEDIA_RECORDER_ERROR_UNKNOWN = 1, 153bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong 154bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong // Track related error type 155bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong MEDIA_RECORDER_TRACK_ERROR_LIST_START = 100, 156bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong MEDIA_RECORDER_TRACK_ERROR_GENERAL = 100, 157bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong MEDIA_RECORDER_ERROR_VIDEO_NO_SYNC_FRAME = 200, 158bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong MEDIA_RECORDER_TRACK_ERROR_LIST_END = 1000, 15989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 16089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 161c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project// The codes are distributed as follow: 162c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project// 0xx: Reserved 163c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project// 8xx: General info/warning 1649747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang// 165c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Projectenum media_recorder_info_type { 166c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project MEDIA_RECORDER_INFO_UNKNOWN = 1, 167bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong 1681179bc9b0e3d17c984e8f4ad38561c049dd102faThe Android Open Source Project MEDIA_RECORDER_INFO_MAX_DURATION_REACHED = 800, 169f0ce2fb0c7bf3a414279e5aba61105f3d9025c0eJames Dong MEDIA_RECORDER_INFO_MAX_FILESIZE_REACHED = 801, 170bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong 171bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong // All track related informtional events start here 172bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong MEDIA_RECORDER_TRACK_INFO_LIST_START = 1000, 173bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong MEDIA_RECORDER_TRACK_INFO_COMPLETION_STATUS = 1000, 174bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong MEDIA_RECORDER_TRACK_INFO_PROGRESS_IN_TIME = 1001, 17543ec1dfc5dc3934680a52a026c5519ddc51bdbd3James Dong MEDIA_RECORDER_TRACK_INFO_TYPE = 1002, 17643ec1dfc5dc3934680a52a026c5519ddc51bdbd3James Dong MEDIA_RECORDER_TRACK_INFO_DURATION_MS = 1003, 17770ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong 17870ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong // The time to measure the max chunk duration 17943ec1dfc5dc3934680a52a026c5519ddc51bdbd3James Dong MEDIA_RECORDER_TRACK_INFO_MAX_CHUNK_DUR_MS = 1004, 18070ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong 18143ec1dfc5dc3934680a52a026c5519ddc51bdbd3James Dong MEDIA_RECORDER_TRACK_INFO_ENCODED_FRAMES = 1005, 18270ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong 18370ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong // The time to measure how well the audio and video 18470ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong // track data is interleaved. 18570ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong MEDIA_RECORDER_TRACK_INTER_CHUNK_TIME_MS = 1006, 18670ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong 18770ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong // The time to measure system response. Note that 18870ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong // the delay does not include the intentional delay 18970ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong // we use to eliminate the recording sound. 19070ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong MEDIA_RECORDER_TRACK_INFO_INITIAL_DELAY_MS = 1007, 19170ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong 19270ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong // The time used to compensate for initial A/V sync. 19370ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong MEDIA_RECORDER_TRACK_INFO_START_OFFSET_MS = 1008, 19470ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong 19507ec01904613a0bac32caaa8444b4690998faed7James Dong // Total number of bytes of the media data. 19607ec01904613a0bac32caaa8444b4690998faed7James Dong MEDIA_RECORDER_TRACK_INFO_DATA_KBYTES = 1009, 19707ec01904613a0bac32caaa8444b4690998faed7James Dong 198bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong MEDIA_RECORDER_TRACK_INFO_LIST_END = 2000, 199c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project}; 200c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project 20189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ---------------------------------------------------------------------------- 20289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ref-counted object for callbacks 20389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass MediaRecorderListener: virtual public RefBase 20489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 20589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic: 20689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual void notify(int msg, int ext1, int ext2) = 0; 20789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 20889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 20937047fceba836f341d0108beed0991b0f8dfc543James Dongclass MediaRecorder : public BnMediaRecorderClient, 210dd172fce75b2a1c3cb3a5d3b3bbb5020b1ae8675James Dong public virtual IMediaDeathNotifier 21189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 21289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic: 213be71aa29a3c86d2e01cd17839d2a72ab09a1bce5Svet Ganov MediaRecorder(const String16& opPackageName); 21489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ~MediaRecorder(); 21589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 216dd172fce75b2a1c3cb3a5d3b3bbb5020b1ae8675James Dong void died(); 21789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t initCheck(); 2184ca2c7c913f8bd4ada13aca56d36045d42d1e00fWu-cheng Li status_t setCamera(const sp<ICamera>& camera, const sp<ICameraRecordingProxy>& proxy); 21999617adda9bc46c43f511f0940bc735c73de61deMathias Agopian status_t setPreviewSurface(const sp<IGraphicBufferProducer>& surface); 22089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t setVideoSource(int vs); 22189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t setAudioSource(int as); 22289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t setOutputFormat(int of); 22389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t setVideoEncoder(int ve); 22489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t setAudioEncoder(int ae); 22589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t setOutputFile(int fd, int64_t offset, int64_t length); 22689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t setVideoSize(int width, int height); 22789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t setVideoFrameRate(int frames_per_second); 228c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project status_t setParameters(const String8& params); 22989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t setListener(const sp<MediaRecorderListener>& listener); 230ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala status_t setClientName(const String16& clientName); 23189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t prepare(); 23289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t getMaxAmplitude(int* max); 23389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t start(); 23489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t stop(); 23589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t reset(); 23689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t init(); 23789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t close(); 23889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t release(); 23989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project void notify(int msg, int ext1, int ext2); 2408f469e18c307cb9dc0d16ed9225972aa8be4516fChong Zhang status_t setInputSurface(const sp<PersistentSurface>& surface); 2418ba01021b573889802e67e029225a96f0dfa471aAndy McFadden sp<IGraphicBufferProducer> querySurfaceMediaSourceFromMediaServer(); 24289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 24389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectprivate: 24489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project void doCleanUp(); 24589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t doReset(); 24689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 24789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<IMediaRecorder> mMediaRecorder; 24889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<MediaRecorderListener> mListener; 249b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi 2508ba01021b573889802e67e029225a96f0dfa471aAndy McFadden // Reference to IGraphicBufferProducer 251b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi // for encoding GL Frames. That is useful only when the 252b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi // video source is set to VIDEO_SOURCE_GRALLOC_BUFFER 2538ba01021b573889802e67e029225a96f0dfa471aAndy McFadden sp<IGraphicBufferProducer> mSurfaceMediaSource; 254b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi 25589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project media_recorder_states mCurrentState; 25689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project bool mIsAudioSourceSet; 25789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project bool mIsVideoSourceSet; 25889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project bool mIsAudioEncoderSet; 25989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project bool mIsVideoEncoderSet; 26089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project bool mIsOutputFileSet; 26189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Mutex mLock; 26289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Mutex mNotifyLock; 26389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 26489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 26589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; // namespace android 26689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 26789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#endif // ANDROID_MEDIARECORDER_H 268