2 // Open Service Platform
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://www.apache.org/licenses/LICENSE-2.0
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
19 * @file FMediaICameraEventListener.h
20 * @brief This is the header file for the %ICameraEventListener interface.
22 * This header file contains the declarations of the %ICameraEventListener interface.
25 #ifndef _FMEDIA_ICAMERA_EVENT_LISTENER_H_
26 #define _FMEDIA_ICAMERA_EVENT_LISTENER_H_
29 #include <FMediaCameraTypes.h>
31 namespace Tizen { namespace Media
35 * @interface ICameraEventListener
36 * @brief This interface provides a listener that receives events associated with %Camera.
40 * The %ICameraEventListener interface specifies the methods used to notify the status of the camera and its events.
41 * The camera engine works asynchronously. Therefore, it is important to implement this listener
42 * to ensure the smooth performance of the camera.
44 * For more information on the class features, see <a href="../org.tizen.native.appprogramming/html/guide/media/capturing_still_images.htm">Capturing Still Images</a>.
46 class _OSP_EXPORT_ ICameraEventListener
47 : virtual public Tizen::Base::Runtime::IEventListener
52 * This polymorphic destructor should be overridden if required. @n
53 * This way, the destructors of the derived classes are called when the destructor of this interface is called.
57 virtual ~ICameraEventListener(void) {}
60 * Called when the Camera::SetAutoFocus() method is completed.
64 * @param[in] completeCondition The condition of auto focus completion @n
65 * Set to @c true if it succeeds, @n
68 virtual void OnCameraAutoFocused(bool completeCondition) = 0;
71 * Called when the Camera::StartPreview() method is completed. @n
72 * Notifies the application periodically, at the speed of the camera's frame rate,
73 * once the %Camera::StartPreview() method is called, so as to receive the preview data.
77 * @param[in] previewedData The displayed image data in the viewfinder @n
78 * The previewed data format is same as the format
79 * set by Camera::SetPreviewFormat().
80 * @param[in] r The cause of the error
81 * @exception E_SUCCESS The method is successful.
82 * @exception E_INVALID_DATA The Tizen::Base::ByteBuffer contains invalid data.
84 * - This method is called only if the @c previewedData flag of Camera::StartPreview() is @c true.
85 * - This method can be delayed or dropped depending on the system performance.
86 * @see Camera::GetPreviewFormat()
88 * The camera rotation can differ according to the physical design. @n
89 * For keeping compatibility between the targets, the application must check the hardware camera rotation.
90 * Based on this information, the application can rotate the preview data.
92 * The following example demonstrates how to use the %OnCameraPreviewed() method to rotate the preview data in the portrait mode.
97 * using namespace Tizen::Base;
98 * using namespace Tizen::Media;
99 * using namespace Tizen::Graphics;
102 * : public Tizen::Media::ICameraEventListener
105 * virtual void OnCameraPreviewed(Tizen::Base::ByteBuffer& previewedData, result r) {
106 * // Rotates the preview data to use it
107 * int rotation = (int)CAMERA_ROTATION_NONE;
108 * MediaCapability::GetValue(CAMERA_SECONDARY_ROTATION, rotation);
110 * ByteBuffer rotatedData;
111 * rotatedData.Construct(previewedData.GetLimit());
113 * switch ((CameraRotation) rotation)
115 * case CAMERA_ROTATION_90:
116 * ImageUtil::Rotate(previewedData, rotatedData,
117 * Dimension(__previewWidth, __previewHeight), IMAGE_ROTATION_90, MEDIA_PIXEL_FORMAT_YUV420P);
120 * case CAMERA_ROTATION_180:
121 * ImageUtil::Rotate(previewedData, rotatedData,
122 * Dimension(__previewWidth, __previewHeight), IMAGE_ROTATION_180, MEDIA_PIXEL_FORMAT_YUV420P);
125 * case CAMERA_ROTATION_270:
126 * ImageUtil::Rotate(previewedData, rotatedData,
127 * Dimension(__previewWidth, __previewHeight), IMAGE_ROTATION_270, MEDIA_PIXEL_FORMAT_YUV420P);
136 * int __previewWidth;
137 * int __previewHeight;
139 // Normally Camera::SetFlip(CAMERA_FLIP_VERTICAL) is used when using the front camera.
140 // Remember that the OverlayRegion method rotates the visible region internally corresponding to the form's orientation.
141 // An application does not need to rotate the visible region explicitly.
142 // However, the preview data itself is not rotated. If an application wants to rotate the preview data, the data must be rotated like above.
143 // The width and height changes according to the degree of rotation.
146 virtual void OnCameraPreviewed(Tizen::Base::ByteBuffer& previewedData, result r) = 0;
149 * Called when the %Camera::Capture() method is completed.
153 * @param[in] capturedData The image data captured by the camera @n
154 * The captured data format is the same as the format
155 * set by Camera::SetCaptureFormat().
156 * @param[in] r The cause of the error
157 * @exception E_SUCCESS The method is successful.
158 * @exception E_INVALID_DATA The Tizen::Base::ByteBuffer contains invalid data.
159 * @see Camera::Capture()
160 * @see Camera::GetCaptureFormat()
162 virtual void OnCameraCaptured(Tizen::Base::ByteBuffer& capturedData, result r) = 0;
165 * Called when an error occurs in Camera.
169 * @param[in] r The camera error @n
170 * This is one of the ::CameraErrorReason values.
172 * - The @c CAMERA_ERROR_DEVICE_FAILED error occurs when the camera device
173 * has a problem, such as damaged shape or hardware malfunction.
174 * - The @c CAMERA_ERROR_DEVICE_INTERRUPTED error occurs when the camera
175 * device is interrupted by another request, such as an incoming
176 * video telephony call.
177 * - In this method, the application calls the Camera::PowerOff()
178 * method to reset the camera device.
180 virtual void OnCameraErrorOccurred(CameraErrorReason r) = 0;
184 // This method is for internal use only. Using this method can cause behavioral, security-related, and consistency-related issues in the application.
186 // This method is reserved and may change its name at any time without prior notice.
190 virtual void ICameraEventListener_Reserved1(void) {}
193 // This method is for internal use only. Using this method can cause behavioral, security-related, and consistency-related issues in the application.
195 // This method is reserved and may change its name at any time without prior notice.
199 virtual void ICameraEventListener_Reserved2(void) {}