1e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman/*
2e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman ** Copyright (C) 2008 The Android Open Source Project
3e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman **
4e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman ** Licensed under the Apache License, Version 2.0 (the "License");
5e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman ** you may not use this file except in compliance with the License.
6e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman ** You may obtain a copy of the License at
7e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman **
8e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman **     http://www.apache.org/licenses/LICENSE-2.0
9e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman **
10e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman ** Unless required by applicable law or agreed to in writing, software
11e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman ** distributed under the License is distributed on an "AS IS" BASIS,
12e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman ** See the License for the specific language governing permissions and
14e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman **
15e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman ** limitations under the License.
16e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman */
17e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
18e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#ifndef ANDROID_MEDIARECORDER_H
19e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#define ANDROID_MEDIARECORDER_H
20e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
21e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#include <utils/Log.h>
22e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#include <utils/threads.h>
23e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#include <utils/List.h>
24e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#include <utils/Errors.h>
25e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#include <media/IMediaRecorderClient.h>
26e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#include <media/IMediaDeathNotifier.h>
27609850df59219845a8c4ebe18a2687447ea570ccjiabin#include <media/MicrophoneInfo.h>
28e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
29e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramannamespace android {
30e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
31e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanclass Surface;
32e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanclass IMediaRecorder;
33e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanclass ICameraRecordingProxy;
34e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanclass IGraphicBufferProducer;
35e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanstruct PersistentSurface;
36e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanclass Surface;
37e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
38e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramannamespace hardware {
39e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanclass ICamera;
40e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman}
41e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
42e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramantypedef void (*media_completion_f)(status_t status, void *cookie);
43e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
44e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanenum video_source {
45e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    VIDEO_SOURCE_DEFAULT = 0,
46e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    VIDEO_SOURCE_CAMERA = 1,
47e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    VIDEO_SOURCE_SURFACE = 2,
48e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
49e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    VIDEO_SOURCE_LIST_END  // must be last - used to validate audio source type
50e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman};
51e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
52e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman//Please update media/java/android/media/MediaRecorder.java if the following is updated.
53e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanenum output_format {
54e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    OUTPUT_FORMAT_DEFAULT = 0,
55e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    OUTPUT_FORMAT_THREE_GPP = 1,
56e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    OUTPUT_FORMAT_MPEG_4 = 2,
57e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
58e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
59e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    OUTPUT_FORMAT_AUDIO_ONLY_START = 3, // Used in validating the output format.  Should be the
60e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                                        //  at the start of the audio only output formats.
61e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
62e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    /* These are audio only file formats */
63e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    OUTPUT_FORMAT_RAW_AMR = 3, //to be backward compatible
64e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    OUTPUT_FORMAT_AMR_NB = 3,
65e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    OUTPUT_FORMAT_AMR_WB = 4,
66e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    OUTPUT_FORMAT_AAC_ADIF = 5,
67e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    OUTPUT_FORMAT_AAC_ADTS = 6,
68e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
69e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    OUTPUT_FORMAT_AUDIO_ONLY_END = 7, // Used in validating the output format.  Should be the
70e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                                      //  at the end of the audio only output formats.
71e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
72e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    /* Stream over a socket, limited to a single stream */
73e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    OUTPUT_FORMAT_RTP_AVP = 7,
74e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
75e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    /* H.264/AAC data encapsulated in MPEG2/TS */
76e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    OUTPUT_FORMAT_MPEG2TS = 8,
77e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
78e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    /* VP8/VORBIS data in a WEBM container */
79e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    OUTPUT_FORMAT_WEBM = 9,
80e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
81fbc97c5266ec4e9fbe98db944f7aa99452299ae8Chong Zhang    /* HEIC data in a HEIF container */
82fbc97c5266ec4e9fbe98db944f7aa99452299ae8Chong Zhang    OUTPUT_FORMAT_HEIF = 10,
83fbc97c5266ec4e9fbe98db944f7aa99452299ae8Chong Zhang
84e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    OUTPUT_FORMAT_LIST_END // must be last - used to validate format type
85e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman};
86e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
87e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanenum audio_encoder {
88e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    AUDIO_ENCODER_DEFAULT = 0,
89e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    AUDIO_ENCODER_AMR_NB = 1,
90e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    AUDIO_ENCODER_AMR_WB = 2,
91e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    AUDIO_ENCODER_AAC = 3,
92e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    AUDIO_ENCODER_HE_AAC = 4,
93e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    AUDIO_ENCODER_AAC_ELD = 5,
94e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    AUDIO_ENCODER_VORBIS = 6,
95e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
96e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    AUDIO_ENCODER_LIST_END // must be the last - used to validate the audio encoder type
97e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman};
98e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
99e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanenum video_encoder {
100e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    VIDEO_ENCODER_DEFAULT = 0,
101e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    VIDEO_ENCODER_H263 = 1,
102e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    VIDEO_ENCODER_H264 = 2,
103e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    VIDEO_ENCODER_MPEG_4_SP = 3,
104e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    VIDEO_ENCODER_VP8 = 4,
105e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    VIDEO_ENCODER_HEVC = 5,
106e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
107e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    VIDEO_ENCODER_LIST_END // must be the last - used to validate the video encoder type
108e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman};
109e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
110e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman/*
111e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * The state machine of the media_recorder.
112e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman */
113e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanenum media_recorder_states {
114e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    // Error state.
115e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    MEDIA_RECORDER_ERROR                 =      0,
116e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
117e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    // Recorder was just created.
118e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    MEDIA_RECORDER_IDLE                  = 1 << 0,
119e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
120e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    // Recorder has been initialized.
121e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    MEDIA_RECORDER_INITIALIZED           = 1 << 1,
122e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
123e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    // Configuration of the recorder has been completed.
124e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    MEDIA_RECORDER_DATASOURCE_CONFIGURED = 1 << 2,
125e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
126e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    // Recorder is ready to start.
127e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    MEDIA_RECORDER_PREPARED              = 1 << 3,
128e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
129e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    // Recording is in progress.
130e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    MEDIA_RECORDER_RECORDING             = 1 << 4,
131e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman};
132e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
133e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// The "msg" code passed to the listener in notify.
134e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanenum media_recorder_event_type {
135e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    MEDIA_RECORDER_EVENT_LIST_START               = 1,
136e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    MEDIA_RECORDER_EVENT_ERROR                    = 1,
137e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    MEDIA_RECORDER_EVENT_INFO                     = 2,
138e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    MEDIA_RECORDER_EVENT_LIST_END                 = 99,
139e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
140e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    // Track related event types
141e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    MEDIA_RECORDER_TRACK_EVENT_LIST_START         = 100,
142e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    MEDIA_RECORDER_TRACK_EVENT_ERROR              = 100,
143e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    MEDIA_RECORDER_TRACK_EVENT_INFO               = 101,
144e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    MEDIA_RECORDER_TRACK_EVENT_LIST_END           = 1000,
145fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin
146fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin    MEDIA_RECORDER_AUDIO_ROUTING_CHANGED          = 10000,
147e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman};
148e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
149e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman/*
150e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * The (part of) "what" code passed to the listener in notify.
151e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * When the error or info type is track specific, the what has
152e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * the following layout:
153e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * the left-most 16-bit is meant for error or info type.
154e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * the right-most 4-bit is meant for track id.
155e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * the rest is reserved.
156e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman *
157e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * | track id | reserved |     error or info type     |
158e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * 31         28         16                           0
159e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman *
160e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman */
161e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanenum media_recorder_error_type {
162e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    MEDIA_RECORDER_ERROR_UNKNOWN                   = 1,
163e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
164e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    // Track related error type
165e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    MEDIA_RECORDER_TRACK_ERROR_LIST_START          = 100,
166e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    MEDIA_RECORDER_TRACK_ERROR_GENERAL             = 100,
167e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    MEDIA_RECORDER_ERROR_VIDEO_NO_SYNC_FRAME       = 200,
168e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    MEDIA_RECORDER_TRACK_ERROR_LIST_END            = 1000,
169e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman};
170e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
171e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// The codes are distributed as follow:
172e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman//   0xx: Reserved
173e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman//   8xx: General info/warning
174e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman//
175e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanenum media_recorder_info_type {
176e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    MEDIA_RECORDER_INFO_UNKNOWN                   = 1,
177e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
178e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    MEDIA_RECORDER_INFO_MAX_DURATION_REACHED      = 800,
179e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    MEDIA_RECORDER_INFO_MAX_FILESIZE_REACHED      = 801,
180e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    MEDIA_RECORDER_INFO_MAX_FILESIZE_APPROACHING  = 802,
181e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    MEDIA_RECORDER_INFO_NEXT_OUTPUT_FILE_STARTED  = 803,
182e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
183e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    // All track related informtional events start here
184e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    MEDIA_RECORDER_TRACK_INFO_LIST_START           = 1000,
185e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    MEDIA_RECORDER_TRACK_INFO_COMPLETION_STATUS    = 1000,
186e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    MEDIA_RECORDER_TRACK_INFO_PROGRESS_IN_TIME     = 1001,
187e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    MEDIA_RECORDER_TRACK_INFO_TYPE                 = 1002,
188e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    MEDIA_RECORDER_TRACK_INFO_DURATION_MS          = 1003,
189e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
190e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    // The time to measure the max chunk duration
191e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    MEDIA_RECORDER_TRACK_INFO_MAX_CHUNK_DUR_MS     = 1004,
192e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
193e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    MEDIA_RECORDER_TRACK_INFO_ENCODED_FRAMES       = 1005,
194e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
195e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    // The time to measure how well the audio and video
196e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    // track data is interleaved.
197e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    MEDIA_RECORDER_TRACK_INTER_CHUNK_TIME_MS       = 1006,
198e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
199e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    // The time to measure system response. Note that
200e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    // the delay does not include the intentional delay
201e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    // we use to eliminate the recording sound.
202e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    MEDIA_RECORDER_TRACK_INFO_INITIAL_DELAY_MS     = 1007,
203e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
204e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    // The time used to compensate for initial A/V sync.
205e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    MEDIA_RECORDER_TRACK_INFO_START_OFFSET_MS      = 1008,
206e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
207e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    // Total number of bytes of the media data.
208e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    MEDIA_RECORDER_TRACK_INFO_DATA_KBYTES          = 1009,
209e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
210e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    MEDIA_RECORDER_TRACK_INFO_LIST_END             = 2000,
211e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman};
212e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
213e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// ----------------------------------------------------------------------------
214e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// ref-counted object for callbacks
215e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanclass MediaRecorderListener: virtual public RefBase
216e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman{
217e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanpublic:
218e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    virtual void notify(int msg, int ext1, int ext2) = 0;
219e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman};
220e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
221e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanclass MediaRecorder : public BnMediaRecorderClient,
222e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                      public virtual IMediaDeathNotifier
223e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman{
224e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanpublic:
225e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    MediaRecorder(const String16& opPackageName);
226e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    ~MediaRecorder();
227e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
228e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    void        died();
229e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    status_t    initCheck();
230e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    status_t    setCamera(const sp<hardware::ICamera>& camera,
231e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman            const sp<ICameraRecordingProxy>& proxy);
232e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    status_t    setPreviewSurface(const sp<IGraphicBufferProducer>& surface);
233e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    status_t    setVideoSource(int vs);
234e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    status_t    setAudioSource(int as);
235e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    status_t    setOutputFormat(int of);
236e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    status_t    setVideoEncoder(int ve);
237e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    status_t    setAudioEncoder(int ae);
238e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    status_t    setOutputFile(int fd);
239e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    status_t    setNextOutputFile(int fd);
240e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    status_t    setVideoSize(int width, int height);
241e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    status_t    setVideoFrameRate(int frames_per_second);
242e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    status_t    setParameters(const String8& params);
243e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    status_t    setListener(const sp<MediaRecorderListener>& listener);
244e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    status_t    setClientName(const String16& clientName);
245e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    status_t    prepare();
246e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    status_t    getMaxAmplitude(int* max);
247e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    status_t    start();
248e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    status_t    stop();
249e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    status_t    reset();
250e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    status_t    pause();
251e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    status_t    resume();
252e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    status_t    init();
253e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    status_t    close();
254e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    status_t    release();
255e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    void        notify(int msg, int ext1, int ext2);
256e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    status_t    setInputSurface(const sp<PersistentSurface>& surface);
257e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    sp<IGraphicBufferProducer>     querySurfaceMediaSourceFromMediaServer();
258e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    status_t    getMetrics(Parcel *reply);
259fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin    status_t    setInputDevice(audio_port_handle_t deviceId);
260fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin    status_t    getRoutedDeviceId(audio_port_handle_t *deviceId);
261fec2f93fae282ad10bbb5e3fcce9f60eff2cfb48jiabin    status_t    enableAudioDeviceCallback(bool enabled);
262609850df59219845a8c4ebe18a2687447ea570ccjiabin    status_t    getActiveMicrophones(std::vector<media::MicrophoneInfo>* activeMicrophones);
263e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
264e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanprivate:
265e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    void                    doCleanUp();
266e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    status_t                doReset();
267e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
268e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    sp<IMediaRecorder>          mMediaRecorder;
269e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    sp<MediaRecorderListener>   mListener;
270e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
271e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    // Reference to IGraphicBufferProducer
272e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    // for encoding GL Frames. That is useful only when the
273e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    // video source is set to VIDEO_SOURCE_GRALLOC_BUFFER
274e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    sp<IGraphicBufferProducer>  mSurfaceMediaSource;
275e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
276e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    media_recorder_states       mCurrentState;
277e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    bool                        mIsAudioSourceSet;
278e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    bool                        mIsVideoSourceSet;
279e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    bool                        mIsAudioEncoderSet;
280e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    bool                        mIsVideoEncoderSet;
281e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    bool                        mIsOutputFileSet;
282e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    Mutex                       mLock;
283e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    Mutex                       mNotifyLock;
284e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman};
285e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
286e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman};  // namespace android
287e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
288e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#endif // ANDROID_MEDIARECORDER_H
289