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.
82 * @remarks This method is called only if the @c previewedData flag of
83 * Camera::StartPreview() is @c true.
84 * @remarks This method can be delayed or dropped depending on system performance.
85 * @see Camera::GetPreviewFormat()
87 * The camera rotation can be different according to the physical design.
88 * For keeping the compatibility between targets, the application must check the H/W camera rotation.
89 * Based on this information, the application can rotate the preview data.
91 * The following example demonstrates how to use the %OnCameraPreviewed() method to rotate the preview data in the portrait mode.
94 // Rotates the preview data to use it
95 int rotation = (int)CAMERA_ROTATION_NONE;
96 MediaCapability::GetValue(CAMERA_SECONDARY_ROTATION, rotation);
98 ByteBuffer rotatedData;
99 rotatedData.Construct(previewedData.GetLimit());
101 switch ((CameraRotation) rotation)
103 case CAMERA_ROTATION_90:
104 ImageUtil::Rotate(previewedData, rotatedData,
105 Dimension(__previewWidth, __previewHeight), IMAGE_ROTATION_90, MEDIA_PIXEL_FORMAT_YUV420P);
108 case CAMERA_ROTATION_180:
109 ImageUtil::Rotate(previewedData, rotatedData,
110 Dimension(__previewWidth, __previewHeight), IMAGE_ROTATION_180, MEDIA_PIXEL_FORMAT_YUV420P);
113 case CAMERA_ROTATION_270:
114 ImageUtil::Rotate(previewedData, rotatedData,
115 Dimension(__previewWidth, __previewHeight), IMAGE_ROTATION_270, MEDIA_PIXEL_FORMAT_YUV420P);
121 // Normally Camera::SetFlip(CAMERA_FLIP_VERTICAL) is used when using the front camera.
122 // Remember that the OverlayRegion method rotates the visible region internally corresponding to the form's orientation.
123 // An application does not need to rotate the visible region explicitly.
124 // However, the preview data itself is not rotated. If an application wants to rotate the preview data, the data must be rotated like above.
125 // The width and height changes according to the degree of rotation.
128 virtual void OnCameraPreviewed(Tizen::Base::ByteBuffer& previewedData, result r) = 0;
131 * Called when the Camera::Capture() method is completed.
135 * @param[in] capturedData The image data captured by the camera @n
136 * The captured data format is the same as the format
137 * set by Camera::SetCaptureFormat().
138 * @param[in] r The cause of the error
139 * @exception E_SUCCESS The method is successful.
140 * @exception E_INVALID_DATA The ByteBuffer contains invalid data.
141 * @see Camera::Capture()
142 * @see Camera::GetCaptureFormat()
144 virtual void OnCameraCaptured(Tizen::Base::ByteBuffer& capturedData, result r) = 0;
147 * Called when an error occurs in Camera.
151 * @param[in] r A camera error @n
152 * This is one of the ::CameraErrorReason values.
153 * @remarks The ::CAMERA_ERROR_DEVICE_FAILED error occurs when the camera device
154 * has a problem, such as damaged shape or hardware malfunction.
155 * The ::CAMERA_ERROR_DEVICE_INTERRUPTED error occurs when the camera
156 * device has been interrupted by other request, such as an incoming
157 * video telephony call.
158 * In this method, the application calls the Camera::PowerOff()
159 * method to reset the camera device.
161 virtual void OnCameraErrorOccurred(CameraErrorReason r) = 0;
165 // This method is for internal use only. Using this method can cause behavioral, security-related, and consistency-related issues in the application.
167 // This method is reserved and may change its name at any time without prior notice.
171 virtual void ICameraEventListener_Reserved1(void) {}
174 // This method is for internal use only. Using this method can cause behavioral, security-related, and consistency-related issues in the application.
176 // This method is reserved and may change its name at any time without prior notice.
180 virtual void ICameraEventListener_Reserved2(void) {}