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