19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ** Copyright (C) 2008 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project **
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ** Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ** you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ** You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project **
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project **     http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project **
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ** Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ** distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ** See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project **
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ** limitations under the License.
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifndef ANDROID_MEDIARECORDER_H
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define ANDROID_MEDIARECORDER_H
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
213b4062eeb01be33951ba214e027da523cf09f8b1Mathias Agopian#include <utils/Log.h>
223b4062eeb01be33951ba214e027da523cf09f8b1Mathias Agopian#include <utils/threads.h>
233b4062eeb01be33951ba214e027da523cf09f8b1Mathias Agopian#include <utils/List.h>
243b4062eeb01be33951ba214e027da523cf09f8b1Mathias Agopian#include <utils/Errors.h>
25fe1bafecdecd49533c46521057c7c9eeb788d0faJames Dong#include <media/IMediaRecorderClient.h>
2634bbc22cbca0004475788f06be2300fef23c6a52James Dong#include <media/IMediaDeathNotifier.h>
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnamespace android {
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass Surface;
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass IMediaRecorder;
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass ICamera;
3342419ce28a09eb63e29a8fef87e6f5534f41902fWu-cheng Liclass ICameraRecordingProxy;
34897e27bc75886e44d2f9f09155127f401c4173eaPannag Sanketiclass ISurfaceTexture;
35897e27bc75886e44d2f9f09155127f401c4173eaPannag Sanketiclass SurfaceTextureClient;
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttypedef void (*media_completion_f)(status_t status, void *cookie);
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectenum video_source {
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    VIDEO_SOURCE_DEFAULT = 0,
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    VIDEO_SOURCE_CAMERA = 1,
42897e27bc75886e44d2f9f09155127f401c4173eaPannag Sanketi    VIDEO_SOURCE_GRALLOC_BUFFER = 2,
432bcda90c0234f67f210a96f195b355493ca7d1ffJianhong Jiang
442bcda90c0234f67f210a96f195b355493ca7d1ffJianhong Jiang    VIDEO_SOURCE_LIST_END  // must be last - used to validate audio source type
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
472bcda90c0234f67f210a96f195b355493ca7d1ffJianhong Jiang//Please update media/java/android/media/MediaRecorder.java if the following is updated.
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectenum output_format {
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    OUTPUT_FORMAT_DEFAULT = 0,
502bcda90c0234f67f210a96f195b355493ca7d1ffJianhong Jiang    OUTPUT_FORMAT_THREE_GPP = 1,
512bcda90c0234f67f210a96f195b355493ca7d1ffJianhong Jiang    OUTPUT_FORMAT_MPEG_4 = 2,
522bcda90c0234f67f210a96f195b355493ca7d1ffJianhong Jiang
532bcda90c0234f67f210a96f195b355493ca7d1ffJianhong Jiang
542bcda90c0234f67f210a96f195b355493ca7d1ffJianhong Jiang    OUTPUT_FORMAT_AUDIO_ONLY_START = 3, // Used in validating the output format.  Should be the
552bcda90c0234f67f210a96f195b355493ca7d1ffJianhong Jiang                                        //  at the start of the audio only output formats.
562bcda90c0234f67f210a96f195b355493ca7d1ffJianhong Jiang
572bcda90c0234f67f210a96f195b355493ca7d1ffJianhong Jiang    /* These are audio only file formats */
582bcda90c0234f67f210a96f195b355493ca7d1ffJianhong Jiang    OUTPUT_FORMAT_RAW_AMR = 3, //to be backward compatible
592bcda90c0234f67f210a96f195b355493ca7d1ffJianhong Jiang    OUTPUT_FORMAT_AMR_NB = 3,
602bcda90c0234f67f210a96f195b355493ca7d1ffJianhong Jiang    OUTPUT_FORMAT_AMR_WB = 4,
612bcda90c0234f67f210a96f195b355493ca7d1ffJianhong Jiang    OUTPUT_FORMAT_AAC_ADIF = 5,
622bcda90c0234f67f210a96f195b355493ca7d1ffJianhong Jiang    OUTPUT_FORMAT_AAC_ADTS = 6,
632bcda90c0234f67f210a96f195b355493ca7d1ffJianhong Jiang
6457648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber    /* Stream over a socket, limited to a single stream */
6557648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber    OUTPUT_FORMAT_RTP_AVP = 7,
6657648e4eec7dd2593af467877bc7cce4aa654759Andreas Huber
679adf466021d37a5062d7d3361e14bfd9e7ffeba6Andreas Huber    /* H.264/AAC data encapsulated in MPEG2/TS */
689adf466021d37a5062d7d3361e14bfd9e7ffeba6Andreas Huber    OUTPUT_FORMAT_MPEG2TS = 8,
699adf466021d37a5062d7d3361e14bfd9e7ffeba6Andreas Huber
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    OUTPUT_FORMAT_LIST_END // must be last - used to validate format type
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectenum audio_encoder {
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    AUDIO_ENCODER_DEFAULT = 0,
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    AUDIO_ENCODER_AMR_NB = 1,
762bcda90c0234f67f210a96f195b355493ca7d1ffJianhong Jiang    AUDIO_ENCODER_AMR_WB = 2,
772bcda90c0234f67f210a96f195b355493ca7d1ffJianhong Jiang    AUDIO_ENCODER_AAC = 3,
782bcda90c0234f67f210a96f195b355493ca7d1ffJianhong Jiang    AUDIO_ENCODER_AAC_PLUS = 4,
792bcda90c0234f67f210a96f195b355493ca7d1ffJianhong Jiang    AUDIO_ENCODER_EAAC_PLUS = 5,
802bcda90c0234f67f210a96f195b355493ca7d1ffJianhong Jiang
812bcda90c0234f67f210a96f195b355493ca7d1ffJianhong Jiang    AUDIO_ENCODER_LIST_END // must be the last - used to validate the audio encoder type
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectenum video_encoder {
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    VIDEO_ENCODER_DEFAULT = 0,
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    VIDEO_ENCODER_H263 = 1,
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    VIDEO_ENCODER_H264 = 2,
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    VIDEO_ENCODER_MPEG_4_SP = 3,
892bcda90c0234f67f210a96f195b355493ca7d1ffJianhong Jiang
902bcda90c0234f67f210a96f195b355493ca7d1ffJianhong Jiang    VIDEO_ENCODER_LIST_END // must be the last - used to validate the video encoder type
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
947fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong * The state machine of the media_recorder.
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectenum media_recorder_states {
977fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong    // Error state.
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    MEDIA_RECORDER_ERROR                 =      0,
997fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong
1007fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong    // Recorder was just created.
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    MEDIA_RECORDER_IDLE                  = 1 << 0,
1027fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong
1037fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong    // Recorder has been initialized.
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    MEDIA_RECORDER_INITIALIZED           = 1 << 1,
1057fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong
1067fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong    // Configuration of the recorder has been completed.
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    MEDIA_RECORDER_DATASOURCE_CONFIGURED = 1 << 2,
1087fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong
1097fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong    // Recorder is ready to start.
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    MEDIA_RECORDER_PREPARED              = 1 << 3,
1117fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong
1127fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong    // Recording is in progress.
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    MEDIA_RECORDER_RECORDING             = 1 << 4,
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// The "msg" code passed to the listener in notify.
117ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Projectenum media_recorder_event_type {
1187fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong    MEDIA_RECORDER_EVENT_LIST_START               = 1,
119ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project    MEDIA_RECORDER_EVENT_ERROR                    = 1,
1207fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong    MEDIA_RECORDER_EVENT_INFO                     = 2,
1217fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong    MEDIA_RECORDER_EVENT_LIST_END                 = 99,
1227fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong
1237fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong    // Track related event types
1247fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong    MEDIA_RECORDER_TRACK_EVENT_LIST_START         = 100,
1257fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong    MEDIA_RECORDER_TRACK_EVENT_ERROR              = 100,
1267fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong    MEDIA_RECORDER_TRACK_EVENT_INFO               = 101,
1277fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong    MEDIA_RECORDER_TRACK_EVENT_LIST_END           = 1000,
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1307fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong/*
1317fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong * The (part of) "what" code passed to the listener in notify.
1327fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong * When the error or info type is track specific, the what has
1337fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong * the following layout:
1347fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong * the left-most 16-bit is meant for error or info type.
1357fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong * the right-most 4-bit is meant for track id.
1367fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong * the rest is reserved.
1377fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong *
1387fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong * | track id | reserved |     error or info type     |
1397fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong * 31         28         16                           0
1407fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong *
1417fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong */
142ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Projectenum media_recorder_error_type {
1437fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong    MEDIA_RECORDER_ERROR_UNKNOWN                   = 1,
1447fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong
1457fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong    // Track related error type
1467fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong    MEDIA_RECORDER_TRACK_ERROR_LIST_START          = 100,
1477fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong    MEDIA_RECORDER_TRACK_ERROR_GENERAL             = 100,
1487fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong    MEDIA_RECORDER_ERROR_VIDEO_NO_SYNC_FRAME       = 200,
1497fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong    MEDIA_RECORDER_TRACK_ERROR_LIST_END            = 1000,
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
152ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project// The codes are distributed as follow:
153ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project//   0xx: Reserved
154ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project//   8xx: General info/warning
1552bcda90c0234f67f210a96f195b355493ca7d1ffJianhong Jiang//
156ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Projectenum media_recorder_info_type {
157ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project    MEDIA_RECORDER_INFO_UNKNOWN                   = 1,
1587fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong
159105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project    MEDIA_RECORDER_INFO_MAX_DURATION_REACHED      = 800,
16068510e60f9671ee08f3cc18bd93400cafb7703bbJames Dong    MEDIA_RECORDER_INFO_MAX_FILESIZE_REACHED      = 801,
1617fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong
1627fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong    // All track related informtional events start here
1637fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong    MEDIA_RECORDER_TRACK_INFO_LIST_START           = 1000,
1647fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong    MEDIA_RECORDER_TRACK_INFO_COMPLETION_STATUS    = 1000,
1657fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong    MEDIA_RECORDER_TRACK_INFO_PROGRESS_IN_TIME     = 1001,
166ed742306b3d24ba1c2ca3fea0cc2ada8534a18b0James Dong    MEDIA_RECORDER_TRACK_INFO_TYPE                 = 1002,
167ed742306b3d24ba1c2ca3fea0cc2ada8534a18b0James Dong    MEDIA_RECORDER_TRACK_INFO_DURATION_MS          = 1003,
1683aea037dd8c47fd5906b0d8409da7e7243fcb7d4James Dong
1693aea037dd8c47fd5906b0d8409da7e7243fcb7d4James Dong    // The time to measure the max chunk duration
170ed742306b3d24ba1c2ca3fea0cc2ada8534a18b0James Dong    MEDIA_RECORDER_TRACK_INFO_MAX_CHUNK_DUR_MS     = 1004,
1713aea037dd8c47fd5906b0d8409da7e7243fcb7d4James Dong
172ed742306b3d24ba1c2ca3fea0cc2ada8534a18b0James Dong    MEDIA_RECORDER_TRACK_INFO_ENCODED_FRAMES       = 1005,
1733aea037dd8c47fd5906b0d8409da7e7243fcb7d4James Dong
1743aea037dd8c47fd5906b0d8409da7e7243fcb7d4James Dong    // The time to measure how well the audio and video
1753aea037dd8c47fd5906b0d8409da7e7243fcb7d4James Dong    // track data is interleaved.
1763aea037dd8c47fd5906b0d8409da7e7243fcb7d4James Dong    MEDIA_RECORDER_TRACK_INTER_CHUNK_TIME_MS       = 1006,
1773aea037dd8c47fd5906b0d8409da7e7243fcb7d4James Dong
1783aea037dd8c47fd5906b0d8409da7e7243fcb7d4James Dong    // The time to measure system response. Note that
1793aea037dd8c47fd5906b0d8409da7e7243fcb7d4James Dong    // the delay does not include the intentional delay
1803aea037dd8c47fd5906b0d8409da7e7243fcb7d4James Dong    // we use to eliminate the recording sound.
1813aea037dd8c47fd5906b0d8409da7e7243fcb7d4James Dong    MEDIA_RECORDER_TRACK_INFO_INITIAL_DELAY_MS     = 1007,
1823aea037dd8c47fd5906b0d8409da7e7243fcb7d4James Dong
1833aea037dd8c47fd5906b0d8409da7e7243fcb7d4James Dong    // The time used to compensate for initial A/V sync.
1843aea037dd8c47fd5906b0d8409da7e7243fcb7d4James Dong    MEDIA_RECORDER_TRACK_INFO_START_OFFSET_MS      = 1008,
1853aea037dd8c47fd5906b0d8409da7e7243fcb7d4James Dong
1860f32fb3ecfdfaa03acf880a356629d43da3fe2feJames Dong    // Total number of bytes of the media data.
1870f32fb3ecfdfaa03acf880a356629d43da3fe2feJames Dong    MEDIA_RECORDER_TRACK_INFO_DATA_KBYTES          = 1009,
1880f32fb3ecfdfaa03acf880a356629d43da3fe2feJames Dong
1897fc8b4f5ff88da7011f2d04c8f019008cc23bd0fJames Dong    MEDIA_RECORDER_TRACK_INFO_LIST_END             = 2000,
190ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project};
191ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ----------------------------------------------------------------------------
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ref-counted object for callbacks
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass MediaRecorderListener: virtual public RefBase
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic:
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual void notify(int msg, int ext1, int ext2) = 0;
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
200fe1bafecdecd49533c46521057c7c9eeb788d0faJames Dongclass MediaRecorder : public BnMediaRecorderClient,
20134bbc22cbca0004475788f06be2300fef23c6a52James Dong                      public virtual IMediaDeathNotifier
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic:
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    MediaRecorder();
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ~MediaRecorder();
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
20734bbc22cbca0004475788f06be2300fef23c6a52James Dong    void        died();
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    status_t    initCheck();
20942419ce28a09eb63e29a8fef87e6f5534f41902fWu-cheng Li    status_t    setCamera(const sp<ICamera>& camera, const sp<ICameraRecordingProxy>& proxy);
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    status_t    setPreviewSurface(const sp<Surface>& surface);
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    status_t    setVideoSource(int vs);
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    status_t    setAudioSource(int as);
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    status_t    setOutputFormat(int of);
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    status_t    setVideoEncoder(int ve);
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    status_t    setAudioEncoder(int ae);
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    status_t    setOutputFile(const char* path);
2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    status_t    setOutputFile(int fd, int64_t offset, int64_t length);
2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    status_t    setVideoSize(int width, int height);
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    status_t    setVideoFrameRate(int frames_per_second);
220ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project    status_t    setParameters(const String8& params);
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    status_t    setListener(const sp<MediaRecorderListener>& listener);
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    status_t    prepare();
2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    status_t    getMaxAmplitude(int* max);
2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    status_t    start();
2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    status_t    stop();
2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    status_t    reset();
2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    status_t    init();
2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    status_t    close();
2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    status_t    release();
2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void        notify(int msg, int ext1, int ext2);
231897e27bc75886e44d2f9f09155127f401c4173eaPannag Sanketi    sp<ISurfaceTexture>     querySurfaceMediaSourceFromMediaServer();
2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate:
2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void                    doCleanUp();
2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    status_t                doReset();
2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    sp<IMediaRecorder>          mMediaRecorder;
2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    sp<MediaRecorderListener>   mListener;
239897e27bc75886e44d2f9f09155127f401c4173eaPannag Sanketi
240897e27bc75886e44d2f9f09155127f401c4173eaPannag Sanketi    // Reference toISurfaceTexture
241897e27bc75886e44d2f9f09155127f401c4173eaPannag Sanketi    // for encoding GL Frames. That is useful only when the
242897e27bc75886e44d2f9f09155127f401c4173eaPannag Sanketi    // video source is set to VIDEO_SOURCE_GRALLOC_BUFFER
243897e27bc75886e44d2f9f09155127f401c4173eaPannag Sanketi    sp<ISurfaceTexture>         mSurfaceMediaSource;
244897e27bc75886e44d2f9f09155127f401c4173eaPannag Sanketi
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    media_recorder_states       mCurrentState;
2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool                        mIsAudioSourceSet;
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool                        mIsVideoSourceSet;
2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool                        mIsAudioEncoderSet;
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool                        mIsVideoEncoderSet;
2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    bool                        mIsOutputFileSet;
2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Mutex                       mLock;
2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Mutex                       mNotifyLock;
2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};  // namespace android
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif // ANDROID_MEDIARECORDER_H
258