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 * Maksym Ukhanov <m.ukhanov@samsung.com>, Hyunjun Ko <zzoon.ko@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.
25 #include "mm_wfd_sink_util.h"
26 #include "mm_wfd_sink.h"
27 #include "mm_wfd_sink_priv.h"
28 #include "mm_wfd_sink_dlog.h"
30 int mm_wfd_sink_create(MMHandleType *wfd_sink)
32 mm_wfd_sink_t *new_wfd_sink = NULL;
33 int result = MM_ERROR_NONE;
35 wfd_sink_debug_fenter();
37 wfd_sink_return_val_if_fail(wfd_sink, MM_ERROR_WFD_NOT_INITIALIZED);
39 result = _mm_wfd_sink_create(&new_wfd_sink);
40 if (result != MM_ERROR_NONE)
42 wfd_sink_error("fail to create wi-fi display sink handle. ret[%d]", result);
43 *wfd_sink = (MMHandleType)NULL;
48 g_mutex_init(&new_wfd_sink->cmd_lock);
50 *wfd_sink = (MMHandleType)new_wfd_sink;
52 wfd_sink_debug_fleave();
58 int mm_wfd_sink_prepare(MMHandleType wfd_sink)
60 int result = MM_ERROR_NONE;
62 wfd_sink_return_val_if_fail (wfd_sink, MM_ERROR_WFD_NOT_INITIALIZED);
64 MMWFDSINK_CMD_LOCK(wfd_sink);
65 result = _mm_wfd_sink_prepare((mm_wfd_sink_t *)wfd_sink);
66 MMWFDSINK_CMD_UNLOCK(wfd_sink);
71 int mm_wfd_sink_connect(MMHandleType wfd_sink, const char *uri)
73 int result = MM_ERROR_NONE;
75 wfd_sink_return_val_if_fail (wfd_sink, MM_ERROR_WFD_NOT_INITIALIZED);
76 wfd_sink_return_val_if_fail (uri, MM_ERROR_WFD_INVALID_ARGUMENT);
78 MMWFDSINK_CMD_LOCK(wfd_sink);
79 result = _mm_wfd_sink_connect((mm_wfd_sink_t *)wfd_sink, uri);
80 MMWFDSINK_CMD_UNLOCK(wfd_sink);
85 int mm_wfd_sink_start(MMHandleType wfd_sink)
87 int result = MM_ERROR_NONE;
89 wfd_sink_return_val_if_fail(wfd_sink, MM_ERROR_WFD_NOT_INITIALIZED);
91 MMWFDSINK_CMD_LOCK(wfd_sink);
92 result = _mm_wfd_sink_start((mm_wfd_sink_t *)wfd_sink);
93 MMWFDSINK_CMD_UNLOCK(wfd_sink);
98 int mm_wfd_sink_disconnect(MMHandleType wfd_sink)
100 int result = MM_ERROR_NONE;
102 wfd_sink_return_val_if_fail(wfd_sink, MM_ERROR_WFD_NOT_INITIALIZED);
104 MMWFDSINK_CMD_LOCK(wfd_sink);
105 result = _mm_wfd_sink_disconnect((mm_wfd_sink_t *)wfd_sink);
106 MMWFDSINK_CMD_UNLOCK(wfd_sink);
111 int mm_wfd_sink_unprepare(MMHandleType wfd_sink)
113 int result = MM_ERROR_NONE;
115 wfd_sink_return_val_if_fail (wfd_sink, MM_ERROR_WFD_NOT_INITIALIZED);
117 MMWFDSINK_CMD_LOCK(wfd_sink);
118 result = _mm_wfd_sink_unprepare((mm_wfd_sink_t *)wfd_sink);
119 MMWFDSINK_CMD_UNLOCK(wfd_sink);
124 int mm_wfd_sink_destroy(MMHandleType wfd_sink)
126 int result = MM_ERROR_NONE;
127 mm_wfd_sink_t * sink_handle = NULL;
129 wfd_sink_return_val_if_fail(wfd_sink, MM_ERROR_WFD_NOT_INITIALIZED);
131 MMWFDSINK_CMD_LOCK(wfd_sink);
132 result = _mm_wfd_sink_destroy((mm_wfd_sink_t *)wfd_sink);
133 MMWFDSINK_CMD_UNLOCK(wfd_sink);
135 g_mutex_clear(&(((mm_wfd_sink_t *)wfd_sink)->cmd_lock));
137 sink_handle = (mm_wfd_sink_t *)wfd_sink;
138 MMWFDSINK_FREEIF(sink_handle);
143 int mm_wfd_sink_set_message_callback(MMHandleType wfd_sink, MMWFDMessageCallback callback, void *user_data)
145 int result = MM_ERROR_NONE;
147 wfd_sink_return_val_if_fail(wfd_sink, MM_ERROR_WFD_NOT_INITIALIZED);
149 MMWFDSINK_CMD_LOCK(wfd_sink);
150 result = _mm_wfd_set_message_callback((mm_wfd_sink_t *)wfd_sink, callback, user_data);
151 MMWFDSINK_CMD_UNLOCK(wfd_sink);
156 int mm_wfd_sink_set_attribute(MMHandleType wfd_sink, char **err_attr_name, const char *first_attribute_name, ...)
158 int result = MM_ERROR_NONE;
161 wfd_sink_return_val_if_fail(wfd_sink, MM_ERROR_WFD_NOT_INITIALIZED);
162 wfd_sink_return_val_if_fail(first_attribute_name, MM_ERROR_WFD_INVALID_ARGUMENT);
164 MMWFDSINK_CMD_LOCK(wfd_sink);
165 va_start (var_args, first_attribute_name);
166 result = _mmwfd_set_attribute(MMWFDSINK_GET_ATTRS(wfd_sink), err_attr_name, first_attribute_name, var_args);
168 MMWFDSINK_CMD_UNLOCK(wfd_sink);
173 int mm_wfd_sink_get_video_resolution(MMHandleType wfd_sink, gint *width, gint *height)
175 mm_wfd_sink_t *wfd = (mm_wfd_sink_t *)wfd_sink;
177 wfd_sink_return_val_if_fail(wfd, MM_ERROR_WFD_NOT_INITIALIZED);
178 wfd_sink_return_val_if_fail(width, MM_ERROR_WFD_INVALID_ARGUMENT);
179 wfd_sink_return_val_if_fail(height, MM_ERROR_WFD_INVALID_ARGUMENT);
181 *width = wfd->stream_info.video_stream_info.width;
182 *height =wfd->stream_info.video_stream_info.height;
184 return MM_ERROR_NONE;
187 int mm_wfd_sink_get_video_framerate(MMHandleType wfd_sink, gint *frame_rate)
189 mm_wfd_sink_t *wfd = (mm_wfd_sink_t *)wfd_sink;
191 wfd_sink_return_val_if_fail(wfd, MM_ERROR_WFD_NOT_INITIALIZED);
192 wfd_sink_return_val_if_fail(frame_rate, MM_ERROR_WFD_INVALID_ARGUMENT);
194 *frame_rate = wfd->stream_info.video_stream_info.frame_rate;
196 return MM_ERROR_NONE;