1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
3 * You can obtain one at http://mozilla.org/MPL/2.0/. */
5 #ifndef DOM_CAMERA_DOMCAMERACONTROL_H
6 #define DOM_CAMERA_DOMCAMERACONTROL_H
10 #include "nsCycleCollectionParticipant.h"
11 #include "DictionaryHelpers.h"
12 #include "ICameraControl.h"
13 #include "DOMCameraPreview.h"
14 #include "nsIDOMCameraManager.h"
15 #include "CameraCommon.h"
16 #include "AudioChannelAgent.h"
17 #include "nsProxyRelease.h"
18 #include "nsHashPropertyBag.h"
20 class nsDOMDeviceStorage
;
25 class CameraPictureOptions
;
26 template<typename T
> class Optional
;
30 // Main camera control.
31 class nsDOMCameraControl MOZ_FINAL
: public nsISupports
,
35 NS_DECL_CYCLE_COLLECTING_ISUPPORTS
36 NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(nsDOMCameraControl
)
38 nsDOMCameraControl(uint32_t aCameraId
, nsIThread
* aCameraThread
,
39 nsICameraGetCameraCallback
* onSuccess
,
40 nsICameraErrorCallback
* onError
, nsPIDOMWindow
* aWindow
);
41 nsresult
Result(nsresult aResult
,
42 const nsMainThreadPtrHandle
<nsICameraGetCameraCallback
>& onSuccess
,
43 const nsMainThreadPtrHandle
<nsICameraErrorCallback
>& onError
,
45 nsRefPtr
<ICameraControl
> GetNativeCameraControl();
49 nsPIDOMWindow
* GetParentObject() const { return mWindow
; }
52 nsICameraCapabilities
* Capabilities();
53 void GetEffect(nsString
& aEffect
, ErrorResult
& aRv
);
54 void SetEffect(const nsAString
& aEffect
, ErrorResult
& aRv
);
55 void GetWhiteBalanceMode(nsString
& aMode
, ErrorResult
& aRv
);
56 void SetWhiteBalanceMode(const nsAString
& aMode
, ErrorResult
& aRv
);
57 void GetSceneMode(nsString
& aMode
, ErrorResult
& aRv
);
58 void SetSceneMode(const nsAString
& aMode
, ErrorResult
& aRv
);
59 void GetFlashMode(nsString
& aMode
, ErrorResult
& aRv
);
60 void SetFlashMode(const nsAString
& aMode
, ErrorResult
& aRv
);
61 void GetFocusMode(nsString
& aMode
, ErrorResult
& aRv
);
62 void SetFocusMode(const nsAString
& aMode
, ErrorResult
& aRv
);
63 double GetZoom(ErrorResult
& aRv
);
64 void SetZoom(double aZoom
, ErrorResult
& aRv
);
65 JS::Value
GetMeteringAreas(JSContext
* aCx
, ErrorResult
& aRv
);
66 void SetMeteringAreas(JSContext
* aCx
, JS::Handle
<JS::Value
> aAreas
, ErrorResult
& aRv
);
67 JS::Value
GetFocusAreas(JSContext
* aCx
, ErrorResult
& aRv
);
68 void SetFocusAreas(JSContext
* aCx
, JS::Handle
<JS::Value
> aAreas
, ErrorResult
& aRv
);
69 JS::Value
GetPictureSize(JSContext
* aCx
, ErrorResult
& aRv
);
70 void SetPictureSize(JSContext
* aCx
, JS::Handle
<JS::Value
> aSize
, ErrorResult
& aRv
);
71 JS::Value
GetThumbnailSize(JSContext
* aCx
, ErrorResult
& aRv
);
72 void SetThumbnailSize(JSContext
* aCx
, JS::Handle
<JS::Value
> aSize
, ErrorResult
& aRv
);
73 double GetFocalLength(ErrorResult
& aRv
);
74 double GetFocusDistanceNear(ErrorResult
& aRv
);
75 double GetFocusDistanceOptimum(ErrorResult
& aRv
);
76 double GetFocusDistanceFar(ErrorResult
& aRv
);
77 void SetExposureCompensation(const dom::Optional
<double>& aCompensation
, ErrorResult
& aRv
);
78 double GetExposureCompensation(ErrorResult
& aRv
);
79 int32_t SensorAngle();
80 already_AddRefed
<nsICameraShutterCallback
> GetOnShutter(ErrorResult
& aRv
);
81 void SetOnShutter(nsICameraShutterCallback
* aCb
, ErrorResult
& aRv
);
82 already_AddRefed
<nsICameraClosedCallback
> GetOnClosed(ErrorResult
& aRv
);
83 void SetOnClosed(nsICameraClosedCallback
* aCb
, ErrorResult
& aRv
);
84 already_AddRefed
<nsICameraRecorderStateChange
> GetOnRecorderStateChange(ErrorResult
& aRv
);
85 void SetOnRecorderStateChange(nsICameraRecorderStateChange
* aCb
, ErrorResult
& aRv
);
86 void AutoFocus(nsICameraAutoFocusCallback
* aOnSuccess
, const dom::Optional
<nsICameraErrorCallback
*>& aOnErro
, ErrorResult
& aRvr
);
87 void TakePicture(JSContext
* aCx
, const dom::CameraPictureOptions
& aOptions
,
88 nsICameraTakePictureCallback
* onSuccess
,
89 const dom::Optional
<nsICameraErrorCallback
* >& onError
,
91 already_AddRefed
<nsICameraPreviewStateChange
> GetOnPreviewStateChange() const;
92 void SetOnPreviewStateChange(nsICameraPreviewStateChange
* aOnStateChange
);
93 void GetPreviewStreamVideoMode(JSContext
* cx
, JS::Handle
<JS::Value
> aOptions
, nsICameraPreviewStreamCallback
* onSuccess
, const dom::Optional
<nsICameraErrorCallback
* >& onError
, ErrorResult
& aRv
);
94 void StartRecording(JSContext
* cx
, JS::Handle
<JS::Value
> aOptions
, nsDOMDeviceStorage
& storageArea
, const nsAString
& filename
, nsICameraStartRecordingCallback
* onSuccess
, const dom::Optional
<nsICameraErrorCallback
* >& onError
, ErrorResult
& aRv
);
95 void StopRecording(ErrorResult
& aRv
);
96 void GetPreviewStream(JSContext
* cx
, JS::Handle
<JS::Value
> aOptions
, nsICameraPreviewStreamCallback
* onSuccess
, const dom::Optional
<nsICameraErrorCallback
* >& onError
, ErrorResult
& aRv
);
97 void ResumePreview(ErrorResult
& aRv
);
98 void ReleaseHardware(const dom::Optional
<nsICameraReleaseCallback
* >& onSuccess
, const dom::Optional
<nsICameraErrorCallback
* >& onError
, ErrorResult
& aRv
);
101 virtual ~nsDOMCameraControl();
104 nsDOMCameraControl(const nsDOMCameraControl
&) MOZ_DELETE
;
105 nsDOMCameraControl
& operator=(const nsDOMCameraControl
&) MOZ_DELETE
;
107 virtual JSObject
* WrapObject(JSContext
* aCx
, JS::Handle
<JSObject
*> aScope
) MOZ_OVERRIDE
;
108 nsresult
NotifyRecordingStatusChange(const nsString
& aMsg
);
111 /* additional members */
112 nsRefPtr
<ICameraControl
> mCameraControl
; // non-DOM camera control
113 nsCOMPtr
<nsICameraCapabilities
> mDOMCapabilities
;
114 // An agent used to join audio channel service.
115 nsCOMPtr
<nsIAudioChannelAgent
> mAudioChannelAgent
;
116 nsCOMPtr
<nsPIDOMWindow
> mWindow
;
119 } // namespace mozilla
121 #endif // DOM_CAMERA_DOMCAMERACONTROL_H