MediaRecorderClient.cpp revision c048cae0367db6fbb4fe1127be5011910713d4ad
189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project/*
289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** Copyright 2008, HTC Inc.
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 ** limitations under the License.
1589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */
1689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
1789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project//#define LOG_NDEBUG 0
1889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#define LOG_TAG "MediaRecorderService"
1989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <utils/Log.h>
2089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
2189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <sys/types.h>
2289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <sys/stat.h>
2389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <dirent.h>
2489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <unistd.h>
2589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <string.h>
2689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <cutils/atomic.h>
2789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <android_runtime/ActivityManager.h>
2889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <utils/IPCThreadState.h>
2989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <utils/IServiceManager.h>
3089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <utils/MemoryHeapBase.h>
3189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <utils/MemoryBase.h>
3289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <media/PVMediaRecorder.h>
3389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
3489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include "MediaRecorderClient.h"
3589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
3689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectnamespace android {
3789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
3889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorderClient::setCamera(const sp<ICamera>& camera)
3989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
4089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    LOGV("setCamera");
4189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    Mutex::Autolock lock(mLock);
4289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    if (mRecorder == NULL) {
4389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGE("recorder is not initialized");
4489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return NO_INIT;
4589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
4689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    return mRecorder->setCamera(camera);
4789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}
4889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
4989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorderClient::setPreviewSurface(const sp<ISurface>& surface)
5089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
5189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    LOGV("setPreviewSurface");
5289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    Mutex::Autolock lock(mLock);
5389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    if (mRecorder == NULL) {
5489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGE("recorder is not initialized");
5589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return NO_INIT;
5689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
5789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    return mRecorder->setPreviewSurface(surface);
5889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}
5989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
6089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorderClient::setVideoSource(int vs)
6189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
6289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    LOGV("setVideoSource(%d)", vs);
6389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    Mutex::Autolock lock(mLock);
6489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    if (mRecorder == NULL)	{
6589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGE("recorder is not initialized");
6689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
6789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    return mRecorder->setVideoSource((video_source)vs);
6889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}
6989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
7089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorderClient::setAudioSource(int as)
7189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
7289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    LOGV("setAudioSource(%d)", as);
7389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    Mutex::Autolock lock(mLock);
7489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    if (mRecorder == NULL)  {
7589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGE("recorder is not initialized");
7689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
7789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    return mRecorder->setAudioSource((audio_source)as);
7889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}
7989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
8089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorderClient::setOutputFormat(int of)
8189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
8289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    LOGV("setOutputFormat(%d)", of);
8389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    Mutex::Autolock lock(mLock);
8489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    if (mRecorder == NULL) {
8589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGE("recorder is not initialized");
8689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return NO_INIT;
8789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
8889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    return mRecorder->setOutputFormat((output_format)of);
8989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}
9089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
9189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorderClient::setVideoEncoder(int ve)
9289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
9389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    LOGV("setVideoEncoder(%d)", ve);
9489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    Mutex::Autolock lock(mLock);
9589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    if (mRecorder == NULL) {
9689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGE("recorder is not initialized");
9789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return NO_INIT;
9889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
9989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    return mRecorder->setVideoEncoder((video_encoder)ve);
10089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}
10189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
10289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorderClient::setAudioEncoder(int ae)
10389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
10489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    LOGV("setAudioEncoder(%d)", ae);
10589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    Mutex::Autolock lock(mLock);
10689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    if (mRecorder == NULL) {
10789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGE("recorder is not initialized");
10889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return NO_INIT;
10989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
11089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    return mRecorder->setAudioEncoder((audio_encoder)ae);
11189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}
11289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
11389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorderClient::setOutputFile(const char* path)
11489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
11589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    LOGV("setOutputFile(%s)", path);
11689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    Mutex::Autolock lock(mLock);
11789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    if (mRecorder == NULL) {
11889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGE("recorder is not initialized");
11989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return NO_INIT;
12089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
12189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    return mRecorder->setOutputFile(path);
12289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}
12389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
12489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorderClient::setOutputFile(int fd, int64_t offset, int64_t length)
12589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
12689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    LOGV("setOutputFile(%d, %lld, %lld)", fd, offset, length);
12789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    Mutex::Autolock lock(mLock);
12889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    if (mRecorder == NULL) {
12989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGE("recorder is not initialized");
13089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return NO_INIT;
13189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
13289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    return mRecorder->setOutputFile(fd, offset, length);
13389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}
13489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
13589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorderClient::setVideoSize(int width, int height)
13689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
13789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    LOGV("setVideoSize(%dx%d)", width, height);
13889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    Mutex::Autolock lock(mLock);
13989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    if (mRecorder == NULL) {
14089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGE("recorder is not initialized");
14189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return NO_INIT;
14289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
14389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    return mRecorder->setVideoSize(width, height);
14489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}
14589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
14689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorderClient::setVideoFrameRate(int frames_per_second)
14789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
14889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    LOGV("setVideoFrameRate(%d)", frames_per_second);
14989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    Mutex::Autolock lock(mLock);
15089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    if (mRecorder == NULL) {
15189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGE("recorder is not initialized");
15289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return NO_INIT;
15389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
15489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    return mRecorder->setVideoFrameRate(frames_per_second);
15589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}
15689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
157c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Projectstatus_t MediaRecorderClient::setParameters(const String8& params) {
158c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project    LOGV("setParameters(%s)", params.string());
159c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project    Mutex::Autolock lock(mLock);
160c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project    if (mRecorder == NULL) {
161c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project        LOGE("recorder is not initialized");
162c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project        return NO_INIT;
163c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project    }
164c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project    return mRecorder->setParameters(params);
165c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project}
166c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project
16789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorderClient::prepare()
16889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
16989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    LOGV("prepare");
17089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    Mutex::Autolock lock(mLock);
17189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    if (mRecorder == NULL) {
17289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGE("recorder is not initialized");
17389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return NO_INIT;
17489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
17589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    return mRecorder->prepare();
17689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}
17789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
17889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
17989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorderClient::getMaxAmplitude(int* max)
18089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
18189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    LOGV("getMaxAmplitude");
18289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    Mutex::Autolock lock(mLock);
18389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    if (mRecorder == NULL) {
18489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGE("recorder is not initialized");
18589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return NO_INIT;
18689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
18789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    return mRecorder->getMaxAmplitude(max);
18889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}
18989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
19089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorderClient::start()
19189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
19289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    LOGV("start");
19389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    Mutex::Autolock lock(mLock);
19489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    if (mRecorder == NULL) {
19589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGE("recorder is not initialized");
19689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return NO_INIT;
19789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
19889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    return mRecorder->start();
19989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
20089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}
20189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
20289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorderClient::stop()
20389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
20489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    LOGV("stop");
20589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    Mutex::Autolock lock(mLock);
20689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    if (mRecorder == NULL) {
20789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGE("recorder is not initialized");
20889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return NO_INIT;
20989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
21089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    return mRecorder->stop();
21189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}
21289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
21389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorderClient::init()
21489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
21589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    LOGV("init");
21689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    Mutex::Autolock lock(mLock);
21789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    if (mRecorder == NULL) {
21889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGE("recorder is not initialized");
21989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return NO_INIT;
22089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
22189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    return mRecorder->init();
22289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}
22389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
22489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorderClient::close()
22589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
22689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    LOGV("close");
22789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    Mutex::Autolock lock(mLock);
22889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    if (mRecorder == NULL) {
22989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGE("recorder is not initialized");
23089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return NO_INIT;
23189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
23289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    return mRecorder->close();
23389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}
23489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
23589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
23689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorderClient::reset()
23789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
23889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    LOGV("reset");
23989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    Mutex::Autolock lock(mLock);
24089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    if (mRecorder == NULL) {
24189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGE("recorder is not initialized");
24289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return NO_INIT;
24389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
24489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    return mRecorder->reset();
24589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}
24689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
24789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorderClient::release()
24889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
24989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    LOGV("release");
25089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    Mutex::Autolock lock(mLock);
25189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    if (mRecorder != NULL) {
25289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        delete mRecorder;
25389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        mRecorder = NULL;
25489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
25589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    return NO_ERROR;
25689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}
25789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
25889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source ProjectMediaRecorderClient::MediaRecorderClient(pid_t pid)
25989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
26089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    LOGV("Client constructor");
26189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    mPid = pid;
26289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    mRecorder = new PVMediaRecorder();
26389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}
26489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
26589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source ProjectMediaRecorderClient::~MediaRecorderClient()
26689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
26789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    LOGV("Client destructor");
26889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    release();
26989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}
27089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
27189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorderClient::setListener(const sp<IMediaPlayerClient>& listener)
27289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
27389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    LOGV("setListener");
27489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    Mutex::Autolock lock(mLock);
27589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    if (mRecorder == NULL) {
27689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        LOGE("recorder is not initialized");
27789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        return NO_INIT;
27889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    }
27989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    return mRecorder->setListener(listener);
28089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}
28189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
28289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; // namespace android
28389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
284