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_handle",
312 MM_ATTRS_VALID_TYPE_NONE,
317 (char *)"hdcp_version",
321 MM_ATTRS_VALID_TYPE_INT_RANGE,
330 MM_ATTRS_VALID_TYPE_INT_RANGE,
336 num_of_attrs = ARRAY_SIZE(wfd_attrs);
338 base = (mmf_attrs_construct_info_t *)malloc(num_of_attrs * sizeof(mmf_attrs_construct_info_t));
341 debug_error("Cannot create mmwfd attribute\n");
345 /* initialize values of attributes */
346 for (idx = 0; idx < num_of_attrs; idx++) {
347 base[idx].name = wfd_attrs[idx].name;
348 base[idx].value_type = wfd_attrs[idx].value_type;
349 base[idx].flags = wfd_attrs[idx].flags;
350 base[idx].default_value = wfd_attrs[idx].default_value;
353 attrs = mmf_attrs_new_from_data(
366 debug_error("Cannot create mmwfd attribute\n");
370 /* set validity type and range */
371 for (idx = 0; idx < num_of_attrs; idx++) {
372 switch (wfd_attrs[idx].valid_type) {
373 case MM_ATTRS_VALID_TYPE_INT_RANGE: {
374 mmf_attrs_set_valid_type(attrs, idx, MM_ATTRS_VALID_TYPE_INT_RANGE);
375 mmf_attrs_set_valid_range(attrs, idx,
376 wfd_attrs[idx].value_min,
377 wfd_attrs[idx].value_max,
378 (int)wfd_attrs[idx].default_value);
382 case MM_ATTRS_VALID_TYPE_INT_ARRAY:
383 case MM_ATTRS_VALID_TYPE_DOUBLE_ARRAY:
384 case MM_ATTRS_VALID_TYPE_DOUBLE_RANGE:
395 _mmwfd_deconstruct_attribute(attrs);
397 return (MMHandleType)NULL;
401 _mmwfd_deconstruct_attribute(MMHandleType handle)
405 return_if_fail(handle);
408 mmf_attrs_free(handle);
414 _mmwfd_get_attribute(MMHandleType handle, char **err_attr_name, const char *attribute_name, va_list args_list)
416 int result = MM_ERROR_NONE;
417 MMHandleType attrs = 0;
421 /* NOTE : Don't need to check err_attr_name because it can be set NULL */
422 /* if it's not want to know it. */
423 return_val_if_fail(attribute_name, MM_ERROR_COMMON_INVALID_ARGUMENT);
424 return_val_if_fail(handle, MM_ERROR_COMMON_INVALID_ARGUMENT);
428 return_val_if_fail(attrs, MM_ERROR_COMMON_INVALID_ARGUMENT);
430 result = mm_attrs_get_valist(attrs, err_attr_name, attribute_name, args_list);
432 if (result != MM_ERROR_NONE)
433 debug_error("failed to get %s attribute\n", attribute_name);
441 _mmwfd_set_attribute(MMHandleType handle, char **err_attr_name, const char *attribute_name, va_list args_list)
443 int result = MM_ERROR_NONE;
444 MMHandleType attrs = 0;
448 /* NOTE : Don't need to check err_attr_name because it can be set NULL */
449 /* if it's not want to know it. */
450 return_val_if_fail(attribute_name, MM_ERROR_COMMON_INVALID_ARGUMENT);
451 return_val_if_fail(handle, MM_ERROR_COMMON_INVALID_ARGUMENT);
455 return_val_if_fail(attrs, MM_ERROR_COMMON_INVALID_ARGUMENT);
457 /* set attributes and commit them */
458 result = mm_attrs_set_valist(attrs, err_attr_name, attribute_name, args_list);
460 if (result != MM_ERROR_NONE) {
461 debug_error("failed to set %s attribute\n", attribute_name);
465 /*__mmwfd_apply_attribute(handle, attribute_name); */
472 /* Currently not used. */
474 __mmwfd_apply_attribute(MMHandleType handle, const char *attribute_name)
476 MMHandleType attrs = 0;
481 return_val_if_fail(handle, MM_ERROR_COMMON_INVALID_ARGUMENT);
482 return_val_if_fail(attribute_name, MM_ERROR_COMMON_INVALID_ARGUMENT);
486 return_val_if_fail(attrs, MM_ERROR_COMMON_INVALID_ARGUMENT);
488 wfd = (mm_wfd_t*)handle;
490 // TODO: This function is not useful at this moment
498 _mmwfd_get_attributes_info(MMHandleType handle, const char *attribute_name, MMWfdAttrsInfo *dst_info)
500 int result = MM_ERROR_NONE;
501 MMHandleType attrs = 0;
502 MMAttrsInfo src_info = {0, };
506 return_val_if_fail(attribute_name, MM_ERROR_COMMON_INVALID_ARGUMENT);
507 return_val_if_fail(dst_info, MM_ERROR_COMMON_INVALID_ARGUMENT);
508 return_val_if_fail(handle, MM_ERROR_COMMON_INVALID_ARGUMENT);
512 return_val_if_fail(attrs, MM_ERROR_COMMON_INVALID_ARGUMENT);
514 result = mm_attrs_get_info_by_name(attrs, attribute_name, &src_info);
516 if (result != MM_ERROR_NONE) {
517 debug_error("failed to get attribute info\n");
521 memset(dst_info, 0x00, sizeof(MMWfdAttrsInfo));
523 dst_info->type = src_info.type;
524 dst_info->flag = src_info.flag;
525 dst_info->validity_type = src_info.validity_type;
527 switch (src_info.validity_type) {
528 case MM_ATTRS_VALID_TYPE_INT_ARRAY:
529 dst_info->int_array.array = src_info.int_array.array;
530 dst_info->int_array.count = src_info.int_array.count;
531 dst_info->int_array.d_val = src_info.int_array.dval;
534 case MM_ATTRS_VALID_TYPE_INT_RANGE:
535 dst_info->int_range.min = src_info.int_range.min;
536 dst_info->int_range.max = src_info.int_range.max;
537 dst_info->int_range.d_val = src_info.int_range.dval;
540 case MM_ATTRS_VALID_TYPE_DOUBLE_ARRAY:
541 dst_info->double_array.array = src_info.double_array.array;
542 dst_info->double_array.count = src_info.double_array.count;
543 dst_info->double_array.d_val = src_info.double_array.dval;
546 case MM_ATTRS_VALID_TYPE_DOUBLE_RANGE:
547 dst_info->double_range.min = src_info.double_range.min;
548 dst_info->double_range.max = src_info.double_range.max;
549 dst_info->double_range.d_val = src_info.double_range.dval;