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