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 the Camera class.
40 * The %ICameraEventListener interface specifies the methods used to notify the status of the camera and camera events.
41 * The camera engine works asynchronously. Therefore, it is important to implement this listener
42 * to ensure 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. This way, the destructors of the derived classes are called when the destructor of this interface is called.
56 virtual ~ICameraEventListener(void) {}
59 * Called when the Camera::SetAutoFocus() method is completed.
63 * @param[in] completeCondition The condition of auto focus completion @n
64 * Set to @c true if it succeeds, @n
67 virtual void OnCameraAutoFocused(bool completeCondition) = 0;
70 * Called when the Camera::StartPreview() method is completed. @n
71 * Notifies to the application periodically, at the speed of the camera's frame rate,
72 * once the %Camera::StartPreview() method is called, so as to receive the preview data.
76 * @param[in] previewedData The displayed image data in the viewfinder @n
77 * The previewed data format is same as the format
78 * set by Camera::SetPreviewFormat().
79 * @param[in] r The cause of the error
80 * @exception E_SUCCESS The method is successful.
81 * @exception E_INVALID_DATA The ByteBuffer contains invalid data.
83 * - This method is called only if the @c previewedData flag of
84 * Camera::StartPreview() is @c true.
85 * - This method can be delayed or dropped depending on system performance.
86 * @see Camera::GetPreviewFormat()
88 * The camera rotation can be different according to the physical design.
89 * For keeping the compatibility between targets, the application must check the H/W 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.
95 // Rotates the preview data to use it
96 int rotation = (int)CAMERA_ROTATION_NONE;
97 MediaCapability::GetValue(CAMERA_SECONDARY_ROTATION, rotation);
99 ByteBuffer rotatedData;
100 rotatedData.Construct(previewedData.GetLimit());
102 switch ((CameraRotation) rotation)
104 case CAMERA_ROTATION_90:
105 ImageUtil::Rotate(previewedData, rotatedData,
106 Dimension(__previewWidth, __previewHeight), IMAGE_ROTATION_90, MEDIA_PIXEL_FORMAT_YUV420P);
109 case CAMERA_ROTATION_180:
110 ImageUtil::Rotate(previewedData, rotatedData,
111 Dimension(__previewWidth, __previewHeight), IMAGE_ROTATION_180, MEDIA_PIXEL_FORMAT_YUV420P);
114 case CAMERA_ROTATION_270:
115 ImageUtil::Rotate(previewedData, rotatedData,
116 Dimension(__previewWidth, __previewHeight), IMAGE_ROTATION_270, MEDIA_PIXEL_FORMAT_YUV420P);
122 // Normally Camera::SetFlip(CAMERA_FLIP_VERTICAL) is used when using the front camera.
123 // Remember that the OverlayRegion method rotates the visible region internally corresponding to the form's orientation.
124 // An application does not need to rotate the visible region explicitly.
125 // However, the preview data itself is not rotated. If an application wants to rotate the preview data, the data must be rotated like above.
126 // The width and height changes according to the degree of rotation.
129 virtual void OnCameraPreviewed(Tizen::Base::ByteBuffer& previewedData, result r) = 0;
132 * Called when the Camera::Capture() method is completed.
136 * @param[in] capturedData The image data captured by the camera @n
137 * The captured data format is the same as the format
138 * set by Camera::SetCaptureFormat().
139 * @param[in] r The cause of the error
140 * @exception E_SUCCESS The method is successful.
141 * @exception E_INVALID_DATA The ByteBuffer contains invalid data.
142 * @see Camera::Capture()
143 * @see Camera::GetCaptureFormat()
145 virtual void OnCameraCaptured(Tizen::Base::ByteBuffer& capturedData, result r) = 0;
148 * Called when an error occurs in Camera.
152 * @param[in] r A camera error @n
153 * This is one of the ::CameraErrorReason values.
155 * - The ::CAMERA_ERROR_DEVICE_FAILED error occurs when the camera device
156 * has a problem, such as damaged shape or hardware malfunction.
157 * - The ::CAMERA_ERROR_DEVICE_INTERRUPTED error occurs when the camera
158 * device has been interrupted by other request, such as an incoming
159 * video telephony call.
160 * - In this method, the application calls the Camera::PowerOff()
161 * method to reset the camera device.
163 virtual void OnCameraErrorOccurred(CameraErrorReason r) = 0;
167 // This method is for internal use only. Using this method can cause behavioral, security-related, and consistency-related issues in the application.
169 // This method is reserved and may change its name at any time without prior notice.
173 virtual void ICameraEventListener_Reserved1(void) {}
176 // This method is for internal use only. Using this method can cause behavioral, security-related, and consistency-related issues in the application.
178 // This method is reserved and may change its name at any time without prior notice.
182 virtual void ICameraEventListener_Reserved2(void) {}