Merge "Handle the camera open failure better." into gingerbread
This commit is contained in:
@ -221,6 +221,7 @@ public:
|
||||
*/
|
||||
extern "C" int HAL_getNumberOfCameras();
|
||||
extern "C" void HAL_getCameraInfo(int cameraId, struct CameraInfo* cameraInfo);
|
||||
/* HAL should return NULL if it fails to open camera hardware. */
|
||||
extern "C" sp<CameraHardwareInterface> HAL_openCameraHardware(int cameraId);
|
||||
|
||||
}; // namespace android
|
||||
|
@ -145,7 +145,12 @@ sp<ICamera> CameraService::connect(
|
||||
return NULL;
|
||||
}
|
||||
|
||||
client = new Client(this, cameraClient, cameraId, callingPid);
|
||||
sp<CameraHardwareInterface> hardware = HAL_openCameraHardware(cameraId);
|
||||
if (hardware == NULL) {
|
||||
LOGE("Fail to open camera hardware (id=%d)", cameraId);
|
||||
return NULL;
|
||||
}
|
||||
client = new Client(this, cameraClient, hardware, cameraId, callingPid);
|
||||
mClient[cameraId] = client;
|
||||
LOG1("CameraService::connect X");
|
||||
return client;
|
||||
@ -285,16 +290,17 @@ void CameraService::playSound(sound_kind kind) {
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
CameraService::Client::Client(const sp<CameraService>& cameraService,
|
||||
const sp<ICameraClient>& cameraClient, int cameraId, int clientPid) {
|
||||
const sp<ICameraClient>& cameraClient,
|
||||
const sp<CameraHardwareInterface>& hardware,
|
||||
int cameraId, int clientPid) {
|
||||
int callingPid = getCallingPid();
|
||||
LOG1("Client::Client E (pid %d)", callingPid);
|
||||
|
||||
mCameraService = cameraService;
|
||||
mCameraClient = cameraClient;
|
||||
mHardware = hardware;
|
||||
mCameraId = cameraId;
|
||||
mClientPid = clientPid;
|
||||
|
||||
mHardware = HAL_openCameraHardware(cameraId);
|
||||
mUseOverlay = mHardware->useOverlay();
|
||||
mMsgEnabled = 0;
|
||||
|
||||
|
@ -106,6 +106,7 @@ private:
|
||||
friend class CameraService;
|
||||
Client(const sp<CameraService>& cameraService,
|
||||
const sp<ICameraClient>& cameraClient,
|
||||
const sp<CameraHardwareInterface>& hardware,
|
||||
int cameraId,
|
||||
int clientPid);
|
||||
~Client();
|
||||
|
Reference in New Issue
Block a user