mediarecorder.cpp revision 4b79168835965cf0fc41ebe2a367e22b4cb20d08
189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project/* 289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** 389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** Copyright (c) 2008 The Android Open Source Project 489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** 589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** Licensed under the Apache License, Version 2.0 (the "License"); 689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** you may not use this file except in compliance with the License. 789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** You may obtain a copy of the License at 889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** 989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** http://www.apache.org/licenses/LICENSE-2.0 1089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** 1189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** Unless required by applicable law or agreed to in writing, software 1289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** distributed under the License is distributed on an "AS IS" BASIS, 1389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** See the License for the specific language governing permissions and 1589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** limitations under the License. 1689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 1789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 1889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project//#define LOG_NDEBUG 0 1989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#define LOG_TAG "MediaRecorder" 2089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <utils/Log.h> 213cf613507f1e2f7bd932d921a6e222e426fd3be4Mathias Agopian#include <surfaceflinger/Surface.h> 2289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <media/mediarecorder.h> 237562408b2261d38415453378b6188f74fda99d88Mathias Agopian#include <binder/IServiceManager.h> 24c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project#include <utils/String8.h> 2589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <media/IMediaPlayerService.h> 2689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <media/IMediaRecorder.h> 27dd172fce75b2a1c3cb3a5d3b3bbb5020b1ae8675James Dong#include <media/mediaplayer.h> // for MEDIA_ERROR_SERVER_DIED 2889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectnamespace android { 3089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 3189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorder::setCamera(const sp<ICamera>& camera) 3289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 3389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGV("setCamera(%p)", camera.get()); 3489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if(mMediaRecorder == NULL) { 3589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("media recorder is not initialized yet"); 3689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 3789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 3889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (!(mCurrentState & MEDIA_RECORDER_IDLE)) { 3989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("setCamera called in an invalid state(%d)", mCurrentState); 4089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 4189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 4289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 4389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t ret = mMediaRecorder->setCamera(camera); 4489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (OK != ret) { 4589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGV("setCamera failed: %d", ret); 4689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mCurrentState = MEDIA_RECORDER_ERROR; 478555d0867c3e8fe6cc5c7ad40af557fe6b92fa72The Android Open Source Project return ret; 4889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 4989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return ret; 5089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 5189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 5289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorder::setPreviewSurface(const sp<Surface>& surface) 5389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 5489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGV("setPreviewSurface(%p)", surface.get()); 5589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if(mMediaRecorder == NULL) { 5689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("media recorder is not initialized yet"); 5789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 5889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 5989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (!(mCurrentState & MEDIA_RECORDER_DATASOURCE_CONFIGURED)) { 6089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("setPreviewSurface called in an invalid state(%d)", mCurrentState); 6189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 6289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 6389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (!mIsVideoSourceSet) { 6489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("try to set preview surface without setting the video source first"); 6589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 6689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 6789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 684b79168835965cf0fc41ebe2a367e22b4cb20d08Jamie Gennis status_t ret = mMediaRecorder->setPreviewSurface(surface); 6989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (OK != ret) { 7089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGV("setPreviewSurface failed: %d", ret); 7189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mCurrentState = MEDIA_RECORDER_ERROR; 728555d0867c3e8fe6cc5c7ad40af557fe6b92fa72The Android Open Source Project return ret; 7389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 7489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return ret; 7589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 7689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 7789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorder::init() 7889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 7989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGV("init"); 8089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if(mMediaRecorder == NULL) { 8189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("media recorder is not initialized yet"); 8289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 8389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 8489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (!(mCurrentState & MEDIA_RECORDER_IDLE)) { 8589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("init called in an invalid state(%d)", mCurrentState); 8689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 8789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 8889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 8989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t ret = mMediaRecorder->init(); 9089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (OK != ret) { 9189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGV("init failed: %d", ret); 9289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mCurrentState = MEDIA_RECORDER_ERROR; 938555d0867c3e8fe6cc5c7ad40af557fe6b92fa72The Android Open Source Project return ret; 9489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 9589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 9689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ret = mMediaRecorder->setListener(this); 9789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (OK != ret) { 9889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGV("setListener failed: %d", ret); 9989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mCurrentState = MEDIA_RECORDER_ERROR; 1008555d0867c3e8fe6cc5c7ad40af557fe6b92fa72The Android Open Source Project return ret; 10189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 10289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 10389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mCurrentState = MEDIA_RECORDER_INITIALIZED; 10489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return ret; 10589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 10689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 10789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorder::setVideoSource(int vs) 10889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 10989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGV("setVideoSource(%d)", vs); 11089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if(mMediaRecorder == NULL) { 11189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("media recorder is not initialized yet"); 11289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 11389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 11489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (mIsVideoSourceSet) { 11589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("video source has already been set"); 11689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 11789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 11889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (mCurrentState & MEDIA_RECORDER_IDLE) { 11989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGV("Call init() since the media recorder is not initialized yet"); 12089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t ret = init(); 12189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (OK != ret) { 12289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return ret; 12389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 12489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 12589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (!(mCurrentState & MEDIA_RECORDER_INITIALIZED)) { 12689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("setVideoSource called in an invalid state(%d)", mCurrentState); 12789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 12889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 12989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 13089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t ret = mMediaRecorder->setVideoSource(vs); 13189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (OK != ret) { 13289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGV("setVideoSource failed: %d", ret); 13389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mCurrentState = MEDIA_RECORDER_ERROR; 1348555d0867c3e8fe6cc5c7ad40af557fe6b92fa72The Android Open Source Project return ret; 13589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 13689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mIsVideoSourceSet = true; 13789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return ret; 13889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 13989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 14089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorder::setAudioSource(int as) 14189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 14289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGV("setAudioSource(%d)", as); 14389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if(mMediaRecorder == NULL) { 14489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("media recorder is not initialized yet"); 14589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 14689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 14789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (mCurrentState & MEDIA_RECORDER_IDLE) { 14889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGV("Call init() since the media recorder is not initialized yet"); 14989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t ret = init(); 15089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (OK != ret) { 15189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return ret; 15289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 15389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 15489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (mIsAudioSourceSet) { 15589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("audio source has already been set"); 15689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 15789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 15889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (!(mCurrentState & MEDIA_RECORDER_INITIALIZED)) { 15989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("setAudioSource called in an invalid state(%d)", mCurrentState); 16089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 16189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 16289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 16389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t ret = mMediaRecorder->setAudioSource(as); 16489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (OK != ret) { 16589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGV("setAudioSource failed: %d", ret); 16689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mCurrentState = MEDIA_RECORDER_ERROR; 1678555d0867c3e8fe6cc5c7ad40af557fe6b92fa72The Android Open Source Project return ret; 16889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 16989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mIsAudioSourceSet = true; 17089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return ret; 17189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 17289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 17389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorder::setOutputFormat(int of) 17489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 17589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGV("setOutputFormat(%d)", of); 17689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if(mMediaRecorder == NULL) { 17789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("media recorder is not initialized yet"); 17889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 17989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 18089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (!(mCurrentState & MEDIA_RECORDER_INITIALIZED)) { 18189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("setOutputFormat called in an invalid state: %d", mCurrentState); 18289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 18389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 18439ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber if (mIsVideoSourceSet && of >= OUTPUT_FORMAT_AUDIO_ONLY_START && of != OUTPUT_FORMAT_RTP_AVP) { //first non-video output format 18589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("output format (%d) is meant for audio recording only and incompatible with video recording", of); 18689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 18789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 18889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 18989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t ret = mMediaRecorder->setOutputFormat(of); 19089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (OK != ret) { 19189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("setOutputFormat failed: %d", ret); 19289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mCurrentState = MEDIA_RECORDER_ERROR; 1938555d0867c3e8fe6cc5c7ad40af557fe6b92fa72The Android Open Source Project return ret; 19489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 19589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mCurrentState = MEDIA_RECORDER_DATASOURCE_CONFIGURED; 19689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return ret; 19789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 19889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 19989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorder::setVideoEncoder(int ve) 20089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 20189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGV("setVideoEncoder(%d)", ve); 20289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if(mMediaRecorder == NULL) { 20389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("media recorder is not initialized yet"); 20489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 20589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 20689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (!mIsVideoSourceSet) { 20789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("try to set the video encoder without setting the video source first"); 20889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 20989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 21089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (mIsVideoEncoderSet) { 21189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("video encoder has already been set"); 21289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 21389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 21489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (!(mCurrentState & MEDIA_RECORDER_DATASOURCE_CONFIGURED)) { 21589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("setVideoEncoder called in an invalid state(%d)", mCurrentState); 21689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 21789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 21889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 21989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t ret = mMediaRecorder->setVideoEncoder(ve); 22089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (OK != ret) { 22189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGV("setVideoEncoder failed: %d", ret); 22289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mCurrentState = MEDIA_RECORDER_ERROR; 2238555d0867c3e8fe6cc5c7ad40af557fe6b92fa72The Android Open Source Project return ret; 22489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 22589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mIsVideoEncoderSet = true; 22689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return ret; 22789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 22889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 22989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorder::setAudioEncoder(int ae) 23089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 23189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGV("setAudioEncoder(%d)", ae); 23289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if(mMediaRecorder == NULL) { 23389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("media recorder is not initialized yet"); 23489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 23589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 23689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (!mIsAudioSourceSet) { 23789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("try to set the audio encoder without setting the audio source first"); 23889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 23989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 24089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (mIsAudioEncoderSet) { 24189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("audio encoder has already been set"); 24289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 24389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 24489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (!(mCurrentState & MEDIA_RECORDER_DATASOURCE_CONFIGURED)) { 24589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("setAudioEncoder called in an invalid state(%d)", mCurrentState); 24689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 24789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 24889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 24989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t ret = mMediaRecorder->setAudioEncoder(ae); 25089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (OK != ret) { 25189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGV("setAudioEncoder failed: %d", ret); 25289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mCurrentState = MEDIA_RECORDER_ERROR; 2538555d0867c3e8fe6cc5c7ad40af557fe6b92fa72The Android Open Source Project return ret; 25489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 25589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mIsAudioEncoderSet = true; 25689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return ret; 25789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 25889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 25989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorder::setOutputFile(const char* path) 26089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 26189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGV("setOutputFile(%s)", path); 26289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if(mMediaRecorder == NULL) { 26389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("media recorder is not initialized yet"); 26489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 26589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 26689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (mIsOutputFileSet) { 26789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("output file has already been set"); 26889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 26989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 27089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (!(mCurrentState & MEDIA_RECORDER_DATASOURCE_CONFIGURED)) { 27189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("setOutputFile called in an invalid state(%d)", mCurrentState); 27289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 27389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 27489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 27589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t ret = mMediaRecorder->setOutputFile(path); 27689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (OK != ret) { 27789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGV("setOutputFile failed: %d", ret); 27889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mCurrentState = MEDIA_RECORDER_ERROR; 2798555d0867c3e8fe6cc5c7ad40af557fe6b92fa72The Android Open Source Project return ret; 28089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 28189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mIsOutputFileSet = true; 28289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return ret; 28389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 28489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 28589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorder::setOutputFile(int fd, int64_t offset, int64_t length) 28689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 28789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGV("setOutputFile(%d, %lld, %lld)", fd, offset, length); 28889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if(mMediaRecorder == NULL) { 28989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("media recorder is not initialized yet"); 29089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 29189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 29289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (mIsOutputFileSet) { 29389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("output file has already been set"); 29489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 29589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 29689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (!(mCurrentState & MEDIA_RECORDER_DATASOURCE_CONFIGURED)) { 29789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("setOutputFile called in an invalid state(%d)", mCurrentState); 29889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 29989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 30089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 30189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t ret = mMediaRecorder->setOutputFile(fd, offset, length); 30289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (OK != ret) { 30389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGV("setOutputFile failed: %d", ret); 30489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mCurrentState = MEDIA_RECORDER_ERROR; 3058555d0867c3e8fe6cc5c7ad40af557fe6b92fa72The Android Open Source Project return ret; 30689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 30789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mIsOutputFileSet = true; 30889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return ret; 30989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 31089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 31189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorder::setVideoSize(int width, int height) 31289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 31389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGV("setVideoSize(%d, %d)", width, height); 31489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if(mMediaRecorder == NULL) { 31589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("media recorder is not initialized yet"); 31689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 31789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 31889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (!(mCurrentState & MEDIA_RECORDER_DATASOURCE_CONFIGURED)) { 31989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("setVideoSize called in an invalid state: %d", mCurrentState); 32089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 32189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 32289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (!mIsVideoSourceSet) { 32389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("try to set video size without setting video source first"); 32489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 32589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 32689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 32789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t ret = mMediaRecorder->setVideoSize(width, height); 32889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (OK != ret) { 32989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("setVideoSize failed: %d", ret); 33089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mCurrentState = MEDIA_RECORDER_ERROR; 3318555d0867c3e8fe6cc5c7ad40af557fe6b92fa72The Android Open Source Project return ret; 33289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 33389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return ret; 33489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 33589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 33689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorder::setVideoFrameRate(int frames_per_second) 33789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 33889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGV("setVideoFrameRate(%d)", frames_per_second); 33989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if(mMediaRecorder == NULL) { 34089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("media recorder is not initialized yet"); 34189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 34289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 34389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (!(mCurrentState & MEDIA_RECORDER_DATASOURCE_CONFIGURED)) { 34489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("setVideoFrameRate called in an invalid state: %d", mCurrentState); 34589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 34689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 34789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (!mIsVideoSourceSet) { 34889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("try to set video frame rate without setting video source first"); 3499747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang return INVALID_OPERATION; 35089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 35189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 35289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t ret = mMediaRecorder->setVideoFrameRate(frames_per_second); 35389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (OK != ret) { 35489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("setVideoFrameRate failed: %d", ret); 35589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mCurrentState = MEDIA_RECORDER_ERROR; 3568555d0867c3e8fe6cc5c7ad40af557fe6b92fa72The Android Open Source Project return ret; 35789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 35889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return ret; 35989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 36089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 361c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Projectstatus_t MediaRecorder::setParameters(const String8& params) { 362c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project LOGV("setParameters(%s)", params.string()); 363c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project if(mMediaRecorder == NULL) { 364c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project LOGE("media recorder is not initialized yet"); 365c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project return INVALID_OPERATION; 366c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project } 367c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project 368e284bac7757ad732d0812eb6133125434ba66d5bJames Dong bool isInvalidState = (mCurrentState & 369e284bac7757ad732d0812eb6133125434ba66d5bJames Dong (MEDIA_RECORDER_PREPARED | 370e284bac7757ad732d0812eb6133125434ba66d5bJames Dong MEDIA_RECORDER_RECORDING | 371e284bac7757ad732d0812eb6133125434ba66d5bJames Dong MEDIA_RECORDER_ERROR)); 372e284bac7757ad732d0812eb6133125434ba66d5bJames Dong if (isInvalidState) { 373e284bac7757ad732d0812eb6133125434ba66d5bJames Dong LOGE("setParameters is called in an invalid state: %d", mCurrentState); 374e284bac7757ad732d0812eb6133125434ba66d5bJames Dong return INVALID_OPERATION; 375e284bac7757ad732d0812eb6133125434ba66d5bJames Dong } 376e284bac7757ad732d0812eb6133125434ba66d5bJames Dong 377c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project status_t ret = mMediaRecorder->setParameters(params); 378c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project if (OK != ret) { 379c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project LOGE("setParameters(%s) failed: %d", params.string(), ret); 3801179bc9b0e3d17c984e8f4ad38561c049dd102faThe Android Open Source Project // Do not change our current state to MEDIA_RECORDER_ERROR, failures 3811179bc9b0e3d17c984e8f4ad38561c049dd102faThe Android Open Source Project // of the only currently supported parameters, "max-duration" and 3821179bc9b0e3d17c984e8f4ad38561c049dd102faThe Android Open Source Project // "max-filesize" are _not_ fatal. 383c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project } 384c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project 385c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project return ret; 386c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project} 387c048cae0367db6fbb4fe1127be5011910713d4adThe Android Open Source Project 38889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorder::prepare() 38989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 39089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGV("prepare"); 39189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if(mMediaRecorder == NULL) { 39289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("media recorder is not initialized yet"); 39389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 39489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 39589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (!(mCurrentState & MEDIA_RECORDER_DATASOURCE_CONFIGURED)) { 39689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("prepare called in an invalid state: %d", mCurrentState); 39789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 39889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 39989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (mIsAudioSourceSet != mIsAudioEncoderSet) { 40089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (mIsAudioSourceSet) { 40189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("audio source is set, but audio encoder is not set"); 40289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } else { // must not happen, since setAudioEncoder checks this already 40389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("audio encoder is set, but audio source is not set"); 40489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 40589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 40689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 40789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 40889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (mIsVideoSourceSet != mIsVideoEncoderSet) { 40989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (mIsVideoSourceSet) { 41089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("video source is set, but video encoder is not set"); 41189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } else { // must not happen, since setVideoEncoder checks this already 41289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("video encoder is set, but video source is not set"); 41389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 41489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 41589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 41689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 41789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t ret = mMediaRecorder->prepare(); 41889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (OK != ret) { 41989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("prepare failed: %d", ret); 42089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mCurrentState = MEDIA_RECORDER_ERROR; 4218555d0867c3e8fe6cc5c7ad40af557fe6b92fa72The Android Open Source Project return ret; 42289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 42389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mCurrentState = MEDIA_RECORDER_PREPARED; 42489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return ret; 42589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 42689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 42789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorder::getMaxAmplitude(int* max) 42889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 42989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGV("getMaxAmplitude"); 43089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if(mMediaRecorder == NULL) { 43189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("media recorder is not initialized yet"); 43289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 43389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 43489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (mCurrentState & MEDIA_RECORDER_ERROR) { 43589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("getMaxAmplitude called in an invalid state: %d", mCurrentState); 43689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 43789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 43889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 43989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t ret = mMediaRecorder->getMaxAmplitude(max); 44089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (OK != ret) { 44189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("getMaxAmplitude failed: %d", ret); 44289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mCurrentState = MEDIA_RECORDER_ERROR; 4438555d0867c3e8fe6cc5c7ad40af557fe6b92fa72The Android Open Source Project return ret; 44489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 44589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return ret; 44689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 44789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 44889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorder::start() 44989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 45089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGV("start"); 45189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (mMediaRecorder == NULL) { 45289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("media recorder is not initialized yet"); 45389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 45489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 45589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (!(mCurrentState & MEDIA_RECORDER_PREPARED)) { 45689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("start called in an invalid state: %d", mCurrentState); 45789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 45889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 45989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 46089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t ret = mMediaRecorder->start(); 46189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (OK != ret) { 46289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("start failed: %d", ret); 46389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mCurrentState = MEDIA_RECORDER_ERROR; 4648555d0867c3e8fe6cc5c7ad40af557fe6b92fa72The Android Open Source Project return ret; 46589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 46689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mCurrentState = MEDIA_RECORDER_RECORDING; 46789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return ret; 46889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 46989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 47089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorder::stop() 47189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 47289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGV("stop"); 47389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (mMediaRecorder == NULL) { 47489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("media recorder is not initialized yet"); 47589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 47689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 47789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (!(mCurrentState & MEDIA_RECORDER_RECORDING)) { 47889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("stop called in an invalid state: %d", mCurrentState); 47989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 48089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 48189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 48289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t ret = mMediaRecorder->stop(); 48389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (OK != ret) { 48489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("stop failed: %d", ret); 48589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mCurrentState = MEDIA_RECORDER_ERROR; 4868555d0867c3e8fe6cc5c7ad40af557fe6b92fa72The Android Open Source Project return ret; 48789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 4889747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang 48965e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project // FIXME: 49065e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project // stop and reset are semantically different. 49165e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project // We treat them the same for now, and will change this in the future. 49265e731f393f704eedab6fbe0af7f8a580c8d4617The Android Open Source Project doCleanUp(); 49389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mCurrentState = MEDIA_RECORDER_IDLE; 49489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return ret; 49589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 49689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 49789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// Reset should be OK in any state 49889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorder::reset() 49989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 50089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGV("reset"); 50189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (mMediaRecorder == NULL) { 50289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("media recorder is not initialized yet"); 50389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 50489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 5059747c5a1f5e51fab72169767972bf55f73711000Jianhong Jiang 50689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project doCleanUp(); 50789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t ret = UNKNOWN_ERROR; 50889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project switch(mCurrentState) { 50989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case MEDIA_RECORDER_IDLE: 51089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ret = OK; 51189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project break; 51289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 51389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case MEDIA_RECORDER_RECORDING: 51489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case MEDIA_RECORDER_DATASOURCE_CONFIGURED: 51589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case MEDIA_RECORDER_PREPARED: 51689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case MEDIA_RECORDER_ERROR: { 51789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ret = doReset(); 51889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (OK != ret) { 51989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return ret; // No need to continue 52089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 52189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } // Intentional fall through 52289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project case MEDIA_RECORDER_INITIALIZED: 52389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ret = close(); 52489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project break; 52589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 52689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project default: { 52789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("Unexpected non-existing state: %d", mCurrentState); 52889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project break; 52989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 53089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 53189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return ret; 53289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 53389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 53489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorder::close() 53589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 53689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGV("close"); 53789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (!(mCurrentState & MEDIA_RECORDER_INITIALIZED)) { 53889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("close called in an invalid state: %d", mCurrentState); 53989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 54089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 54189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t ret = mMediaRecorder->close(); 54289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (OK != ret) { 54389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("close failed: %d", ret); 54489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mCurrentState = MEDIA_RECORDER_ERROR; 54589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return UNKNOWN_ERROR; 54689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } else { 54789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mCurrentState = MEDIA_RECORDER_IDLE; 54889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 54989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return ret; 55089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 55189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 55289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorder::doReset() 55389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 55489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGV("doReset"); 55589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t ret = mMediaRecorder->reset(); 55689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (OK != ret) { 55789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGE("doReset failed: %d", ret); 55889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mCurrentState = MEDIA_RECORDER_ERROR; 5598555d0867c3e8fe6cc5c7ad40af557fe6b92fa72The Android Open Source Project return ret; 56089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } else { 56189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mCurrentState = MEDIA_RECORDER_INITIALIZED; 56289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 56389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return ret; 56489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 56589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 56689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectvoid MediaRecorder::doCleanUp() 56789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 56889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGV("doCleanUp"); 56989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mIsAudioSourceSet = false; 57089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mIsVideoSourceSet = false; 57189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mIsAudioEncoderSet = false; 57289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mIsVideoEncoderSet = false; 57389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mIsOutputFileSet = false; 57489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 57589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 57689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// Release should be OK in any state 57789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorder::release() 57889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 57989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGV("release"); 58089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (mMediaRecorder != NULL) { 58189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return mMediaRecorder->release(); 58289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 58389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return INVALID_OPERATION; 58489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 58589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 58689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source ProjectMediaRecorder::MediaRecorder() 58789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 58889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGV("constructor"); 58989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 590dd172fce75b2a1c3cb3a5d3b3bbb5020b1ae8675James Dong const sp<IMediaPlayerService>& service(getMediaPlayerService()); 59189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (service != NULL) { 59289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mMediaRecorder = service->createMediaRecorder(getpid()); 59389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 59489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (mMediaRecorder != NULL) { 59589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mCurrentState = MEDIA_RECORDER_IDLE; 59689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 59789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project doCleanUp(); 59889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 59989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 60089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorder::initCheck() 60189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 60289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return mMediaRecorder != 0 ? NO_ERROR : NO_INIT; 60389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 60489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 60589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source ProjectMediaRecorder::~MediaRecorder() 60689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 60789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGV("destructor"); 60889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (mMediaRecorder != NULL) { 60989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mMediaRecorder.clear(); 61089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 61189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 61289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 61389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectstatus_t MediaRecorder::setListener(const sp<MediaRecorderListener>& listener) 61489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 61589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGV("setListener"); 61689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Mutex::Autolock _l(mLock); 61789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mListener = listener; 61889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 61989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return NO_ERROR; 62089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 62189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 62289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectvoid MediaRecorder::notify(int msg, int ext1, int ext2) 62389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{ 62489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGV("message received msg=%d, ext1=%d, ext2=%d", msg, ext1, ext2); 62589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 62689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project sp<MediaRecorderListener> listener; 62789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mLock.lock(); 62889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project listener = mListener; 62989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mLock.unlock(); 63089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 63189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project if (listener != NULL) { 63289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Mutex::Autolock _l(mNotifyLock); 63389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGV("callback application"); 63489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project listener->notify(msg, ext1, ext2); 63589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project LOGV("back from callback"); 63689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 63789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project} 63889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 639dd172fce75b2a1c3cb3a5d3b3bbb5020b1ae8675James Dongvoid MediaRecorder::died() 640dd172fce75b2a1c3cb3a5d3b3bbb5020b1ae8675James Dong{ 641dd172fce75b2a1c3cb3a5d3b3bbb5020b1ae8675James Dong LOGV("died"); 642dd172fce75b2a1c3cb3a5d3b3bbb5020b1ae8675James Dong notify(MEDIA_RECORDER_EVENT_ERROR, MEDIA_ERROR_SERVER_DIED, 0); 643dd172fce75b2a1c3cb3a5d3b3bbb5020b1ae8675James Dong} 644dd172fce75b2a1c3cb3a5d3b3bbb5020b1ae8675James Dong 64589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; // namespace android 646