4 * Copyright (c) 2011 - 2013 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: JongHyuk Choi <jhchoi.choi@samsung.com>, ByungWook Jang <bw.jang@samsung.com>,
7 * Manoj Kumar K <manojkumar.k@samsung.com>, Hyunil Park <hyunil46.park@samsung.com>
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
23 #include "mm_wfd_attrs.h"
30 int valid_type; // validity type
31 int value_min; //<- set validity value range
35 //static gboolean __mmwfd_apply_attribute(MMHandleType handle, const char *attribute_name);
38 _mmwfd_construct_attribute(MMHandleType handle)
41 MMHandleType attrs = 0;
43 mmf_attrs_construct_info_t *base = NULL;
47 return_val_if_fail(handle, (MMHandleType) NULL);
49 MMWfdAttrsSpec wfd_attrs[] =
56 MM_ATTRS_VALID_TYPE_NONE,
66 MM_ATTRS_VALID_TYPE_NONE,
76 MM_ATTRS_VALID_TYPE_INT_RANGE,
80 /* Initialized with invalid native type, if a valid value is set then only this atribute will be considered */
86 MM_ATTRS_VALID_TYPE_INT_RANGE,
90 /* Initialized with invalid resolution, if a valid value is set then only this atribute will be considered */
92 "prefered_resolutions",
96 MM_ATTRS_VALID_TYPE_INT_RANGE,
100 /* Initialized with invalid uibc option, if a valid value is set then only this atribute will be considered */
106 MM_ATTRS_VALID_TYPE_INT_RANGE,
115 MM_ATTRS_VALID_TYPE_INT_RANGE,
120 "display_src_crop_x",
124 MM_ATTRS_VALID_TYPE_INT_RANGE,
129 "display_src_crop_y",
133 MM_ATTRS_VALID_TYPE_INT_RANGE,
138 "display_src_crop_width",
142 MM_ATTRS_VALID_TYPE_INT_RANGE,
147 "display_src_crop_height",
151 MM_ATTRS_VALID_TYPE_INT_RANGE,
160 MM_ATTRS_VALID_TYPE_INT_RANGE,
169 MM_ATTRS_VALID_TYPE_INT_RANGE,
178 MM_ATTRS_VALID_TYPE_INT_RANGE,
183 "display_roi_height",
187 MM_ATTRS_VALID_TYPE_INT_RANGE,
195 (void *) MM_DISPLAY_METHOD_CUSTOM_ROI_FULL_SCREEN,
196 MM_ATTRS_VALID_TYPE_INT_RANGE,
197 MM_DISPLAY_METHOD_CUSTOM_ROI_FULL_SCREEN,
198 MM_DISPLAY_METHOD_CUSTOM_ROI_LETER_BOX
204 (void *) MM_DISPLAY_ROTATION_NONE,
205 MM_ATTRS_VALID_TYPE_INT_RANGE,
206 MM_DISPLAY_ROTATION_NONE,
207 MM_DISPLAY_ROTATION_270
214 MM_ATTRS_VALID_TYPE_INT_RANGE,
222 (void *) MM_DISPLAY_METHOD_LETTER_BOX,
223 MM_ATTRS_VALID_TYPE_INT_RANGE,
224 MM_DISPLAY_METHOD_LETTER_BOX,
225 MM_DISPLAY_METHOD_CUSTOM_ROI
232 MM_ATTRS_VALID_TYPE_NONE,
237 "display_overlay_user_data",
241 MM_ATTRS_VALID_TYPE_NONE,
247 MM_ATTRS_TYPE_DOUBLE,
250 MM_ATTRS_VALID_TYPE_DOUBLE_RANGE,
255 "display_surface_type",
258 (void *) MM_DISPLAY_SURFACE_NULL,
259 MM_ATTRS_VALID_TYPE_INT_RANGE,
260 MM_DISPLAY_SURFACE_X,
261 MM_DISPLAY_SURFACE_X_EXT
264 "display_width", // dest width of fimcconvert ouput
268 MM_ATTRS_VALID_TYPE_INT_RANGE,
273 "display_height", // dest height of fimcconvert ouput
277 MM_ATTRS_VALID_TYPE_INT_RANGE,
282 "display_evas_do_scaling",
286 MM_ATTRS_VALID_TYPE_INT_RANGE,
295 MM_ATTRS_VALID_TYPE_INT_RANGE,
304 MM_ATTRS_VALID_TYPE_INT_RANGE,
313 MM_ATTRS_VALID_TYPE_NONE,
322 MM_ATTRS_VALID_TYPE_INT_RANGE,
331 MM_ATTRS_VALID_TYPE_INT_RANGE,
337 num_of_attrs = ARRAY_SIZE(wfd_attrs);
339 base = (mmf_attrs_construct_info_t* )malloc(num_of_attrs * sizeof(mmf_attrs_construct_info_t));
343 debug_error("Cannot create mmwfd attribute\n");
347 /* initialize values of attributes */
348 for ( idx = 0; idx < num_of_attrs; idx++ )
350 base[idx].name = wfd_attrs[idx].name;
351 base[idx].value_type = wfd_attrs[idx].value_type;
352 base[idx].flags = wfd_attrs[idx].flags;
353 base[idx].default_value = wfd_attrs[idx].default_value;
356 attrs = mmf_attrs_new_from_data(
371 debug_error("Cannot create mmwfd attribute\n");
375 /* set validity type and range */
376 for ( idx = 0; idx < num_of_attrs; idx++ )
378 switch ( wfd_attrs[idx].valid_type)
380 case MM_ATTRS_VALID_TYPE_INT_RANGE:
382 mmf_attrs_set_valid_type (attrs, idx, MM_ATTRS_VALID_TYPE_INT_RANGE);
383 mmf_attrs_set_valid_range (attrs, idx,
384 wfd_attrs[idx].value_min,
385 wfd_attrs[idx].value_max,
386 (int)wfd_attrs[idx].default_value);
390 case MM_ATTRS_VALID_TYPE_INT_ARRAY:
391 case MM_ATTRS_VALID_TYPE_DOUBLE_ARRAY:
392 case MM_ATTRS_VALID_TYPE_DOUBLE_RANGE:
403 _mmwfd_deconstruct_attribute(attrs);
405 return (MMHandleType)NULL;
409 _mmwfd_deconstruct_attribute(MMHandleType handle) // @
413 return_if_fail( handle );
417 mmf_attrs_free (handle);
425 _mmwfd_get_attribute(MMHandleType handle, char **err_attr_name, const char *attribute_name, va_list args_list)
427 int result = MM_ERROR_NONE;
428 MMHandleType attrs = 0;
432 /* NOTE : Don't need to check err_attr_name because it can be set NULL */
433 /* if it's not want to know it. */
434 return_val_if_fail(attribute_name, MM_ERROR_COMMON_INVALID_ARGUMENT);
435 return_val_if_fail(handle, MM_ERROR_COMMON_INVALID_ARGUMENT);
439 return_val_if_fail(attrs, MM_ERROR_COMMON_INVALID_ARGUMENT);
441 result = mm_attrs_get_valist(attrs, err_attr_name, attribute_name, args_list);
443 if ( result != MM_ERROR_NONE)
444 debug_error("failed to get %s attribute\n", attribute_name);
452 _mmwfd_set_attribute(MMHandleType handle, char **err_attr_name, const char *attribute_name, va_list args_list)
454 int result = MM_ERROR_NONE;
455 MMHandleType attrs = 0;
459 /* NOTE : Don't need to check err_attr_name because it can be set NULL */
460 /* if it's not want to know it. */
461 return_val_if_fail(attribute_name, MM_ERROR_COMMON_INVALID_ARGUMENT);
462 return_val_if_fail(handle, MM_ERROR_COMMON_INVALID_ARGUMENT);
466 return_val_if_fail(attrs, MM_ERROR_COMMON_INVALID_ARGUMENT);
468 /* set attributes and commit them */
469 result = mm_attrs_set_valist(attrs, err_attr_name, attribute_name, args_list);
471 if ( result != MM_ERROR_NONE)
473 debug_error("failed to set %s attribute\n", attribute_name);
477 //__mmwfd_apply_attribute(handle, attribute_name);
484 // Currently not used.
486 __mmwfd_apply_attribute(MMHandleType handle, const char *attribute_name)
488 MMHandleType attrs = 0;
493 return_val_if_fail(handle, MM_ERROR_COMMON_INVALID_ARGUMENT);
494 return_val_if_fail(attribute_name, MM_ERROR_COMMON_INVALID_ARGUMENT);
498 return_val_if_fail(attrs, MM_ERROR_COMMON_INVALID_ARGUMENT);
500 wfd = (mm_wfd_t*)handle;
502 // TODO: This function is not useful at this moment
510 _mmwfd_get_attributes_info(MMHandleType handle, const char *attribute_name, MMWfdAttrsInfo *dst_info)
512 int result = MM_ERROR_NONE;
513 MMHandleType attrs = 0;
514 MMAttrsInfo src_info = {0, };
518 return_val_if_fail(attribute_name, MM_ERROR_COMMON_INVALID_ARGUMENT);
519 return_val_if_fail(dst_info, MM_ERROR_COMMON_INVALID_ARGUMENT);
520 return_val_if_fail(handle, MM_ERROR_COMMON_INVALID_ARGUMENT);
524 return_val_if_fail(attrs, MM_ERROR_COMMON_INVALID_ARGUMENT);
526 result = mm_attrs_get_info_by_name(attrs, attribute_name, &src_info);
528 if ( result != MM_ERROR_NONE)
530 debug_error("failed to get attribute info\n");
534 memset(dst_info, 0x00, sizeof(MMWfdAttrsInfo));
536 dst_info->type = src_info.type;
537 dst_info->flag = src_info.flag;
538 dst_info->validity_type= src_info.validity_type;
540 switch(src_info.validity_type)
542 case MM_ATTRS_VALID_TYPE_INT_ARRAY:
543 dst_info->int_array.array = src_info.int_array.array;
544 dst_info->int_array.count = src_info.int_array.count;
545 dst_info->int_array.d_val = src_info.int_array.dval;
548 case MM_ATTRS_VALID_TYPE_INT_RANGE:
549 dst_info->int_range.min = src_info.int_range.min;
550 dst_info->int_range.max = src_info.int_range.max;
551 dst_info->int_range.d_val = src_info.int_range.dval;
554 case MM_ATTRS_VALID_TYPE_DOUBLE_ARRAY:
555 dst_info->double_array.array = src_info.double_array.array;
556 dst_info->double_array.count = src_info.double_array.count;
557 dst_info->double_array.d_val = src_info.double_array.dval;
560 case MM_ATTRS_VALID_TYPE_DOUBLE_RANGE:
561 dst_info->double_range.min = src_info.double_range.min;
562 dst_info->double_range.max = src_info.double_range.max;
563 dst_info->double_range.d_val = src_info.double_range.dval;