You need to call Camera.unlock() from the application before you call MediaRecorder.setCamera(). When you are done recording, after you call MediaRecorder.release(), call Camera.lock().
On May 4, 1:30 am, ever <ever_1...@yahoo.com.tw> wrote: > Hi, > My MediaRecorder tried to use the camera object opened by Camera app > through setCamera function, however, it got the following warming > message and the program halted. > W/CameraService( 966): Tried to connect to locked camera > > It seems that connect function always halts my program since camera > serveice client had been connected to a process(camera ap process), > anyone konws how to fix this issue? > > status_t CameraService::Client::connect(const sp<ICameraClient>& > client) > { > // connect a new process to the camera > LOGV("connect (%p)", client->asBinder().get()); > > // I hate this hack, but things get really ugly when the media > recorder > // service is handing back the camera to the app. The > ICameraClient > // destructor will be called during the same IPC, making it look > like > // the remote client is trying to disconnect. This hack > temporarily > // sets the mClientPid to an invalid pid to prevent the hardware > from > // being torn down. > { > > // hold a reference to the old client or we will deadlock if > the client is > // in the same process and we hold the lock when we remove the > reference > sp<ICameraClient> oldClient; > { > Mutex::Autolock _l(mLock); > if (mClientPid != 0) { > LOGW("Tried to connect to locked camera"); > return -EBUSY; > } > oldClient = mCameraClient; > > // did the client actually change? > if (client->asBinder() == mCameraClient->asBinder()) > return NO_ERROR; > > mCameraClient = client; > mClientPid = -1; > mPreviewCallbackFlag = FRAME_CALLBACK_FLAG_NOOP; > LOGV("connect new process (%d) to existing camera client", > mClientPid); > } > > } > // the old client destructor is called when oldClient goes out of > scope > // now we set the new PID to lock the interface again > mClientPid = IPCThreadState::self()->getCallingPid(); > > return NO_ERROR; > > } --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "android-framework" group. To post to this group, send email to android-framework@googlegroups.com To unsubscribe from this group, send email to android-framework+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-framework?hl=en -~----------~----~----~----~------~----~------~--~---