2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
21 #include <mm_player.h>
22 #include <mm_player_audioeffect.h>
23 #include <mm_player_internal.h>
25 #include <sound_manager.h>
26 #include <sound_manager_internal.h>
28 #include "muse_player.h"
29 #include "legacy_player.h"
30 #include "legacy_player_private.h"
32 #define __RELEASEIF_PREPARE_THREAD(thread_id) \
35 pthread_join(thread_id, NULL); \
37 LOGI("prepare thread released\n"); \
41 #define __RELEASEIF_MESSAGE_THREAD(thread_id) \
44 pthread_join(thread_id, NULL); \
46 LOGI("message thread released\n"); \
50 #define __GET_MESSAGE(handle) \
52 if (handle && handle->message_queue) { \
53 g_mutex_lock(&handle->message_queue_lock); \
54 if (g_queue_is_empty(handle->message_queue)) { \
55 g_cond_wait(&handle->message_queue_cond, &handle->message_queue_lock); \
57 handle->current_message = (int)(intptr_t)g_queue_pop_head(handle->message_queue); \
58 g_mutex_unlock(&handle->message_queue_lock); \
59 LOGI("Retrieved message [%d] from queue", handle->current_message); \
61 LOGI("Failed to retrieve message from queue"); \
62 handle->current_message = PLAYER_MESSAGE_NONE; \
66 #define __ADD_MESSAGE(handle, message) \
68 if (handle && handle->message_queue) { \
69 g_mutex_lock(&handle->message_queue_lock); \
70 if (message == PLAYER_MESSAGE_LOOP_EXIT) \
71 g_queue_clear(handle->message_queue); \
72 g_queue_push_tail(handle->message_queue, (gpointer)message); \
73 g_cond_signal(&handle->message_queue_cond); \
74 g_mutex_unlock(&handle->message_queue_lock); \
75 LOGI("Adding message [%d] to queue", message); \
77 LOGI("Failed to add message [%d] to queue", message); \
82 * Internal Implementation
84 int __player_convert_error_code(int code, char *func_name)
86 int ret = PLAYER_ERROR_INVALID_OPERATION;
87 char *msg = "PLAYER_ERROR_INVALID_OPERATION";
90 ret = PLAYER_ERROR_NONE;
91 msg = "PLAYER_ERROR_NONE";
93 case MM_ERROR_PLAYER_AUDIO_CODEC_NOT_FOUND:
94 ret = PLAYER_ERROR_NOT_SUPPORTED_AUDIO_CODEC;
95 msg = "PLAYER_ERROR_NOT_SUPPORTED_AUDIO_CODEC";
97 case MM_ERROR_PLAYER_VIDEO_CODEC_NOT_FOUND:
98 ret = PLAYER_ERROR_NOT_SUPPORTED_VIDEO_CODEC;
99 msg = "PLAYER_ERROR_NOT_SUPPORTED_VIDEO_CODEC";
101 case MM_ERROR_PLAYER_NOT_SUPPORTED_SUBTITLE:
102 ret = PLAYER_ERROR_NOT_SUPPORTED_SUBTITLE;
103 msg = "PLAYER_ERROR_NOT_SUPPORTED_SUBTITLE";
105 case MM_ERROR_INVALID_ARGUMENT:
106 case MM_ERROR_COMMON_INVALID_ARGUMENT:
107 ret = PLAYER_ERROR_INVALID_PARAMETER;
108 msg = "PLAYER_ERROR_INVALID_PARAMETER";
110 case MM_ERROR_PLAYER_CODEC_NOT_FOUND:
111 case MM_ERROR_PLAYER_STREAMING_UNSUPPORTED_AUDIO:
112 case MM_ERROR_PLAYER_STREAMING_UNSUPPORTED_VIDEO:
113 case MM_ERROR_PLAYER_STREAMING_UNSUPPORTED_MEDIA_TYPE:
114 case MM_ERROR_PLAYER_NOT_SUPPORTED_FORMAT:
115 ret = PLAYER_ERROR_NOT_SUPPORTED_FILE;
116 msg = "PLAYER_ERROR_NOT_SUPPORTED_FILE";
118 case MM_ERROR_PLAYER_INVALID_STATE:
119 case MM_ERROR_PLAYER_NOT_INITIALIZED:
120 ret = PLAYER_ERROR_INVALID_STATE;
121 msg = "PLAYER_ERROR_INVALID_STATE";
123 case MM_ERROR_PLAYER_INTERNAL:
124 case MM_ERROR_PLAYER_INVALID_STREAM:
125 case MM_ERROR_PLAYER_STREAMING_FAIL:
126 case MM_ERROR_PLAYER_NO_OP:
127 ret = PLAYER_ERROR_INVALID_OPERATION;
128 msg = "PLAYER_ERROR_INVALID_OPERATION";
130 case MM_ERROR_PLAYER_SOUND_EFFECT_INVALID_STATUS:
131 case MM_ERROR_NOT_SUPPORT_API:
132 case MM_ERROR_PLAYER_SOUND_EFFECT_NOT_SUPPORTED_FILTER:
133 ret = PLAYER_ERROR_FEATURE_NOT_SUPPORTED_ON_DEVICE;
134 msg = "PLAYER_ERROR_FEATURE_NOT_SUPPORTED_ON_DEVICE";
136 case MM_ERROR_PLAYER_NO_FREE_SPACE:
137 ret = PLAYER_ERROR_FILE_NO_SPACE_ON_DEVICE;
138 msg = "PLAYER_ERROR_FILE_NO_SPACE_ON_DEVICE";
140 case MM_ERROR_PLAYER_FILE_NOT_FOUND:
141 ret = PLAYER_ERROR_NO_SUCH_FILE;
142 msg = "PLAYER_ERROR_NO_SUCH_FILE";
144 case MM_ERROR_PLAYER_SEEK:
145 ret = PLAYER_ERROR_SEEK_FAILED;
146 msg = "PLAYER_ERROR_SEEK_FAILED";
148 case MM_ERROR_PLAYER_INVALID_URI:
149 case MM_ERROR_PLAYER_STREAMING_INVALID_URL:
150 ret = PLAYER_ERROR_INVALID_URI;
151 msg = "PLAYER_ERROR_INVALID_URI";
153 case MM_ERROR_PLAYER_STREAMING_CONNECTION_FAIL:
154 case MM_ERROR_PLAYER_STREAMING_DNS_FAIL:
155 case MM_ERROR_PLAYER_STREAMING_SERVER_DISCONNECTED:
156 case MM_ERROR_PLAYER_STREAMING_INVALID_PROTOCOL:
157 case MM_ERROR_PLAYER_STREAMING_UNEXPECTED_MSG:
158 case MM_ERROR_PLAYER_STREAMING_OUT_OF_MEMORIES:
159 case MM_ERROR_PLAYER_STREAMING_RTSP_TIMEOUT:
160 case MM_ERROR_PLAYER_STREAMING_BAD_REQUEST:
161 case MM_ERROR_PLAYER_STREAMING_NOT_AUTHORIZED:
162 case MM_ERROR_PLAYER_STREAMING_PAYMENT_REQUIRED:
163 case MM_ERROR_PLAYER_STREAMING_FORBIDDEN:
164 case MM_ERROR_PLAYER_STREAMING_CONTENT_NOT_FOUND:
165 case MM_ERROR_PLAYER_STREAMING_METHOD_NOT_ALLOWED:
166 case MM_ERROR_PLAYER_STREAMING_NOT_ACCEPTABLE:
167 case MM_ERROR_PLAYER_STREAMING_PROXY_AUTHENTICATION_REQUIRED:
168 case MM_ERROR_PLAYER_STREAMING_SERVER_TIMEOUT:
169 case MM_ERROR_PLAYER_STREAMING_GONE:
170 case MM_ERROR_PLAYER_STREAMING_LENGTH_REQUIRED:
171 case MM_ERROR_PLAYER_STREAMING_PRECONDITION_FAILED:
172 case MM_ERROR_PLAYER_STREAMING_REQUEST_ENTITY_TOO_LARGE:
173 case MM_ERROR_PLAYER_STREAMING_REQUEST_URI_TOO_LARGE:
174 case MM_ERROR_PLAYER_STREAMING_PARAMETER_NOT_UNDERSTOOD:
175 case MM_ERROR_PLAYER_STREAMING_CONFERENCE_NOT_FOUND:
176 case MM_ERROR_PLAYER_STREAMING_NOT_ENOUGH_BANDWIDTH:
177 case MM_ERROR_PLAYER_STREAMING_NO_SESSION_ID:
178 case MM_ERROR_PLAYER_STREAMING_METHOD_NOT_VALID_IN_THIS_STATE:
179 case MM_ERROR_PLAYER_STREAMING_HEADER_FIELD_NOT_VALID_FOR_SOURCE:
180 case MM_ERROR_PLAYER_STREAMING_INVALID_RANGE:
181 case MM_ERROR_PLAYER_STREAMING_PARAMETER_IS_READONLY:
182 case MM_ERROR_PLAYER_STREAMING_AGGREGATE_OP_NOT_ALLOWED:
183 case MM_ERROR_PLAYER_STREAMING_ONLY_AGGREGATE_OP_ALLOWED:
184 case MM_ERROR_PLAYER_STREAMING_BAD_TRANSPORT:
185 case MM_ERROR_PLAYER_STREAMING_DESTINATION_UNREACHABLE:
186 case MM_ERROR_PLAYER_STREAMING_INTERNAL_SERVER_ERROR:
187 case MM_ERROR_PLAYER_STREAMING_NOT_IMPLEMENTED:
188 case MM_ERROR_PLAYER_STREAMING_BAD_GATEWAY:
189 case MM_ERROR_PLAYER_STREAMING_SERVICE_UNAVAILABLE:
190 case MM_ERROR_PLAYER_STREAMING_GATEWAY_TIME_OUT:
191 case MM_ERROR_PLAYER_STREAMING_OPTION_NOT_SUPPORTED:
192 ret = PLAYER_ERROR_CONNECTION_FAILED;
193 msg = "PLAYER_ERROR_CONNECTION_FAILED";
195 case MM_ERROR_POLICY_BLOCKED:
196 case MM_ERROR_POLICY_INTERRUPTED:
197 case MM_ERROR_POLICY_INTERNAL:
198 case MM_ERROR_POLICY_DUPLICATED:
199 ret = PLAYER_ERROR_SOUND_POLICY;
200 msg = "PLAYER_ERROR_SOUND_POLICY";
202 case MM_ERROR_PLAYER_DRM_EXPIRED:
203 ret = PLAYER_ERROR_DRM_EXPIRED;
204 msg = "PLAYER_ERROR_DRM_EXPIRED";
206 case MM_ERROR_PLAYER_DRM_NOT_AUTHORIZED:
207 case MM_ERROR_PLAYER_DRM_NO_LICENSE:
208 ret = PLAYER_ERROR_DRM_NO_LICENSE;
209 msg = "PLAYER_ERROR_DRM_NO_LICENSE";
211 case MM_ERROR_PLAYER_DRM_FUTURE_USE:
212 ret = PLAYER_ERROR_DRM_FUTURE_USE;
213 msg = "PLAYER_ERROR_DRM_FUTURE_USE";
215 case MM_ERROR_PLAYER_DRM_OUTPUT_PROTECTION:
216 ret = PLAYER_ERROR_DRM_NOT_PERMITTED;
217 msg = "PLAYER_ERROR_DRM_NOT_PERMITTED";
219 case MM_ERROR_PLAYER_RESOURCE_LIMIT:
220 ret = PLAYER_ERROR_RESOURCE_LIMIT;
221 msg = "PLAYER_ERROR_RESOURCE_LIMIT";
223 case MM_ERROR_PLAYER_PERMISSION_DENIED:
224 ret = PLAYER_ERROR_PERMISSION_DENIED;
225 msg = "PLAYER_ERROR_PERMISSION_DENIED";
227 case MM_ERROR_PLAYER_BUFFER_SPACE:
228 ret = PLAYER_ERROR_BUFFER_SPACE;
229 msg = "PLAYER_ERROR_BUFFER_SPACE";
234 LOGE("[%s] %s(0x%08x) : core fw error(0x%x)", func_name, msg, ret, code);
238 static player_interrupted_code_e __convert_interrupted_code(int code)
240 player_interrupted_code_e ret = PLAYER_INTERRUPTED_BY_RESOURCE_CONFLICT;
242 case MM_PLAYER_FOCUS_CHANGED_COMPLETED:
243 ret = PLAYER_INTERRUPTED_COMPLETED;
245 case MM_PLAYER_FOCUS_CHANGED_BY_MEDIA:
246 case MM_PLAYER_FOCUS_CHANGED_BY_UNKNOWN:
247 ret = PLAYER_INTERRUPTED_BY_MEDIA;
249 case MM_PLAYER_FOCUS_CHANGED_BY_CALL:
250 ret = PLAYER_INTERRUPTED_BY_CALL;
252 case MM_PLAYER_FOCUS_CHANGED_BY_EARJACK_UNPLUG:
253 ret = PLAYER_INTERRUPTED_BY_EARJACK_UNPLUG;
255 case MM_PLAYER_FOCUS_CHANGED_BY_ALARM:
256 ret = PLAYER_INTERRUPTED_BY_ALARM;
258 case MM_PLAYER_FOCUS_CHANGED_BY_NOTIFICATION:
259 ret = PLAYER_INTERRUPTED_BY_NOTIFICATION;
261 case MM_PLAYER_FOCUS_CHANGED_BY_EMERGENCY:
262 ret = PLAYER_INTERRUPTED_BY_EMERGENCY;
264 case MM_PLAYER_FOCUS_CHANGED_BY_RESOURCE_CONFLICT:
266 ret = PLAYER_INTERRUPTED_BY_RESOURCE_CONFLICT;
269 LOGE("[%s] interrupted code(%d) => ret(%d)", __FUNCTION__, code, ret);
273 static player_state_e __convert_player_state(MMPlayerStateType state)
275 if (state == MM_PLAYER_STATE_NONE)
276 return PLAYER_STATE_NONE;
281 bool __player_state_validate(player_s *handle, player_state_e threshold)
283 if (handle->state < threshold)
288 static int __set_callback(muse_player_event_e type, player_h player, void *callback, void *user_data)
290 PLAYER_INSTANCE_CHECK(player);
291 PLAYER_NULL_ARG_CHECK(callback);
293 player_s *handle = (player_s *)player;
294 handle->user_cb[type] = callback;
295 handle->user_data[type] = user_data;
296 LOGI("[%s] Event type : %d ", __FUNCTION__, type);
297 return PLAYER_ERROR_NONE;
300 static int __unset_callback(muse_player_event_e type, player_h player)
302 PLAYER_INSTANCE_CHECK(player);
303 player_s *handle = (player_s *)player;
304 handle->user_cb[type] = NULL;
305 handle->user_data[type] = NULL;
306 LOGI("[%s] Event type : %d ", __FUNCTION__, type);
307 return PLAYER_ERROR_NONE;
310 static void __message_cb_loop(void *data)
313 player_s *handle = (player_s *)data;
315 LOGE("null handle in __message_cb_loop");
319 __GET_MESSAGE(handle);
320 switch (handle->current_message) {
321 case PLAYER_MESSAGE_NONE:
323 LOGW("PLAYER_MESSAGE_NONE");
327 case PLAYER_MESSAGE_PREPARED:
329 LOGW("PLAYER_MESSAGE_PREPARED");
331 LEGACY_PLAYER_USER_CB_LOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
332 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
333 handle->state = PLAYER_STATE_READY;
334 ((player_prepared_cb)handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE])(handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE]);
335 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
336 handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
338 LOGE("null handle in PLAYER_MESSAGE_PREPARED");
340 LEGACY_PLAYER_USER_CB_UNLOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
343 case PLAYER_MESSAGE_ERROR:
345 LOGW("PLAYER_MESSAGE_ERROR");
346 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_ERROR])
347 ((player_error_cb)handle->user_cb[MUSE_PLAYER_EVENT_TYPE_ERROR])(handle->error_code, handle->user_data[MUSE_PLAYER_EVENT_TYPE_ERROR]);
349 LOGE("null handle in PLAYER_MESSAGE_ERROR");
352 case PLAYER_MESSAGE_SEEK_DONE:
354 LOGW("PLAYER_MESSAGE_SEEK_DONE");
355 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK]) {
356 ((player_seek_completed_cb)handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK])(handle->user_data[MUSE_PLAYER_EVENT_TYPE_SEEK]);
357 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK] = NULL;
358 handle->user_data[MUSE_PLAYER_EVENT_TYPE_SEEK] = NULL;
360 LOGE("null handle in PLAYER_MESSAGE_SEEK_DONE");
364 case PLAYER_MESSAGE_EOS:
366 LOGW("PLAYER_MESSAGE_EOS");
367 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_COMPLETE])
368 ((player_completed_cb)handle->user_cb[MUSE_PLAYER_EVENT_TYPE_COMPLETE])(handle->user_data[MUSE_PLAYER_EVENT_TYPE_COMPLETE]);
370 LOGE("null handle in PLAYER_MESSAGE_EOS");
373 #ifdef TIZEN_FEATURE_EVAS_RENDERER
374 case PLAYER_MESSAGE_GAPLESS_CONSTRUCTION:
376 LOGW("PLAYER_MESSAGE_GAPLESS_CONSTRUCTION");
377 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_RETURN_BUFFER]) {
378 ((player_retrieve_buffer_cb)handle->user_cb[MUSE_PLAYER_EVENT_TYPE_RETURN_BUFFER])(handle->user_data[MUSE_PLAYER_EVENT_TYPE_RETURN_BUFFER]);
380 LOGE("null handle in PLAYER_MESSAGE_GAPLESS_CONSTRUCTION");
385 case PLAYER_MESSAGE_LOOP_EXIT:
387 LOGW("PLAYER_MESSAGE_LOOP_EXIT");
391 case PLAYER_MESSAGE_MAX:
393 LOGW("PLAYER_MESSAGE_MAX");
404 static int __msg_callback(int message, void *param, void *user_data)
406 player_s *handle = (player_s *)user_data;
407 MMMessageParamType *msg = (MMMessageParamType *)param;
408 LOGW("[%s] Got message type : 0x%x", __FUNCTION__, message);
409 player_error_e err_code = PLAYER_ERROR_NONE;
411 case MM_MESSAGE_ERROR: /* 0x01 */
412 err_code = __player_convert_error_code(msg->code, (char *)__FUNCTION__);
414 LEGACY_PLAYER_USER_CB_LOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
415 if (PLAYER_ERROR_NOT_SUPPORTED_FILE == err_code && handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
416 LOGW("failed to pause, so prepare cb will be released soon");
417 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
418 if (handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
419 g_free(handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE]);
420 handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
423 LEGACY_PLAYER_USER_CB_UNLOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
425 case MM_MESSAGE_STATE_CHANGED: /* 0x03 */
426 LOGI("STATE CHANGED INTERNALLY - from : %d, to : %d (CAPI State : %d)", msg->state.previous, msg->state.current, handle->state);
427 if ((handle->is_progressive_download && msg->state.previous == MM_PLAYER_STATE_NULL && msg->state.current == MM_PLAYER_STATE_READY) || (msg->state.previous == MM_PLAYER_STATE_READY && msg->state.current == MM_PLAYER_STATE_PAUSED)) {
428 LEGACY_PLAYER_USER_CB_LOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
429 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
430 /* asyc && prepared cb has been set */
431 LOGI("[%s] Prepared! [current state : %d]", __FUNCTION__, handle->state);
432 PLAYER_TRACE_ASYNC_END("MM:PLAYER:PREPARE_ASYNC", *(int *)handle);
433 __ADD_MESSAGE(handle, PLAYER_MESSAGE_PREPARED);
435 LEGACY_PLAYER_USER_CB_UNLOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
438 case MM_MESSAGE_READY_TO_RESUME: /* 0x05 */
439 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_INTERRUPT])
440 ((player_interrupted_cb)handle->user_cb[MUSE_PLAYER_EVENT_TYPE_INTERRUPT])(PLAYER_INTERRUPTED_COMPLETED, handle->user_data[MUSE_PLAYER_EVENT_TYPE_INTERRUPT]);
442 case MM_MESSAGE_BEGIN_OF_STREAM: /* 0x104 */
443 LOGI("[%s] Ready to streaming information (BOS) [current state : %d]", __FUNCTION__, handle->state);
445 case MM_MESSAGE_END_OF_STREAM: /* 0x105 */
446 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_COMPLETE]) {
447 __ADD_MESSAGE(handle, PLAYER_MESSAGE_EOS);
450 #ifdef TIZEN_FEATURE_EVAS_RENDERER
451 case MM_MESSAGE_GAPLESS_CONSTRUCTION: /* 0x105 */
452 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_RETURN_BUFFER]) {
453 __ADD_MESSAGE(handle, PLAYER_MESSAGE_GAPLESS_CONSTRUCTION);
457 case MM_MESSAGE_BUFFERING: /* 0x103 */
458 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_BUFFERING])
459 ((player_buffering_cb)handle->user_cb[MUSE_PLAYER_EVENT_TYPE_BUFFERING])(msg->connection.buffering, handle->user_data[MUSE_PLAYER_EVENT_TYPE_BUFFERING]);
461 case MM_MESSAGE_STATE_INTERRUPTED: /* 0x04 */
462 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_INTERRUPT]) {
464 if (msg->union_type == MM_MSG_UNION_STATE) {
466 handle->state = __convert_player_state(msg->state.current);
467 LOGD("update player state to %d", handle->state);
469 if (handle->state == PLAYER_STATE_READY)
470 handle->is_stopped = TRUE;
471 code = msg->state.code;
472 } else if (msg->union_type == MM_MSG_UNION_CODE) {
475 LOGE("invalid msg type %d", msg->union_type);
478 ((player_interrupted_cb)handle->user_cb[MUSE_PLAYER_EVENT_TYPE_INTERRUPT])(__convert_interrupted_code(code), handle->user_data[MUSE_PLAYER_EVENT_TYPE_INTERRUPT]);
481 case MM_MESSAGE_CONNECTION_TIMEOUT: /* 0x102 */
482 LOGI("[%s] PLAYER_ERROR_CONNECTION_FAILED (0x%08x) : CONNECTION_TIMEOUT", __FUNCTION__, PLAYER_ERROR_CONNECTION_FAILED);
483 err_code = PLAYER_ERROR_CONNECTION_FAILED;
485 case MM_MESSAGE_UPDATE_SUBTITLE: /* 0x109 */
486 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SUBTITLE])
487 ((player_subtitle_updated_cb)handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SUBTITLE])(msg->subtitle.duration, (char *)msg->data, handle->user_data[MUSE_PLAYER_EVENT_TYPE_SUBTITLE]);
489 case MM_MESSAGE_VIDEO_NOT_CAPTURED: /* 0x113 */
490 LOGI("[%s] PLAYER_ERROR_VIDEO_CAPTURE_FAILED (0x%08x)", __FUNCTION__, PLAYER_ERROR_VIDEO_CAPTURE_FAILED);
491 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_ERROR])
492 ((player_error_cb)handle->user_cb[MUSE_PLAYER_EVENT_TYPE_ERROR])(PLAYER_ERROR_VIDEO_CAPTURE_FAILED, handle->user_data[MUSE_PLAYER_EVENT_TYPE_ERROR]);
494 case MM_MESSAGE_VIDEO_CAPTURED: /* 0x110 */
496 MMPlayerVideoCapture *capture = (MMPlayerVideoCapture *)msg->data;
498 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_CAPTURE]) {
499 if (!capture || !capture->data) {
500 LOGE("PLAYER_ERROR_VIDEO_CAPTURE_FAILED (0x%08x) : Failed to get capture data", PLAYER_ERROR_VIDEO_CAPTURE_FAILED);
501 err_code = PLAYER_ERROR_VIDEO_CAPTURE_FAILED;
503 LOGI("captured image ori: %d, width: %d, height: %d, size: %d",
504 capture->orientation, capture->width, capture->height, capture->size);
506 /* call application callback */
507 ((player_video_captured_cb)handle->user_cb[MUSE_PLAYER_EVENT_TYPE_CAPTURE])
508 (capture->data, capture->width, capture->height, capture->size, handle->user_data[MUSE_PLAYER_EVENT_TYPE_CAPTURE]);
511 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_CAPTURE] = NULL;
512 handle->user_data[MUSE_PLAYER_EVENT_TYPE_CAPTURE] = NULL;
515 /* capure->data have to be released to avoid mem leak in all cases. */
516 if (capture && capture->data) {
517 g_free(capture->data);
518 capture->data = NULL;
522 case MM_MESSAGE_FILE_NOT_SUPPORTED: /* 0x10f */
523 LOGI("[%s] PLAYER_ERROR_NOT_SUPPORTED_FILE (0x%08x) : FILE_NOT_SUPPORTED", __FUNCTION__, PLAYER_ERROR_NOT_SUPPORTED_FILE);
524 err_code = PLAYER_ERROR_NOT_SUPPORTED_FILE;
526 case MM_MESSAGE_FILE_NOT_FOUND: /* 0x110 */
527 LOGI("[%s] PLAYER_ERROR_NOT_SUPPORTED_FILE (0x%08x) : FILE_NOT_FOUND", __FUNCTION__, PLAYER_ERROR_NOT_SUPPORTED_FILE);
528 err_code = PLAYER_ERROR_NOT_SUPPORTED_FILE;
530 case MM_MESSAGE_SEEK_COMPLETED: /* 0x114 */
531 if (handle->display_type != PLAYER_DISPLAY_TYPE_NONE && handle->state == PLAYER_STATE_READY) {
532 if (handle->is_display_visible) {
533 int ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_visible", 1, (char *)NULL);
534 if (ret != MM_ERROR_NONE)
535 LOGW("[%s] Failed to set display_visible '1' (0x%x)", __FUNCTION__, ret);
538 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK]) {
539 __ADD_MESSAGE(handle, PLAYER_MESSAGE_SEEK_DONE);
542 case MM_MESSAGE_PLAY_POSITION:
543 LOGI("MM_MESSAGE_PLAY_POSITION (%d ms)", msg->time.elapsed);
544 handle->last_play_position = (int)msg->time.elapsed;
546 case MM_MESSAGE_UNKNOWN: /* 0x00 */
547 case MM_MESSAGE_WARNING: /* 0x02 */
548 case MM_MESSAGE_CONNECTING: /* 0x100 */
549 case MM_MESSAGE_CONNECTED: /* 0x101 */
550 case MM_MESSAGE_BLUETOOTH_ON: /* 0x106 */
551 case MM_MESSAGE_BLUETOOTH_OFF: /* 0x107 */
552 case MM_MESSAGE_RTP_SENDER_REPORT: /* 0x10a */
553 case MM_MESSAGE_RTP_RECEIVER_REPORT: /* 0x10b */
554 case MM_MESSAGE_RTP_SESSION_STATUS: /* 0x10c */
555 case MM_MESSAGE_SENDER_STATE: /* 0x10d */
556 case MM_MESSAGE_RECEIVER_STATE: /* 0x10e */
561 if (err_code != PLAYER_ERROR_NONE && handle->user_cb[MUSE_PLAYER_EVENT_TYPE_ERROR]) {
562 handle->error_code = err_code;
563 __ADD_MESSAGE(handle, PLAYER_MESSAGE_ERROR);
565 LOGW("[%s] End", __FUNCTION__);
569 static int __pd_message_callback(int message, void *param, void *user_data)
571 player_s *handle = (player_s *)user_data;
572 player_pd_message_type_e type;
574 case MM_MESSAGE_PD_DOWNLOADER_START:
575 type = PLAYER_PD_STARTED;
577 case MM_MESSAGE_PD_DOWNLOADER_END:
578 type = PLAYER_PD_COMPLETED;
584 LEGACY_PLAYER_USER_CB_LOCK(handle, MUSE_PLAYER_EVENT_TYPE_PD);
586 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PD])
587 ((player_pd_message_cb)handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PD])(type, handle->user_data[MUSE_PLAYER_EVENT_TYPE_PD]);
589 LEGACY_PLAYER_USER_CB_UNLOCK(handle, MUSE_PLAYER_EVENT_TYPE_PD);
594 static MMDisplaySurfaceType __player_convert_display_type(player_display_type_e type)
597 case PLAYER_DISPLAY_TYPE_OVERLAY:
598 return MM_DISPLAY_SURFACE_OVERLAY;
599 case PLAYER_DISPLAY_TYPE_EVAS: /* fall through ifndef TIZEN_FEATURE_EVAS_RENDERER */
600 #ifdef TIZEN_FEATURE_EVAS_RENDERER
601 return MM_DISPLAY_SURFACE_REMOTE;
603 case PLAYER_DISPLAY_TYPE_NONE: /* fall through */
605 return MM_DISPLAY_SURFACE_NULL;
609 bool _check_enabled_user_cb_lock(int type)
612 case MUSE_PLAYER_EVENT_TYPE_PREPARE: /* fall through */
613 case MUSE_PLAYER_EVENT_TYPE_PD: /* fall through */
614 case MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_AUDIO_BUFFER_STATUS_WITH_INFO: /* fall through */
615 case MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_VIDEO_BUFFER_STATUS_WITH_INFO: /* fall through */
623 * Public Implementation
626 int legacy_player_create(player_h *player)
628 PLAYER_INSTANCE_CHECK(player);
629 PLAYER_TRACE_BEGIN("MM:PLAYER:CREATE");
631 handle = (player_s *)malloc(sizeof(player_s));
633 memset(handle, 0, sizeof(player_s));
635 LOGE("[%s] PLAYER_ERROR_OUT_OF_MEMORY(0x%08x)", __FUNCTION__, PLAYER_ERROR_OUT_OF_MEMORY);
636 return PLAYER_ERROR_OUT_OF_MEMORY;
638 int ret = mm_player_create(&handle->mm_handle);
639 if (ret != MM_ERROR_NONE) {
640 LOGE("[%s] PLAYER_ERROR_INVALID_OPERATION(0x%08x)", __FUNCTION__, PLAYER_ERROR_INVALID_OPERATION);
641 handle->state = PLAYER_STATE_NONE;
644 return __player_convert_error_code(ret, (char *)__FUNCTION__);
646 muse_player_event_e type = MUSE_PLAYER_EVENT_TYPE_PREPARE;
648 *player = (player_h)handle;
649 handle->state = PLAYER_STATE_IDLE;
650 handle->display_type = PLAYER_DISPLAY_TYPE_NONE;
651 handle->is_stopped = FALSE;
652 handle->is_display_visible = TRUE;
653 handle->is_media_stream = FALSE;
655 for (type = MUSE_PLAYER_EVENT_TYPE_PREPARE; type < MUSE_PLAYER_EVENT_TYPE_NUM; type++) {
656 if (_check_enabled_user_cb_lock(type))
657 g_mutex_init(&handle->user_cb_lock[type]);
660 handle->message_queue = g_queue_new();
661 g_mutex_init(&handle->message_queue_lock);
662 g_cond_init(&handle->message_queue_cond);
663 ret = pthread_create(&handle->message_thread, NULL, (void *)__message_cb_loop, (void *)handle);
665 LOGE("[%s] failed to create message thread ret = %d", __FUNCTION__, ret);
666 return PLAYER_ERROR_OUT_OF_MEMORY;
669 LOGI("[%s] new handle : %p", __FUNCTION__, *player);
671 return PLAYER_ERROR_NONE;
675 int legacy_player_destroy(player_h player)
677 LOGI("[%s] Start, handle to destroy : %p", __FUNCTION__, player);
678 PLAYER_TRACE_BEGIN("MM:PLAYER:DESTROY");
679 PLAYER_INSTANCE_CHECK(player);
680 player_s *handle = (player_s *)player;
682 __ADD_MESSAGE(handle, PLAYER_MESSAGE_LOOP_EXIT);
684 __RELEASEIF_PREPARE_THREAD(handle->prepare_async_thread);
685 __RELEASEIF_MESSAGE_THREAD(handle->message_thread);
687 LEGACY_PLAYER_USER_CB_LOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
688 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
689 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
690 if (handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
691 g_free(handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE]);
692 handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
695 LEGACY_PLAYER_USER_CB_UNLOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
697 int ret = mm_player_destroy(handle->mm_handle);
699 LOGI("[%s] Done mm_player_destroy", __FUNCTION__);
701 if (ret != MM_ERROR_NONE) {
702 LOGE("[%s] PLAYER_ERROR_INVALID_OPERATION(0x%08x)", __FUNCTION__, PLAYER_ERROR_INVALID_OPERATION);
703 return PLAYER_ERROR_INVALID_OPERATION;
705 muse_player_event_e type = MUSE_PLAYER_EVENT_TYPE_PREPARE;
707 handle->state = PLAYER_STATE_NONE;
709 for (type = MUSE_PLAYER_EVENT_TYPE_PREPARE; type < MUSE_PLAYER_EVENT_TYPE_NUM; type++) {
710 if (_check_enabled_user_cb_lock(type))
711 g_mutex_clear(&handle->user_cb_lock[type]);
714 if (handle->message_queue) {
715 g_queue_free(handle->message_queue);
716 handle->message_queue = NULL;
719 g_cond_broadcast(&handle->message_queue_cond);
720 g_mutex_clear(&handle->message_queue_lock);
721 g_cond_clear(&handle->message_queue_cond);
725 LOGI("[%s] End", __FUNCTION__);
727 return PLAYER_ERROR_NONE;
731 static void *__prepare_async_thread_func(void *data)
733 player_s *handle = data;
734 int ret = MM_ERROR_NONE;
735 LOGI("[%s]", __FUNCTION__);
737 ret = mm_player_pause(handle->mm_handle);
738 if (ret != MM_ERROR_NONE) {
739 LOGE("[%s] Failed to pause - core fw error(0x%x)", __FUNCTION__, ret);
740 if (handle->error_code == PLAYER_ERROR_NONE) {
741 /*MM_MESSAGE_ERROR will not be posted as legacy_player_prepare(sync API) works with return value
742 of mm_player_pause So in case of async API we post the error message to application from here */
743 MMMessageParamType msg_param;
744 msg_param.code = ret;
745 __msg_callback(MM_MESSAGE_ERROR, (void *)&msg_param, (void *)handle);
747 ret = mm_player_unrealize(handle->mm_handle);
748 if (ret != MM_ERROR_NONE)
749 LOGE("[%s] Failed to unrealize - 0x%x", __FUNCTION__, ret);
751 LOGI("[%s], done", __FUNCTION__);
755 int legacy_player_prepare_async(player_h player, player_prepared_cb callback, void *user_data)
757 int ret = MM_ERROR_NONE;
761 LOGI("[%s] Start", __FUNCTION__);
762 PLAYER_INSTANCE_CHECK(player);
763 player_s *handle = (player_s *)player;
764 PLAYER_TRACE_ASYNC_BEGIN("MM:PLAYER:PREPARE_ASYNC", *(int *)handle);
765 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
767 LEGACY_PLAYER_USER_CB_LOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
769 handle->last_play_position = 0;
770 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
771 LOGE("[%s] PLAYER_ERROR_INVALID_OPERATION (0x%08x) : preparing... we can't do any more ", __FUNCTION__, PLAYER_ERROR_INVALID_OPERATION);
772 LEGACY_PLAYER_USER_CB_UNLOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
773 return PLAYER_ERROR_INVALID_OPERATION;
775 /* LOGI("[%s] Event type : %d ",__FUNCTION__, MUSE_PLAYER_EVENT_TYPE_PREPARE); */
776 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE] = callback;
777 handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE] = user_data;
779 LEGACY_PLAYER_USER_CB_UNLOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
781 ret = mm_player_set_message_callback(handle->mm_handle, __msg_callback, (void *)handle);
782 if (ret != MM_ERROR_NONE)
783 LOGW("[%s] Failed to set message callback function (0x%x)", __FUNCTION__, ret);
785 if (handle->display_type == PLAYER_DISPLAY_TYPE_NONE) {
786 ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_surface_type", MM_DISPLAY_SURFACE_NULL, (char *)NULL);
787 if (ret != MM_ERROR_NONE)
788 LOGW("[%s] Failed to set display surface type 'MM_DISPLAY_SURFACE_NULL' (0x%x)", __FUNCTION__, ret);
790 ret = mm_player_get_attribute(handle->mm_handle, NULL, "display_visible", &visible, (char *)NULL);
791 if (ret != MM_ERROR_NONE) goto ERROR;
798 ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_visible", value, (char *)NULL);
799 if (ret != MM_ERROR_NONE) goto ERROR;
802 ret = mm_player_realize(handle->mm_handle);
803 if (ret != MM_ERROR_NONE) {
804 LOGE("[%s] Failed to realize - 0x%x", __FUNCTION__, ret);
808 if (!handle->is_progressive_download) {
809 ret = pthread_create(&handle->prepare_async_thread, NULL, (void *)__prepare_async_thread_func, (void *)handle);
812 LOGE("[%s] failed to create thread ret = %d", __FUNCTION__, ret);
813 LEGACY_PLAYER_USER_CB_LOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
814 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
815 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
816 /* user_data will be free at player_disp_prepare_async() */
817 handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
819 LEGACY_PLAYER_USER_CB_UNLOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
820 return PLAYER_ERROR_OUT_OF_MEMORY;
824 LOGI("[%s] End", __FUNCTION__);
825 return PLAYER_ERROR_NONE;
828 LOGW("prepare cb is released");
829 LEGACY_PLAYER_USER_CB_LOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
830 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
831 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
832 /* user_data will be free at player_disp_prepare_async() */
833 handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
835 LEGACY_PLAYER_USER_CB_UNLOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
837 LOGE("LEAVE mm_err:0x%X", ret);
838 return __player_convert_error_code(ret, (char *)__FUNCTION__);
841 int legacy_player_prepare(player_h player)
843 int ret = MM_ERROR_NONE;
847 LOGI("[%s] Start", __FUNCTION__);
848 PLAYER_TRACE_BEGIN("MM:PLAYER:PREPARE");
849 PLAYER_INSTANCE_CHECK(player);
850 player_s *handle = (player_s *)player;
851 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
853 handle->last_play_position = 0;
854 ret = mm_player_set_message_callback(handle->mm_handle, __msg_callback, (void *)handle);
855 if (ret != MM_ERROR_NONE)
856 LOGW("[%s] Failed to set message callback function (0x%x)", __FUNCTION__, ret);
858 if (handle->display_type == PLAYER_DISPLAY_TYPE_NONE) {
859 ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_surface_type", MM_DISPLAY_SURFACE_NULL, (char *)NULL);
860 if (ret != MM_ERROR_NONE)
861 LOGW("[%s] Failed to set display surface type 'MM_DISPLAY_SURFACE_NULL' (0x%x)", __FUNCTION__, ret);
863 ret = mm_player_get_attribute(handle->mm_handle, NULL, "display_visible", &visible, (char *)NULL);
864 if (ret != MM_ERROR_NONE)
865 return __player_convert_error_code(ret, (char *)__FUNCTION__);
872 ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_visible", value, (char *)NULL);
874 if (ret != MM_ERROR_NONE)
875 LOGW("[%s] Failed to set display display_visible '0' (0x%x)", __FUNCTION__, ret);
878 ret = mm_player_realize(handle->mm_handle);
879 if (ret != MM_ERROR_NONE) {
880 LOGE("[%s] Failed to realize - 0x%x", __FUNCTION__, ret);
881 return __player_convert_error_code(ret, (char *)__FUNCTION__);
884 if (!handle->is_progressive_download)
885 ret = mm_player_pause(handle->mm_handle);
887 if (ret != MM_ERROR_NONE) {
889 uret = mm_player_unrealize(handle->mm_handle);
890 if (uret != MM_ERROR_NONE)
891 LOGE("[%s] Failed to unrealize - 0x%x", __FUNCTION__, uret);
893 LOGE("[%s] Failed to pause - 0x%x", __FUNCTION__, ret);
894 return __player_convert_error_code(ret, (char *)__FUNCTION__);
896 handle->state = PLAYER_STATE_READY;
897 LOGI("[%s] End", __FUNCTION__);
899 return PLAYER_ERROR_NONE;
903 int legacy_player_unprepare(player_h player)
905 LOGI("[%s] Start", __FUNCTION__);
906 PLAYER_TRACE_BEGIN("MM:PLAYER:UNPREPARE");
907 PLAYER_INSTANCE_CHECK(player);
908 player_s *handle = (player_s *)player;
910 /* Initialize the setting regardless of error return */
911 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK]) {
912 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK] = NULL;
913 handle->user_data[MUSE_PLAYER_EVENT_TYPE_SEEK] = NULL;
916 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
917 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
918 return PLAYER_ERROR_INVALID_STATE;
921 LEGACY_PLAYER_USER_CB_LOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
922 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
923 LOGW("Need to check. prepare cb have to be reset before");
924 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
925 if (handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
926 g_free(handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE]);
927 handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
930 LEGACY_PLAYER_USER_CB_UNLOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
932 __RELEASEIF_PREPARE_THREAD(handle->prepare_async_thread);
934 int ret = mm_player_unrealize(handle->mm_handle);
936 if (ret != MM_ERROR_NONE) {
937 return __player_convert_error_code(ret, (char *)__FUNCTION__);
939 handle->state = PLAYER_STATE_IDLE;
940 handle->is_stopped = FALSE;
941 handle->is_display_visible = TRUE;
942 handle->is_progressive_download = FALSE;
943 LOGI("[%s] End", __FUNCTION__);
945 return PLAYER_ERROR_NONE;
949 int legacy_player_set_uri(player_h player, const char *uri)
951 PLAYER_INSTANCE_CHECK(player);
952 PLAYER_NULL_ARG_CHECK(uri);
953 player_s *handle = (player_s *)player;
954 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
956 handle->is_media_stream = FALSE;
957 int ret = mm_player_set_uri(handle->mm_handle, uri);
959 if (ret != MM_ERROR_NONE)
960 return __player_convert_error_code(ret, (char *)__FUNCTION__);
962 return PLAYER_ERROR_NONE;
965 int legacy_player_set_memory_buffer(player_h player, const void *data, int size)
967 PLAYER_INSTANCE_CHECK(player);
968 PLAYER_NULL_ARG_CHECK(data);
969 PLAYER_CHECK_CONDITION(size >= 0, PLAYER_ERROR_INVALID_PARAMETER, "PLAYER_ERROR_INVALID_PARAMETER");
970 player_s *handle = (player_s *)player;
971 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
975 handle->is_media_stream = FALSE;
976 snprintf(uri, sizeof(uri), "mem:///ext=%s,size=%d", "", size);
977 int ret = mm_player_set_attribute(handle->mm_handle, NULL, MM_PLAYER_CONTENT_URI, uri, strlen(uri), MM_PLAYER_MEMORY_SRC, data, size, (char *)NULL);
978 if (ret != MM_ERROR_NONE)
979 return __player_convert_error_code(ret, (char *)__FUNCTION__);
981 return PLAYER_ERROR_NONE;
984 int legacy_player_get_state(player_h player, player_state_e *state)
986 PLAYER_INSTANCE_CHECK(player);
987 PLAYER_NULL_ARG_CHECK(state);
988 player_s *handle = (player_s *)player;
989 *state = handle->state;
990 MMPlayerStateType currentStat = MM_PLAYER_STATE_NULL;
991 mm_player_get_state(handle->mm_handle, ¤tStat);
992 /* LOGI("[%s] State : %d (FW state : %d)", __FUNCTION__,handle->state, currentStat); */
993 return PLAYER_ERROR_NONE;
996 int legacy_player_set_volume(player_h player, float left, float right)
998 PLAYER_INSTANCE_CHECK(player);
999 PLAYER_CHECK_CONDITION(left >= 0 && left <= 1.0, PLAYER_ERROR_INVALID_PARAMETER, "PLAYER_ERROR_INVALID_PARAMETER");
1000 PLAYER_CHECK_CONDITION(right >= 0 && right <= 1.0, PLAYER_ERROR_INVALID_PARAMETER, "PLAYER_ERROR_INVALID_PARAMETER");
1001 player_s *handle = (player_s *)player;
1002 MMPlayerVolumeType vol;
1003 vol.level[MM_VOLUME_CHANNEL_LEFT] = left;
1004 vol.level[MM_VOLUME_CHANNEL_RIGHT] = right;
1005 int ret = mm_player_set_volume(handle->mm_handle, &vol);
1006 if (ret != MM_ERROR_NONE)
1007 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1009 return PLAYER_ERROR_NONE;
1012 int legacy_player_get_volume(player_h player, float *left, float *right)
1014 PLAYER_INSTANCE_CHECK(player);
1015 PLAYER_NULL_ARG_CHECK(left);
1016 PLAYER_NULL_ARG_CHECK(right);
1017 player_s *handle = (player_s *)player;
1018 MMPlayerVolumeType vol;
1019 int ret = mm_player_get_volume(handle->mm_handle, &vol);
1020 if (ret != MM_ERROR_NONE) {
1021 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1023 *left = vol.level[MM_VOLUME_CHANNEL_LEFT];
1024 *right = vol.level[MM_VOLUME_CHANNEL_RIGHT];
1025 return PLAYER_ERROR_NONE;
1029 int legacy_player_set_sound_stream_info(player_h player, sound_stream_info_h stream_info)
1031 PLAYER_INSTANCE_CHECK(player);
1032 player_s *handle = (player_s *)player;
1033 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
1035 bool is_available = FALSE;
1037 /* check if stream_info is valid */
1038 int ret = sound_manager_is_available_stream_information(stream_info, NATIVE_API_PLAYER, &is_available);
1040 if (ret != MM_ERROR_NONE) {
1041 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1043 if (is_available == FALSE)
1044 ret = MM_ERROR_NOT_SUPPORT_API;
1046 char *stream_type = NULL;
1047 int stream_index = 0;
1048 ret = sound_manager_get_type_from_stream_information(stream_info, &stream_type);
1049 ret = sound_manager_get_index_from_stream_information(stream_info, &stream_index);
1050 if (ret == SOUND_MANAGER_ERROR_NONE)
1051 ret = mm_player_set_sound_stream_info(handle->mm_handle, stream_type, stream_index);
1053 ret = MM_ERROR_PLAYER_INTERNAL;
1057 if (ret != MM_ERROR_NONE)
1058 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1060 return PLAYER_ERROR_NONE;
1063 int legacy_player_set_audio_latency_mode(player_h player, audio_latency_mode_e latency_mode)
1065 PLAYER_INSTANCE_CHECK(player);
1066 player_s *handle = (player_s *)player;
1068 int ret = mm_player_set_attribute(handle->mm_handle, NULL, "sound_latency_mode", latency_mode, (char *)NULL);
1069 if (ret != MM_ERROR_NONE)
1070 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1072 return PLAYER_ERROR_NONE;
1075 int legacy_player_get_audio_latency_mode(player_h player, audio_latency_mode_e * latency_mode)
1077 PLAYER_INSTANCE_CHECK(player);
1078 PLAYER_NULL_ARG_CHECK(latency_mode);
1079 player_s *handle = (player_s *)player;
1081 int ret = mm_player_get_attribute(handle->mm_handle, NULL, "sound_latency_mode", latency_mode, (char *)NULL);
1082 if (ret != MM_ERROR_NONE)
1083 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1085 return PLAYER_ERROR_NONE;
1088 int legacy_player_start(player_h player)
1090 LOGI("[%s] Start", __FUNCTION__);
1091 PLAYER_INSTANCE_CHECK(player);
1092 player_s *handle = (player_s *)player;
1094 if (handle->state == PLAYER_STATE_READY || handle->state == PLAYER_STATE_PAUSED) {
1095 if (handle->display_type == PLAYER_DISPLAY_TYPE_OVERLAY && handle->is_display_visible) {
1096 ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_visible", 1, (char *)NULL);
1097 if (ret != MM_ERROR_NONE)
1098 LOGW("[%s] Failed to set display_visible '1' (0x%x)", __FUNCTION__, ret);
1100 if (handle->is_stopped) {
1101 if (handle->is_progressive_download) {
1102 LOGE("[%s] PLAYER_ERROR_INVALID_OPERATION(0x%08x)", __FUNCTION__, PLAYER_ERROR_INVALID_OPERATION);
1103 return PLAYER_ERROR_INVALID_OPERATION;
1106 ret = mm_player_start(handle->mm_handle);
1107 LOGI("[%s] stop -> start() ", __FUNCTION__);
1109 if (handle->is_progressive_download && handle->state == PLAYER_STATE_READY)
1110 ret = mm_player_start(handle->mm_handle);
1112 ret = mm_player_resume(handle->mm_handle);
1115 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1116 return PLAYER_ERROR_INVALID_STATE;
1119 if (ret != MM_ERROR_NONE) {
1120 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1122 handle->is_stopped = FALSE;
1123 handle->state = PLAYER_STATE_PLAYING;
1124 LOGI("[%s] End", __FUNCTION__);
1125 return PLAYER_ERROR_NONE;
1129 int legacy_player_stop(player_h player)
1131 LOGI("[%s] Start", __FUNCTION__);
1132 PLAYER_INSTANCE_CHECK(player);
1133 player_s *handle = (player_s *)player;
1134 int ret = MM_ERROR_NONE;
1136 if (handle->state == PLAYER_STATE_PLAYING || handle->state == PLAYER_STATE_PAUSED) {
1137 if (handle->display_type == PLAYER_DISPLAY_TYPE_OVERLAY) {
1138 ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_visible", 0, (char *)NULL);
1139 if (ret != MM_ERROR_NONE)
1140 LOGW("[%s] Failed to set display_visible '0' (0x%x)", __FUNCTION__, ret);
1143 ret = mm_player_stop(handle->mm_handle);
1144 if (ret != MM_ERROR_NONE) {
1145 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1147 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK]) {
1148 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK] = NULL;
1149 handle->user_data[MUSE_PLAYER_EVENT_TYPE_SEEK] = NULL;
1152 handle->state = PLAYER_STATE_READY;
1153 handle->is_stopped = TRUE;
1154 LOGI("[%s] End", __FUNCTION__);
1155 return PLAYER_ERROR_NONE;
1158 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1159 return PLAYER_ERROR_INVALID_STATE;
1163 int legacy_player_pause(player_h player)
1165 LOGI("[%s] Start", __FUNCTION__);
1166 PLAYER_INSTANCE_CHECK(player);
1167 player_s *handle = (player_s *)player;
1168 PLAYER_STATE_CHECK(handle, PLAYER_STATE_PLAYING);
1170 int ret = mm_player_pause(handle->mm_handle);
1171 if (ret != MM_ERROR_NONE) {
1172 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1174 handle->state = PLAYER_STATE_PAUSED;
1175 LOGI("[%s] End", __FUNCTION__);
1176 return PLAYER_ERROR_NONE;
1180 int legacy_player_set_play_position(player_h player, int millisecond, bool accurate, player_seek_completed_cb callback, void *user_data)
1182 PLAYER_INSTANCE_CHECK(player);
1183 PLAYER_CHECK_CONDITION(millisecond >= 0, PLAYER_ERROR_INVALID_PARAMETER, "PLAYER_ERROR_INVALID_PARAMETER");
1184 player_s *handle = (player_s *)player;
1185 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
1186 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1187 return PLAYER_ERROR_INVALID_STATE;
1190 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK] && handle->is_media_stream == FALSE) {
1191 LOGE("[%s] PLAYER_ERROR_SEEK_FAILED temp (0x%08x) : seeking... we can't do any more ", __FUNCTION__, PLAYER_ERROR_SEEK_FAILED);
1192 return PLAYER_ERROR_SEEK_FAILED;
1194 LOGI("[%s] Event type : %d, pos : %d ", __FUNCTION__, MUSE_PLAYER_EVENT_TYPE_SEEK, millisecond);
1195 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK] = callback;
1196 handle->user_data[MUSE_PLAYER_EVENT_TYPE_SEEK] = user_data;
1198 int accurated = accurate ? 1 : 0;
1199 int ret = mm_player_set_attribute(handle->mm_handle, NULL, "accurate_seek", accurated, (char *)NULL);
1200 if (ret != MM_ERROR_NONE)
1201 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1203 ret = mm_player_set_position(handle->mm_handle, MM_PLAYER_POS_FORMAT_TIME, millisecond);
1204 if (ret != MM_ERROR_NONE) {
1205 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK] = NULL;
1206 handle->user_data[MUSE_PLAYER_EVENT_TYPE_SEEK] = NULL;
1207 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1209 return PLAYER_ERROR_NONE;
1213 int legacy_player_get_play_position(player_h player, int *millisecond)
1215 unsigned long pos = 0;
1217 PLAYER_INSTANCE_CHECK(player);
1218 PLAYER_NULL_ARG_CHECK(millisecond);
1219 player_s *handle = (player_s *)player;
1220 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
1221 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1222 return PLAYER_ERROR_INVALID_STATE;
1225 int ret = mm_player_get_position(handle->mm_handle, MM_PLAYER_POS_FORMAT_TIME, &pos);
1226 if (ret != MM_ERROR_NONE) {
1227 if (ret == MM_ERROR_PLAYER_NOT_INITIALIZED) {
1228 /* During playbak if a interrupt is occurred, the player can be destroyed internally.
1229 libmm-player will post position msg with last playback position before destory pipeline */
1230 if (handle->state == PLAYER_STATE_IDLE) {
1231 if (handle->last_play_position > 0)
1232 *millisecond = handle->last_play_position;
1235 LOGD("position %d", *millisecond);
1236 return PLAYER_ERROR_NONE;
1240 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1242 *millisecond = (int)pos;
1243 return PLAYER_ERROR_NONE;
1247 int legacy_player_set_mute(player_h player, bool muted)
1249 PLAYER_INSTANCE_CHECK(player);
1250 player_s *handle = (player_s *)player;
1252 int ret = mm_player_set_mute(handle->mm_handle, muted);
1253 if (ret != MM_ERROR_NONE)
1254 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1256 return PLAYER_ERROR_NONE;
1259 int legacy_player_is_muted(player_h player, bool *muted)
1261 PLAYER_INSTANCE_CHECK(player);
1262 PLAYER_NULL_ARG_CHECK(muted);
1263 player_s *handle = (player_s *)player;
1266 int ret = mm_player_get_mute(handle->mm_handle, &_mute);
1267 if (ret != MM_ERROR_NONE) {
1268 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1274 return PLAYER_ERROR_NONE;
1278 int legacy_player_set_looping(player_h player, bool looping)
1280 PLAYER_INSTANCE_CHECK(player);
1281 player_s *handle = (player_s *)player;
1284 if (looping == TRUE)
1287 int ret = mm_player_set_attribute(handle->mm_handle, NULL, MM_PLAYER_PLAYBACK_COUNT, value, (char *)NULL);
1289 if (ret != MM_ERROR_NONE)
1290 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1292 return PLAYER_ERROR_NONE;
1295 int legacy_player_is_looping(player_h player, bool *looping)
1297 PLAYER_INSTANCE_CHECK(player);
1298 PLAYER_NULL_ARG_CHECK(looping);
1299 player_s *handle = (player_s *)player;
1302 int ret = mm_player_get_attribute(handle->mm_handle, NULL, MM_PLAYER_PLAYBACK_COUNT, &count, (char *)NULL);
1303 if (ret != MM_ERROR_NONE) {
1304 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1311 return PLAYER_ERROR_NONE;
1315 int legacy_player_get_duration(player_h player, int *duration)
1317 PLAYER_INSTANCE_CHECK(player);
1318 PLAYER_NULL_ARG_CHECK(duration);
1319 player_s *handle = (player_s *)player;
1320 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
1321 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1322 return PLAYER_ERROR_INVALID_STATE;
1325 int ret = mm_player_get_attribute(handle->mm_handle, NULL, MM_PLAYER_CONTENT_DURATION, &_duration, (char *)NULL);
1326 if (ret != MM_ERROR_NONE) {
1327 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1329 *duration = _duration;
1330 /* LOGI("[%s] duration : %d",__FUNCTION__,_duration); */
1331 return PLAYER_ERROR_NONE;
1335 int legacy_player_set_display_mode(player_h player, player_display_mode_e mode)
1337 PLAYER_INSTANCE_CHECK(player);
1338 player_s *handle = (player_s *)player;
1339 LOGI("[%s] mode:%d", __FUNCTION__, mode);
1341 int ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_method", mode, (char *)NULL);
1342 if (ret != MM_ERROR_NONE)
1343 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1345 return PLAYER_ERROR_NONE;
1348 int legacy_player_get_display_mode(player_h player, player_display_mode_e *mode)
1350 PLAYER_INSTANCE_CHECK(player);
1351 PLAYER_NULL_ARG_CHECK(mode);
1352 player_s *handle = (player_s *)player;
1353 int ret = mm_player_get_attribute(handle->mm_handle, NULL, "display_method", mode, (char *)NULL);
1354 if (ret != MM_ERROR_NONE)
1355 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1357 return PLAYER_ERROR_NONE;
1360 int legacy_player_set_playback_rate(player_h player, float rate)
1362 LOGI("[%s] rate : %0.1f", __FUNCTION__, rate);
1363 PLAYER_INSTANCE_CHECK(player);
1364 PLAYER_CHECK_CONDITION(rate >= -5.0 && rate <= 5.0, PLAYER_ERROR_INVALID_PARAMETER, "PLAYER_ERROR_INVALID_PARAMETER");
1365 player_s *handle = (player_s *)player;
1367 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
1368 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1369 return PLAYER_ERROR_INVALID_STATE;
1372 int ret = mm_player_set_play_speed(handle->mm_handle, rate, FALSE);
1376 case MM_ERROR_PLAYER_NO_OP:
1377 ret = PLAYER_ERROR_NONE;
1379 case MM_ERROR_NOT_SUPPORT_API:
1380 case MM_ERROR_PLAYER_SEEK:
1381 LOGE("[%s] PLAYER_ERROR_INVALID_OPERATION(0x%08x) : seek error", __FUNCTION__, PLAYER_ERROR_INVALID_OPERATION);
1382 ret = PLAYER_ERROR_INVALID_OPERATION;
1385 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1390 int legacy_player_set_display_rotation(player_h player, player_display_rotation_e rotation)
1392 PLAYER_INSTANCE_CHECK(player);
1393 player_s *handle = (player_s *)player;
1395 int ret = mm_player_set_attribute(handle->mm_handle, NULL, MM_PLAYER_VIDEO_ROTATION, rotation, (char *)NULL);
1396 if (ret != MM_ERROR_NONE)
1397 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1399 return PLAYER_ERROR_NONE;
1402 int legacy_player_get_display_rotation(player_h player, player_display_rotation_e *rotation)
1404 PLAYER_INSTANCE_CHECK(player);
1405 PLAYER_NULL_ARG_CHECK(rotation);
1406 player_s *handle = (player_s *)player;
1407 int ret = mm_player_get_attribute(handle->mm_handle, NULL, MM_PLAYER_VIDEO_ROTATION, rotation, (char *)NULL);
1408 if (ret != MM_ERROR_NONE)
1409 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1411 return PLAYER_ERROR_NONE;
1414 int legacy_player_set_display_visible(player_h player, bool visible)
1416 PLAYER_INSTANCE_CHECK(player);
1417 player_s *handle = (player_s *)player;
1420 if (visible == TRUE)
1423 int ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_visible", value, (char *)NULL);
1424 if (ret != MM_ERROR_NONE) {
1425 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1427 handle->is_display_visible = visible;
1428 return PLAYER_ERROR_NONE;
1432 int legacy_player_is_display_visible(player_h player, bool *visible)
1434 PLAYER_INSTANCE_CHECK(player);
1435 PLAYER_NULL_ARG_CHECK(visible);
1436 player_s *handle = (player_s *)player;
1438 int ret = mm_player_get_attribute(handle->mm_handle, NULL, "display_visible", &count, (char *)NULL);
1439 if (ret != MM_ERROR_NONE) {
1440 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1447 return PLAYER_ERROR_NONE;
1451 int legacy_player_get_content_info(player_h player, player_content_info_e key, char **value)
1453 PLAYER_INSTANCE_CHECK(player);
1454 PLAYER_NULL_ARG_CHECK(value);
1455 player_s *handle = (player_s *)player;
1456 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
1457 LOGE("[%s] PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1458 return PLAYER_ERROR_INVALID_STATE;
1466 case PLAYER_CONTENT_INFO_ALBUM:
1467 attr = MM_PLAYER_TAG_ALBUM;
1469 case PLAYER_CONTENT_INFO_ARTIST:
1470 attr = MM_PLAYER_TAG_ARTIST;
1472 case PLAYER_CONTENT_INFO_AUTHOR:
1473 attr = MM_PLAYER_TAG_AUTHOUR;
1475 case PLAYER_CONTENT_INFO_GENRE:
1476 attr = MM_PLAYER_TAG_GENRE;
1478 case PLAYER_CONTENT_INFO_TITLE:
1479 attr = MM_PLAYER_TAG_TITLE;
1481 case PLAYER_CONTENT_INFO_YEAR:
1482 attr = MM_PLAYER_TAG_DATE;
1488 int ret = mm_player_get_attribute(handle->mm_handle, NULL, attr, &val, &val_len, (char *)NULL);
1489 if (ret != MM_ERROR_NONE) {
1490 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1494 *value = strndup(val, val_len);
1496 *value = strndup("", 0);
1498 if (*value == NULL) {
1499 LOGE("[%s] PLAYER_ERROR_OUT_OF_MEMORY(0x%08x) : fail to strdup ", __FUNCTION__, PLAYER_ERROR_OUT_OF_MEMORY);
1500 return PLAYER_ERROR_OUT_OF_MEMORY;
1502 return PLAYER_ERROR_NONE;
1506 int legacy_player_get_codec_info(player_h player, char **audio_codec, char **video_codec)
1508 PLAYER_INSTANCE_CHECK(player);
1509 PLAYER_NULL_ARG_CHECK(audio_codec);
1510 PLAYER_NULL_ARG_CHECK(video_codec);
1511 player_s *handle = (player_s *)player;
1512 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
1513 LOGE("[%s] PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1514 return PLAYER_ERROR_INVALID_STATE;
1522 int ret = mm_player_get_attribute(handle->mm_handle, NULL, MM_PLAYER_AUDIO_CODEC, &audio, &audio_len, MM_PLAYER_VIDEO_CODEC, &video, &video_len, (char *)NULL);
1523 if (ret != MM_ERROR_NONE) {
1524 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1526 *audio_codec = NULL;
1528 *audio_codec = strndup(audio, audio_len);
1530 *audio_codec = strndup("", 0);
1532 *video_codec = NULL;
1534 *video_codec = strndup(video, video_len);
1536 *video_codec = strndup("", 0);
1538 LOGD("codec info: %s, %s", *audio_codec, *video_codec);
1539 return PLAYER_ERROR_NONE;
1543 int legacy_player_get_audio_stream_info(player_h player, int *sample_rate, int *channel, int *bit_rate)
1545 PLAYER_INSTANCE_CHECK(player);
1546 PLAYER_NULL_ARG_CHECK(sample_rate);
1547 PLAYER_NULL_ARG_CHECK(channel);
1548 PLAYER_NULL_ARG_CHECK(bit_rate);
1549 player_s *handle = (player_s *)player;
1550 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
1551 LOGE("[%s] PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1552 return PLAYER_ERROR_INVALID_STATE;
1554 int ret = mm_player_get_attribute(handle->mm_handle, NULL, MM_PLAYER_AUDIO_SAMPLERATE, sample_rate, MM_PLAYER_AUDIO_CHANNEL, channel, MM_PLAYER_AUDIO_BITRATE, bit_rate, (char *)NULL);
1555 if (ret != MM_ERROR_NONE)
1556 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1558 return PLAYER_ERROR_NONE;
1561 int legacy_player_get_video_stream_info(player_h player, int *fps, int *bit_rate)
1563 PLAYER_INSTANCE_CHECK(player);
1564 PLAYER_NULL_ARG_CHECK(fps);
1565 PLAYER_NULL_ARG_CHECK(bit_rate);
1566 player_s *handle = (player_s *)player;
1567 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
1568 LOGE("[%s] PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1569 return PLAYER_ERROR_INVALID_STATE;
1571 int ret = mm_player_get_attribute(handle->mm_handle, NULL, "content_video_fps", fps, "content_video_bitrate", bit_rate, (char *)NULL);
1572 if (ret != MM_ERROR_NONE)
1573 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1575 return PLAYER_ERROR_NONE;
1578 int legacy_player_get_video_size(player_h player, int *width, int *height)
1580 PLAYER_INSTANCE_CHECK(player);
1581 PLAYER_NULL_ARG_CHECK(width);
1582 PLAYER_NULL_ARG_CHECK(height);
1583 player_s *handle = (player_s *)player;
1584 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
1585 LOGE("[%s] PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1586 return PLAYER_ERROR_INVALID_STATE;
1590 int ret = mm_player_get_attribute(handle->mm_handle, NULL, MM_PLAYER_VIDEO_WIDTH, &w, MM_PLAYER_VIDEO_HEIGHT, &h, (char *)NULL);
1591 if (ret != MM_ERROR_NONE) {
1592 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1596 LOGI("[%s] width : %d, height : %d", __FUNCTION__, w, h);
1597 return PLAYER_ERROR_NONE;
1601 int legacy_player_get_album_art(player_h player, void **album_art, int *size)
1603 PLAYER_INSTANCE_CHECK(player);
1604 PLAYER_NULL_ARG_CHECK(size);
1605 player_s *handle = (player_s *)player;
1606 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
1607 LOGE("[%s] PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1608 return PLAYER_ERROR_INVALID_STATE;
1611 int ret = mm_player_get_attribute(handle->mm_handle, NULL, "tag_album_cover", album_art, size, (char *)NULL);
1612 if (ret != MM_ERROR_NONE)
1613 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1615 return PLAYER_ERROR_NONE;
1618 int legacy_player_audio_effect_get_equalizer_bands_count(player_h player, int *count)
1620 PLAYER_INSTANCE_CHECK(player);
1621 PLAYER_NULL_ARG_CHECK(count);
1622 player_s *handle = (player_s *)player;
1624 int ret = mm_player_audio_effect_custom_get_eq_bands_number(handle->mm_handle, count);
1625 if (ret != MM_ERROR_NONE)
1626 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1628 return PLAYER_ERROR_NONE;
1631 int legacy_player_audio_effect_set_equalizer_all_bands(player_h player, int *band_levels, int length)
1633 PLAYER_INSTANCE_CHECK(player);
1634 PLAYER_NULL_ARG_CHECK(band_levels);
1635 player_s *handle = (player_s *)player;
1637 int ret = mm_player_audio_effect_custom_set_level_eq_from_list(handle->mm_handle, band_levels, length);
1638 if (ret != MM_ERROR_NONE) {
1639 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1641 ret = mm_player_audio_effect_custom_apply(handle->mm_handle);
1642 return (ret == MM_ERROR_NONE) ? PLAYER_ERROR_NONE : __player_convert_error_code(ret, (char *)__FUNCTION__);
1646 int legacy_player_audio_effect_set_equalizer_band_level(player_h player, int index, int level)
1648 PLAYER_INSTANCE_CHECK(player);
1649 player_s *handle = (player_s *)player;
1651 int ret = mm_player_audio_effect_custom_set_level(handle->mm_handle, MM_AUDIO_EFFECT_CUSTOM_EQ, index, level);
1652 if (ret != MM_ERROR_NONE) {
1653 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1655 ret = mm_player_audio_effect_custom_apply(handle->mm_handle);
1656 return (ret == MM_ERROR_NONE) ? PLAYER_ERROR_NONE : __player_convert_error_code(ret, (char *)__FUNCTION__);
1660 int legacy_player_audio_effect_get_equalizer_band_level(player_h player, int index, int *level)
1662 PLAYER_INSTANCE_CHECK(player);
1663 PLAYER_NULL_ARG_CHECK(level);
1664 player_s *handle = (player_s *)player;
1666 int ret = mm_player_audio_effect_custom_get_level(handle->mm_handle, MM_AUDIO_EFFECT_CUSTOM_EQ, index, level);
1667 if (ret != MM_ERROR_NONE)
1668 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1670 return PLAYER_ERROR_NONE;
1673 int legacy_player_audio_effect_get_equalizer_level_range(player_h player, int *min, int *max)
1675 PLAYER_INSTANCE_CHECK(player);
1676 PLAYER_NULL_ARG_CHECK(min);
1677 PLAYER_NULL_ARG_CHECK(max);
1678 player_s *handle = (player_s *)player;
1680 int ret = mm_player_audio_effect_custom_get_level_range(handle->mm_handle, MM_AUDIO_EFFECT_CUSTOM_EQ, min, max);
1681 if (ret != MM_ERROR_NONE)
1682 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1684 return PLAYER_ERROR_NONE;
1687 int legacy_player_audio_effect_get_equalizer_band_frequency(player_h player, int index, int *frequency)
1689 PLAYER_INSTANCE_CHECK(player);
1690 PLAYER_NULL_ARG_CHECK(frequency);
1691 player_s *handle = (player_s *)player;
1693 int ret = mm_player_audio_effect_custom_get_eq_bands_freq(handle->mm_handle, index, frequency);
1694 if (ret != MM_ERROR_NONE)
1695 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1697 return PLAYER_ERROR_NONE;
1700 int legacy_player_audio_effect_get_equalizer_band_frequency_range(player_h player, int index, int *range)
1702 PLAYER_INSTANCE_CHECK(player);
1703 PLAYER_NULL_ARG_CHECK(range);
1704 player_s *handle = (player_s *)player;
1706 int ret = mm_player_audio_effect_custom_get_eq_bands_width(handle->mm_handle, index, range);
1707 if (ret != MM_ERROR_NONE)
1708 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1710 return PLAYER_ERROR_NONE;
1713 int legacy_player_audio_effect_equalizer_clear(player_h player)
1715 PLAYER_INSTANCE_CHECK(player);
1716 player_s *handle = (player_s *)player;
1718 int ret = mm_player_audio_effect_custom_clear_eq_all(handle->mm_handle);
1719 if (ret != MM_ERROR_NONE) {
1720 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1722 ret = mm_player_audio_effect_custom_apply(handle->mm_handle);
1723 return (ret == MM_ERROR_NONE) ? PLAYER_ERROR_NONE : __player_convert_error_code(ret, (char *)__FUNCTION__);
1727 int legacy_player_audio_effect_equalizer_is_available(player_h player, bool *available)
1729 PLAYER_INSTANCE_CHECK(player);
1730 PLAYER_NULL_ARG_CHECK(available);
1732 player_s *handle = (player_s *)player;
1733 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
1734 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1735 return PLAYER_ERROR_INVALID_STATE;
1738 int ret = mm_player_is_supported_custom_effect_type(handle->mm_handle, MM_AUDIO_EFFECT_CUSTOM_EQ);
1739 if (ret != MM_ERROR_NONE)
1743 return PLAYER_ERROR_NONE;
1746 int legacy_player_set_subtitle_path(player_h player, const char *path)
1748 PLAYER_INSTANCE_CHECK(player);
1749 player_s *handle = (player_s *)player;
1751 if ((path == NULL) && (handle->state != PLAYER_STATE_IDLE))
1752 return PLAYER_ERROR_INVALID_PARAMETER;
1754 int ret = mm_player_set_external_subtitle_path(handle->mm_handle, path);
1755 if (ret != MM_ERROR_NONE)
1756 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1758 return PLAYER_ERROR_NONE;
1761 int legacy_player_set_subtitle_position_offset(player_h player, int millisecond)
1763 PLAYER_INSTANCE_CHECK(player);
1764 /* PLAYER_CHECK_CONDITION(millisecond>=0 ,PLAYER_ERROR_INVALID_PARAMETER ,"PLAYER_ERROR_INVALID_PARAMETER" ); */
1765 player_s *handle = (player_s *)player;
1766 if (!__player_state_validate(handle, PLAYER_STATE_PLAYING)) {
1767 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1768 return PLAYER_ERROR_INVALID_STATE;
1771 int ret = mm_player_adjust_subtitle_position(handle->mm_handle, MM_PLAYER_POS_FORMAT_TIME, millisecond);
1772 if (ret != MM_ERROR_NONE)
1773 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1775 return PLAYER_ERROR_NONE;
1778 int legacy_player_set_progressive_download_path(player_h player, const char *path)
1780 PLAYER_INSTANCE_CHECK(player);
1781 PLAYER_NULL_ARG_CHECK(path);
1783 player_s *handle = (player_s *)player;
1784 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
1786 int ret = mm_player_set_attribute(handle->mm_handle, NULL, "pd_mode", MM_PLAYER_PD_MODE_URI, "pd_location", path, strlen(path), (char *)NULL);
1787 if (ret != MM_ERROR_NONE) {
1788 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1790 handle->is_progressive_download = 1;
1791 return PLAYER_ERROR_NONE;
1795 int legacy_player_get_progressive_download_status(player_h player, unsigned long *current, unsigned long *total_size)
1798 PLAYER_INSTANCE_CHECK(player);
1799 PLAYER_NULL_ARG_CHECK(current);
1800 PLAYER_NULL_ARG_CHECK(total_size);
1801 player_s *handle = (player_s *)player;
1802 if (handle->state != PLAYER_STATE_PLAYING && handle->state != PLAYER_STATE_PAUSED) {
1803 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1804 return PLAYER_ERROR_INVALID_STATE;
1808 int ret = mm_player_get_pd_status(handle->mm_handle, &_current, &_total);
1809 if (ret != MM_ERROR_NONE) {
1810 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1812 *current = _current;
1813 *total_size = _total;
1814 return PLAYER_ERROR_NONE;
1818 int legacy_player_capture_video(player_h player, player_video_captured_cb callback, void *user_data)
1820 PLAYER_INSTANCE_CHECK(player);
1821 PLAYER_NULL_ARG_CHECK(callback);
1823 player_s *handle = (player_s *)player;
1824 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_CAPTURE]) {
1825 LOGE("[%s] PLAYER_ERROR_VIDEO_CAPTURE_FAILED (0x%08x) : capturing... we can't do any more ", __FUNCTION__, PLAYER_ERROR_VIDEO_CAPTURE_FAILED);
1826 return PLAYER_ERROR_VIDEO_CAPTURE_FAILED;
1828 LOGI("[%s] Event type : %d ", __FUNCTION__, MUSE_PLAYER_EVENT_TYPE_CAPTURE);
1829 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_CAPTURE] = callback;
1830 handle->user_data[MUSE_PLAYER_EVENT_TYPE_CAPTURE] = user_data;
1833 if (handle->state >= PLAYER_STATE_READY) {
1834 int ret = mm_player_do_video_capture(handle->mm_handle);
1835 if (ret == MM_ERROR_PLAYER_NO_OP) {
1836 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_CAPTURE] = NULL;
1837 handle->user_data[MUSE_PLAYER_EVENT_TYPE_CAPTURE] = NULL;
1838 LOGE("[%s] PLAYER_ERROR_INVALID_OPERATION (0x%08x) : video display must be set : %d", __FUNCTION__, PLAYER_ERROR_INVALID_OPERATION, handle->display_type);
1839 return PLAYER_ERROR_INVALID_OPERATION;
1841 if (ret != MM_ERROR_NONE) {
1842 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_CAPTURE] = NULL;
1843 handle->user_data[MUSE_PLAYER_EVENT_TYPE_CAPTURE] = NULL;
1844 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1846 return PLAYER_ERROR_NONE;
1848 LOGE("[%s] PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1849 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_CAPTURE] = NULL;
1850 handle->user_data[MUSE_PLAYER_EVENT_TYPE_CAPTURE] = NULL;
1851 return PLAYER_ERROR_INVALID_STATE;
1855 int legacy_player_set_streaming_cookie(player_h player, const char *cookie, int size)
1857 PLAYER_INSTANCE_CHECK(player);
1858 PLAYER_NULL_ARG_CHECK(cookie);
1859 PLAYER_CHECK_CONDITION(size >= 0, PLAYER_ERROR_INVALID_PARAMETER, "PLAYER_ERROR_INVALID_PARAMETER");
1860 player_s *handle = (player_s *)player;
1861 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
1863 int ret = mm_player_set_attribute(handle->mm_handle, NULL, "streaming_cookie", cookie, size, (char *)NULL);
1864 if (ret != MM_ERROR_NONE)
1865 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1867 return PLAYER_ERROR_NONE;
1870 int legacy_player_set_streaming_user_agent(player_h player, const char *user_agent, int size)
1872 PLAYER_INSTANCE_CHECK(player);
1873 PLAYER_NULL_ARG_CHECK(user_agent);
1874 PLAYER_CHECK_CONDITION(size >= 0, PLAYER_ERROR_INVALID_PARAMETER, "PLAYER_ERROR_INVALID_PARAMETER");
1875 player_s *handle = (player_s *)player;
1876 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
1878 int ret = mm_player_set_attribute(handle->mm_handle, NULL, "streaming_user_agent", user_agent, size, (char *)NULL);
1879 if (ret != MM_ERROR_NONE)
1880 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1882 return PLAYER_ERROR_NONE;
1885 int legacy_player_get_streaming_download_progress(player_h player, int *start, int *current)
1887 PLAYER_INSTANCE_CHECK(player);
1888 PLAYER_NULL_ARG_CHECK(start);
1889 PLAYER_NULL_ARG_CHECK(current);
1890 player_s *handle = (player_s *)player;
1891 if (handle->state != PLAYER_STATE_PLAYING && handle->state != PLAYER_STATE_PAUSED) {
1892 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1893 return PLAYER_ERROR_INVALID_STATE;
1895 unsigned long _current = 0;
1896 unsigned long _start = 0;
1897 int ret = mm_player_get_buffer_position(handle->mm_handle, MM_PLAYER_POS_FORMAT_PERCENT, &_start, &_current);
1898 if (ret != MM_ERROR_NONE) {
1899 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1901 *start = (int)_start;
1902 *current = (int)_current;
1903 return PLAYER_ERROR_NONE;
1907 int legacy_player_set_completed_cb(player_h player, player_completed_cb callback, void *user_data)
1909 return __set_callback(MUSE_PLAYER_EVENT_TYPE_COMPLETE, player, callback, user_data);
1912 int legacy_player_unset_completed_cb(player_h player)
1914 return __unset_callback(MUSE_PLAYER_EVENT_TYPE_COMPLETE, player);
1917 #ifdef TIZEN_FEATURE_EVAS_RENDERER
1918 int legacy_player_set_retrieve_buffer_cb(player_h player, player_retrieve_buffer_cb callback, void *user_data)
1920 return __set_callback(MUSE_PLAYER_EVENT_TYPE_RETURN_BUFFER, player, callback, user_data);
1923 int legacy_player_unset_retrieve_buffer_cb(player_h player)
1925 return __unset_callback(MUSE_PLAYER_EVENT_TYPE_RETURN_BUFFER, player);
1929 int legacy_player_set_interrupted_cb(player_h player, player_interrupted_cb callback, void *user_data)
1931 return __set_callback(MUSE_PLAYER_EVENT_TYPE_INTERRUPT, player, callback, user_data);
1934 int legacy_player_unset_interrupted_cb(player_h player)
1936 return __unset_callback(MUSE_PLAYER_EVENT_TYPE_INTERRUPT, player);
1939 int legacy_player_set_error_cb(player_h player, player_error_cb callback, void *user_data)
1941 return __set_callback(MUSE_PLAYER_EVENT_TYPE_ERROR, player, callback, user_data);
1944 int legacy_player_unset_error_cb(player_h player)
1946 return __unset_callback(MUSE_PLAYER_EVENT_TYPE_ERROR, player);
1949 int legacy_player_set_buffering_cb(player_h player, player_buffering_cb callback, void *user_data)
1951 return __set_callback(MUSE_PLAYER_EVENT_TYPE_BUFFERING, player, callback, user_data);
1954 int legacy_player_unset_buffering_cb(player_h player)
1956 return __unset_callback(MUSE_PLAYER_EVENT_TYPE_BUFFERING, player);
1959 int legacy_player_set_subtitle_updated_cb(player_h player, player_subtitle_updated_cb callback, void *user_data)
1961 return __set_callback(MUSE_PLAYER_EVENT_TYPE_SUBTITLE, player, callback, user_data);
1964 int legacy_player_unset_subtitle_updated_cb(player_h player)
1966 return __unset_callback(MUSE_PLAYER_EVENT_TYPE_SUBTITLE, player);
1969 int legacy_player_set_progressive_download_message_cb(player_h player, player_pd_message_cb callback, void *user_data)
1971 PLAYER_INSTANCE_CHECK(player);
1972 PLAYER_NULL_ARG_CHECK(callback);
1974 player_s *handle = (player_s *)player;
1976 if (handle->state != PLAYER_STATE_IDLE && handle->state != PLAYER_STATE_READY) {
1977 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1978 return PLAYER_ERROR_INVALID_STATE;
1981 int ret = mm_player_set_pd_message_callback(handle->mm_handle, __pd_message_callback, (void *)handle);
1982 if (ret != MM_ERROR_NONE)
1983 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1985 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PD] = callback;
1986 handle->user_data[MUSE_PLAYER_EVENT_TYPE_PD] = user_data;
1987 LOGI("[%s] Event type : %d ", __FUNCTION__, MUSE_PLAYER_EVENT_TYPE_PD);
1988 return PLAYER_ERROR_NONE;
1991 int legacy_player_unset_progressive_download_message_cb(player_h player)
1993 PLAYER_INSTANCE_CHECK(player);
1994 player_s *handle = (player_s *)player;
1996 LEGACY_PLAYER_USER_CB_LOCK(handle, MUSE_PLAYER_EVENT_TYPE_PD);
1997 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PD] = NULL;
1998 handle->user_data[MUSE_PLAYER_EVENT_TYPE_PD] = NULL;
1999 LEGACY_PLAYER_USER_CB_UNLOCK(handle, MUSE_PLAYER_EVENT_TYPE_PD);
2000 LOGI("[%s] Event type : %d ", __FUNCTION__, MUSE_PLAYER_EVENT_TYPE_PD);
2002 int ret = mm_player_set_pd_message_callback(handle->mm_handle, NULL, NULL);
2003 if (ret != MM_ERROR_NONE)
2004 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2006 return PLAYER_ERROR_NONE;
2009 int legacy_player_release_video_stream_bo(player_h player, void* bo)
2011 PLAYER_INSTANCE_CHECK(player);
2012 player_s *handle = (player_s *)player;
2014 LOGD("ENTER %p %p", player, bo);
2016 mm_player_release_video_stream_bo(handle->mm_handle, bo);
2020 return PLAYER_ERROR_NONE;
2023 int legacy_player_set_media_packet_video_frame_decoded_cb(player_h player, legacy_player_media_packet_video_decoded_cb callback, void *user_data)
2025 PLAYER_INSTANCE_CHECK(player);
2026 PLAYER_NULL_ARG_CHECK(callback);
2028 player_s *handle = (player_s *)player;
2029 if (handle->state != PLAYER_STATE_IDLE) {
2030 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
2031 return PLAYER_ERROR_INVALID_STATE;
2034 int ret = mm_player_set_video_stream_callback(handle->mm_handle, (mm_player_video_stream_callback)callback, user_data);
2035 if (ret != MM_ERROR_NONE)
2036 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2038 return PLAYER_ERROR_NONE;
2041 int legacy_player_unset_media_packet_video_frame_decoded_cb(player_h player)
2043 PLAYER_INSTANCE_CHECK(player);
2044 player_s *handle = (player_s *)player;
2046 LOGI("Event type : %d ", MUSE_PLAYER_EVENT_TYPE_MEDIA_PACKET_VIDEO_FRAME);
2048 int ret = mm_player_set_video_stream_callback(handle->mm_handle, NULL, NULL);
2049 if (ret != MM_ERROR_NONE)
2050 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2052 return PLAYER_ERROR_NONE;
2055 static bool __video_stream_changed_callback(void *user_data)
2057 player_s *handle = (player_s *)user_data;
2058 muse_player_event_e event_type = MUSE_PLAYER_EVENT_TYPE_VIDEO_STREAM_CHANGED;
2060 LOGE("[%s] event type %d", __FUNCTION__, event_type);
2062 if (handle->user_cb[event_type]) {
2063 int width = 0, height = 0, fps = 0, bit_rate = 0;
2064 int ret = mm_player_get_attribute(handle->mm_handle, NULL,
2065 MM_PLAYER_VIDEO_WIDTH, &width,
2066 MM_PLAYER_VIDEO_HEIGHT, &height,
2067 "content_video_fps", &fps,
2068 "content_video_bitrate", &bit_rate, (char *)NULL);
2070 if (ret != MM_ERROR_NONE) {
2071 LOGE("[%s] get attr is failed", __FUNCTION__);
2075 ((player_video_stream_changed_cb)handle->user_cb[event_type])(width, height, fps, bit_rate, handle->user_data[event_type]);
2077 LOGE("[%s] video stream changed cb was not set.", __FUNCTION__);
2084 int legacy_player_set_video_stream_changed_cb(player_h player, player_video_stream_changed_cb callback, void *user_data)
2087 PLAYER_INSTANCE_CHECK(player);
2088 PLAYER_NULL_ARG_CHECK(callback);
2089 player_s *handle = (player_s *)player;
2091 if (handle->state != PLAYER_STATE_IDLE) {
2092 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
2093 return PLAYER_ERROR_INVALID_STATE;
2096 ret = mm_player_set_video_stream_changed_callback(handle->mm_handle, (mm_player_stream_changed_callback)__video_stream_changed_callback, (void *)handle);
2098 if (ret != MM_ERROR_NONE)
2099 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2101 return __set_callback(MUSE_PLAYER_EVENT_TYPE_VIDEO_STREAM_CHANGED, player, callback, user_data);
2104 int legacy_player_unset_video_stream_changed_cb(player_h player)
2107 PLAYER_INSTANCE_CHECK(player);
2108 player_s *handle = (player_s *)player;
2110 __unset_callback(MUSE_PLAYER_EVENT_TYPE_VIDEO_STREAM_CHANGED, player);
2112 ret = mm_player_set_video_stream_changed_callback(handle->mm_handle, NULL, NULL);
2113 if (ret != MM_ERROR_NONE)
2114 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2116 return PLAYER_ERROR_NONE;
2119 static bool __media_stream_buffer_status_callback(player_stream_type_e type, player_media_stream_buffer_status_e status, unsigned long long bytes, void *user_data)
2121 player_s *handle = (player_s *)user_data;
2122 muse_player_event_e event_type;
2124 if (type == PLAYER_STREAM_TYPE_AUDIO)
2125 event_type = MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_AUDIO_BUFFER_STATUS;
2126 else if (type == PLAYER_STREAM_TYPE_VIDEO)
2127 event_type = MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_VIDEO_BUFFER_STATUS;
2131 LOGE("[%s] event type %d", __FUNCTION__, event_type);
2133 if (handle->user_cb[event_type]) {
2134 ((player_media_stream_buffer_status_cb)handle->user_cb[event_type])(status, handle->user_data[event_type]);
2136 LOGE("[%s][type:%d] buffer status cb was not set.", __FUNCTION__, type);
2143 static bool __media_stream_seek_data_callback(player_stream_type_e type, unsigned long long offset, void *user_data)
2145 player_s *handle = (player_s *)user_data;
2146 muse_player_event_e event_type;
2148 if (type == PLAYER_STREAM_TYPE_AUDIO)
2149 event_type = MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_AUDIO_SEEK;
2150 else if (type == PLAYER_STREAM_TYPE_VIDEO)
2151 event_type = MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_VIDEO_SEEK;
2155 LOGE("[%s] event type %d", __FUNCTION__, event_type);
2157 if (handle->user_cb[event_type]) {
2158 ((player_media_stream_seek_cb)handle->user_cb[event_type])(offset, handle->user_data[event_type]);
2160 LOGE("[%s][type:%d] seek cb was not set.", __FUNCTION__, type);
2167 int legacy_player_set_media_stream_buffer_status_cb(player_h player, player_stream_type_e type, player_media_stream_buffer_status_cb callback, void *user_data)
2170 PLAYER_INSTANCE_CHECK(player);
2171 PLAYER_NULL_ARG_CHECK(callback);
2172 player_s *handle = (player_s *)player;
2174 if (handle->state != PLAYER_STATE_IDLE) {
2175 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
2176 return PLAYER_ERROR_INVALID_STATE;
2178 /* the type can be expaned with default and text. */
2179 if ((type != PLAYER_STREAM_TYPE_VIDEO) && (type != PLAYER_STREAM_TYPE_AUDIO)) {
2180 LOGE("[%s] PLAYER_ERROR_INVALID_PARAMETER(type : %d)", __FUNCTION__, type);
2181 return PLAYER_ERROR_INVALID_PARAMETER;
2184 ret = mm_player_set_media_stream_buffer_status_callback(handle->mm_handle, type, (mm_player_media_stream_buffer_status_callback)__media_stream_buffer_status_callback, (void *)handle);
2186 if (ret != MM_ERROR_NONE)
2187 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2189 if (type == PLAYER_STREAM_TYPE_VIDEO)
2190 return __set_callback(MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_VIDEO_BUFFER_STATUS, player, callback, user_data);
2192 return __set_callback(MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_AUDIO_BUFFER_STATUS, player, callback, user_data);
2195 int legacy_player_unset_media_stream_buffer_status_cb(player_h player, player_stream_type_e type)
2198 PLAYER_INSTANCE_CHECK(player);
2199 player_s *handle = (player_s *)player;
2201 if (type == PLAYER_STREAM_TYPE_VIDEO)
2202 __unset_callback(MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_VIDEO_BUFFER_STATUS, player);
2203 else if (type == PLAYER_STREAM_TYPE_AUDIO)
2204 __unset_callback(MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_AUDIO_BUFFER_STATUS, player);
2206 return PLAYER_ERROR_INVALID_PARAMETER;
2208 ret = mm_player_set_media_stream_buffer_status_callback(handle->mm_handle, type, NULL, NULL);
2209 if (ret != MM_ERROR_NONE)
2210 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2212 return PLAYER_ERROR_NONE;
2215 int legacy_player_set_media_stream_seek_cb(player_h player, player_stream_type_e type, player_media_stream_seek_cb callback, void *user_data)
2218 PLAYER_INSTANCE_CHECK(player);
2219 PLAYER_NULL_ARG_CHECK(callback);
2220 player_s *handle = (player_s *)player;
2222 if (handle->state != PLAYER_STATE_IDLE) {
2223 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
2224 return PLAYER_ERROR_INVALID_STATE;
2226 /* the type can be expaned with default and text. */
2227 if ((type != PLAYER_STREAM_TYPE_VIDEO) && (type != PLAYER_STREAM_TYPE_AUDIO)) {
2228 LOGE("[%s] PLAYER_ERROR_INVALID_PARAMETER(type : %d)", __FUNCTION__, type);
2229 return PLAYER_ERROR_INVALID_PARAMETER;
2232 ret = mm_player_set_media_stream_seek_data_callback(handle->mm_handle, type, (mm_player_media_stream_seek_data_callback)__media_stream_seek_data_callback, (void *)handle);
2234 if (ret != MM_ERROR_NONE)
2235 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2237 if (type == PLAYER_STREAM_TYPE_VIDEO)
2238 return __set_callback(MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_VIDEO_SEEK, player, callback, user_data);
2240 return __set_callback(MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_AUDIO_SEEK, player, callback, user_data);
2243 int legacy_player_unset_media_stream_seek_cb(player_h player, player_stream_type_e type)
2246 PLAYER_INSTANCE_CHECK(player);
2247 player_s *handle = (player_s *)player;
2249 if (type == PLAYER_STREAM_TYPE_VIDEO)
2250 __unset_callback(MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_VIDEO_SEEK, player);
2251 else if (type == PLAYER_STREAM_TYPE_AUDIO)
2252 __unset_callback(MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_AUDIO_SEEK, player);
2254 return PLAYER_ERROR_INVALID_PARAMETER;
2256 ret = mm_player_set_media_stream_seek_data_callback(handle->mm_handle, type, NULL, NULL);
2257 if (ret != MM_ERROR_NONE)
2258 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2260 return PLAYER_ERROR_NONE;
2263 int legacy_player_push_media_stream(player_h player, media_packet_h packet)
2265 PLAYER_INSTANCE_CHECK(player);
2266 player_s *handle = (player_s *)player;
2268 PLAYER_CHECK_CONDITION(handle->error_code == PLAYER_ERROR_NONE, PLAYER_ERROR_NOT_SUPPORTED_FILE, "can't support this format");
2270 int ret = mm_player_submit_packet(handle->mm_handle, packet);
2272 if (ret != MM_ERROR_NONE)
2273 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2275 return PLAYER_ERROR_NONE;
2278 int legacy_player_set_media_stream_info(player_h player, player_stream_type_e type, media_format_h format)
2281 PLAYER_INSTANCE_CHECK(player);
2282 player_s *handle = (player_s *)player;
2283 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
2285 handle->is_media_stream = TRUE;
2287 if (type == PLAYER_STREAM_TYPE_VIDEO)
2288 ret = mm_player_set_video_info(handle->mm_handle, format);
2289 else if (type == PLAYER_STREAM_TYPE_AUDIO)
2290 ret = mm_player_set_audio_info(handle->mm_handle, format);
2292 return PLAYER_ERROR_INVALID_PARAMETER;
2294 if (ret != MM_ERROR_NONE)
2295 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2297 return PLAYER_ERROR_NONE;
2299 return PLAYER_ERROR_NONE;
2302 int legacy_player_set_media_stream_buffer_max_size(player_h player, player_stream_type_e type, unsigned long long max_size)
2305 PLAYER_INSTANCE_CHECK(player);
2306 player_s *handle = (player_s *)player;
2307 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2308 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
2309 return PLAYER_ERROR_INVALID_STATE;
2312 ret = mm_player_set_media_stream_buffer_max_size(handle->mm_handle, type, max_size);
2314 if (ret != MM_ERROR_NONE)
2315 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2317 return PLAYER_ERROR_NONE;
2320 int legacy_player_get_media_stream_buffer_max_size(player_h player, player_stream_type_e type, unsigned long long *max_size)
2322 PLAYER_INSTANCE_CHECK(player);
2323 PLAYER_NULL_ARG_CHECK(max_size);
2324 player_s *handle = (player_s *)player;
2326 unsigned long long _max_size;
2327 int ret = mm_player_get_media_stream_buffer_max_size(handle->mm_handle, type, &_max_size);
2328 if (ret != MM_ERROR_NONE) {
2329 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2331 *max_size = _max_size;
2332 return PLAYER_ERROR_NONE;
2336 int legacy_player_set_media_stream_buffer_min_threshold(player_h player, player_stream_type_e type, unsigned int percent)
2339 PLAYER_INSTANCE_CHECK(player);
2340 player_s *handle = (player_s *)player;
2341 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2342 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
2343 return PLAYER_ERROR_INVALID_STATE;
2346 ret = mm_player_set_media_stream_buffer_min_percent(handle->mm_handle, type, percent);
2348 if (ret != MM_ERROR_NONE)
2349 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2351 return PLAYER_ERROR_NONE;
2354 int legacy_player_get_media_stream_buffer_min_threshold(player_h player, player_stream_type_e type, unsigned int *percent)
2356 PLAYER_INSTANCE_CHECK(player);
2357 PLAYER_NULL_ARG_CHECK(percent);
2358 player_s *handle = (player_s *)player;
2360 unsigned int _value;
2361 int ret = mm_player_get_media_stream_buffer_min_percent(handle->mm_handle, type, &_value);
2362 if (ret != MM_ERROR_NONE) {
2363 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2366 return PLAYER_ERROR_NONE;
2370 int legacy_player_get_track_count(player_h player, player_stream_type_e type, int *count)
2372 PLAYER_INSTANCE_CHECK(player);
2373 PLAYER_NULL_ARG_CHECK(count);
2374 player_s *handle = (player_s *)player;
2376 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
2377 LOGE("[%s] PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
2378 return PLAYER_ERROR_INVALID_STATE;
2381 MMPlayerTrackType track_type = 0;
2383 case PLAYER_STREAM_TYPE_AUDIO:
2384 track_type = MM_PLAYER_TRACK_TYPE_AUDIO;
2386 case PLAYER_STREAM_TYPE_TEXT:
2387 track_type = MM_PLAYER_TRACK_TYPE_TEXT;
2390 LOGE("invalid stream type %d", type);
2391 return PLAYER_ERROR_INVALID_PARAMETER;
2394 int ret = mm_player_get_track_count(handle->mm_handle, track_type, count);
2395 if (ret != MM_ERROR_NONE)
2396 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2398 return PLAYER_ERROR_NONE;
2401 int legacy_player_get_current_track(player_h player, player_stream_type_e type, int *index)
2403 PLAYER_INSTANCE_CHECK(player);
2404 PLAYER_NULL_ARG_CHECK(index);
2405 player_s *handle = (player_s *)player;
2407 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
2408 LOGE("[%s] PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
2409 return PLAYER_ERROR_INVALID_STATE;
2412 MMPlayerTrackType track_type = 0;
2414 case PLAYER_STREAM_TYPE_AUDIO:
2415 track_type = MM_PLAYER_TRACK_TYPE_AUDIO;
2417 case PLAYER_STREAM_TYPE_TEXT:
2418 track_type = MM_PLAYER_TRACK_TYPE_TEXT;
2421 LOGE("invalid stream type %d", type);
2422 return PLAYER_ERROR_INVALID_PARAMETER;
2425 int ret = mm_player_get_current_track(handle->mm_handle, track_type, index);
2426 if (ret != MM_ERROR_NONE)
2427 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2429 return PLAYER_ERROR_NONE;
2432 int legacy_player_select_track(player_h player, player_stream_type_e type, int index)
2434 PLAYER_INSTANCE_CHECK(player);
2435 PLAYER_CHECK_CONDITION(index >= 0, PLAYER_ERROR_INVALID_PARAMETER, "PLAYER_ERROR_INVALID_PARAMETER");
2436 player_s *handle = (player_s *)player;
2438 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
2439 LOGE("[%s] PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
2440 return PLAYER_ERROR_INVALID_STATE;
2443 MMPlayerTrackType track_type = 0;
2445 case PLAYER_STREAM_TYPE_AUDIO:
2446 track_type = MM_PLAYER_TRACK_TYPE_AUDIO;
2448 case PLAYER_STREAM_TYPE_TEXT:
2449 track_type = MM_PLAYER_TRACK_TYPE_TEXT;
2452 LOGE("invalid stream type %d", type);
2453 return PLAYER_ERROR_INVALID_PARAMETER;
2456 int ret = mm_player_select_track(handle->mm_handle, track_type, index);
2457 if (ret != MM_ERROR_NONE)
2458 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2460 return PLAYER_ERROR_NONE;
2463 int legacy_player_get_track_language_code(player_h player, player_stream_type_e type, int index, char **code, int *len)
2465 PLAYER_INSTANCE_CHECK(player);
2466 PLAYER_NULL_ARG_CHECK(code);
2467 PLAYER_NULL_ARG_CHECK(len);
2468 player_s *handle = (player_s *)player;
2469 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
2470 LOGE("[%s] PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
2471 return PLAYER_ERROR_INVALID_STATE;
2474 char *language_code = NULL;
2475 MMPlayerTrackType track_type = 0;
2477 case PLAYER_STREAM_TYPE_AUDIO:
2478 track_type = MM_PLAYER_TRACK_TYPE_AUDIO;
2480 case PLAYER_STREAM_TYPE_VIDEO:
2481 track_type = MM_PLAYER_TRACK_TYPE_VIDEO;
2483 case PLAYER_STREAM_TYPE_TEXT:
2484 track_type = MM_PLAYER_TRACK_TYPE_TEXT;
2487 LOGE("invalid stream type %d", type);
2488 return PLAYER_ERROR_INVALID_PARAMETER;
2491 int ret = mm_player_get_track_language_code(handle->mm_handle, track_type, index, &language_code);
2492 if (ret != MM_ERROR_NONE) {
2493 if (language_code != NULL)
2494 free(language_code);
2496 language_code = NULL;
2497 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2501 if (language_code != NULL && strncmp(language_code, "und", 3)) {
2503 *code = strndup(language_code, code_len);
2506 *code = strndup("und", code_len);
2511 free(language_code);
2513 language_code = NULL;
2514 return PLAYER_ERROR_NONE;
2518 int legacy_player_set_roi_area(player_h player, int x, int y, int w, int h)
2520 PLAYER_INSTANCE_CHECK(player);
2521 player_s *handle = (player_s *)player;
2527 ret = mm_player_set_attribute(handle->mm_handle, NULL, "wl_window_render_x", x, "wl_window_render_y", y, "wl_window_render_width", w, "wl_window_render_height", h, (char *)NULL);
2528 if (ret != MM_ERROR_NONE)
2529 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2531 return PLAYER_ERROR_NONE;
2534 int legacy_player_set_display(player_h player, player_display_type_e type, unsigned int wl_surface_id)
2536 PLAYER_INSTANCE_CHECK(player);
2537 player_s *handle = (player_s *)player;
2538 void *set_handle = NULL;
2539 MMDisplaySurfaceType mmType = __player_convert_display_type(type);
2543 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2544 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
2545 return PLAYER_ERROR_INVALID_STATE;
2548 if (type == PLAYER_DISPLAY_TYPE_NONE) {
2550 handle->display_handle = 0;
2551 handle->display_type = type;
2554 /* get handle from overlay or evas surface */
2555 temp = handle->display_handle;
2556 if (type == PLAYER_DISPLAY_TYPE_OVERLAY) {
2557 LOGI("Wayland overlay surface type");
2558 LOGI("wl_surface_id %d", wl_surface_id);
2559 handle->display_handle = (void *)(uintptr_t)wl_surface_id;
2560 set_handle = &(handle->display_handle);
2561 #ifdef TIZEN_FEATURE_EVAS_RENDERER
2562 } else if (type == PLAYER_DISPLAY_TYPE_EVAS) {
2563 LOGI("Evas surface type");
2564 set_handle = &(handle->display_handle);
2567 LOGE("invalid surface type");
2568 return PLAYER_ERROR_INVALID_PARAMETER;
2572 /* set display handle */
2573 if (handle->display_type == PLAYER_DISPLAY_TYPE_NONE || type == handle->display_type) {
2574 /* first time or same type */
2575 LOGW("first time or same type");
2576 ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_surface_type", mmType, "display_overlay", set_handle, sizeof(wl_surface_id), NULL);
2578 if (ret != MM_ERROR_NONE) {
2579 handle->display_handle = temp;
2580 LOGE("[%s] Failed to display surface change :%d", __FUNCTION__, ret);
2582 if (type != PLAYER_DISPLAY_TYPE_NONE) {
2583 handle->display_type = type;
2584 LOGI("[%s] video display has been changed- type :%d, addr : 0x%x", __FUNCTION__, handle->display_type, handle->display_handle);
2586 LOGI("NULL surface");
2590 /* changing surface case */
2591 ret = mm_player_change_videosink(handle->mm_handle, mmType, set_handle);
2592 if (ret != MM_ERROR_NONE) {
2593 handle->display_handle = temp;
2594 if (ret == MM_ERROR_NOT_SUPPORT_API) {
2595 LOGE("[%s] change video sink is not available.", __FUNCTION__);
2596 ret = PLAYER_ERROR_NONE;
2598 LOGE("[%s] Failed to display surface change :%d", __FUNCTION__, ret);
2601 handle->display_type = type;
2602 LOGI("[%s] video display has been changed- type :%d, addr : 0x%x", __FUNCTION__, handle->display_type, handle->display_handle);
2606 if (ret != MM_ERROR_NONE) {
2607 handle->display_type = PLAYER_DISPLAY_TYPE_NONE;
2608 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2610 return PLAYER_ERROR_NONE;
2614 int legacy_player_set_sound_stream_info_for_mused(player_h player, char *stream_type, int stream_index)
2616 PLAYER_INSTANCE_CHECK(player);
2617 player_s *handle = (player_s *)player;
2620 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
2621 if (stream_type == NULL || stream_index < 0) {
2622 LOGE("invalid parameter %p %d", stream_type, stream_index);
2623 return PLAYER_ERROR_INVALID_PARAMETER;
2626 ret = mm_player_set_sound_stream_info(handle->mm_handle, stream_type, stream_index);
2628 if (ret != MM_ERROR_NONE)
2629 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2631 return PLAYER_ERROR_NONE;
2634 int legacy_player_get_timeout_for_muse(player_h player, int *timeout)
2636 PLAYER_INSTANCE_CHECK(player);
2637 player_s *handle = (player_s *)player;
2640 ret = mm_player_get_timeout(handle->mm_handle, timeout);
2641 if (ret != MM_ERROR_NONE)
2642 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2644 return PLAYER_ERROR_NONE;
2647 int legacy_player_get_num_of_video_out_buffers(player_h player, int *num, int *extra_num)
2649 PLAYER_INSTANCE_CHECK(player);
2650 PLAYER_NULL_ARG_CHECK(num);
2651 PLAYER_NULL_ARG_CHECK(extra_num);
2652 player_s *handle = (player_s *)player;
2654 int ret = mm_player_get_num_of_video_out_buffers(handle->mm_handle, num, extra_num);
2655 if (ret != MM_ERROR_NONE)
2656 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2658 return PLAYER_ERROR_NONE;
2661 int legacy_player_set_file_buffering_path(player_h player, const char *file_path)
2663 PLAYER_INSTANCE_CHECK(player);
2664 PLAYER_NULL_ARG_CHECK(file_path);
2665 player_s *handle = (player_s *)player;
2666 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
2668 int ret = mm_player_set_file_buffering_path(handle->mm_handle, file_path);
2670 if (ret != MM_ERROR_NONE)
2671 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2673 return PLAYER_ERROR_NONE;
2676 int legacy_player_manage_external_storage_state(player_h player, int id, int state)
2678 int ret = PLAYER_ERROR_NONE;
2679 PLAYER_INSTANCE_CHECK(player);
2680 player_s *handle = (player_s *)player;
2682 ret = mm_player_manage_external_storage_state(handle->mm_handle, id, state);
2684 if (ret != MM_ERROR_NONE)
2685 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2687 return PLAYER_ERROR_NONE;
2690 int legacy_player_get_adaptive_variant_info(player_h player, int *num, char **var_info)
2692 int ret = PLAYER_ERROR_NONE;
2693 PLAYER_INSTANCE_CHECK(player);
2694 PLAYER_NULL_ARG_CHECK(num);
2695 PLAYER_NULL_ARG_CHECK(var_info);
2696 player_s *handle = (player_s *)player;
2698 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
2699 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
2700 return PLAYER_ERROR_INVALID_STATE;
2703 ret = mm_player_get_adaptive_variant_info(handle->mm_handle, num, var_info);
2705 if (ret != MM_ERROR_NONE)
2706 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2708 return PLAYER_ERROR_NONE;
2711 int legacy_player_set_max_adaptive_variant_limit(player_h player, int bandwidth, int width, int height)
2714 PLAYER_INSTANCE_CHECK(player);
2715 player_s *handle = (player_s *)player;
2717 ret = mm_player_set_max_adaptive_variant_limit(handle->mm_handle, bandwidth, width, height);
2719 if (ret != MM_ERROR_NONE)
2720 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2722 return PLAYER_ERROR_NONE;
2725 int legacy_player_get_max_adaptive_variant_limit(player_h player, int *bandwidth, int *width, int *height)
2727 PLAYER_INSTANCE_CHECK(player);
2728 PLAYER_NULL_ARG_CHECK(bandwidth);
2729 PLAYER_NULL_ARG_CHECK(width);
2730 PLAYER_NULL_ARG_CHECK(height);
2731 player_s *handle = (player_s *)player;
2733 int ret = mm_player_get_max_adaptive_variant_limit(handle->mm_handle, bandwidth, width, height);
2735 if (ret != MM_ERROR_NONE)
2736 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2738 return PLAYER_ERROR_NONE;
2741 int legacy_player_set_audio_only(player_h player, bool audio_only)
2743 PLAYER_INSTANCE_CHECK(player);
2744 player_s *handle = (player_s *)player;
2746 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
2747 LOGE("[%s] PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
2748 return PLAYER_ERROR_INVALID_STATE;
2751 int ret = mm_player_set_audio_only(handle->mm_handle, audio_only);
2752 if (ret != MM_ERROR_NONE)
2753 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2755 return PLAYER_ERROR_NONE;
2758 int legacy_player_is_audio_only(player_h player, bool *paudio_only)
2760 PLAYER_INSTANCE_CHECK(player);
2761 PLAYER_NULL_ARG_CHECK(paudio_only);
2762 player_s *handle = (player_s *)player;
2763 bool audio_only = false;
2765 int ret = mm_player_get_audio_only(handle->mm_handle, &audio_only);
2766 if (ret != MM_ERROR_NONE) {
2767 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2769 *paudio_only = audio_only;
2770 return PLAYER_ERROR_NONE;
2774 int legacy_player_set_streaming_buffering_time(player_h player, int buffer_ms, int rebuffer_ms)
2776 PLAYER_INSTANCE_CHECK(player);
2777 player_s *handle = (player_s *)player;
2778 int ret = MM_ERROR_NONE;
2780 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2781 LOGE("[%s] PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
2782 return PLAYER_ERROR_INVALID_STATE;
2785 ret = mm_player_set_streaming_buffering_time(handle->mm_handle, buffer_ms, rebuffer_ms);
2786 if (ret != MM_ERROR_NONE)
2787 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2789 return PLAYER_ERROR_NONE;
2792 int legacy_player_get_streaming_buffering_time(player_h player, int *buffer_ms, int *rebuffer_ms)
2794 PLAYER_INSTANCE_CHECK(player);
2795 PLAYER_NULL_ARG_CHECK(buffer_ms);
2796 PLAYER_NULL_ARG_CHECK(rebuffer_ms);
2798 player_s *handle = (player_s *)player;
2799 int ret = MM_ERROR_NONE;
2801 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2802 LOGE("[%s] PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
2803 return PLAYER_ERROR_INVALID_STATE;
2806 ret = mm_player_get_streaming_buffering_time(handle->mm_handle, buffer_ms, rebuffer_ms);
2807 if (ret != MM_ERROR_NONE) {
2808 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2810 return PLAYER_ERROR_NONE;
2814 int legacy_player_360_is_content_spherical(player_h player, bool *is_spherical)
2816 PLAYER_INSTANCE_CHECK(player);
2817 PLAYER_NULL_ARG_CHECK(is_spherical);
2819 player_s *handle = (player_s *)player;
2821 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
2822 LOGE("PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", PLAYER_ERROR_INVALID_STATE, handle->state);
2823 return PLAYER_ERROR_INVALID_STATE;
2826 int ret = mm_player_360_is_content_spherical(handle->mm_handle, is_spherical);
2827 if (ret != MM_ERROR_NONE) {
2828 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2830 return PLAYER_ERROR_NONE;
2834 int legacy_player_360_set_enabled(player_h player, bool enabled)
2836 PLAYER_INSTANCE_CHECK(player);
2837 player_s *handle = (player_s *)player;
2839 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2840 LOGE("PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", PLAYER_ERROR_INVALID_STATE, handle->state);
2841 return PLAYER_ERROR_INVALID_STATE;
2844 int ret = mm_player_360_set_enabled(handle->mm_handle, enabled);
2845 if (ret != MM_ERROR_NONE)
2846 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2848 return PLAYER_ERROR_NONE;
2851 int legacy_player_360_is_enabled(player_h player, bool *enabled)
2853 PLAYER_INSTANCE_CHECK(player);
2854 PLAYER_NULL_ARG_CHECK(enabled);
2856 player_s *handle = (player_s *)player;
2858 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2859 LOGE("PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", PLAYER_ERROR_INVALID_STATE, handle->state);
2860 return PLAYER_ERROR_INVALID_STATE;
2863 int ret = mm_player_360_is_enabled(handle->mm_handle, enabled);
2864 if (ret != MM_ERROR_NONE) {
2865 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2867 return PLAYER_ERROR_NONE;
2871 int legacy_player_360_set_direction_of_view(player_h player, float yaw, float pitch)
2873 PLAYER_INSTANCE_CHECK(player);
2874 player_s *handle = (player_s *)player;
2875 int ret = MM_ERROR_NONE;
2877 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2878 LOGE("PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", PLAYER_ERROR_INVALID_STATE, handle->state);
2879 return PLAYER_ERROR_INVALID_STATE;
2882 ret = mm_player_360_set_direction_of_view(handle->mm_handle, yaw, pitch);
2883 if (ret != MM_ERROR_NONE)
2884 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2886 return PLAYER_ERROR_NONE;
2889 int legacy_player_360_get_direction_of_view(player_h player, float *yaw, float *pitch)
2891 PLAYER_INSTANCE_CHECK(player);
2892 PLAYER_NULL_ARG_CHECK(yaw);
2893 PLAYER_NULL_ARG_CHECK(pitch);
2895 player_s *handle = (player_s *)player;
2896 int ret = MM_ERROR_NONE;
2898 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2899 LOGE("PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", PLAYER_ERROR_INVALID_STATE, handle->state);
2900 return PLAYER_ERROR_INVALID_STATE;
2903 ret = mm_player_360_get_direction_of_view(handle->mm_handle, yaw, pitch);
2904 if (ret != MM_ERROR_NONE) {
2905 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2907 return PLAYER_ERROR_NONE;
2911 int legacy_player_360_set_zoom(player_h player, float level)
2913 PLAYER_INSTANCE_CHECK(player);
2914 player_s *handle = (player_s *)player;
2916 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2917 LOGE("PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", PLAYER_ERROR_INVALID_STATE, handle->state);
2918 return PLAYER_ERROR_INVALID_STATE;
2921 int ret = mm_player_360_set_zoom(handle->mm_handle, level);
2922 if (ret != MM_ERROR_NONE)
2923 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2925 return PLAYER_ERROR_NONE;
2928 int legacy_player_360_get_zoom(player_h player, float *level)
2930 PLAYER_INSTANCE_CHECK(player);
2931 player_s *handle = (player_s *)player;
2933 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2934 LOGE("PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", PLAYER_ERROR_INVALID_STATE, handle->state);
2935 return PLAYER_ERROR_INVALID_STATE;
2938 int ret = mm_player_360_get_zoom(handle->mm_handle, level);
2939 if (ret != MM_ERROR_NONE) {
2940 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2942 return PLAYER_ERROR_NONE;
2946 int legacy_player_360_set_field_of_view(player_h player, int horizontal_degrees, int vertical_degrees)
2948 PLAYER_INSTANCE_CHECK(player);
2949 player_s *handle = (player_s *)player;
2950 int ret = MM_ERROR_NONE;
2952 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2953 LOGE("PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", PLAYER_ERROR_INVALID_STATE, handle->state);
2954 return PLAYER_ERROR_INVALID_STATE;
2957 ret = mm_player_360_set_field_of_view(handle->mm_handle, horizontal_degrees, vertical_degrees);
2958 if (ret != MM_ERROR_NONE)
2959 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2961 return PLAYER_ERROR_NONE;
2964 int legacy_player_360_get_field_of_view(player_h player, int *horizontal_degrees, int *vertical_degrees)
2966 PLAYER_INSTANCE_CHECK(player);
2967 PLAYER_NULL_ARG_CHECK(horizontal_degrees);
2968 PLAYER_NULL_ARG_CHECK(vertical_degrees);
2970 player_s *handle = (player_s *)player;
2971 int ret = MM_ERROR_NONE;
2973 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2974 LOGE("PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", PLAYER_ERROR_INVALID_STATE, handle->state);
2975 return PLAYER_ERROR_INVALID_STATE;
2978 ret = mm_player_360_get_field_of_view(handle->mm_handle, horizontal_degrees, vertical_degrees);
2979 if (ret != MM_ERROR_NONE) {
2980 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2982 return PLAYER_ERROR_NONE;