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;
34b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketiclass ISurfaceTexture;
35b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketiclass SurfaceTextureClient;
3689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
3789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projecttypedef void (*media_completion_f)(status_t status, void *cookie);
3889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
3989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectenum video_source {
4089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    VIDEO_SOURCE_DEFAULT = 0,
4189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    VIDEO_SOURCE_CAMERA = 1,
42b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    VIDEO_SOURCE_GRALLOC_BUFFER = 2,
439747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang
449747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang    VIDEO_SOURCE_LIST_END  // must be last - used to validate audio source type
4589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project};
4689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
479747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang//Please update media/java/android/media/MediaRecorder.java if the following is updated.
4889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectenum output_format {
4989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    OUTPUT_FORMAT_DEFAULT = 0,
509747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang    OUTPUT_FORMAT_THREE_GPP = 1,
519747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang    OUTPUT_FORMAT_MPEG_4 = 2,
529747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang
539747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang
549747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang    OUTPUT_FORMAT_AUDIO_ONLY_START = 3, // Used in validating the output format.  Should be the
559747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang                                        //  at the start of the audio only output formats.
569747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang
579747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang    /* These are audio only file formats */
589747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang    OUTPUT_FORMAT_RAW_AMR = 3, //to be backward compatible
599747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang    OUTPUT_FORMAT_AMR_NB = 3,
609747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang    OUTPUT_FORMAT_AMR_WB = 4,
619747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang    OUTPUT_FORMAT_AAC_ADIF = 5,
629747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang    OUTPUT_FORMAT_AAC_ADTS = 6,
639747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang
6439ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber    /* Stream over a socket, limited to a single stream */
6539ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber    OUTPUT_FORMAT_RTP_AVP = 7,
6639ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber
6759b7dc39ea8332d3418a599e51447d7edb612ac4Andreas Huber    /* H.264/AAC data encapsulated in MPEG2/TS */
6859b7dc39ea8332d3418a599e51447d7edb612ac4Andreas Huber    OUTPUT_FORMAT_MPEG2TS = 8,
6959b7dc39ea8332d3418a599e51447d7edb612ac4Andreas Huber
7089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    OUTPUT_FORMAT_LIST_END // must be last - used to validate format type
7189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project};
7289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
7389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectenum audio_encoder {
7489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    AUDIO_ENCODER_DEFAULT = 0,
7589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    AUDIO_ENCODER_AMR_NB = 1,
769747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang    AUDIO_ENCODER_AMR_WB = 2,
779747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang    AUDIO_ENCODER_AAC = 3,
78f60c660f048d5f5e2458cff243c20400d73757a7Dave Burke    AUDIO_ENCODER_HE_AAC = 4,
79f60c660f048d5f5e2458cff243c20400d73757a7Dave Burke    AUDIO_ENCODER_AAC_ELD = 5,
809747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang
819747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang    AUDIO_ENCODER_LIST_END // must be the last - used to validate the audio encoder type
8289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project};
8389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
8489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectenum video_encoder {
8589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    VIDEO_ENCODER_DEFAULT = 0,
8689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    VIDEO_ENCODER_H263 = 1,
8789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    VIDEO_ENCODER_H264 = 2,
8889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    VIDEO_ENCODER_MPEG_4_SP = 3,
899747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang
909747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang    VIDEO_ENCODER_LIST_END // must be the last - used to validate the video encoder type
9189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project};
9289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
9389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project/*
94bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong * The state machine of the media_recorder.
9589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */
9689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectenum media_recorder_states {
97bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong    // Error state.
9889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    MEDIA_RECORDER_ERROR                 =      0,
99bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong
100bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong    // Recorder was just created.
10189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    MEDIA_RECORDER_IDLE                  = 1 << 0,
102bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong
103bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong    // Recorder has been initialized.
10489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    MEDIA_RECORDER_INITIALIZED           = 1 << 1,
105bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong
106bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong    // Configuration of the recorder has been completed.
10789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    MEDIA_RECORDER_DATASOURCE_CONFIGURED = 1 << 2,
108bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong
109bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong    // Recorder is ready to start.
11089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    MEDIA_RECORDER_PREPARED              = 1 << 3,
111bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong
112bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong    // Recording is in progress.
11389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    MEDIA_RECORDER_RECORDING             = 1 << 4,
11489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project};
11589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
11689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// The "msg" code passed to the listener in notify.
117c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Projectenum media_recorder_event_type {
118bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong    MEDIA_RECORDER_EVENT_LIST_START               = 1,
119c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project    MEDIA_RECORDER_EVENT_ERROR                    = 1,
120bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong    MEDIA_RECORDER_EVENT_INFO                     = 2,
121bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong    MEDIA_RECORDER_EVENT_LIST_END                 = 99,
122bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong
123bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong    // Track related event types
124bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong    MEDIA_RECORDER_TRACK_EVENT_LIST_START         = 100,
125bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong    MEDIA_RECORDER_TRACK_EVENT_ERROR              = 100,
126bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong    MEDIA_RECORDER_TRACK_EVENT_INFO               = 101,
127bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong    MEDIA_RECORDER_TRACK_EVENT_LIST_END           = 1000,
12889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project};
12989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
130bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong/*
131bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong * The (part of) "what" code passed to the listener in notify.
132bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong * When the error or info type is track specific, the what has
133bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong * the following layout:
134bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong * the left-most 16-bit is meant for error or info type.
135bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong * the right-most 4-bit is meant for track id.
136bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong * the rest is reserved.
137bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong *
138bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong * | track id | reserved |     error or info type     |
139bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong * 31         28         16                           0
140bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong *
141bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong */
142c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Projectenum media_recorder_error_type {
143bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong    MEDIA_RECORDER_ERROR_UNKNOWN                   = 1,
144bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong
145bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong    // Track related error type
146bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong    MEDIA_RECORDER_TRACK_ERROR_LIST_START          = 100,
147bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong    MEDIA_RECORDER_TRACK_ERROR_GENERAL             = 100,
148bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong    MEDIA_RECORDER_ERROR_VIDEO_NO_SYNC_FRAME       = 200,
149bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong    MEDIA_RECORDER_TRACK_ERROR_LIST_END            = 1000,
15089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project};
15189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
152c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project// The codes are distributed as follow:
153c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project//   0xx: Reserved
154c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project//   8xx: General info/warning
1559747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang//
156c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Projectenum media_recorder_info_type {
157c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project    MEDIA_RECORDER_INFO_UNKNOWN                   = 1,
158bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong
1591179bc9b0e3d17c984e8f4ad38561c049dd102faThe Android Open Source Project    MEDIA_RECORDER_INFO_MAX_DURATION_REACHED      = 800,
160f0ce2fb0c7bf3a414279e5aba61105f3d9025c0eJames Dong    MEDIA_RECORDER_INFO_MAX_FILESIZE_REACHED      = 801,
161bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong
162bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong    // All track related informtional events start here
163bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong    MEDIA_RECORDER_TRACK_INFO_LIST_START           = 1000,
164bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong    MEDIA_RECORDER_TRACK_INFO_COMPLETION_STATUS    = 1000,
165bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong    MEDIA_RECORDER_TRACK_INFO_PROGRESS_IN_TIME     = 1001,
16643ec1dfc5dc3934680a52a026c5519ddc51bdbd3James Dong    MEDIA_RECORDER_TRACK_INFO_TYPE                 = 1002,
16743ec1dfc5dc3934680a52a026c5519ddc51bdbd3James Dong    MEDIA_RECORDER_TRACK_INFO_DURATION_MS          = 1003,
16870ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong
16970ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong    // The time to measure the max chunk duration
17043ec1dfc5dc3934680a52a026c5519ddc51bdbd3James Dong    MEDIA_RECORDER_TRACK_INFO_MAX_CHUNK_DUR_MS     = 1004,
17170ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong
17243ec1dfc5dc3934680a52a026c5519ddc51bdbd3James Dong    MEDIA_RECORDER_TRACK_INFO_ENCODED_FRAMES       = 1005,
17370ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong
17470ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong    // The time to measure how well the audio and video
17570ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong    // track data is interleaved.
17670ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong    MEDIA_RECORDER_TRACK_INTER_CHUNK_TIME_MS       = 1006,
17770ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong
17870ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong    // The time to measure system response. Note that
17970ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong    // the delay does not include the intentional delay
18070ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong    // we use to eliminate the recording sound.
18170ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong    MEDIA_RECORDER_TRACK_INFO_INITIAL_DELAY_MS     = 1007,
18270ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong
18370ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong    // The time used to compensate for initial A/V sync.
18470ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong    MEDIA_RECORDER_TRACK_INFO_START_OFFSET_MS      = 1008,
18570ccfd44c4bfe95ddecc2df6c3695efc48229d72James Dong
18607ec01904613a0bac32caaa8444b4690998faed7James Dong    // Total number of bytes of the media data.
18707ec01904613a0bac32caaa8444b4690998faed7James Dong    MEDIA_RECORDER_TRACK_INFO_DATA_KBYTES          = 1009,
18807ec01904613a0bac32caaa8444b4690998faed7James Dong
189bc07bcc65e91c7aea9713631ae67760dcf1b0286James Dong    MEDIA_RECORDER_TRACK_INFO_LIST_END             = 2000,
190c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project};
191c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project
19289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ----------------------------------------------------------------------------
19389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ref-counted object for callbacks
19489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass MediaRecorderListener: virtual public RefBase
19589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
19689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic:
19789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    virtual void notify(int msg, int ext1, int ext2) = 0;
19889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project};
19989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
20037047fceba836f341d0108beed0991b0f8dfc543James Dongclass MediaRecorder : public BnMediaRecorderClient,
201dd172fce75b2a1c3cb3a5d3b3bbb5020b1ae8675James Dong                      public virtual IMediaDeathNotifier
20289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
20389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic:
20489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    MediaRecorder();
20589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    ~MediaRecorder();
20689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
207dd172fce75b2a1c3cb3a5d3b3bbb5020b1ae8675James Dong    void        died();
20889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t    initCheck();
2094ca2c7c913f8bd4ada13aca56d36045d42d1e00fWu-cheng Li    status_t    setCamera(const sp<ICamera>& camera, const sp<ICameraRecordingProxy>& proxy);
21089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t    setPreviewSurface(const sp<Surface>& surface);
21189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t    setVideoSource(int vs);
21289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t    setAudioSource(int as);
21389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t    setOutputFormat(int of);
21489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t    setVideoEncoder(int ve);
21589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t    setAudioEncoder(int ae);
21689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t    setOutputFile(const char* path);
21789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t    setOutputFile(int fd, int64_t offset, int64_t length);
21889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t    setVideoSize(int width, int height);
21989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t    setVideoFrameRate(int frames_per_second);
220c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project    status_t    setParameters(const String8& params);
22189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t    setListener(const sp<MediaRecorderListener>& listener);
22289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t    prepare();
22389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t    getMaxAmplitude(int* max);
22489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t    start();
22589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t    stop();
22689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t    reset();
22789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t    init();
22889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t    close();
22989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t    release();
23089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    void        notify(int msg, int ext1, int ext2);
231b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    sp<ISurfaceTexture>     querySurfaceMediaSourceFromMediaServer();
23289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
23389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectprivate:
23489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    void                    doCleanUp();
23589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t                doReset();
23689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
23789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    sp<IMediaRecorder>          mMediaRecorder;
23889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    sp<MediaRecorderListener>   mListener;
239b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi
240b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    // Reference toISurfaceTexture
241b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    // for encoding GL Frames. That is useful only when the
242b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    // video source is set to VIDEO_SOURCE_GRALLOC_BUFFER
243b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    sp<ISurfaceTexture>         mSurfaceMediaSource;
244b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi
24589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    media_recorder_states       mCurrentState;
24689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    bool                        mIsAudioSourceSet;
24789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    bool                        mIsVideoSourceSet;
24889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    bool                        mIsAudioEncoderSet;
24989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    bool                        mIsVideoEncoderSet;
25089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    bool                        mIsOutputFileSet;
25189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    Mutex                       mLock;
25289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    Mutex                       mNotifyLock;
25389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project};
25489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
25589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project};  // namespace android
25689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
25789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#endif // ANDROID_MEDIARECORDER_H
258