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"
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[] = {
55 MM_ATTRS_VALID_TYPE_NONE,
61 (char *)"server_port",
65 MM_ATTRS_VALID_TYPE_NONE,
71 (char *)"max_client_count",
75 MM_ATTRS_VALID_TYPE_INT_RANGE,
79 /* Initialized with invalid native type, if a valid value is set then only this atribute will be considered */
81 (char *)"native_resolution",
85 MM_ATTRS_VALID_TYPE_INT_RANGE,
89 /* Initialized with invalid resolution, if a valid value is set then only this atribute will be considered */
91 (char *)"prefered_resolutions",
95 MM_ATTRS_VALID_TYPE_INT_RANGE,
99 /* Initialized with invalid uibc option, if a valid value is set then only this atribute will be considered */
105 MM_ATTRS_VALID_TYPE_INT_RANGE,
110 (char *)"display_rotate",
114 MM_ATTRS_VALID_TYPE_INT_RANGE,
119 (char *)"display_src_crop_x",
123 MM_ATTRS_VALID_TYPE_INT_RANGE,
128 (char *)"display_src_crop_y",
132 MM_ATTRS_VALID_TYPE_INT_RANGE,
137 (char *)"display_src_crop_width",
141 MM_ATTRS_VALID_TYPE_INT_RANGE,
146 (char *)"display_src_crop_height",
150 MM_ATTRS_VALID_TYPE_INT_RANGE,
155 (char *)"display_roi_x",
159 MM_ATTRS_VALID_TYPE_INT_RANGE,
164 (char *)"display_roi_y",
168 MM_ATTRS_VALID_TYPE_INT_RANGE,
173 (char *)"display_roi_width",
177 MM_ATTRS_VALID_TYPE_INT_RANGE,
182 (char *)"display_roi_height",
186 MM_ATTRS_VALID_TYPE_INT_RANGE,
191 (char *)"display_roi_mode",
194 (void *) MM_DISPLAY_METHOD_CUSTOM_ROI_FULL_SCREEN,
195 MM_ATTRS_VALID_TYPE_INT_RANGE,
196 MM_DISPLAY_METHOD_CUSTOM_ROI_FULL_SCREEN,
197 MM_DISPLAY_METHOD_CUSTOM_ROI_LETER_BOX
200 (char *)"display_rotation",
203 (void *) MM_DISPLAY_ROTATION_NONE,
204 MM_ATTRS_VALID_TYPE_INT_RANGE,
205 MM_DISPLAY_ROTATION_NONE,
206 MM_DISPLAY_ROTATION_270
209 (char *)"display_visible",
213 MM_ATTRS_VALID_TYPE_INT_RANGE,
218 (char *)"display_method",
221 (void *) MM_DISPLAY_METHOD_LETTER_BOX,
222 MM_ATTRS_VALID_TYPE_INT_RANGE,
223 MM_DISPLAY_METHOD_LETTER_BOX,
224 MM_DISPLAY_METHOD_CUSTOM_ROI
227 (char *)"display_overlay",
231 MM_ATTRS_VALID_TYPE_NONE,
236 (char *)"display_overlay_user_data",
240 MM_ATTRS_VALID_TYPE_NONE,
245 (char *)"display_zoom",
246 MM_ATTRS_TYPE_DOUBLE,
249 MM_ATTRS_VALID_TYPE_DOUBLE_RANGE,
254 (char *)"display_surface_type",
257 (void *) MM_DISPLAY_SURFACE_NULL,
258 MM_ATTRS_VALID_TYPE_INT_RANGE,
259 MM_DISPLAY_SURFACE_X,
260 MM_DISPLAY_SURFACE_X_EXT
263 (char *)"display_width", /* dest width of fimcconvert ouput */
267 MM_ATTRS_VALID_TYPE_INT_RANGE,
272 (char *)"display_height", /* dest height of fimcconvert ouput */
276 MM_ATTRS_VALID_TYPE_INT_RANGE,
281 (char *)"display_evas_do_scaling",
285 MM_ATTRS_VALID_TYPE_INT_RANGE,
294 MM_ATTRS_VALID_TYPE_INT_RANGE,
303 MM_ATTRS_VALID_TYPE_INT_RANGE,
308 (char *)"hdcp_version",
312 MM_ATTRS_VALID_TYPE_INT_RANGE,
321 MM_ATTRS_VALID_TYPE_INT_RANGE,
327 num_of_attrs = ARRAY_SIZE(wfd_attrs);
329 base = (mmf_attrs_construct_info_t *)malloc(num_of_attrs * sizeof(mmf_attrs_construct_info_t));
332 debug_error("Cannot create mmwfd attribute\n");
336 /* initialize values of attributes */
337 for (idx = 0; idx < num_of_attrs; idx++) {
338 base[idx].name = wfd_attrs[idx].name;
339 base[idx].value_type = wfd_attrs[idx].value_type;
340 base[idx].flags = wfd_attrs[idx].flags;
341 base[idx].default_value = wfd_attrs[idx].default_value;
344 attrs = mmf_attrs_new_from_data(
357 debug_error("Cannot create mmwfd attribute\n");
361 /* set validity type and range */
362 for (idx = 0; idx < num_of_attrs; idx++) {
363 switch (wfd_attrs[idx].valid_type) {
364 case MM_ATTRS_VALID_TYPE_INT_RANGE: {
365 mmf_attrs_set_valid_type(attrs, idx, MM_ATTRS_VALID_TYPE_INT_RANGE);
366 mmf_attrs_set_valid_range(attrs, idx,
367 wfd_attrs[idx].value_min,
368 wfd_attrs[idx].value_max,
369 (int)wfd_attrs[idx].default_value);
373 case MM_ATTRS_VALID_TYPE_INT_ARRAY:
374 case MM_ATTRS_VALID_TYPE_DOUBLE_ARRAY:
375 case MM_ATTRS_VALID_TYPE_DOUBLE_RANGE:
386 _mmwfd_deconstruct_attribute(attrs);
388 return (MMHandleType)NULL;
392 _mmwfd_deconstruct_attribute(MMHandleType handle)
396 return_if_fail(handle);
399 mmf_attrs_free(handle);
405 _mmwfd_get_attribute(MMHandleType handle, char **err_attr_name, const char *attribute_name, va_list args_list)
407 int result = MM_ERROR_NONE;
408 MMHandleType attrs = 0;
412 /* NOTE : Don't need to check err_attr_name because it can be set NULL */
413 /* if it's not want to know it. */
414 return_val_if_fail(attribute_name, MM_ERROR_COMMON_INVALID_ARGUMENT);
415 return_val_if_fail(handle, MM_ERROR_COMMON_INVALID_ARGUMENT);
419 return_val_if_fail(attrs, MM_ERROR_COMMON_INVALID_ARGUMENT);
421 result = mm_attrs_get_valist(attrs, err_attr_name, attribute_name, args_list);
423 if (result != MM_ERROR_NONE)
424 debug_error("failed to get %s attribute\n", attribute_name);
432 _mmwfd_set_attribute(MMHandleType handle, char **err_attr_name, const char *attribute_name, va_list args_list)
434 int result = MM_ERROR_NONE;
435 MMHandleType attrs = 0;
439 /* NOTE : Don't need to check err_attr_name because it can be set NULL */
440 /* if it's not want to know it. */
441 return_val_if_fail(attribute_name, MM_ERROR_COMMON_INVALID_ARGUMENT);
442 return_val_if_fail(handle, MM_ERROR_COMMON_INVALID_ARGUMENT);
446 return_val_if_fail(attrs, MM_ERROR_COMMON_INVALID_ARGUMENT);
448 /* set attributes and commit them */
449 result = mm_attrs_set_valist(attrs, err_attr_name, attribute_name, args_list);
451 if (result != MM_ERROR_NONE) {
452 debug_error("failed to set %s attribute\n", attribute_name);
456 /*__mmwfd_apply_attribute(handle, attribute_name); */
463 /* Currently not used. */
465 __mmwfd_apply_attribute(MMHandleType handle, const char *attribute_name)
467 MMHandleType attrs = 0;
472 return_val_if_fail(handle, MM_ERROR_COMMON_INVALID_ARGUMENT);
473 return_val_if_fail(attribute_name, MM_ERROR_COMMON_INVALID_ARGUMENT);
477 return_val_if_fail(attrs, MM_ERROR_COMMON_INVALID_ARGUMENT);
479 wfd = (mm_wfd_t*)handle;
481 // TODO: This function is not useful at this moment
489 _mmwfd_get_attributes_info(MMHandleType handle, const char *attribute_name, MMWfdAttrsInfo *dst_info)
491 int result = MM_ERROR_NONE;
492 MMHandleType attrs = 0;
493 MMAttrsInfo src_info = {0, };
497 return_val_if_fail(attribute_name, MM_ERROR_COMMON_INVALID_ARGUMENT);
498 return_val_if_fail(dst_info, MM_ERROR_COMMON_INVALID_ARGUMENT);
499 return_val_if_fail(handle, MM_ERROR_COMMON_INVALID_ARGUMENT);
503 return_val_if_fail(attrs, MM_ERROR_COMMON_INVALID_ARGUMENT);
505 result = mm_attrs_get_info_by_name(attrs, attribute_name, &src_info);
507 if (result != MM_ERROR_NONE) {
508 debug_error("failed to get attribute info\n");
512 memset(dst_info, 0x00, sizeof(MMWfdAttrsInfo));
514 dst_info->type = src_info.type;
515 dst_info->flag = src_info.flag;
516 dst_info->validity_type = src_info.validity_type;
518 switch (src_info.validity_type) {
519 case MM_ATTRS_VALID_TYPE_INT_ARRAY:
520 dst_info->int_array.array = src_info.int_array.array;
521 dst_info->int_array.count = src_info.int_array.count;
522 dst_info->int_array.d_val = src_info.int_array.dval;
525 case MM_ATTRS_VALID_TYPE_INT_RANGE:
526 dst_info->int_range.min = src_info.int_range.min;
527 dst_info->int_range.max = src_info.int_range.max;
528 dst_info->int_range.d_val = src_info.int_range.dval;
531 case MM_ATTRS_VALID_TYPE_DOUBLE_ARRAY:
532 dst_info->double_array.array = src_info.double_array.array;
533 dst_info->double_array.count = src_info.double_array.count;
534 dst_info->double_array.d_val = src_info.double_array.dval;
537 case MM_ATTRS_VALID_TYPE_DOUBLE_RANGE:
538 dst_info->double_range.min = src_info.double_range.min;
539 dst_info->double_range.max = src_info.double_range.max;
540 dst_info->double_range.d_val = src_info.double_range.dval;