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) {
41 wfd_sink_error("fail to create wi-fi display sink handle. ret[%d]", result);
42 *wfd_sink = (MMHandleType)NULL;
47 g_mutex_init(&new_wfd_sink->cmd_lock);
49 *wfd_sink = (MMHandleType)new_wfd_sink;
51 wfd_sink_debug_fleave();
57 int mm_wfd_sink_prepare(MMHandleType wfd_sink)
59 int result = MM_ERROR_NONE;
61 wfd_sink_return_val_if_fail(wfd_sink, MM_ERROR_WFD_NOT_INITIALIZED);
63 MMWFDSINK_CMD_LOCK(wfd_sink);
64 result = _mm_wfd_sink_prepare((mm_wfd_sink_t *)wfd_sink);
65 MMWFDSINK_CMD_UNLOCK(wfd_sink);
70 int mm_wfd_sink_connect(MMHandleType wfd_sink, const char *uri)
72 int result = MM_ERROR_NONE;
74 wfd_sink_return_val_if_fail(wfd_sink, MM_ERROR_WFD_NOT_INITIALIZED);
75 wfd_sink_return_val_if_fail(uri, MM_ERROR_WFD_INVALID_ARGUMENT);
77 MMWFDSINK_CMD_LOCK(wfd_sink);
78 result = _mm_wfd_sink_connect((mm_wfd_sink_t *)wfd_sink, uri);
79 MMWFDSINK_CMD_UNLOCK(wfd_sink);
84 int mm_wfd_sink_start(MMHandleType wfd_sink)
86 int result = MM_ERROR_NONE;
88 wfd_sink_return_val_if_fail(wfd_sink, MM_ERROR_WFD_NOT_INITIALIZED);
90 MMWFDSINK_CMD_LOCK(wfd_sink);
91 result = _mm_wfd_sink_start((mm_wfd_sink_t *)wfd_sink);
92 MMWFDSINK_CMD_UNLOCK(wfd_sink);
97 int mm_wfd_sink_pause(MMHandleType wfd_sink)
99 int result = MM_ERROR_NONE;
101 wfd_sink_return_val_if_fail(wfd_sink, MM_ERROR_WFD_NOT_INITIALIZED);
103 MMWFDSINK_CMD_LOCK(wfd_sink);
104 result = _mm_wfd_sink_pause((mm_wfd_sink_t *)wfd_sink);
105 MMWFDSINK_CMD_UNLOCK(wfd_sink);
110 int mm_wfd_sink_resume(MMHandleType wfd_sink)
112 int result = MM_ERROR_NONE;
114 wfd_sink_return_val_if_fail(wfd_sink, MM_ERROR_WFD_NOT_INITIALIZED);
116 MMWFDSINK_CMD_LOCK(wfd_sink);
117 result = _mm_wfd_sink_resume((mm_wfd_sink_t *)wfd_sink);
118 MMWFDSINK_CMD_UNLOCK(wfd_sink);
123 int mm_wfd_sink_disconnect(MMHandleType wfd_sink)
125 int result = MM_ERROR_NONE;
127 wfd_sink_return_val_if_fail(wfd_sink, MM_ERROR_WFD_NOT_INITIALIZED);
129 MMWFDSINK_CMD_LOCK(wfd_sink);
130 result = _mm_wfd_sink_disconnect((mm_wfd_sink_t *)wfd_sink);
131 MMWFDSINK_CMD_UNLOCK(wfd_sink);
136 int mm_wfd_sink_unprepare(MMHandleType wfd_sink)
138 int result = MM_ERROR_NONE;
140 wfd_sink_return_val_if_fail(wfd_sink, MM_ERROR_WFD_NOT_INITIALIZED);
142 MMWFDSINK_CMD_LOCK(wfd_sink);
143 result = _mm_wfd_sink_unprepare((mm_wfd_sink_t *)wfd_sink);
144 MMWFDSINK_CMD_UNLOCK(wfd_sink);
149 int mm_wfd_sink_destroy(MMHandleType wfd_sink)
151 int result = MM_ERROR_NONE;
152 mm_wfd_sink_t *sink_handle = NULL;
154 wfd_sink_return_val_if_fail(wfd_sink, MM_ERROR_WFD_NOT_INITIALIZED);
156 MMWFDSINK_CMD_LOCK(wfd_sink);
157 result = _mm_wfd_sink_destroy((mm_wfd_sink_t *)wfd_sink);
158 MMWFDSINK_CMD_UNLOCK(wfd_sink);
160 g_mutex_clear(&(((mm_wfd_sink_t *)wfd_sink)->cmd_lock));
162 sink_handle = (mm_wfd_sink_t *)wfd_sink;
163 MMWFDSINK_FREEIF(sink_handle);
168 int mm_wfd_sink_set_message_callback(MMHandleType wfd_sink, MMWFDMessageCallback callback, void *user_data)
170 int result = MM_ERROR_NONE;
172 wfd_sink_return_val_if_fail(wfd_sink, MM_ERROR_WFD_NOT_INITIALIZED);
174 MMWFDSINK_CMD_LOCK(wfd_sink);
175 result = _mm_wfd_set_message_callback((mm_wfd_sink_t *)wfd_sink, callback, user_data);
176 MMWFDSINK_CMD_UNLOCK(wfd_sink);
181 int mm_wfd_sink_set_attribute(MMHandleType wfd_sink, char **err_attr_name, const char *first_attribute_name, ...)
183 int result = MM_ERROR_NONE;
186 wfd_sink_return_val_if_fail(wfd_sink, MM_ERROR_WFD_NOT_INITIALIZED);
187 wfd_sink_return_val_if_fail(first_attribute_name, MM_ERROR_WFD_INVALID_ARGUMENT);
189 MMWFDSINK_CMD_LOCK(wfd_sink);
190 va_start(var_args, first_attribute_name);
191 result = _mmwfd_set_attribute(MMWFDSINK_GET_ATTRS(wfd_sink), err_attr_name, first_attribute_name, var_args);
193 MMWFDSINK_CMD_UNLOCK(wfd_sink);
198 int mm_wfd_sink_get_video_resolution(MMHandleType wfd_sink, gint *width, gint *height)
200 mm_wfd_sink_t *wfd = (mm_wfd_sink_t *)wfd_sink;
202 wfd_sink_return_val_if_fail(wfd, MM_ERROR_WFD_NOT_INITIALIZED);
203 wfd_sink_return_val_if_fail(width, MM_ERROR_WFD_INVALID_ARGUMENT);
204 wfd_sink_return_val_if_fail(height, MM_ERROR_WFD_INVALID_ARGUMENT);
206 *width = wfd->stream_info.video_stream_info.width;
207 *height = wfd->stream_info.video_stream_info.height;
209 return MM_ERROR_NONE;
212 int mm_wfd_sink_get_video_framerate(MMHandleType wfd_sink, gint *frame_rate)
214 mm_wfd_sink_t *wfd = (mm_wfd_sink_t *)wfd_sink;
216 wfd_sink_return_val_if_fail(wfd, MM_ERROR_WFD_NOT_INITIALIZED);
217 wfd_sink_return_val_if_fail(frame_rate, MM_ERROR_WFD_INVALID_ARGUMENT);
219 *frame_rate = wfd->stream_info.video_stream_info.frame_rate;
221 return MM_ERROR_NONE;
224 int mm_wfd_sink_set_resolution(MMHandleType wfd_sink, gint resolution)
226 int result = MM_ERROR_NONE;
228 wfd_sink_return_val_if_fail(wfd_sink, MM_ERROR_WFD_NOT_INITIALIZED);
229 MMWFDSINK_CMD_LOCK(wfd_sink);
230 result = _mm_wfd_sink_set_resolution((mm_wfd_sink_t *)wfd_sink, resolution);
231 MMWFDSINK_CMD_UNLOCK(wfd_sink);