4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Jeongmo Yang <jm80.yang@samsung.com>
8 * This library is free software; you can redistribute it and/or modify it under
9 * the terms of the GNU Lesser General Public License as published by the
10 * Free Software Foundation; either version 2.1 of the License, or (at your option)
13 * This library is distributed in the hope that it will be useful, but WITHOUT ANY
14 * WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
16 * License for more details.
18 * You should have received a copy of the GNU Lesser General Public License
19 * along with this library; if not, write to the Free Software Foundation, Inc., 51
20 * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
29 #include "gstcamerasrccontrol.h"
30 #include "camerasrc-common.h"
32 #define gst_camerasrc_debug(fmt, args...) GST_INFO(fmt, ##args)
34 #define CAMERA_CONTROL_AF_STOP_TOTALTIME 2000000
35 #define CAMERA_CONTROL_AF_STOP_INTERVAL 20000
37 GST_BOILERPLATE (GstCamerasrcControlChannel,
38 gst_camerasrc_control_channel,
39 GstCameraControlChannel, GST_TYPE_CAMERA_CONTROL_CHANNEL);
43 gst_camerasrc_control_channel_base_init( gpointer g_class )
45 gst_camerasrc_debug( "" );
49 gst_camerasrc_control_channel_class_init( GstCamerasrcControlChannelClass* klass )
51 gst_camerasrc_debug( "" );
55 gst_camerasrc_control_channel_init( GstCamerasrcControlChannel* control_channel, GstCamerasrcControlChannelClass* klass )
57 gst_camerasrc_debug( "" );
59 control_channel->id = (guint32) - 1;
62 static G_GNUC_UNUSED gboolean
63 gst_camerasrc_control_contains_channel( GstCameraSrc* camerasrc, GstCamerasrcControlChannel* camerasrc_control_channel )
65 gst_camerasrc_debug( "" );
69 for( item = camerasrc->camera_controls ; item != NULL ; item = item->next )
71 if( item->data == camerasrc_control_channel )
81 gst_camerasrc_control_list_channels( GstCameraSrc* camerasrc )
83 gst_camerasrc_debug( "" );
85 return camerasrc->camera_controls;
89 gst_camerasrc_control_set_value( GstCameraSrc* camerasrc, GstCameraControlChannel *control_channel, gint value )
91 gst_camerasrc_debug( "" );
93 int error = CAMERASRC_ERROR;
95 GstCamerasrcControlChannel *camerasrc_control_channel = GST_CAMERASRC_CONTROL_CHANNEL( control_channel );
97 g_return_val_if_fail( camerasrc, FALSE );
98 g_return_val_if_fail( gst_camerasrc_control_contains_channel( camerasrc, camerasrc_control_channel ), FALSE );
100 error = camerasrc_set_control( camerasrc->v4l2_handle, camerasrc_control_channel->id, value );
102 if( error != CAMERASRC_SUCCESS )
104 gst_camerasrc_debug( "Failed to set value. Ctrl-id [%d], value [%d], err code [%d]", camerasrc_control_channel->id, value, error );
112 gst_camerasrc_control_get_value( GstCameraSrc* camerasrc, GstCameraControlChannel *control_channel, gint *value )
114 gst_camerasrc_debug( "" );
116 int error = CAMERASRC_ERROR;
118 GstCamerasrcControlChannel *camerasrc_control_channel = GST_CAMERASRC_CONTROL_CHANNEL( control_channel );
120 g_return_val_if_fail( camerasrc, FALSE );
121 g_return_val_if_fail( gst_camerasrc_control_contains_channel( camerasrc, camerasrc_control_channel ), FALSE );
123 error = camerasrc_get_control( camerasrc->v4l2_handle, camerasrc_control_channel->id, value );
125 if( error != CAMERASRC_SUCCESS )
127 gst_camerasrc_debug( "Failed to get control value. Ctrl-id [%d], err code[%x]", camerasrc_control_channel->id, error );
135 gst_camerasrc_control_set_exposure( GstCameraSrc* camerasrc, gint type, gint value1, gint value2 )
137 gst_camerasrc_debug( "" );
139 int error = CAMERASRC_ERROR;
140 camerasrc_frac_t frac;
142 g_return_val_if_fail( camerasrc, FALSE );
144 /* TODO : F number */
147 case GST_CAMERA_CONTROL_F_NUMBER:
148 error = CAMERASRC_SUCCESS;
150 case GST_CAMERA_CONTROL_SHUTTER_SPEED:
151 frac.numerator = value1;
152 frac.denominator = value2;
153 __ta__(" camerasrc_set_shutter_speed",
154 error = camerasrc_set_shutter_speed( camerasrc->v4l2_handle, frac );
157 case GST_CAMERA_CONTROL_ISO:
158 __ta__(" camerasrc_set_iso_value",
159 error = camerasrc_set_control( camerasrc->v4l2_handle, CAMERASRC_CTRL_ISO, value1 );
162 case GST_CAMERA_CONTROL_PROGRAM_MODE:
163 __ta__(" camerasrc_set_control",
164 error = camerasrc_set_control( camerasrc->v4l2_handle, CAMERASRC_CTRL_PROGRAM_MODE, value1 );
167 case GST_CAMERA_CONTROL_EXPOSURE_MODE:
168 __ta__(" camerasrc_set_exposure_mode",
169 error = camerasrc_set_control( camerasrc->v4l2_handle, CAMERASRC_CTRL_PHOTOMETRY, value1 );
172 case GST_CAMERA_CONTROL_EXPOSURE_VALUE:
173 frac.numerator = value1;
174 frac.denominator = value2;
175 __ta__(" camerasrc_set_exposure_value",
176 error = camerasrc_set_exposure_value( camerasrc->v4l2_handle, frac );
180 gst_camerasrc_debug( "Not supported type." );
184 if( error != CAMERASRC_SUCCESS )
186 gst_camerasrc_debug( "Failed to set exposure. Type[%d],value1[%d],value2[%d],err code[%x]", type, value1, value2, error );
194 gst_camerasrc_control_get_exposure( GstCameraSrc* camerasrc, gint type, gint* value1, gint* value2 )
196 gst_camerasrc_debug( "" );
198 int error = CAMERASRC_ERROR;
199 camerasrc_frac_t frac;
201 g_return_val_if_fail( camerasrc, FALSE );
203 /* TODO : F number */
206 case GST_CAMERA_CONTROL_F_NUMBER:
208 case GST_CAMERA_CONTROL_SHUTTER_SPEED:
209 error = camerasrc_get_shutter_speed( camerasrc->v4l2_handle, &frac );
210 if( error == CAMERASRC_SUCCESS )
212 *value1 = frac.numerator;
213 *value2 = frac.denominator;
216 case GST_CAMERA_CONTROL_ISO:
217 error = camerasrc_get_control( camerasrc->v4l2_handle, CAMERASRC_CTRL_ISO, value1 );
219 case GST_CAMERA_CONTROL_PROGRAM_MODE:
220 error = camerasrc_get_control( camerasrc->v4l2_handle, CAMERASRC_CTRL_PROGRAM_MODE, value1 );
222 case GST_CAMERA_CONTROL_EXPOSURE_MODE:
223 error = camerasrc_get_control( camerasrc->v4l2_handle, CAMERASRC_CTRL_PHOTOMETRY, value1 );
225 case GST_CAMERA_CONTROL_EXPOSURE_VALUE:
226 error = camerasrc_get_exposure_value( camerasrc->v4l2_handle, &frac );
227 if( error == CAMERASRC_SUCCESS )
229 *value1 = frac.numerator;
230 *value2 = frac.denominator;
234 gst_camerasrc_debug( "Not supported type." );
238 if( error != CAMERASRC_SUCCESS )
240 gst_camerasrc_debug( "Failed to get exposure. Type [%d]", type );
248 gst_camerasrc_control_set_capture_mode( GstCameraSrc* camerasrc, gint type, gint value )
250 /* TODO : single/multishot select(capture mode), output mode, frame count, JPEG quality */
252 gst_camerasrc_debug( "" );
254 int error = CAMERASRC_ERROR;
256 g_return_val_if_fail( camerasrc, FALSE );
260 case GST_CAMERA_CONTROL_CAPTURE_MODE:
262 case GST_CAMERA_CONTROL_OUTPUT_MODE:
264 case GST_CAMERA_CONTROL_FRAME_COUNT:
266 case GST_CAMERA_CONTROL_JPEG_QUALITY:
269 gst_camerasrc_debug( "Not supported type." );
273 if( error != CAMERASRC_SUCCESS )
275 gst_camerasrc_debug( "Failed to set capture mode. Type[%d],value[%d],err code[%x]", type, value, error );
283 gst_camerasrc_control_get_capture_mode( GstCameraSrc* camerasrc, gint type, gint *value )
285 /* TODO : single/multishot select(capture mode), output mode, frame count, JPEG quality */
287 gst_camerasrc_debug( "" );
289 int error = CAMERASRC_ERROR;
291 g_return_val_if_fail( camerasrc, FALSE );
295 case GST_CAMERA_CONTROL_CAPTURE_MODE:
297 case GST_CAMERA_CONTROL_OUTPUT_MODE:
299 case GST_CAMERA_CONTROL_FRAME_COUNT:
301 case GST_CAMERA_CONTROL_JPEG_QUALITY:
304 gst_camerasrc_debug( "Not supported type." );
308 if( error != CAMERASRC_SUCCESS )
310 gst_camerasrc_debug( "Failed to set capture mode. Type[%d],value[%d],err code[%x]", type, value, error );
318 gst_camerasrc_control_set_strobe( GstCameraSrc* camerasrc, gint type, gint value )
320 gst_camerasrc_debug( "" );
322 int error = CAMERASRC_ERROR;
324 g_return_val_if_fail( camerasrc, FALSE );
328 case GST_CAMERA_CONTROL_STROBE_MODE:
329 error = camerasrc_set_strobe_mode( camerasrc->v4l2_handle, value );
331 case GST_CAMERA_CONTROL_STROBE_CONTROL:
332 case GST_CAMERA_CONTROL_STROBE_CAPABILITIES:
333 case GST_CAMERA_CONTROL_STROBE_STATUS:
334 case GST_CAMERA_CONTROL_STROBE_EV:
336 gst_camerasrc_debug( "Not supported type[%d], return CAMERASRC_ERR_DEVICE_NOT_SUPPORT.", type );
337 error = CAMERASRC_ERR_DEVICE_NOT_SUPPORT;
341 if( error != CAMERASRC_SUCCESS )
343 gst_camerasrc_debug( "Failed to set strobe. Type[%d],value[%d],err code[%x]", type, value, error );
347 gst_camerasrc_debug( "Succeed to set strobe. Type[%d],value[%d]", type, value );
353 gst_camerasrc_control_get_strobe( GstCameraSrc* camerasrc, gint type, gint* value )
355 gst_camerasrc_debug( "" );
357 int error = CAMERASRC_ERROR;
359 g_return_val_if_fail( camerasrc, FALSE );
363 case GST_CAMERA_CONTROL_STROBE_MODE:
364 error = camerasrc_get_strobe_mode( camerasrc->v4l2_handle, (camerasrc_strobe_mode_t *)value );
366 case GST_CAMERA_CONTROL_STROBE_CONTROL:
367 case GST_CAMERA_CONTROL_STROBE_CAPABILITIES:
368 case GST_CAMERA_CONTROL_STROBE_STATUS:
369 case GST_CAMERA_CONTROL_STROBE_EV:
371 gst_camerasrc_debug( "Not supported type[%d].", type );
372 error = CAMERASRC_ERR_DEVICE_NOT_SUPPORT;
376 if( error != CAMERASRC_SUCCESS )
378 gst_camerasrc_debug( "Failed to get strobe. Type[%d],err code[%x]", type, error );
386 gst_camerasrc_control_set_detect( GstCameraSrc* camerasrc, gint type, gint value )
388 gst_camerasrc_debug( "" );
390 int error = CAMERASRC_ERROR;
392 g_return_val_if_fail( camerasrc, FALSE );
394 /* TODO : detection number, focus select, select number, detect status */
397 case GST_CAMERA_CONTROL_FACE_DETECT_MODE:
400 error = camerasrc_stop_facedetection(camerasrc->v4l2_handle );
402 else if( value == 1 )
404 error = camerasrc_start_facedetection(camerasrc->v4l2_handle );
407 case GST_CAMERA_CONTROL_FACE_DETECT_NUMBER:
409 case GST_CAMERA_CONTROL_FACE_FOCUS_SELECT:
411 case GST_CAMERA_CONTROL_FACE_SELECT_NUMBER:
413 case GST_CAMERA_CONTROL_FACE_DETECT_STATUS:
416 gst_camerasrc_debug( "Not supported type." );
420 if( error != CAMERASRC_SUCCESS )
422 gst_camerasrc_debug( "Failed to set detect. Type[%d],value[%d],err code[%x]", type, value, error );
430 gst_camerasrc_control_get_detect( GstCameraSrc* camerasrc, gint type, gint *value )
432 gst_camerasrc_debug( "" );
434 int error = CAMERASRC_ERROR;
436 g_return_val_if_fail( camerasrc, FALSE );
438 /* TODO : detection number, focus select, select number, detect status */
441 case GST_CAMERA_CONTROL_FACE_DETECT_MODE:
442 error = camerasrc_get_facedetection(camerasrc->v4l2_handle, value);
444 case GST_CAMERA_CONTROL_FACE_DETECT_NUMBER:
446 case GST_CAMERA_CONTROL_FACE_FOCUS_SELECT:
448 case GST_CAMERA_CONTROL_FACE_SELECT_NUMBER:
450 case GST_CAMERA_CONTROL_FACE_DETECT_STATUS:
453 gst_camerasrc_debug( "Not supported type." );
457 if( error != CAMERASRC_SUCCESS )
459 gst_camerasrc_debug( "Failed to get detect. Type[%d],err code[%x]", type, error );
467 gst_camerasrc_control_set_zoom( GstCameraSrc* camerasrc, gint type, gint value )
469 gst_camerasrc_debug( "" );
471 int error = CAMERASRC_ERROR;
473 g_return_val_if_fail( camerasrc, FALSE );
477 case GST_CAMERA_CONTROL_DIGITAL_ZOOM:
478 error = camerasrc_set_control (camerasrc->v4l2_handle, CAMERASRC_CTRL_DIGITAL_ZOOM, value );
480 case GST_CAMERA_CONTROL_OPTICAL_ZOOM:
481 error = camerasrc_set_control (camerasrc->v4l2_handle, CAMERASRC_CTRL_OPTICAL_ZOOM, value );
484 gst_camerasrc_debug( "Not supported type." );
488 if( error != CAMERASRC_SUCCESS )
490 gst_camerasrc_debug( "Failed to set zoom. Type[%d],value[%d],err code[%x]", type, value, error );
498 gst_camerasrc_control_get_zoom( GstCameraSrc* camerasrc, gint type, gint *value )
500 gst_camerasrc_debug( "" );
502 int error = CAMERASRC_ERROR;
504 g_return_val_if_fail( camerasrc, FALSE );
508 case GST_CAMERA_CONTROL_DIGITAL_ZOOM:
509 error = camerasrc_get_control (camerasrc->v4l2_handle, CAMERASRC_CTRL_DIGITAL_ZOOM, value );
511 case GST_CAMERA_CONTROL_OPTICAL_ZOOM:
512 error = camerasrc_get_control (camerasrc->v4l2_handle, CAMERASRC_CTRL_OPTICAL_ZOOM, value );
515 gst_camerasrc_debug( "Not supported type." );
519 if( error != CAMERASRC_SUCCESS )
521 gst_camerasrc_debug( "Failed to get zoom. Type[%d],err code[%x]", type, error );
529 gst_camerasrc_control_set_focus( GstCameraSrc* camerasrc, gint focus_mode, gint focus_range )
531 gst_camerasrc_debug( "" );
533 int error = CAMERASRC_ERROR;
535 g_return_val_if_fail( camerasrc, FALSE );
537 error = camerasrc_init_autofocusing_mode( camerasrc->v4l2_handle, focus_mode, focus_range );
539 if( error != CAMERASRC_SUCCESS )
541 gst_camerasrc_debug( "Failed to set AF mode." );
549 gst_camerasrc_control_get_focus( GstCameraSrc* camerasrc, gint *focus_mode, gint *focus_range )
551 gst_camerasrc_debug( "" );
553 int error = CAMERASRC_ERROR;
555 g_return_val_if_fail( camerasrc, FALSE );
557 error = camerasrc_get_autofocusing_mode(camerasrc->v4l2_handle, (camerasrc_af_mode_t *)focus_mode, (camerasrc_af_scan_range_t *)focus_range);
559 if( error != CAMERASRC_SUCCESS )
561 gst_camerasrc_debug( "Failed to get AF mode." );
569 gst_camerasrc_control_start_auto_focus( GstCameraSrc* camerasrc )
571 gst_camerasrc_debug( "" );
573 int error = CAMERASRC_ERROR;
575 g_return_val_if_fail( camerasrc, FALSE );
577 MMTA_ACUM_ITEM_BEGIN( "AutoFocus operating time", FALSE );
579 error = camerasrc_start_autofocusing( camerasrc->v4l2_handle );
581 if( error != CAMERASRC_SUCCESS )
583 gst_camerasrc_debug( "Failed to start AF. error[%x]", error );
588 gst_camerasrc_debug( "Succeeded to start AF." );
594 gst_camerasrc_control_stop_auto_focus( GstCameraSrc* camerasrc )
596 gst_camerasrc_debug( "" );
598 int error = CAMERASRC_ERROR;
600 camerasrc_auto_focus_status_t af_status = CAMERASRC_AUTO_FOCUS_STATUS_RELEASED;
602 g_return_val_if_fail( camerasrc, FALSE );
604 error = camerasrc_stop_autofocusing( camerasrc->v4l2_handle );
605 if( error != CAMERASRC_SUCCESS )
607 gst_camerasrc_debug( "Failed to stop autofocus." );
611 while( try_count++ < CAMERA_CONTROL_AF_STOP_TOTALTIME/CAMERA_CONTROL_AF_STOP_INTERVAL )
613 error = camerasrc_get_autofocusing_status( camerasrc->v4l2_handle, &af_status );
614 if( error != CAMERASRC_SUCCESS )
616 gst_camerasrc_debug( "Failed to get af status.(%x)", error );
620 if( af_status == CAMERASRC_AUTO_FOCUS_STATUS_RELEASED )
622 gst_camerasrc_debug( "AF Stop done. try count[%d]", try_count );
626 usleep( CAMERA_CONTROL_AF_STOP_INTERVAL );
633 gst_camerasrc_control_set_focus_level( GstCameraSrc* camerasrc, gint focus_level )
637 gst_camerasrc_debug( "Not support" );
642 gst_camerasrc_control_get_focus_level( GstCameraSrc* camerasrc, gint *focus_level )
646 gst_camerasrc_debug( "Not support" );
651 gst_camerasrc_control_set_auto_focus_area( GstCameraSrc* camerasrc, GstCameraControlRectType rect )
653 gst_camerasrc_debug( "" );
655 int error = CAMERASRC_ERROR;
656 camerasrc_rect_t camerasrc_rect = { 0, 0, 0, 0 };
658 g_return_val_if_fail( camerasrc, FALSE );
660 if (camerasrc->camera_id == CAMERASRC_DEV_ID_SECONDARY) {
661 GST_INFO_OBJECT(camerasrc, "It's secondary camera. Skip setting...");
665 camerasrc_rect.x = rect.x;
666 camerasrc_rect.y = rect.y;
667 camerasrc_rect.width = rect.width;
668 camerasrc_rect.height = rect.height;
670 GST_INFO_OBJECT(camerasrc, "Set AF area %d,%d,%dx%d",
671 camerasrc_rect.x, camerasrc_rect.y,
672 camerasrc_rect.width, camerasrc_rect.height);
674 error = camerasrc_set_autofocusing_area( camerasrc->v4l2_handle, &camerasrc_rect );
676 if( error != CAMERASRC_SUCCESS )
678 GST_ERROR_OBJECT(camerasrc, "Failed to set auto focus area.");
686 gst_camerasrc_control_get_auto_focus_area( GstCameraSrc* camerasrc, GstCameraControlRectType* rect )
688 gst_camerasrc_debug( "" );
690 int error = CAMERASRC_ERROR;
691 camerasrc_rect_t camerasrc_rect = { 0, 0, 0, 0 };
693 g_return_val_if_fail( camerasrc, FALSE );
694 g_return_val_if_fail( rect, FALSE );
696 error = camerasrc_get_autofocusing_area( camerasrc->v4l2_handle, &camerasrc_rect );
698 if( error != CAMERASRC_SUCCESS )
700 gst_camerasrc_debug( "Failed to get auto focus area." );
702 rect->x = rect->y = -1;
703 rect->width = rect->height = -1;
708 rect->x = camerasrc_rect.x;
709 rect->y = camerasrc_rect.y;
710 rect->width = camerasrc_rect.width;
711 rect->height = camerasrc_rect.height;
717 gst_camerasrc_control_set_wdr( GstCameraSrc* camerasrc, gint value )
719 gst_camerasrc_debug( "" );
721 int error = CAMERASRC_ERROR;
723 g_return_val_if_fail( camerasrc, FALSE );
725 error = camerasrc_set_control (camerasrc->v4l2_handle, CAMERASRC_CTRL_WIDE_DYNAMIC_RANGE, value );
727 if( error != CAMERASRC_SUCCESS )
729 gst_camerasrc_debug( "Failed to set wdr. value[%d],err code[%x]", value, error );
737 gst_camerasrc_control_get_wdr( GstCameraSrc* camerasrc, gint* value )
739 gst_camerasrc_debug( "" );
741 int error = CAMERASRC_ERROR;
743 g_return_val_if_fail( camerasrc, FALSE );
745 error = camerasrc_get_control (camerasrc->v4l2_handle, CAMERASRC_CTRL_WIDE_DYNAMIC_RANGE, value );
747 if( error != CAMERASRC_SUCCESS )
749 gst_camerasrc_debug( "Failed to get wdr. err code[%x]", error );
757 gst_camerasrc_control_set_ahs( GstCameraSrc* camerasrc, gint value )
759 gst_camerasrc_debug( "" );
761 int error = CAMERASRC_ERROR;
763 g_return_val_if_fail( camerasrc, FALSE );
765 error = camerasrc_set_control (camerasrc->v4l2_handle, CAMERASRC_CTRL_ANTI_HANDSHAKE, value );
767 if( error != CAMERASRC_SUCCESS )
769 gst_camerasrc_debug( "Failed to set ahs. value[%d],err code[%x]", value, error );
777 gst_camerasrc_control_get_ahs( GstCameraSrc* camerasrc, gint* value )
779 gst_camerasrc_debug( "" );
781 int error = CAMERASRC_ERROR;
783 g_return_val_if_fail( camerasrc, FALSE );
785 error = camerasrc_get_control (camerasrc->v4l2_handle, CAMERASRC_CTRL_ANTI_HANDSHAKE, value );
787 if( error != CAMERASRC_SUCCESS )
789 gst_camerasrc_debug( "Failed to get ahs. err code[%x]", error );
797 gst_camerasrc_control_set_part_color( GstCameraSrc* camerasrc, gint type, gint value )
799 gst_camerasrc_debug( "" );
801 int error = CAMERASRC_ERROR;
803 g_return_val_if_fail( camerasrc, FALSE );
807 case GST_CAMERA_CONTROL_PART_COLOR_SRC:
808 error = camerasrc_set_control( camerasrc->v4l2_handle, CAMERASRC_CTRL_PARTCOLOR_SRC, value );
810 case GST_CAMERA_CONTROL_PART_COLOR_DST:
811 error = camerasrc_set_control( camerasrc->v4l2_handle, CAMERASRC_CTRL_PARTCOLOR_DST, value );
813 case GST_CAMERA_CONTROL_PART_COLOR_MODE:
814 error = camerasrc_set_control( camerasrc->v4l2_handle, CAMERASRC_CTRL_PARTCOLOR_MODE, value );
817 gst_camerasrc_debug( "Not supported type." );
821 if( error != CAMERASRC_SUCCESS )
823 gst_camerasrc_debug( "Failed to set part color. Type[%d],value[%d],err code[%x]", type, value, error );
831 gst_camerasrc_control_get_part_color( GstCameraSrc* camerasrc, gint type, gint* value )
833 gst_camerasrc_debug( "" );
835 int error = CAMERASRC_ERROR;
837 g_return_val_if_fail( camerasrc, FALSE );
841 case GST_CAMERA_CONTROL_PART_COLOR_SRC:
842 error = camerasrc_get_control( camerasrc->v4l2_handle, CAMERASRC_CTRL_PARTCOLOR_SRC, value );
844 case GST_CAMERA_CONTROL_PART_COLOR_DST:
845 error = camerasrc_get_control( camerasrc->v4l2_handle, CAMERASRC_CTRL_PARTCOLOR_DST, value );
847 case GST_CAMERA_CONTROL_PART_COLOR_MODE:
848 error = camerasrc_get_control( camerasrc->v4l2_handle, CAMERASRC_CTRL_PARTCOLOR_MODE, value );
851 gst_camerasrc_debug( "Not supported type." );
855 if( error != CAMERASRC_SUCCESS )
857 gst_camerasrc_debug( "Failed to get part color. Type[%d],err code[%x]", type, error );
865 gst_camerasrc_control_get_exif_info( GstCameraSrc* camerasrc, GstCameraControlExifInfo* info )
867 gst_camerasrc_debug( "" );
869 int error = CAMERASRC_ERROR;
870 camerasrc_exif_t exif_struct;
872 g_return_val_if_fail( camerasrc, FALSE );
874 error = camerasrc_get_exif_info( camerasrc->v4l2_handle, &exif_struct );
876 if( error != CAMERASRC_SUCCESS )
878 gst_camerasrc_debug( "Failed to get exif info. err code[%x]", error );
883 info->exposure_time_numerator = exif_struct.exposure_time_numerator;
884 info->exposure_time_denominator = exif_struct.exposure_time_denominator;
885 info->shutter_speed_numerator = exif_struct.shutter_speed_numerator;
886 info->shutter_speed_denominator = exif_struct.shutter_speed_denominator;
887 info->brigtness_numerator = exif_struct.brigtness_numerator;
888 info->brightness_denominator = exif_struct.brightness_denominator;
889 info->iso = exif_struct.iso;
890 info->flash = exif_struct.flash;
891 info->metering_mode = exif_struct.metering_mode;
892 info->exif_image_width = exif_struct.exif_image_width;
893 info->exif_image_height = exif_struct.exif_image_height;
894 info->software_used = exif_struct.software_used;
895 info->exposure_bias_in_APEX = exif_struct.exposure_bias_in_APEX;
898 info->component_configuration = exif_struct.component_configuration;
899 info->colorspace = exif_struct.colorspace;
900 info->max_lens_aperture_in_APEX = exif_struct.max_lens_aperture_in_APEX;
903 if (camerasrc->camera_id == CAMERASRC_DEV_ID_PRIMARY) {
904 info->focal_len_numerator = CAMERASRC_PRIMARY_FOCAL_LEGNTH_NUM;
905 info->focal_len_denominator = CAMERASRC_PRIMARY_FOCAL_LEGNTH_DENOM;
906 info->aperture_f_num_numerator = CAMERASRC_PRIMARY_F_NUMBER_NUM;
907 info->aperture_f_num_denominator = CAMERASRC_PRIMARY_F_NUMBER_DENOM;
909 info->focal_len_numerator = CAMERASRC_SECONDARY_FOCAL_LEGNTH_NUM;
910 info->focal_len_denominator = CAMERASRC_SECONDARY_FOCAL_LEGNTH_DENOM;
911 info->aperture_f_num_numerator = CAMERASRC_SECONDARY_F_NUMBER_NUM;
912 info->aperture_f_num_denominator = CAMERASRC_SECONDARY_F_NUMBER_DENOM;
914 info->aperture_in_APEX = CAMERASRC_EXIF_APERTURE_VALUE_IN_APEX(info->aperture_f_num_numerator, info->aperture_f_num_denominator);
919 gboolean gst_camerasrc_control_get_basic_dev_info ( GstCameraSrc* camerasrc, gint dev_id, GstCameraControlCapsInfoType* info )
921 gst_camerasrc_debug( "" );
923 int error = CAMERASRC_ERROR;
925 g_return_val_if_fail( camerasrc, FALSE );
928 * Just implementation issue, but at this time, we assume
929 * GstCameraControlCapsInfoType is exactly same with camerasrc_caps_info_t
931 * Here is plugin code. we can do like this?
934 error = camerasrc_read_basic_dev_info(dev_id, (camerasrc_caps_info_t*)info);
935 if(error != CAMERASRC_SUCCESS)
941 camerasrc_caps_info_t caps_info;
943 error = camerasrc_read_basic_dev_info(dev_id, &caps_info);
944 if(error != CAMERASRC_SUCCESS)
949 if(caps_info.num_fmt_desc != 0)
951 info->num_fmt_desc = caps_info.num_fmt_desc;
952 for (i=0; i<caps_info.num_fmt_desc; i++) {
953 if(caps_info.fmt_desc[i].num_resolution != 0)
955 info->fmt_desc[i].fcc = caps_info.fmt_desc[i].fcc;
956 info->fmt_desc[i].num_resolution = caps_info.fmt_desc[i].num_resolution;
957 for (j=0; j<caps_info.fmt_desc[i].num_resolution; j++)
959 if(caps_info.fmt_desc[i].resolutions[j].num_avail_tpf != 0)
961 info->fmt_desc[i].resolutions[j].w = caps_info.fmt_desc[i].resolutions[j].w;
962 info->fmt_desc[i].resolutions[j].h = caps_info.fmt_desc[i].resolutions[j].h;
963 info->fmt_desc[i].resolutions[j].num_avail_tpf = caps_info.fmt_desc[i].resolutions[j].num_avail_tpf;
964 for(k=0; k< caps_info.fmt_desc[i].resolutions[j].num_avail_tpf; k++)
966 info->fmt_desc[i].resolutions[j].tpf[k].num = caps_info.fmt_desc[i].resolutions[j].tpf[k].num;
967 info->fmt_desc[i].resolutions[j].tpf[k].den = caps_info.fmt_desc[i].resolutions[j].tpf[k].den;
972 /* No available timeperframe */
979 /* No available resolution set */
986 /* No available image format(fourcc) */
993 gboolean gst_camerasrc_control_get_misc_dev_info( GstCameraSrc* camerasrc, gint dev_id, GstCameraControlCtrlListInfoType * info)
995 gst_camerasrc_debug( "" );
997 int error = CAMERASRC_ERROR;
999 g_return_val_if_fail( camerasrc, FALSE );
1002 * Just implementation issue, but at this time, we assume
1003 * GstCameraControlCtrlListInfoType is exactly same with camerasrc_ctrl_list_info_t
1005 * Here is plugin code. we can do like this?
1008 error = camerasrc_read_misc_dev_info(dev_id, (camerasrc_ctrl_list_info_t*)info);
1009 if(error != CAMERASRC_SUCCESS)
1015 camerasrc_ctrl_list_info_t ctrl_info;
1017 error = camerasrc_read_misc_dev_info(dev_id, &ctrl_info);
1018 if(error != CAMERASRC_SUCCESS)
1023 if(ctrl_info.num_ctrl_list_info != 0)
1025 info->num_ctrl_list_info = ctrl_info.num_ctrl_list_info;
1026 for(i=0; i< ctrl_info.num_ctrl_list_info; i++)
1028 info->ctrl_info[i].camerasrc_ctrl_id = ctrl_info.ctrl_info[i].camerasrc_ctrl_id;
1029 info->ctrl_info[i].v4l2_ctrl_id = ctrl_info.ctrl_info[i].v4l2_ctrl_id;
1030 info->ctrl_info[i].ctrl_type = ctrl_info.ctrl_info[i].ctrl_type;
1031 info->ctrl_info[i].max = ctrl_info.ctrl_info[i].max;
1032 info->ctrl_info[i].min = ctrl_info.ctrl_info[i].min;
1033 info->ctrl_info[i].step = ctrl_info.ctrl_info[i].step;
1034 info->ctrl_info[i].default_val = ctrl_info.ctrl_info[i].default_val;
1035 info->ctrl_info[i].num_ctrl_menu = ctrl_info.ctrl_info[i].num_ctrl_menu;
1036 memcpy(info->ctrl_info[i].ctrl_name,ctrl_info.ctrl_info[i].ctrl_name,MAX_SZ_CTRL_NAME_STRING);
1037 if(ctrl_info.ctrl_info[i].ctrl_type == CTRL_TYPE_ARRAY && ctrl_info.ctrl_info[i].num_ctrl_menu != 0)
1039 for(j=0; j<ctrl_info.ctrl_info[i].num_ctrl_menu; j++)
1041 info->ctrl_info[i].ctrl_menu[j].menu_index = ctrl_info.ctrl_info[i].ctrl_menu[j].menu_index;
1042 memcpy(info->ctrl_info[i].ctrl_menu[j].menu_name, ctrl_info.ctrl_info[i].ctrl_menu[j].menu_name, MAX_SZ_CTRL_NAME_STRING);
1047 /* Not a menu type or not available menus */
1054 /* Not avaliable controls */
1061 gboolean gst_camerasrc_control_get_extra_dev_info( GstCameraSrc* camerasrc, gint dev_id, GstCameraControlExtraInfoType * info)
1063 int error = CAMERASRC_ERROR;
1065 g_return_val_if_fail( camerasrc, FALSE );
1067 gst_camerasrc_debug( "" );
1070 * Just implementation issue, but at this time, we assume
1071 * GstCameraControlCtrlListInfoType is exactly same with camerasrc_ctrl_list_info_t
1073 * Here is plugin code. we can do like this?
1076 error = camerasrc_read_extra_dev_info(dev_id, (camerasrc_extra_info_t*)info);
1077 if(error != CAMERASRC_SUCCESS)
1085 void gst_camerasrc_control_set_capture_command( GstCameraSrc* camerasrc, GstCameraControlCaptureCommand cmd )
1087 gst_camerasrc_debug( "" );
1089 if( camerasrc == NULL )
1091 gst_camerasrc_debug( "camerasrc is NULL" );
1095 gst_camerasrc_set_capture_command( camerasrc, cmd );