/* void takePicture (in jsval aOptions, in nsICameraTakePictureCallback onSuccess, [optional] in nsICameraErrorCallback onError); */ NS_IMETHODIMP nsCameraControl::TakePicture(const JS::Value& aOptions, nsICameraTakePictureCallback* onSuccess, nsICameraErrorCallback* onError, JSContext* cx) { NS_ENSURE_TRUE(onSuccess, NS_ERROR_INVALID_ARG); CameraPictureOptions options; CameraSize size; CameraPosition pos; nsresult rv = options.Init(cx, &aOptions); NS_ENSURE_SUCCESS(rv, rv); rv = size.Init(cx, &options.pictureSize); NS_ENSURE_SUCCESS(rv, rv); /** * Default values, until the dictionary parser can handle them. * NaN indicates no value provided. */ pos.latitude = NAN; pos.longitude = NAN; pos.altitude = NAN; pos.timestamp = NAN; rv = pos.Init(cx, &options.position); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIRunnable> takePictureTask = new TakePictureTask(this, size, options.rotation, options.fileFormat, pos, onSuccess, onError); mCameraThread->Dispatch(takePictureTask, NS_DISPATCH_NORMAL); return NS_OK; }
/* void takePicture (in jsval aOptions, in nsICameraTakePictureCallback onSuccess, [optional] in nsICameraErrorCallback onError); */ NS_IMETHODIMP nsDOMCameraControl::TakePicture(const JS::Value& aOptions, nsICameraTakePictureCallback* onSuccess, nsICameraErrorCallback* onError, JSContext* cx) { NS_ENSURE_TRUE(onSuccess, NS_ERROR_INVALID_ARG); CameraPictureOptions options; CameraSize size; CameraPosition pos; nsresult rv = options.Init(cx, &aOptions); NS_ENSURE_SUCCESS(rv, rv); rv = size.Init(cx, &options.pictureSize); NS_ENSURE_SUCCESS(rv, rv); /** * Default values, until the dictionary parser can handle them. * NaN indicates no value provided. */ pos.latitude = NAN; pos.longitude = NAN; pos.altitude = NAN; pos.timestamp = NAN; rv = pos.Init(cx, &options.position); NS_ENSURE_SUCCESS(rv, rv); return mCameraControl->TakePicture(size, options.rotation, options.fileFormat, pos, onSuccess, onError); }