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.
22 #include <mm_player.h>
23 #include <mm_player_audioeffect.h>
24 #include <mm_player_internal.h>
26 #include <sound_manager.h>
27 #include <sound_manager_internal.h>
29 #include "muse_player.h"
30 #include "legacy_player.h"
31 #include "legacy_player_private.h"
33 #define __RELEASEIF_PREPARE_THREAD(thread_id) \
36 pthread_join(thread_id, NULL); \
38 LOGI("prepare thread released\n"); \
42 #define __RELEASEIF_MESSAGE_THREAD(thread_id) \
45 pthread_join(thread_id, NULL); \
47 LOGI("message thread released\n"); \
51 #define __GET_MESSAGE(handle) \
53 if (handle && handle->message_queue) { \
54 g_mutex_lock(&handle->message_queue_lock); \
55 if (g_queue_is_empty(handle->message_queue)) { \
56 g_cond_wait(&handle->message_queue_cond, &handle->message_queue_lock); \
58 handle->current_message = (int)(intptr_t)g_queue_pop_head(handle->message_queue); \
59 g_mutex_unlock(&handle->message_queue_lock); \
60 LOGI("Retrieved message [%d] from queue", handle->current_message); \
62 LOGI("Failed to retrieve message from queue"); \
63 handle->current_message = PLAYER_MESSAGE_NONE; \
67 #define __ADD_MESSAGE(handle, message) \
69 if (handle && handle->message_queue) { \
70 g_mutex_lock(&handle->message_queue_lock); \
71 if (message == PLAYER_MESSAGE_LOOP_EXIT) \
72 g_queue_clear(handle->message_queue); \
73 g_queue_push_tail(handle->message_queue, (gpointer)message); \
74 g_cond_signal(&handle->message_queue_cond); \
75 g_mutex_unlock(&handle->message_queue_lock); \
76 LOGI("Adding message [%d] to queue", message); \
78 LOGI("Failed to add message [%d] to queue", message); \
83 * Internal Implementation
85 int __player_convert_error_code(int code, char *func_name)
87 int ret = PLAYER_ERROR_INVALID_OPERATION;
88 char *msg = "PLAYER_ERROR_INVALID_OPERATION";
91 ret = PLAYER_ERROR_NONE;
92 msg = "PLAYER_ERROR_NONE";
94 case MM_ERROR_PLAYER_AUDIO_CODEC_NOT_FOUND:
95 ret = PLAYER_ERROR_NOT_SUPPORTED_AUDIO_CODEC;
96 msg = "PLAYER_ERROR_NOT_SUPPORTED_AUDIO_CODEC";
98 case MM_ERROR_PLAYER_VIDEO_CODEC_NOT_FOUND:
99 ret = PLAYER_ERROR_NOT_SUPPORTED_VIDEO_CODEC;
100 msg = "PLAYER_ERROR_NOT_SUPPORTED_VIDEO_CODEC";
102 case MM_ERROR_PLAYER_NOT_SUPPORTED_SUBTITLE:
103 ret = PLAYER_ERROR_NOT_SUPPORTED_SUBTITLE;
104 msg = "PLAYER_ERROR_NOT_SUPPORTED_SUBTITLE";
106 case MM_ERROR_INVALID_ARGUMENT:
107 case MM_ERROR_COMMON_INVALID_ARGUMENT:
108 ret = PLAYER_ERROR_INVALID_PARAMETER;
109 msg = "PLAYER_ERROR_INVALID_PARAMETER";
111 case MM_ERROR_PLAYER_CODEC_NOT_FOUND:
112 case MM_ERROR_PLAYER_STREAMING_UNSUPPORTED_AUDIO:
113 case MM_ERROR_PLAYER_STREAMING_UNSUPPORTED_VIDEO:
114 case MM_ERROR_PLAYER_STREAMING_UNSUPPORTED_MEDIA_TYPE:
115 case MM_ERROR_PLAYER_NOT_SUPPORTED_FORMAT:
116 ret = PLAYER_ERROR_NOT_SUPPORTED_FILE;
117 msg = "PLAYER_ERROR_NOT_SUPPORTED_FILE";
119 case MM_ERROR_PLAYER_INVALID_STATE:
120 case MM_ERROR_PLAYER_NOT_INITIALIZED:
121 ret = PLAYER_ERROR_INVALID_STATE;
122 msg = "PLAYER_ERROR_INVALID_STATE";
124 case MM_ERROR_PLAYER_INTERNAL:
125 case MM_ERROR_PLAYER_INVALID_STREAM:
126 case MM_ERROR_PLAYER_STREAMING_FAIL:
127 case MM_ERROR_PLAYER_NO_OP:
128 ret = PLAYER_ERROR_INVALID_OPERATION;
129 msg = "PLAYER_ERROR_INVALID_OPERATION";
131 case MM_ERROR_PLAYER_SOUND_EFFECT_INVALID_STATUS:
132 case MM_ERROR_NOT_SUPPORT_API:
133 case MM_ERROR_PLAYER_SOUND_EFFECT_NOT_SUPPORTED_FILTER:
134 ret = PLAYER_ERROR_FEATURE_NOT_SUPPORTED_ON_DEVICE;
135 msg = "PLAYER_ERROR_FEATURE_NOT_SUPPORTED_ON_DEVICE";
137 case MM_ERROR_PLAYER_NO_FREE_SPACE:
138 ret = PLAYER_ERROR_FILE_NO_SPACE_ON_DEVICE;
139 msg = "PLAYER_ERROR_FILE_NO_SPACE_ON_DEVICE";
141 case MM_ERROR_PLAYER_FILE_NOT_FOUND:
142 ret = PLAYER_ERROR_NO_SUCH_FILE;
143 msg = "PLAYER_ERROR_NO_SUCH_FILE";
145 case MM_ERROR_PLAYER_SEEK:
146 ret = PLAYER_ERROR_SEEK_FAILED;
147 msg = "PLAYER_ERROR_SEEK_FAILED";
149 case MM_ERROR_PLAYER_INVALID_URI:
150 case MM_ERROR_PLAYER_STREAMING_INVALID_URL:
151 ret = PLAYER_ERROR_INVALID_URI;
152 msg = "PLAYER_ERROR_INVALID_URI";
154 case MM_ERROR_PLAYER_STREAMING_CONNECTION_FAIL:
155 case MM_ERROR_PLAYER_STREAMING_DNS_FAIL:
156 case MM_ERROR_PLAYER_STREAMING_SERVER_DISCONNECTED:
157 case MM_ERROR_PLAYER_STREAMING_INVALID_PROTOCOL:
158 case MM_ERROR_PLAYER_STREAMING_UNEXPECTED_MSG:
159 case MM_ERROR_PLAYER_STREAMING_OUT_OF_MEMORIES:
160 case MM_ERROR_PLAYER_STREAMING_RTSP_TIMEOUT:
161 case MM_ERROR_PLAYER_STREAMING_BAD_REQUEST:
162 case MM_ERROR_PLAYER_STREAMING_NOT_AUTHORIZED:
163 case MM_ERROR_PLAYER_STREAMING_PAYMENT_REQUIRED:
164 case MM_ERROR_PLAYER_STREAMING_FORBIDDEN:
165 case MM_ERROR_PLAYER_STREAMING_CONTENT_NOT_FOUND:
166 case MM_ERROR_PLAYER_STREAMING_METHOD_NOT_ALLOWED:
167 case MM_ERROR_PLAYER_STREAMING_NOT_ACCEPTABLE:
168 case MM_ERROR_PLAYER_STREAMING_PROXY_AUTHENTICATION_REQUIRED:
169 case MM_ERROR_PLAYER_STREAMING_SERVER_TIMEOUT:
170 case MM_ERROR_PLAYER_STREAMING_GONE:
171 case MM_ERROR_PLAYER_STREAMING_LENGTH_REQUIRED:
172 case MM_ERROR_PLAYER_STREAMING_PRECONDITION_FAILED:
173 case MM_ERROR_PLAYER_STREAMING_REQUEST_ENTITY_TOO_LARGE:
174 case MM_ERROR_PLAYER_STREAMING_REQUEST_URI_TOO_LARGE:
175 case MM_ERROR_PLAYER_STREAMING_PARAMETER_NOT_UNDERSTOOD:
176 case MM_ERROR_PLAYER_STREAMING_CONFERENCE_NOT_FOUND:
177 case MM_ERROR_PLAYER_STREAMING_NOT_ENOUGH_BANDWIDTH:
178 case MM_ERROR_PLAYER_STREAMING_NO_SESSION_ID:
179 case MM_ERROR_PLAYER_STREAMING_METHOD_NOT_VALID_IN_THIS_STATE:
180 case MM_ERROR_PLAYER_STREAMING_HEADER_FIELD_NOT_VALID_FOR_SOURCE:
181 case MM_ERROR_PLAYER_STREAMING_INVALID_RANGE:
182 case MM_ERROR_PLAYER_STREAMING_PARAMETER_IS_READONLY:
183 case MM_ERROR_PLAYER_STREAMING_AGGREGATE_OP_NOT_ALLOWED:
184 case MM_ERROR_PLAYER_STREAMING_ONLY_AGGREGATE_OP_ALLOWED:
185 case MM_ERROR_PLAYER_STREAMING_BAD_TRANSPORT:
186 case MM_ERROR_PLAYER_STREAMING_DESTINATION_UNREACHABLE:
187 case MM_ERROR_PLAYER_STREAMING_INTERNAL_SERVER_ERROR:
188 case MM_ERROR_PLAYER_STREAMING_NOT_IMPLEMENTED:
189 case MM_ERROR_PLAYER_STREAMING_BAD_GATEWAY:
190 case MM_ERROR_PLAYER_STREAMING_SERVICE_UNAVAILABLE:
191 case MM_ERROR_PLAYER_STREAMING_GATEWAY_TIME_OUT:
192 case MM_ERROR_PLAYER_STREAMING_OPTION_NOT_SUPPORTED:
193 ret = PLAYER_ERROR_CONNECTION_FAILED;
194 msg = "PLAYER_ERROR_CONNECTION_FAILED";
196 case MM_ERROR_POLICY_BLOCKED:
197 case MM_ERROR_POLICY_INTERRUPTED:
198 case MM_ERROR_POLICY_INTERNAL:
199 case MM_ERROR_POLICY_DUPLICATED:
200 ret = PLAYER_ERROR_SOUND_POLICY;
201 msg = "PLAYER_ERROR_SOUND_POLICY";
203 case MM_ERROR_PLAYER_DRM_EXPIRED:
204 ret = PLAYER_ERROR_DRM_EXPIRED;
205 msg = "PLAYER_ERROR_DRM_EXPIRED";
207 case MM_ERROR_PLAYER_DRM_NOT_AUTHORIZED:
208 case MM_ERROR_PLAYER_DRM_NO_LICENSE:
209 ret = PLAYER_ERROR_DRM_NO_LICENSE;
210 msg = "PLAYER_ERROR_DRM_NO_LICENSE";
212 case MM_ERROR_PLAYER_DRM_FUTURE_USE:
213 ret = PLAYER_ERROR_DRM_FUTURE_USE;
214 msg = "PLAYER_ERROR_DRM_FUTURE_USE";
216 case MM_ERROR_PLAYER_DRM_OUTPUT_PROTECTION:
217 ret = PLAYER_ERROR_DRM_NOT_PERMITTED;
218 msg = "PLAYER_ERROR_DRM_NOT_PERMITTED";
220 case MM_ERROR_PLAYER_RESOURCE_LIMIT:
221 ret = PLAYER_ERROR_RESOURCE_LIMIT;
222 msg = "PLAYER_ERROR_RESOURCE_LIMIT";
224 case MM_ERROR_PLAYER_PERMISSION_DENIED:
225 ret = PLAYER_ERROR_PERMISSION_DENIED;
226 msg = "PLAYER_ERROR_PERMISSION_DENIED";
228 case MM_ERROR_PLAYER_BUFFER_SPACE:
229 ret = PLAYER_ERROR_BUFFER_SPACE;
230 msg = "PLAYER_ERROR_BUFFER_SPACE";
235 LOGE("[%s] %s(0x%08x) : core fw error(0x%x)", func_name, msg, ret, code);
239 static void __player_update_state(player_s *handle, player_internal_state_e state)
242 case PLAYER_INTERNAL_STATE_NONE:
243 handle->state = PLAYER_STATE_NONE;
244 handle->internal_state = PLAYER_INTERNAL_STATE_IDLE;
246 case PLAYER_INTERNAL_STATE_IDLE:
247 handle->state = PLAYER_STATE_IDLE;
248 handle->internal_state = PLAYER_INTERNAL_STATE_IDLE;
250 case PLAYER_INTERNAL_STATE_PRE_READY:
251 handle->internal_state = PLAYER_INTERNAL_STATE_PRE_READY;
253 case PLAYER_INTERNAL_STATE_READY:
254 handle->state = PLAYER_STATE_READY;
255 handle->internal_state = PLAYER_INTERNAL_STATE_READY;
257 case PLAYER_INTERNAL_STATE_PLAYING:
258 handle->internal_state = PLAYER_INTERNAL_STATE_PLAYING;
259 handle->state = PLAYER_STATE_PLAYING;
261 case PLAYER_INTERNAL_STATE_PAUSED:
262 handle->internal_state = PLAYER_INTERNAL_STATE_PAUSED;
263 handle->state = PLAYER_STATE_PAUSED;
265 case PLAYER_INTERNAL_STATE_STOPPED:
266 handle->state = PLAYER_STATE_READY;
267 handle->internal_state = PLAYER_INTERNAL_STATE_STOPPED;
273 LOGD("player state is updated to 0x%X, 0x%X", handle->state, handle->internal_state);
277 bool __player_state_validate(player_s *handle, player_state_e threshold)
279 if (handle->state < threshold)
285 static int __set_callback(muse_player_event_e type, player_h player, void *callback, void *user_data)
287 player_s *handle = (player_s *)player;
288 PLAYER_INSTANCE_CHECK(player);
289 PLAYER_NULL_ARG_CHECK(callback);
291 handle->user_cb[type] = callback;
292 handle->user_data[type] = user_data;
293 LOGI("[%s] Event type : %d ", __FUNCTION__, type);
294 return PLAYER_ERROR_NONE;
297 static int __unset_callback(muse_player_event_e type, player_h player)
299 player_s *handle = (player_s *)player;
300 PLAYER_INSTANCE_CHECK(player);
301 handle->user_cb[type] = NULL;
302 handle->user_data[type] = NULL;
303 LOGI("[%s] Event type : %d ", __FUNCTION__, type);
304 return PLAYER_ERROR_NONE;
307 static void __message_cb_loop(void *data)
310 player_s *handle = (player_s *)data;
312 LOGE("null handle in __message_cb_loop");
316 __GET_MESSAGE(handle);
317 switch (handle->current_message) {
318 case PLAYER_MESSAGE_NONE:
320 LOGW("PLAYER_MESSAGE_NONE");
324 case PLAYER_MESSAGE_PREPARED:
326 LOGW("PLAYER_MESSAGE_PREPARED");
328 LEGACY_PLAYER_USER_CB_LOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
329 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
330 __player_update_state(handle, PLAYER_INTERNAL_STATE_READY);
331 ((player_prepared_cb)handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE])(handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE]);
332 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
333 handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
335 LOGE("null handle in PLAYER_MESSAGE_PREPARED");
337 LEGACY_PLAYER_USER_CB_UNLOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
340 case PLAYER_MESSAGE_ERROR:
342 LOGW("PLAYER_MESSAGE_ERROR");
343 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_ERROR])
344 ((player_error_cb)handle->user_cb[MUSE_PLAYER_EVENT_TYPE_ERROR])(handle->error_code, handle->user_data[MUSE_PLAYER_EVENT_TYPE_ERROR]);
346 LOGE("null handle in PLAYER_MESSAGE_ERROR");
349 case PLAYER_MESSAGE_SEEK_DONE:
351 LOGW("PLAYER_MESSAGE_SEEK_DONE");
352 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK]) {
353 ((player_seek_completed_cb)handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK])(handle->user_data[MUSE_PLAYER_EVENT_TYPE_SEEK]);
354 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK] = NULL;
355 handle->user_data[MUSE_PLAYER_EVENT_TYPE_SEEK] = NULL;
357 LOGE("null handle in PLAYER_MESSAGE_SEEK_DONE");
361 case PLAYER_MESSAGE_EOS:
363 LOGW("PLAYER_MESSAGE_EOS");
364 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_COMPLETE])
365 ((player_completed_cb)handle->user_cb[MUSE_PLAYER_EVENT_TYPE_COMPLETE])(handle->user_data[MUSE_PLAYER_EVENT_TYPE_COMPLETE]);
367 LOGE("null handle in PLAYER_MESSAGE_EOS");
370 #ifdef TIZEN_FEATURE_EVAS_RENDERER
371 case PLAYER_MESSAGE_GAPLESS_CONSTRUCTION:
373 LOGW("PLAYER_MESSAGE_GAPLESS_CONSTRUCTION");
374 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_RETURN_BUFFER])
375 ((player_retrieve_buffer_cb)handle->user_cb[MUSE_PLAYER_EVENT_TYPE_RETURN_BUFFER])(handle->user_data[MUSE_PLAYER_EVENT_TYPE_RETURN_BUFFER]);
377 LOGE("null handle in PLAYER_MESSAGE_GAPLESS_CONSTRUCTION");
381 case PLAYER_MESSAGE_LOOP_EXIT:
383 LOGW("PLAYER_MESSAGE_LOOP_EXIT");
387 case PLAYER_MESSAGE_MAX:
389 LOGW("PLAYER_MESSAGE_MAX");
400 static player_state_e __convert_player_state(MMPlayerStateType state)
402 if (state == MM_PLAYER_STATE_NONE)
403 return PLAYER_STATE_NONE;
408 static int __msg_callback(int message, void *param, void *user_data)
410 player_s *handle = (player_s *)user_data;
411 MMMessageParamType *msg = (MMMessageParamType *)param;
412 LOGW("[%s] Got message type : 0x%x", __FUNCTION__, message);
413 player_error_e err_code = PLAYER_ERROR_NONE;
415 case MM_MESSAGE_ERROR: /* 0x01 */
416 err_code = __player_convert_error_code(msg->code, (char *)__FUNCTION__);
418 LEGACY_PLAYER_USER_CB_LOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
419 if (PLAYER_ERROR_NOT_SUPPORTED_FILE == err_code && handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
420 LOGW("failed to pause, so prepare cb will be released soon");
421 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
422 if (handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
423 g_free(handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE]);
424 handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
427 LEGACY_PLAYER_USER_CB_UNLOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
429 case MM_MESSAGE_STATE_CHANGED: /* 0x03 */
430 LOGI("STATE CHANGED INTERNALLY - from : %d, to : %d (CAPI State : %d)", msg->state.previous, msg->state.current, handle->state);
431 if (msg->state.previous == MM_PLAYER_STATE_READY && msg->state.current == MM_PLAYER_STATE_PAUSED) {
432 LEGACY_PLAYER_USER_CB_LOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
433 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
434 /* asyc && prepared cb has been set */
435 LOGI("[%s] Prepared! [current state : %d]", __FUNCTION__, handle->state);
436 PLAYER_TRACE_ASYNC_END("MM:PLAYER:PREPARE_ASYNC", *(int *)handle);
437 __ADD_MESSAGE(handle, PLAYER_MESSAGE_PREPARED);
439 LEGACY_PLAYER_USER_CB_UNLOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
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);
449 #ifdef TIZEN_FEATURE_EVAS_RENDERER
450 case MM_MESSAGE_GAPLESS_CONSTRUCTION: /* 0x105 */
451 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_RETURN_BUFFER])
452 __ADD_MESSAGE(handle, PLAYER_MESSAGE_GAPLESS_CONSTRUCTION);
455 case MM_MESSAGE_BUFFERING: /* 0x103 */
456 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_BUFFERING])
457 ((player_buffering_cb)handle->user_cb[MUSE_PLAYER_EVENT_TYPE_BUFFERING])(msg->connection.buffering, handle->user_data[MUSE_PLAYER_EVENT_TYPE_BUFFERING]);
459 case MM_MESSAGE_STATE_INTERRUPTED: /* 0x04 */
460 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_INTERRUPT]) {
461 if (msg->union_type == MM_MSG_UNION_STATE) {
462 LOGW("received mm state msg prev:%d, curr:%d", msg->state.previous, msg->state.current);
463 handle->state = __convert_player_state(msg->state.current);
464 LOGW("player state is changed to %d by resource conflict", handle->state);
466 ((player_interrupted_cb)handle->user_cb[MUSE_PLAYER_EVENT_TYPE_INTERRUPT])(handle->user_data[MUSE_PLAYER_EVENT_TYPE_INTERRUPT]);
469 case MM_MESSAGE_CONNECTION_TIMEOUT: /* 0x102 */
470 LOGI("[%s] PLAYER_ERROR_CONNECTION_FAILED (0x%08x) : CONNECTION_TIMEOUT", __FUNCTION__, PLAYER_ERROR_CONNECTION_FAILED);
471 err_code = PLAYER_ERROR_CONNECTION_FAILED;
473 case MM_MESSAGE_UPDATE_SUBTITLE: /* 0x109 */
474 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SUBTITLE])
475 ((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]);
477 case MM_MESSAGE_VIDEO_NOT_CAPTURED: /* 0x113 */
478 LOGI("[%s] PLAYER_ERROR_VIDEO_CAPTURE_FAILED (0x%08x)", __FUNCTION__, PLAYER_ERROR_VIDEO_CAPTURE_FAILED);
479 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_ERROR])
480 ((player_error_cb)handle->user_cb[MUSE_PLAYER_EVENT_TYPE_ERROR])(PLAYER_ERROR_VIDEO_CAPTURE_FAILED, handle->user_data[MUSE_PLAYER_EVENT_TYPE_ERROR]);
482 case MM_MESSAGE_VIDEO_CAPTURED: /* 0x110 */
484 MMPlayerVideoCapture *capture = (MMPlayerVideoCapture *)msg->data;
486 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_CAPTURE]) {
487 if (!capture || !capture->data) {
488 LOGE("PLAYER_ERROR_VIDEO_CAPTURE_FAILED (0x%08x) : Failed to get capture data", PLAYER_ERROR_VIDEO_CAPTURE_FAILED);
489 err_code = PLAYER_ERROR_VIDEO_CAPTURE_FAILED;
491 LOGI("captured image ori: %d, width: %d, height: %d, size: %d",
492 capture->orientation, capture->width, capture->height, capture->size);
494 /* call application callback */
495 ((player_video_captured_cb)handle->user_cb[MUSE_PLAYER_EVENT_TYPE_CAPTURE])
496 (capture->data, capture->width, capture->height, capture->size, handle->user_data[MUSE_PLAYER_EVENT_TYPE_CAPTURE]);
499 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_CAPTURE] = NULL;
500 handle->user_data[MUSE_PLAYER_EVENT_TYPE_CAPTURE] = NULL;
503 /* capure->data have to be released to avoid mem leak in all cases. */
505 g_free(capture->data);
506 capture->data = NULL;
510 case MM_MESSAGE_FILE_NOT_SUPPORTED: /* 0x10f */
511 LOGI("[%s] PLAYER_ERROR_NOT_SUPPORTED_FILE (0x%08x) : FILE_NOT_SUPPORTED", __FUNCTION__, PLAYER_ERROR_NOT_SUPPORTED_FILE);
512 err_code = PLAYER_ERROR_NOT_SUPPORTED_FILE;
514 case MM_MESSAGE_FILE_NOT_FOUND: /* 0x110 */
515 LOGI("[%s] PLAYER_ERROR_NOT_SUPPORTED_FILE (0x%08x) : FILE_NOT_FOUND", __FUNCTION__, PLAYER_ERROR_NOT_SUPPORTED_FILE);
516 err_code = PLAYER_ERROR_NOT_SUPPORTED_FILE;
518 case MM_MESSAGE_SEEK_COMPLETED: /* 0x114 */
519 if (handle->display_type != PLAYER_DISPLAY_TYPE_NONE && handle->state == PLAYER_STATE_READY) {
520 if (handle->is_display_visible) {
521 int ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_visible", 1, (char *)NULL);
522 if (ret != MM_ERROR_NONE)
523 LOGW("[%s] Failed to set display_visible '1' (0x%x)", __FUNCTION__, ret);
526 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK]) {
527 __ADD_MESSAGE(handle, PLAYER_MESSAGE_SEEK_DONE);
530 case MM_MESSAGE_PLAY_POSITION:
531 LOGI("MM_MESSAGE_PLAY_POSITION (%"PRId64" ns)", msg->time.elapsed);
532 handle->last_play_position = msg->time.elapsed;
534 case MM_MESSAGE_UNKNOWN: /* 0x00 */
535 case MM_MESSAGE_WARNING: /* 0x02 */
536 case MM_MESSAGE_CONNECTING: /* 0x100 */
537 case MM_MESSAGE_CONNECTED: /* 0x101 */
538 case MM_MESSAGE_BLUETOOTH_ON: /* 0x106 */
539 case MM_MESSAGE_BLUETOOTH_OFF: /* 0x107 */
540 case MM_MESSAGE_RTP_SENDER_REPORT: /* 0x10a */
541 case MM_MESSAGE_RTP_RECEIVER_REPORT: /* 0x10b */
542 case MM_MESSAGE_RTP_SESSION_STATUS: /* 0x10c */
543 case MM_MESSAGE_SENDER_STATE: /* 0x10d */
544 case MM_MESSAGE_RECEIVER_STATE: /* 0x10e */
549 if (err_code != PLAYER_ERROR_NONE && handle->user_cb[MUSE_PLAYER_EVENT_TYPE_ERROR]) {
550 handle->error_code = err_code;
551 __ADD_MESSAGE(handle, PLAYER_MESSAGE_ERROR);
553 LOGW("[%s] End", __FUNCTION__);
557 static MMDisplaySurfaceType __player_convert_display_type(player_display_type_e type)
560 case PLAYER_DISPLAY_TYPE_OVERLAY:
561 return MM_DISPLAY_SURFACE_OVERLAY;
562 case PLAYER_DISPLAY_TYPE_EVAS: /* fall through ifndef TIZEN_FEATURE_EVAS_RENDERER */
563 #ifdef TIZEN_FEATURE_EVAS_RENDERER
564 return MM_DISPLAY_SURFACE_REMOTE;
566 case PLAYER_DISPLAY_TYPE_NONE: /* fall through */
568 return MM_DISPLAY_SURFACE_NULL;
572 bool _check_enabled_user_cb_lock(int type)
575 case MUSE_PLAYER_EVENT_TYPE_PREPARE: /* fall through */
576 case MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_AUDIO_BUFFER_STATUS_WITH_INFO: /* fall through */
577 case MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_VIDEO_BUFFER_STATUS_WITH_INFO: /* fall through */
585 * Public Implementation
588 int legacy_player_create(player_h *player)
591 int ret = MM_ERROR_NONE;
592 PLAYER_INSTANCE_CHECK(player);
593 PLAYER_TRACE_BEGIN("MM:PLAYER:CREATE");
594 handle = g_try_new0(player_s, 1);
596 LOGE("[%s] PLAYER_ERROR_OUT_OF_MEMORY(0x%08x)", __FUNCTION__, PLAYER_ERROR_OUT_OF_MEMORY);
597 return PLAYER_ERROR_OUT_OF_MEMORY;
599 ret = mm_player_create(&handle->mm_handle);
600 if (ret != MM_ERROR_NONE) {
601 LOGE("[%s] PLAYER_ERROR_INVALID_OPERATION(0x%08x)", __FUNCTION__, PLAYER_ERROR_INVALID_OPERATION);
602 __player_update_state(handle, PLAYER_INTERNAL_STATE_NONE);
605 return __player_convert_error_code(ret, (char *)__FUNCTION__);
608 muse_player_event_e type = MUSE_PLAYER_EVENT_TYPE_PREPARE;
610 *player = (player_h)handle;
611 __player_update_state(handle, PLAYER_INTERNAL_STATE_IDLE);
612 handle->display_type = PLAYER_DISPLAY_TYPE_NONE;
613 handle->is_display_visible = true;
614 handle->is_media_stream = false;
616 for (type = MUSE_PLAYER_EVENT_TYPE_PREPARE; type < MUSE_PLAYER_EVENT_TYPE_NUM; type++) {
617 if (_check_enabled_user_cb_lock(type))
618 g_mutex_init(&handle->user_cb_lock[type]);
621 handle->message_queue = g_queue_new();
622 g_mutex_init(&handle->message_queue_lock);
623 g_cond_init(&handle->message_queue_cond);
624 ret = pthread_create(&handle->message_thread, NULL, (void *)__message_cb_loop, (void *)handle);
626 LOGE("[%s] failed to create message thread ret = %d", __FUNCTION__, ret);
627 return PLAYER_ERROR_OUT_OF_MEMORY;
630 LOGI("[%s] new handle : %p", __FUNCTION__, *player);
632 return PLAYER_ERROR_NONE;
635 int legacy_player_destroy(player_h player)
637 player_s *handle = (player_s *)player;
638 int ret = MM_ERROR_NONE;
639 LOGI("[%s] Start, handle to destroy : %p", __FUNCTION__, player);
640 PLAYER_TRACE_BEGIN("MM:PLAYER:DESTROY");
641 PLAYER_INSTANCE_CHECK(player);
643 __ADD_MESSAGE(handle, PLAYER_MESSAGE_LOOP_EXIT);
645 LEGACY_PLAYER_USER_CB_LOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
646 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
647 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
648 g_free(handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE]);
649 handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
651 LEGACY_PLAYER_USER_CB_UNLOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
653 /* stop the pause state trasition to release prepare thread */
654 if (handle->internal_state == PLAYER_INTERNAL_STATE_PRE_READY)
655 mm_player_abort_pause(handle->mm_handle);
657 __RELEASEIF_PREPARE_THREAD(handle->prepare_async_thread);
658 __RELEASEIF_MESSAGE_THREAD(handle->message_thread);
660 ret = mm_player_destroy(handle->mm_handle);
661 if (ret != MM_ERROR_NONE) {
662 LOGE("[%s] PLAYER_ERROR_INVALID_OPERATION(0x%08x)", __FUNCTION__, PLAYER_ERROR_INVALID_OPERATION);
663 return PLAYER_ERROR_INVALID_OPERATION;
665 LOGI("[%s] Done mm_player_destroy", __FUNCTION__);
667 muse_player_event_e type = MUSE_PLAYER_EVENT_TYPE_PREPARE;
669 __player_update_state(handle, PLAYER_INTERNAL_STATE_NONE);
671 for (type = MUSE_PLAYER_EVENT_TYPE_PREPARE; type < MUSE_PLAYER_EVENT_TYPE_NUM; type++) {
672 if (_check_enabled_user_cb_lock(type))
673 g_mutex_clear(&handle->user_cb_lock[type]);
676 if (handle->message_queue) {
677 g_queue_free(handle->message_queue);
678 handle->message_queue = NULL;
681 g_cond_broadcast(&handle->message_queue_cond);
682 g_mutex_clear(&handle->message_queue_lock);
683 g_cond_clear(&handle->message_queue_cond);
687 LOGI("[%s] End", __FUNCTION__);
689 return PLAYER_ERROR_NONE;
692 static void *__prepare_async_thread_func(void *data)
694 player_s *handle = data;
695 int ret = MM_ERROR_NONE;
696 LOGI("[%s]", __FUNCTION__);
698 ret = mm_player_pause(handle->mm_handle);
699 if (ret != MM_ERROR_NONE) {
700 LOGE("[%s] Failed to pause - core fw error(0x%x)", __FUNCTION__, ret);
701 if (handle->error_code == PLAYER_ERROR_NONE) {
702 /*MM_MESSAGE_ERROR will not be posted as legacy_player_prepare(sync API) works with return value
703 of mm_player_pause So in case of async API we post the error message to application from here */
704 MMMessageParamType msg_param;
705 msg_param.code = ret;
706 __msg_callback(MM_MESSAGE_ERROR, (void *)&msg_param, (void *)handle);
708 ret = mm_player_unrealize(handle->mm_handle);
709 if (ret != MM_ERROR_NONE)
710 LOGE("[%s] Failed to unrealize - 0x%x", __FUNCTION__, ret);
711 __player_update_state(handle, PLAYER_INTERNAL_STATE_IDLE);
713 LOGI("[%s], done", __FUNCTION__);
717 int legacy_player_prepare_async(player_h player, player_prepared_cb callback, void *user_data)
719 player_s *handle = (player_s *)player;
720 int ret = MM_ERROR_NONE;
724 LOGI("[%s] Start", __FUNCTION__);
725 PLAYER_INSTANCE_CHECK(player);
726 PLAYER_TRACE_ASYNC_BEGIN("MM:PLAYER:PREPARE_ASYNC", *(int *)handle);
727 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
729 __player_update_state(handle, PLAYER_INTERNAL_STATE_PRE_READY);
730 LEGACY_PLAYER_USER_CB_LOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
732 handle->last_play_position = 0;
733 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
734 LOGE("[%s] PLAYER_ERROR_INVALID_OPERATION (0x%08x) : preparing... we can't do any more ", __FUNCTION__, PLAYER_ERROR_INVALID_OPERATION);
735 LEGACY_PLAYER_USER_CB_UNLOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
736 __player_update_state(handle, PLAYER_INTERNAL_STATE_IDLE);
737 return PLAYER_ERROR_INVALID_OPERATION;
740 /* LOGI("[%s] Event type : %d ",__FUNCTION__, MUSE_PLAYER_EVENT_TYPE_PREPARE); */
741 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE] = callback;
742 handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE] = user_data;
744 LEGACY_PLAYER_USER_CB_UNLOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
746 ret = mm_player_set_message_callback(handle->mm_handle, __msg_callback, (void *)handle);
747 if (ret != MM_ERROR_NONE)
748 LOGW("[%s] Failed to set message callback function (0x%x)", __FUNCTION__, ret);
750 if (handle->display_type == PLAYER_DISPLAY_TYPE_NONE) {
751 ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_surface_type", MM_DISPLAY_SURFACE_NULL, (char *)NULL);
752 if (ret != MM_ERROR_NONE)
753 LOGW("[%s] Failed to set display surface type 'MM_DISPLAY_SURFACE_NULL' (0x%x)", __FUNCTION__, ret);
756 /* FIXME : new funct path is needed to update video instead of set attr again */
757 ret = mm_player_get_attribute(handle->mm_handle, NULL, "display_visible", &visible, (char *)NULL);
758 if (ret != MM_ERROR_NONE) goto ERROR;
765 ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_visible", value, (char *)NULL);
766 if (ret != MM_ERROR_NONE) goto ERROR;
769 ret = mm_player_realize(handle->mm_handle);
770 if (ret != MM_ERROR_NONE) {
771 LOGE("[%s] Failed to realize - 0x%x", __FUNCTION__, ret);
775 ret = pthread_create(&handle->prepare_async_thread, NULL, (void *)__prepare_async_thread_func, (void *)handle);
778 LOGE("[%s] failed to create thread ret = %d", __FUNCTION__, ret);
779 LEGACY_PLAYER_USER_CB_LOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
780 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
781 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
782 /* user_data will be free at player_disp_prepare_async() */
783 handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
785 LEGACY_PLAYER_USER_CB_UNLOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
786 __player_update_state(handle, PLAYER_INTERNAL_STATE_IDLE);
787 return PLAYER_ERROR_OUT_OF_MEMORY;
790 LOGI("[%s] End", __FUNCTION__);
791 return PLAYER_ERROR_NONE;
794 LOGW("prepare cb is released");
795 LEGACY_PLAYER_USER_CB_LOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
796 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
797 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
798 /* user_data will be free at player_disp_prepare_async() */
799 handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
801 LEGACY_PLAYER_USER_CB_UNLOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
802 __player_update_state(handle, PLAYER_INTERNAL_STATE_IDLE);
804 LOGE("LEAVE mm_err:0x%X", ret);
805 return __player_convert_error_code(ret, (char *)__FUNCTION__);
808 int legacy_player_prepare(player_h player)
810 int ret = MM_ERROR_NONE;
812 player_s *handle = (player_s *)player;
814 LOGI("[%s] Start", __FUNCTION__);
815 PLAYER_TRACE_BEGIN("MM:PLAYER:PREPARE");
816 PLAYER_INSTANCE_CHECK(player);
817 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
818 __player_update_state(handle, PLAYER_INTERNAL_STATE_PRE_READY);
820 handle->last_play_position = 0;
821 ret = mm_player_set_message_callback(handle->mm_handle, __msg_callback, (void *)handle);
822 if (ret != MM_ERROR_NONE)
823 LOGW("[%s] Failed to set message callback function (0x%x)", __FUNCTION__, ret);
825 if (handle->display_type == PLAYER_DISPLAY_TYPE_NONE) {
826 ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_surface_type", MM_DISPLAY_SURFACE_NULL, (char *)NULL);
827 if (ret != MM_ERROR_NONE)
828 LOGW("[%s] Failed to set display surface type 'MM_DISPLAY_SURFACE_NULL' (0x%x)", __FUNCTION__, ret);
830 ret = mm_player_get_attribute(handle->mm_handle, NULL, "display_visible", &visible, (char *)NULL);
831 if (ret != MM_ERROR_NONE) {
832 __player_update_state(handle, PLAYER_INTERNAL_STATE_IDLE);
833 return __player_convert_error_code(ret, (char *)__FUNCTION__);
836 ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_visible", visible, (char *)NULL);
837 if (ret != MM_ERROR_NONE)
838 LOGW("[%s] Failed to set display display_visible '%d' (0x%x)", __FUNCTION__, visible, ret);
841 ret = mm_player_realize(handle->mm_handle);
842 if (ret != MM_ERROR_NONE) {
843 LOGE("[%s] Failed to realize - 0x%x", __FUNCTION__, ret);
844 __player_update_state(handle, PLAYER_INTERNAL_STATE_IDLE);
845 return __player_convert_error_code(ret, (char *)__FUNCTION__);
848 ret = mm_player_pause(handle->mm_handle);
849 if (ret != MM_ERROR_NONE) {
851 uret = mm_player_unrealize(handle->mm_handle);
852 if (uret != MM_ERROR_NONE)
853 LOGE("[%s] Failed to unrealize - 0x%x", __FUNCTION__, uret);
855 LOGE("[%s] Failed to pause - 0x%x", __FUNCTION__, ret);
856 __player_update_state(handle, PLAYER_INTERNAL_STATE_IDLE);
857 return __player_convert_error_code(ret, (char *)__FUNCTION__);
860 __player_update_state(handle, PLAYER_INTERNAL_STATE_READY);
861 LOGI("[%s] End", __FUNCTION__);
863 return PLAYER_ERROR_NONE;
866 int legacy_player_unprepare(player_h player)
868 player_s *handle = (player_s *)player;
869 int ret = MM_ERROR_NONE;
870 LOGI("[%s] Start", __FUNCTION__);
871 PLAYER_TRACE_BEGIN("MM:PLAYER:UNPREPARE");
872 PLAYER_INSTANCE_CHECK(player);
874 /* Initialize the setting regardless of error return */
875 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK]) {
876 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK] = NULL;
877 handle->user_data[MUSE_PLAYER_EVENT_TYPE_SEEK] = NULL;
880 if (!__player_state_validate(handle, PLAYER_STATE_READY) && !handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
881 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
882 return PLAYER_ERROR_INVALID_STATE;
885 LEGACY_PLAYER_USER_CB_LOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
886 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
887 LOGW("Need to check. prepare cb have to be reset before");
888 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
889 g_free(handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE]);
890 handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
892 LEGACY_PLAYER_USER_CB_UNLOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
894 /* stop the pause state trasition to release prepare thread */
895 if (handle->internal_state == PLAYER_INTERNAL_STATE_PRE_READY)
896 mm_player_abort_pause(handle->mm_handle);
898 __RELEASEIF_PREPARE_THREAD(handle->prepare_async_thread);
900 ret = mm_player_unrealize(handle->mm_handle);
901 if (ret != MM_ERROR_NONE)
902 return __player_convert_error_code(ret, (char *)__FUNCTION__);
904 __player_update_state(handle, PLAYER_INTERNAL_STATE_IDLE);
905 handle->is_display_visible = true;
906 LOGI("[%s] End", __FUNCTION__);
908 return PLAYER_ERROR_NONE;
911 int legacy_player_set_uri(player_h player, const char *uri)
913 player_s *handle = (player_s *)player;
914 int ret = MM_ERROR_NONE;
915 PLAYER_INSTANCE_CHECK(player);
916 PLAYER_NULL_ARG_CHECK(uri);
917 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
919 handle->is_media_stream = false;
920 ret = mm_player_set_uri(handle->mm_handle, uri);
921 if (ret != MM_ERROR_NONE)
922 return __player_convert_error_code(ret, (char *)__FUNCTION__);
924 return PLAYER_ERROR_NONE;
927 int legacy_player_set_memory_buffer(player_h player, const void *data, int size)
929 player_s *handle = (player_s *)player;
931 int ret = MM_ERROR_NONE;
932 PLAYER_INSTANCE_CHECK(player);
933 PLAYER_NULL_ARG_CHECK(data);
934 PLAYER_CHECK_CONDITION(size >= 0, PLAYER_ERROR_INVALID_PARAMETER, "PLAYER_ERROR_INVALID_PARAMETER");
935 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
937 handle->is_media_stream = FALSE;
939 snprintf(uri, sizeof(uri), "mem:///ext=%s,size=%d", "", size);
940 ret = mm_player_set_attribute(handle->mm_handle, NULL, MM_PLAYER_CONTENT_URI, uri, strlen(uri), MM_PLAYER_MEMORY_SRC, data, size, (char *)NULL);
941 if (ret != MM_ERROR_NONE)
942 return __player_convert_error_code(ret, (char *)__FUNCTION__);
944 return PLAYER_ERROR_NONE;
947 int legacy_player_get_state(player_h player, player_state_e *state)
949 player_s *handle = (player_s *)player;
950 PLAYER_INSTANCE_CHECK(player);
951 PLAYER_NULL_ARG_CHECK(state);
952 *state = handle->state;
953 return PLAYER_ERROR_NONE;
956 int legacy_player_set_volume(player_h player, float left, float right)
958 player_s *handle = (player_s *)player;
959 MMPlayerVolumeType vol;
960 int ret = MM_ERROR_NONE;
961 PLAYER_INSTANCE_CHECK(player);
962 PLAYER_CHECK_CONDITION(left >= 0 && left <= 1.0, PLAYER_ERROR_INVALID_PARAMETER, "PLAYER_ERROR_INVALID_PARAMETER");
963 PLAYER_CHECK_CONDITION(right >= 0 && right <= 1.0, PLAYER_ERROR_INVALID_PARAMETER, "PLAYER_ERROR_INVALID_PARAMETER");
965 vol.level[MM_VOLUME_CHANNEL_LEFT] = left;
966 vol.level[MM_VOLUME_CHANNEL_RIGHT] = right;
967 ret = mm_player_set_volume(handle->mm_handle, &vol);
968 if (ret != MM_ERROR_NONE)
969 return __player_convert_error_code(ret, (char *)__FUNCTION__);
971 return PLAYER_ERROR_NONE;
974 int legacy_player_get_volume(player_h player, float *left, float *right)
976 player_s *handle = (player_s *)player;
977 MMPlayerVolumeType vol;
978 int ret = MM_ERROR_NONE;
979 PLAYER_INSTANCE_CHECK(player);
980 PLAYER_NULL_ARG_CHECK(left);
981 PLAYER_NULL_ARG_CHECK(right);
983 ret = mm_player_get_volume(handle->mm_handle, &vol);
984 if (ret != MM_ERROR_NONE) {
985 return __player_convert_error_code(ret, (char *)__FUNCTION__);
988 *left = vol.level[MM_VOLUME_CHANNEL_LEFT];
989 *right = vol.level[MM_VOLUME_CHANNEL_RIGHT];
990 return PLAYER_ERROR_NONE;
993 int legacy_player_set_sound_stream_info(player_h player, sound_stream_info_h stream_info)
995 player_s *handle = (player_s *)player;
996 int ret = MM_ERROR_NONE;
997 bool is_available = false;
998 PLAYER_INSTANCE_CHECK(player);
999 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
1001 /* check if stream_info is valid */
1002 ret = sound_manager_is_available_stream_information(stream_info, NATIVE_API_PLAYER, &is_available);
1003 if (ret != MM_ERROR_NONE)
1004 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1007 char *stream_type = NULL;
1008 int stream_index = 0;
1009 ret = sound_manager_get_type_from_stream_information(stream_info, &stream_type);
1010 ret = sound_manager_get_index_from_stream_information(stream_info, &stream_index);
1011 if (ret == SOUND_MANAGER_ERROR_NONE)
1012 ret = mm_player_set_sound_stream_info(handle->mm_handle, stream_type, stream_index);
1014 ret = MM_ERROR_PLAYER_INTERNAL;
1016 ret = MM_ERROR_NOT_SUPPORT_API;
1019 if (ret != MM_ERROR_NONE)
1020 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1022 return PLAYER_ERROR_NONE;
1025 int legacy_player_set_audio_latency_mode(player_h player, audio_latency_mode_e latency_mode)
1027 player_s *handle = (player_s *)player;
1028 int ret = MM_ERROR_NONE;
1029 PLAYER_INSTANCE_CHECK(player);
1031 ret = mm_player_set_attribute(handle->mm_handle, NULL, "sound_latency_mode", latency_mode, (char *)NULL);
1032 if (ret != MM_ERROR_NONE)
1033 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1035 return PLAYER_ERROR_NONE;
1038 int legacy_player_get_audio_latency_mode(player_h player, audio_latency_mode_e *latency_mode)
1040 player_s *handle = (player_s *)player;
1041 int ret = MM_ERROR_NONE;
1042 PLAYER_INSTANCE_CHECK(player);
1043 PLAYER_NULL_ARG_CHECK(latency_mode);
1045 ret = mm_player_get_attribute(handle->mm_handle, NULL, "sound_latency_mode", latency_mode, (char *)NULL);
1046 if (ret != MM_ERROR_NONE)
1047 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1049 return PLAYER_ERROR_NONE;
1052 int legacy_player_start(player_h player)
1054 player_s *handle = (player_s *)player;
1055 int ret = MM_ERROR_NONE;
1056 LOGI("[%s] Start", __FUNCTION__);
1057 PLAYER_INSTANCE_CHECK(player);
1059 if (handle->state > PLAYER_STATE_IDLE) {
1060 if (handle->display_type == PLAYER_DISPLAY_TYPE_OVERLAY && handle->is_display_visible) {
1061 ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_visible", 1, (char *)NULL);
1062 if (ret != MM_ERROR_NONE)
1063 LOGW("[%s] Failed to set display_visible '1' (0x%x)", __FUNCTION__, ret);
1065 if (handle->internal_state == PLAYER_INTERNAL_STATE_STOPPED) {
1066 ret = mm_player_start(handle->mm_handle);
1067 LOGI("[%s] stop -> start() ", __FUNCTION__);
1069 if (handle->state == PLAYER_STATE_READY)
1070 ret = mm_player_start(handle->mm_handle);
1072 ret = mm_player_resume(handle->mm_handle);
1075 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1076 return PLAYER_ERROR_INVALID_STATE;
1079 if (ret != MM_ERROR_NONE)
1080 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1082 __player_update_state(handle, PLAYER_INTERNAL_STATE_PLAYING);
1083 LOGI("[%s] End", __FUNCTION__);
1084 return PLAYER_ERROR_NONE;
1087 int legacy_player_stop(player_h player)
1089 player_s *handle = (player_s *)player;
1090 int ret = MM_ERROR_NONE;
1091 LOGI("[%s] Start", __FUNCTION__);
1092 PLAYER_INSTANCE_CHECK(player);
1094 if (handle->state == PLAYER_STATE_PLAYING || handle->state == PLAYER_STATE_PAUSED) {
1095 if (handle->display_type == PLAYER_DISPLAY_TYPE_OVERLAY) {
1096 ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_visible", 0, (char *)NULL);
1097 if (ret != MM_ERROR_NONE)
1098 LOGW("[%s] Failed to set display_visible '0' (0x%x)", __FUNCTION__, ret);
1101 ret = mm_player_stop(handle->mm_handle);
1102 if (ret != MM_ERROR_NONE) {
1103 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1106 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK]) {
1107 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK] = NULL;
1108 handle->user_data[MUSE_PLAYER_EVENT_TYPE_SEEK] = NULL;
1111 __player_update_state(handle, PLAYER_INTERNAL_STATE_STOPPED);
1113 LOGI("[%s] End", __FUNCTION__);
1114 return PLAYER_ERROR_NONE;
1117 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1118 return PLAYER_ERROR_INVALID_STATE;
1121 int legacy_player_pause(player_h player)
1123 player_s *handle = (player_s *)player;
1124 int ret = MM_ERROR_NONE;
1125 LOGI("[%s] Start", __FUNCTION__);
1126 PLAYER_INSTANCE_CHECK(player);
1127 PLAYER_STATE_CHECK(handle, PLAYER_STATE_PLAYING);
1129 ret = mm_player_pause(handle->mm_handle);
1130 if (ret != MM_ERROR_NONE)
1131 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1133 __player_update_state(handle, PLAYER_INTERNAL_STATE_PAUSED);
1134 LOGI("[%s] End", __FUNCTION__);
1135 return PLAYER_ERROR_NONE;
1138 int legacy_player_set_play_position(player_h player, int64_t nanoseconds, bool accurate, player_seek_completed_cb callback, void *user_data)
1140 player_s *handle = (player_s *)player;
1141 int ret = MM_ERROR_NONE;
1142 int accurated = accurate ? 1 : 0;
1143 PLAYER_INSTANCE_CHECK(player);
1144 PLAYER_CHECK_CONDITION(nanoseconds >= 0, PLAYER_ERROR_INVALID_PARAMETER, "PLAYER_ERROR_INVALID_PARAMETER");
1146 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
1147 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1148 return PLAYER_ERROR_INVALID_STATE;
1151 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK] && !handle->is_media_stream) {
1152 LOGE("[%s] PLAYER_ERROR_SEEK_FAILED temp (0x%08x) : seeking... we can't do any more ", __FUNCTION__, PLAYER_ERROR_SEEK_FAILED);
1153 return PLAYER_ERROR_SEEK_FAILED;
1156 LOGI("[%s] Event type : %d, pos : %"PRId64, __FUNCTION__, MUSE_PLAYER_EVENT_TYPE_SEEK, nanoseconds);
1157 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK] = callback;
1158 handle->user_data[MUSE_PLAYER_EVENT_TYPE_SEEK] = user_data;
1160 ret = mm_player_set_attribute(handle->mm_handle, NULL, "accurate_seek", accurated, (char *)NULL);
1161 if (ret != MM_ERROR_NONE)
1162 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1164 ret = mm_player_set_position(handle->mm_handle, nanoseconds);
1165 if (ret != MM_ERROR_NONE) {
1166 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK] = NULL;
1167 handle->user_data[MUSE_PLAYER_EVENT_TYPE_SEEK] = NULL;
1168 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1171 return PLAYER_ERROR_NONE;
1174 int legacy_player_get_play_position(player_h player, int64_t *nanoseconds)
1176 player_s *handle = (player_s *)player;
1177 int ret = MM_ERROR_NONE;
1179 PLAYER_INSTANCE_CHECK(player);
1180 PLAYER_NULL_ARG_CHECK(nanoseconds);
1182 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
1183 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1184 return PLAYER_ERROR_INVALID_STATE;
1187 ret = mm_player_get_position(handle->mm_handle, &pos);
1188 if (ret != MM_ERROR_NONE) {
1189 if (ret == MM_ERROR_PLAYER_NOT_INITIALIZED) {
1190 /* During playbak if a interrupt is occurred, the player can be destroyed internally.
1191 libmm-player will post position msg with last playback position before destory pipeline */
1192 if (handle->state == PLAYER_STATE_IDLE) {
1193 if (handle->last_play_position > 0)
1194 *nanoseconds = handle->last_play_position;
1197 LOGD("position %"PRId64, *nanoseconds);
1198 return PLAYER_ERROR_NONE;
1201 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1205 return PLAYER_ERROR_NONE;
1208 int legacy_player_set_mute(player_h player, bool muted)
1210 player_s *handle = (player_s *)player;
1211 int ret = MM_ERROR_NONE;
1212 PLAYER_INSTANCE_CHECK(player);
1214 ret = mm_player_set_mute(handle->mm_handle, muted);
1215 if (ret != MM_ERROR_NONE)
1216 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1218 return PLAYER_ERROR_NONE;
1221 int legacy_player_is_muted(player_h player, bool *muted)
1223 player_s *handle = (player_s *)player;
1225 int ret = MM_ERROR_NONE;
1226 PLAYER_INSTANCE_CHECK(player);
1227 PLAYER_NULL_ARG_CHECK(muted);
1229 ret = mm_player_get_mute(handle->mm_handle, &_mute);
1230 if (ret != MM_ERROR_NONE)
1231 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1233 *muted = (bool)_mute;
1235 return PLAYER_ERROR_NONE;
1238 int legacy_player_set_looping(player_h player, bool looping)
1240 player_s *handle = (player_s *)player;
1241 int ret = MM_ERROR_NONE;
1243 PLAYER_INSTANCE_CHECK(player);
1248 ret = mm_player_set_attribute(handle->mm_handle, NULL, MM_PLAYER_PLAYBACK_COUNT, value, (char *)NULL);
1249 if (ret != MM_ERROR_NONE)
1250 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1252 return PLAYER_ERROR_NONE;
1255 int legacy_player_is_looping(player_h player, bool *looping)
1257 player_s *handle = (player_s *)player;
1258 int ret = MM_ERROR_NONE;
1260 PLAYER_INSTANCE_CHECK(player);
1261 PLAYER_NULL_ARG_CHECK(looping);
1263 ret = mm_player_get_attribute(handle->mm_handle, NULL, MM_PLAYER_PLAYBACK_COUNT, &count, (char *)NULL);
1264 if (ret != MM_ERROR_NONE)
1265 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1267 *looping = (count == -1) ? true : false;
1269 return PLAYER_ERROR_NONE;
1272 int legacy_player_get_duration(player_h player, int64_t *duration)
1274 player_s *handle = (player_s *)player;
1275 int ret = MM_ERROR_NONE;
1276 PLAYER_INSTANCE_CHECK(player);
1277 PLAYER_NULL_ARG_CHECK(duration);
1279 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
1280 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1281 return PLAYER_ERROR_INVALID_STATE;
1284 ret = mm_player_get_duration(handle->mm_handle, duration);
1285 if (ret != MM_ERROR_NONE)
1286 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1288 LOGD("content dur: %"PRId64, *duration);
1289 return PLAYER_ERROR_NONE;
1292 int legacy_player_set_display_mode(player_h player, player_display_mode_e mode)
1294 player_s *handle = (player_s *)player;
1295 int ret = MM_ERROR_NONE;
1296 PLAYER_INSTANCE_CHECK(player);
1297 LOGI("[%s] mode:%d", __FUNCTION__, mode);
1299 ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_method", mode, (char *)NULL);
1300 if (ret != MM_ERROR_NONE)
1301 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1303 return PLAYER_ERROR_NONE;
1306 int legacy_player_get_display_mode(player_h player, player_display_mode_e *mode)
1308 player_s *handle = (player_s *)player;
1309 int ret = MM_ERROR_NONE;
1310 PLAYER_INSTANCE_CHECK(player);
1311 PLAYER_NULL_ARG_CHECK(mode);
1313 ret = mm_player_get_attribute(handle->mm_handle, NULL, "display_method", mode, (char *)NULL);
1314 if (ret != MM_ERROR_NONE)
1315 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1317 return PLAYER_ERROR_NONE;
1320 int legacy_player_set_playback_rate(player_h player, float rate)
1322 player_s *handle = (player_s *)player;
1323 int ret = MM_ERROR_NONE;
1324 LOGI("[%s] rate : %0.1f", __FUNCTION__, rate);
1325 PLAYER_INSTANCE_CHECK(player);
1326 PLAYER_CHECK_CONDITION(rate >= -5.0 && rate <= 5.0, PLAYER_ERROR_INVALID_PARAMETER, "PLAYER_ERROR_INVALID_PARAMETER");
1328 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
1329 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1330 return PLAYER_ERROR_INVALID_STATE;
1333 ret = mm_player_set_play_speed(handle->mm_handle, rate, false);
1336 case MM_ERROR_PLAYER_NO_OP:
1337 ret = PLAYER_ERROR_NONE;
1339 case MM_ERROR_NOT_SUPPORT_API:
1340 case MM_ERROR_PLAYER_SEEK:
1341 LOGE("[%s] PLAYER_ERROR_INVALID_OPERATION(0x%08x) : seek error", __FUNCTION__, PLAYER_ERROR_INVALID_OPERATION);
1342 ret = PLAYER_ERROR_INVALID_OPERATION;
1345 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1351 int legacy_player_set_display_rotation(player_h player, player_display_rotation_e rotation)
1353 player_s *handle = (player_s *)player;
1354 int ret = MM_ERROR_NONE;
1355 PLAYER_INSTANCE_CHECK(player);
1357 ret = mm_player_set_attribute(handle->mm_handle, NULL, MM_PLAYER_VIDEO_ROTATION, rotation, (char *)NULL);
1358 if (ret != MM_ERROR_NONE)
1359 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1361 return PLAYER_ERROR_NONE;
1364 int legacy_player_get_display_rotation(player_h player, player_display_rotation_e *rotation)
1366 player_s *handle = (player_s *)player;
1367 int ret = MM_ERROR_NONE;
1368 PLAYER_INSTANCE_CHECK(player);
1369 PLAYER_NULL_ARG_CHECK(rotation);
1371 ret = mm_player_get_attribute(handle->mm_handle, NULL, MM_PLAYER_VIDEO_ROTATION, rotation, (char *)NULL);
1372 if (ret != MM_ERROR_NONE)
1373 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1375 return PLAYER_ERROR_NONE;
1378 int legacy_player_set_display_visible(player_h player, bool visible)
1380 player_s *handle = (player_s *)player;
1381 int ret = MM_ERROR_NONE;
1383 PLAYER_INSTANCE_CHECK(player);
1388 ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_visible", value, (char *)NULL);
1389 if (ret != MM_ERROR_NONE)
1390 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1392 handle->is_display_visible = visible;
1393 return PLAYER_ERROR_NONE;
1396 int legacy_player_is_display_visible(player_h player, bool *visible)
1398 player_s *handle = (player_s *)player;
1399 int ret = MM_ERROR_NONE;
1401 PLAYER_INSTANCE_CHECK(player);
1402 PLAYER_NULL_ARG_CHECK(visible);
1404 ret = mm_player_get_attribute(handle->mm_handle, NULL, "display_visible", &value, (char *)NULL);
1405 if (ret != MM_ERROR_NONE)
1406 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1408 *visible = (value == 0) ? false : true;
1410 return PLAYER_ERROR_NONE;
1413 int legacy_player_get_content_info(player_h player, player_content_info_e key, char **value)
1415 player_s *handle = (player_s *)player;
1416 int ret = MM_ERROR_NONE;
1420 PLAYER_INSTANCE_CHECK(player);
1421 PLAYER_NULL_ARG_CHECK(value);
1423 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
1424 LOGE("[%s] PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1425 return PLAYER_ERROR_INVALID_STATE;
1429 case PLAYER_CONTENT_INFO_ALBUM:
1430 attr = MM_PLAYER_TAG_ALBUM;
1432 case PLAYER_CONTENT_INFO_ARTIST:
1433 attr = MM_PLAYER_TAG_ARTIST;
1435 case PLAYER_CONTENT_INFO_AUTHOR:
1436 attr = MM_PLAYER_TAG_AUTHOUR;
1438 case PLAYER_CONTENT_INFO_GENRE:
1439 attr = MM_PLAYER_TAG_GENRE;
1441 case PLAYER_CONTENT_INFO_TITLE:
1442 attr = MM_PLAYER_TAG_TITLE;
1444 case PLAYER_CONTENT_INFO_YEAR:
1445 attr = MM_PLAYER_TAG_DATE;
1451 ret = mm_player_get_attribute(handle->mm_handle, NULL, attr, &val, &val_len, (char *)NULL);
1452 if (ret != MM_ERROR_NONE)
1453 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1457 *value = strndup(val, val_len);
1459 *value = strndup("", 0);
1461 if (*value == NULL) {
1462 LOGE("[%s] PLAYER_ERROR_OUT_OF_MEMORY(0x%08x) : fail to strdup ", __FUNCTION__, PLAYER_ERROR_OUT_OF_MEMORY);
1463 return PLAYER_ERROR_OUT_OF_MEMORY;
1466 return PLAYER_ERROR_NONE;
1469 int legacy_player_get_codec_info(player_h player, char **audio_codec, char **video_codec)
1471 player_s *handle = (player_s *)player;
1472 int ret = MM_ERROR_NONE;
1477 PLAYER_INSTANCE_CHECK(player);
1478 PLAYER_NULL_ARG_CHECK(audio_codec);
1479 PLAYER_NULL_ARG_CHECK(video_codec);
1481 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
1482 LOGE("[%s] PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1483 return PLAYER_ERROR_INVALID_STATE;
1486 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);
1487 if (ret != MM_ERROR_NONE)
1488 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1490 *audio_codec = NULL;
1492 *audio_codec = strndup(audio, audio_len);
1494 *audio_codec = strndup("", 0);
1496 *video_codec = NULL;
1498 *video_codec = strndup(video, video_len);
1500 *video_codec = strndup("", 0);
1502 LOGD("codec info: %s, %s", *audio_codec, *video_codec);
1503 return PLAYER_ERROR_NONE;
1506 int legacy_player_get_audio_stream_info(player_h player, int *sample_rate, int *channel, int *bit_rate)
1508 player_s *handle = (player_s *)player;
1509 int ret = MM_ERROR_NONE;
1510 PLAYER_INSTANCE_CHECK(player);
1511 PLAYER_NULL_ARG_CHECK(sample_rate);
1512 PLAYER_NULL_ARG_CHECK(channel);
1513 PLAYER_NULL_ARG_CHECK(bit_rate);
1515 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
1516 LOGE("[%s] PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1517 return PLAYER_ERROR_INVALID_STATE;
1519 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);
1520 if (ret != MM_ERROR_NONE)
1521 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1523 return PLAYER_ERROR_NONE;
1526 int legacy_player_get_video_stream_info(player_h player, int *fps, int *bit_rate)
1528 player_s *handle = (player_s *)player;
1529 int ret = MM_ERROR_NONE;
1530 PLAYER_INSTANCE_CHECK(player);
1531 PLAYER_NULL_ARG_CHECK(fps);
1532 PLAYER_NULL_ARG_CHECK(bit_rate);
1534 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
1535 LOGE("[%s] PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1536 return PLAYER_ERROR_INVALID_STATE;
1538 ret = mm_player_get_attribute(handle->mm_handle, NULL, "content_video_fps", fps, "content_video_bitrate", bit_rate, (char *)NULL);
1539 if (ret != MM_ERROR_NONE)
1540 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1542 return PLAYER_ERROR_NONE;
1545 int legacy_player_get_video_size(player_h player, int *width, int *height)
1547 player_s *handle = (player_s *)player;
1548 int ret = MM_ERROR_NONE;
1551 PLAYER_INSTANCE_CHECK(player);
1552 PLAYER_NULL_ARG_CHECK(width);
1553 PLAYER_NULL_ARG_CHECK(height);
1554 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
1555 LOGE("[%s] PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1556 return PLAYER_ERROR_INVALID_STATE;
1558 ret = mm_player_get_attribute(handle->mm_handle, NULL, MM_PLAYER_VIDEO_WIDTH, &w, MM_PLAYER_VIDEO_HEIGHT, &h, (char *)NULL);
1559 if (ret != MM_ERROR_NONE)
1560 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1564 LOGI("[%s] width : %d, height : %d", __FUNCTION__, w, h);
1565 return PLAYER_ERROR_NONE;
1568 int legacy_player_get_album_art(player_h player, void **album_art, int *size)
1570 player_s *handle = (player_s *)player;
1571 int ret = MM_ERROR_NONE;
1572 PLAYER_INSTANCE_CHECK(player);
1573 PLAYER_NULL_ARG_CHECK(size);
1574 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
1575 LOGE("[%s] PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1576 return PLAYER_ERROR_INVALID_STATE;
1579 ret = mm_player_get_attribute(handle->mm_handle, NULL, "tag_album_cover", album_art, size, (char *)NULL);
1580 if (ret != MM_ERROR_NONE)
1581 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1583 return PLAYER_ERROR_NONE;
1586 int legacy_player_audio_effect_get_equalizer_bands_count(player_h player, int *count)
1588 player_s *handle = (player_s *)player;
1589 int ret = MM_ERROR_NONE;
1590 PLAYER_INSTANCE_CHECK(player);
1591 PLAYER_NULL_ARG_CHECK(count);
1593 ret = mm_player_audio_effect_custom_get_eq_bands_number(handle->mm_handle, count);
1594 if (ret != MM_ERROR_NONE)
1595 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1597 return PLAYER_ERROR_NONE;
1600 int legacy_player_audio_effect_set_equalizer_all_bands(player_h player, int *band_levels, int length)
1602 player_s *handle = (player_s *)player;
1603 int ret = MM_ERROR_NONE;
1604 PLAYER_INSTANCE_CHECK(player);
1605 PLAYER_NULL_ARG_CHECK(band_levels);
1607 ret = mm_player_audio_effect_custom_set_level_eq_from_list(handle->mm_handle, band_levels, length);
1608 if (ret != MM_ERROR_NONE)
1609 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1611 ret = mm_player_audio_effect_custom_apply(handle->mm_handle);
1612 return (ret == MM_ERROR_NONE) ? PLAYER_ERROR_NONE : __player_convert_error_code(ret, (char *)__FUNCTION__);
1615 int legacy_player_audio_effect_set_equalizer_band_level(player_h player, int index, int level)
1617 player_s *handle = (player_s *)player;
1618 int ret = MM_ERROR_NONE;
1619 PLAYER_INSTANCE_CHECK(player);
1621 ret = mm_player_audio_effect_custom_set_level(handle->mm_handle, MM_AUDIO_EFFECT_CUSTOM_EQ, index, level);
1622 if (ret != MM_ERROR_NONE)
1623 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1625 ret = mm_player_audio_effect_custom_apply(handle->mm_handle);
1626 if (ret != MM_ERROR_NONE)
1627 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1629 return PLAYER_ERROR_NONE;
1632 int legacy_player_audio_effect_get_equalizer_band_level(player_h player, int index, int *level)
1634 player_s *handle = (player_s *)player;
1635 int ret = MM_ERROR_NONE;
1636 PLAYER_INSTANCE_CHECK(player);
1637 PLAYER_NULL_ARG_CHECK(level);
1639 ret = mm_player_audio_effect_custom_get_level(handle->mm_handle, MM_AUDIO_EFFECT_CUSTOM_EQ, index, level);
1640 if (ret != MM_ERROR_NONE)
1641 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1643 return PLAYER_ERROR_NONE;
1646 int legacy_player_audio_effect_get_equalizer_level_range(player_h player, int *min, int *max)
1648 player_s *handle = (player_s *)player;
1649 int ret = MM_ERROR_NONE;
1650 PLAYER_INSTANCE_CHECK(player);
1651 PLAYER_NULL_ARG_CHECK(min);
1652 PLAYER_NULL_ARG_CHECK(max);
1654 ret = mm_player_audio_effect_custom_get_level_range(handle->mm_handle, MM_AUDIO_EFFECT_CUSTOM_EQ, min, max);
1655 if (ret != MM_ERROR_NONE)
1656 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1658 return PLAYER_ERROR_NONE;
1661 int legacy_player_audio_effect_get_equalizer_band_frequency(player_h player, int index, int *frequency)
1663 player_s *handle = (player_s *)player;
1664 int ret = MM_ERROR_NONE;
1665 PLAYER_INSTANCE_CHECK(player);
1666 PLAYER_NULL_ARG_CHECK(frequency);
1668 ret = mm_player_audio_effect_custom_get_eq_bands_freq(handle->mm_handle, index, frequency);
1669 if (ret != MM_ERROR_NONE)
1670 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1672 return PLAYER_ERROR_NONE;
1675 int legacy_player_audio_effect_get_equalizer_band_frequency_range(player_h player, int index, int *range)
1677 player_s *handle = (player_s *)player;
1678 int ret = MM_ERROR_NONE;
1679 PLAYER_INSTANCE_CHECK(player);
1680 PLAYER_NULL_ARG_CHECK(range);
1682 ret = mm_player_audio_effect_custom_get_eq_bands_width(handle->mm_handle, index, range);
1683 if (ret != MM_ERROR_NONE)
1684 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1686 return PLAYER_ERROR_NONE;
1689 int legacy_player_audio_effect_equalizer_clear(player_h player)
1691 player_s *handle = (player_s *)player;
1692 int ret = MM_ERROR_NONE;
1693 PLAYER_INSTANCE_CHECK(player);
1695 ret = mm_player_audio_effect_custom_clear_eq_all(handle->mm_handle);
1696 if (ret != MM_ERROR_NONE)
1697 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1699 ret = mm_player_audio_effect_custom_apply(handle->mm_handle);
1700 if (ret != MM_ERROR_NONE)
1701 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1703 return PLAYER_ERROR_NONE;
1706 int legacy_player_audio_effect_equalizer_is_available(player_h player, bool *available)
1708 player_s *handle = (player_s *)player;
1709 int ret = MM_ERROR_NONE;
1710 PLAYER_INSTANCE_CHECK(player);
1711 PLAYER_NULL_ARG_CHECK(available);
1712 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
1713 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1714 return PLAYER_ERROR_INVALID_STATE;
1717 ret = mm_player_is_supported_custom_effect_type(handle->mm_handle, MM_AUDIO_EFFECT_CUSTOM_EQ);
1718 if (ret != MM_ERROR_NONE)
1723 return PLAYER_ERROR_NONE;
1726 int legacy_player_set_subtitle_path(player_h player, const char *path)
1728 player_s *handle = (player_s *)player;
1729 int ret = MM_ERROR_NONE;
1730 PLAYER_INSTANCE_CHECK(player);
1732 if ((path == NULL) && (handle->state != PLAYER_STATE_IDLE))
1733 return PLAYER_ERROR_INVALID_PARAMETER;
1735 ret = mm_player_set_external_subtitle_path(handle->mm_handle, path);
1736 if (ret != MM_ERROR_NONE)
1737 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1739 return PLAYER_ERROR_NONE;
1742 int legacy_player_set_subtitle_position_offset(player_h player, int millisecond)
1744 /* PLAYER_CHECK_CONDITION(millisecond>=0 ,PLAYER_ERROR_INVALID_PARAMETER ,"PLAYER_ERROR_INVALID_PARAMETER" ); */
1745 player_s *handle = (player_s *)player;
1746 int ret = MM_ERROR_NONE;
1747 PLAYER_INSTANCE_CHECK(player);
1748 if (!__player_state_validate(handle, PLAYER_STATE_PLAYING)) {
1749 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1750 return PLAYER_ERROR_INVALID_STATE;
1753 ret = mm_player_adjust_subtitle_position(handle->mm_handle, MM_PLAYER_POS_FORMAT_TIME, millisecond);
1754 if (ret != MM_ERROR_NONE)
1755 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1757 return PLAYER_ERROR_NONE;
1760 int legacy_player_capture_video(player_h player, player_video_captured_cb callback, void *user_data)
1762 player_s *handle = (player_s *)player;
1763 int ret = MM_ERROR_NONE;
1764 PLAYER_INSTANCE_CHECK(player);
1765 PLAYER_NULL_ARG_CHECK(callback);
1766 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_CAPTURE]) {
1767 LOGE("[%s] PLAYER_ERROR_VIDEO_CAPTURE_FAILED (0x%08x) : capturing... we can't do any more ", __FUNCTION__, PLAYER_ERROR_VIDEO_CAPTURE_FAILED);
1768 return PLAYER_ERROR_VIDEO_CAPTURE_FAILED;
1771 LOGI("[%s] Event type : %d ", __FUNCTION__, MUSE_PLAYER_EVENT_TYPE_CAPTURE);
1772 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_CAPTURE] = callback;
1773 handle->user_data[MUSE_PLAYER_EVENT_TYPE_CAPTURE] = user_data;
1775 if (handle->state >= PLAYER_STATE_READY) {
1776 ret = mm_player_do_video_capture(handle->mm_handle);
1777 if (ret == MM_ERROR_PLAYER_NO_OP) {
1778 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_CAPTURE] = NULL;
1779 handle->user_data[MUSE_PLAYER_EVENT_TYPE_CAPTURE] = NULL;
1780 LOGE("[%s] PLAYER_ERROR_INVALID_OPERATION (0x%08x) : video display must be set : %d", __FUNCTION__, PLAYER_ERROR_INVALID_OPERATION, handle->display_type);
1781 return PLAYER_ERROR_INVALID_OPERATION;
1783 if (ret != MM_ERROR_NONE) {
1784 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_CAPTURE] = NULL;
1785 handle->user_data[MUSE_PLAYER_EVENT_TYPE_CAPTURE] = NULL;
1786 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1788 return PLAYER_ERROR_NONE;
1791 LOGE("[%s] PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1792 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_CAPTURE] = NULL;
1793 handle->user_data[MUSE_PLAYER_EVENT_TYPE_CAPTURE] = NULL;
1794 return PLAYER_ERROR_INVALID_STATE;
1797 int legacy_player_set_streaming_cookie(player_h player, const char *cookie, int size)
1799 player_s *handle = (player_s *)player;
1800 int ret = MM_ERROR_NONE;
1801 PLAYER_INSTANCE_CHECK(player);
1802 PLAYER_NULL_ARG_CHECK(cookie);
1803 PLAYER_CHECK_CONDITION(size >= 0, PLAYER_ERROR_INVALID_PARAMETER, "PLAYER_ERROR_INVALID_PARAMETER");
1804 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
1806 ret = mm_player_set_attribute(handle->mm_handle, NULL, MM_PLAYER_STREAMING_COOKIE, cookie, size, (char *)NULL);
1807 if (ret != MM_ERROR_NONE)
1808 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1810 return PLAYER_ERROR_NONE;
1813 int legacy_player_set_streaming_user_agent(player_h player, const char *user_agent, int size)
1815 player_s *handle = (player_s *)player;
1816 int ret = MM_ERROR_NONE;
1817 PLAYER_INSTANCE_CHECK(player);
1818 PLAYER_NULL_ARG_CHECK(user_agent);
1819 PLAYER_CHECK_CONDITION(size >= 0, PLAYER_ERROR_INVALID_PARAMETER, "PLAYER_ERROR_INVALID_PARAMETER");
1820 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
1822 ret = mm_player_set_attribute(handle->mm_handle, NULL, MM_PLAYER_STREAMING_USER_AGENT, user_agent, size, (char *)NULL);
1823 if (ret != MM_ERROR_NONE)
1824 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1826 return PLAYER_ERROR_NONE;
1829 int legacy_player_get_streaming_download_progress(player_h player, int *start_pos, int *end_pos)
1831 player_s *handle = (player_s *)player;
1832 int ret = MM_ERROR_NONE;
1833 PLAYER_INSTANCE_CHECK(player);
1834 PLAYER_NULL_ARG_CHECK(start_pos && end_pos);
1835 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
1836 LOGE("invalid state error, current state - %d", handle->state);
1837 return PLAYER_ERROR_INVALID_STATE;
1840 ret = mm_player_get_buffer_position(handle->mm_handle, start_pos, end_pos);
1841 if (ret != MM_ERROR_NONE)
1842 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1844 return PLAYER_ERROR_NONE;
1847 int legacy_player_set_completed_cb(player_h player, player_completed_cb callback, void *user_data)
1849 return __set_callback(MUSE_PLAYER_EVENT_TYPE_COMPLETE, player, callback, user_data);
1852 int legacy_player_unset_completed_cb(player_h player)
1854 return __unset_callback(MUSE_PLAYER_EVENT_TYPE_COMPLETE, player);
1857 #ifdef TIZEN_FEATURE_EVAS_RENDERER
1858 int legacy_player_set_retrieve_buffer_cb(player_h player, player_retrieve_buffer_cb callback, void *user_data)
1860 return __set_callback(MUSE_PLAYER_EVENT_TYPE_RETURN_BUFFER, player, callback, user_data);
1863 int legacy_player_unset_retrieve_buffer_cb(player_h player)
1865 return __unset_callback(MUSE_PLAYER_EVENT_TYPE_RETURN_BUFFER, player);
1869 int legacy_player_set_interrupted_cb(player_h player, player_interrupted_cb callback, void *user_data)
1871 return __set_callback(MUSE_PLAYER_EVENT_TYPE_INTERRUPT, player, callback, user_data);
1874 int legacy_player_unset_interrupted_cb(player_h player)
1876 return __unset_callback(MUSE_PLAYER_EVENT_TYPE_INTERRUPT, player);
1879 int legacy_player_set_error_cb(player_h player, player_error_cb callback, void *user_data)
1881 return __set_callback(MUSE_PLAYER_EVENT_TYPE_ERROR, player, callback, user_data);
1884 int legacy_player_unset_error_cb(player_h player)
1886 return __unset_callback(MUSE_PLAYER_EVENT_TYPE_ERROR, player);
1889 int legacy_player_set_buffering_cb(player_h player, player_buffering_cb callback, void *user_data)
1891 return __set_callback(MUSE_PLAYER_EVENT_TYPE_BUFFERING, player, callback, user_data);
1894 int legacy_player_unset_buffering_cb(player_h player)
1896 return __unset_callback(MUSE_PLAYER_EVENT_TYPE_BUFFERING, player);
1899 int legacy_player_set_subtitle_updated_cb(player_h player, player_subtitle_updated_cb callback, void *user_data)
1901 return __set_callback(MUSE_PLAYER_EVENT_TYPE_SUBTITLE, player, callback, user_data);
1904 int legacy_player_unset_subtitle_updated_cb(player_h player)
1906 return __unset_callback(MUSE_PLAYER_EVENT_TYPE_SUBTITLE, player);
1909 int legacy_player_release_video_stream_bo(player_h player, void *bo)
1911 player_s *handle = (player_s *)player;
1912 PLAYER_INSTANCE_CHECK(player);
1914 LOGD("ENTER %p %p", player, bo);
1916 mm_player_release_video_stream_bo(handle->mm_handle, bo);
1920 return PLAYER_ERROR_NONE;
1923 int legacy_player_set_media_packet_video_frame_decoded_cb(player_h player, legacy_player_media_packet_video_decoded_cb callback, void *user_data)
1925 player_s *handle = (player_s *)player;
1926 int ret = MM_ERROR_NONE;
1927 PLAYER_INSTANCE_CHECK(player);
1928 PLAYER_NULL_ARG_CHECK(callback);
1929 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
1931 ret = mm_player_set_video_stream_callback(handle->mm_handle, (mm_player_video_stream_callback)callback, user_data);
1932 if (ret != MM_ERROR_NONE)
1933 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1935 return PLAYER_ERROR_NONE;
1938 static bool __video_stream_changed_callback(void *user_data)
1940 player_s *handle = (player_s *)user_data;
1941 int ret = MM_ERROR_NONE;
1942 muse_player_event_e event_type = MUSE_PLAYER_EVENT_TYPE_VIDEO_STREAM_CHANGED;
1944 LOGE("[%s] event type %d", __FUNCTION__, event_type);
1946 if (handle->user_cb[event_type]) {
1947 int width = 0, height = 0, fps = 0, bit_rate = 0;
1948 ret = mm_player_get_attribute(handle->mm_handle, NULL,
1949 MM_PLAYER_VIDEO_WIDTH, &width,
1950 MM_PLAYER_VIDEO_HEIGHT, &height,
1951 "content_video_fps", &fps,
1952 "content_video_bitrate", &bit_rate, (char *)NULL);
1954 if (ret != MM_ERROR_NONE) {
1955 LOGE("[%s] get attr is failed", __FUNCTION__);
1958 ((player_video_stream_changed_cb)handle->user_cb[event_type])(width, height, fps, bit_rate, handle->user_data[event_type]);
1962 LOGE("[%s] video stream changed cb was not set.", __FUNCTION__);
1966 int legacy_player_set_video_stream_changed_cb(player_h player, player_video_stream_changed_cb callback, void *user_data)
1968 player_s *handle = (player_s *)player;
1969 int ret = MM_ERROR_NONE;
1970 PLAYER_INSTANCE_CHECK(player);
1971 PLAYER_NULL_ARG_CHECK(callback);
1972 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
1974 ret = mm_player_set_video_stream_changed_callback(handle->mm_handle, (mm_player_stream_changed_callback)__video_stream_changed_callback, (void *)handle);
1975 if (ret != MM_ERROR_NONE)
1976 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1978 return __set_callback(MUSE_PLAYER_EVENT_TYPE_VIDEO_STREAM_CHANGED, player, callback, user_data);
1981 int legacy_player_unset_video_stream_changed_cb(player_h player)
1983 PLAYER_INSTANCE_CHECK(player);
1985 __unset_callback(MUSE_PLAYER_EVENT_TYPE_VIDEO_STREAM_CHANGED, player);
1987 return PLAYER_ERROR_NONE;
1990 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)
1992 player_s *handle = (player_s *)user_data;
1993 muse_player_event_e event_type;
1995 if (type == PLAYER_STREAM_TYPE_AUDIO)
1996 event_type = MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_AUDIO_BUFFER_STATUS;
1997 else if (type == PLAYER_STREAM_TYPE_VIDEO)
1998 event_type = MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_VIDEO_BUFFER_STATUS;
2002 LOGE("[%s] event type %d", __FUNCTION__, event_type);
2004 if (handle->user_cb[event_type]) {
2005 ((player_media_stream_buffer_status_cb)handle->user_cb[event_type])(status, handle->user_data[event_type]);
2007 LOGE("[%s][type:%d] buffer status cb was not set.", __FUNCTION__, type);
2014 static bool __media_stream_seek_data_callback(player_stream_type_e type, unsigned long long offset, void *user_data)
2016 player_s *handle = (player_s *)user_data;
2017 muse_player_event_e event_type;
2019 if (type == PLAYER_STREAM_TYPE_AUDIO)
2020 event_type = MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_AUDIO_SEEK;
2021 else if (type == PLAYER_STREAM_TYPE_VIDEO)
2022 event_type = MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_VIDEO_SEEK;
2026 LOGE("[%s] event type %d", __FUNCTION__, event_type);
2028 if (handle->user_cb[event_type]) {
2029 ((player_media_stream_seek_cb)handle->user_cb[event_type])(offset, handle->user_data[event_type]);
2031 LOGE("[%s][type:%d] seek cb was not set.", __FUNCTION__, type);
2038 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)
2040 player_s *handle = (player_s *)player;
2041 int ret = MM_ERROR_NONE;
2042 PLAYER_INSTANCE_CHECK(player);
2043 PLAYER_NULL_ARG_CHECK(callback);
2044 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
2046 /* the type can be expaned with default and text. */
2047 if ((type != PLAYER_STREAM_TYPE_VIDEO) && (type != PLAYER_STREAM_TYPE_AUDIO)) {
2048 LOGE("[%s] PLAYER_ERROR_INVALID_PARAMETER(type : %d)", __FUNCTION__, type);
2049 return PLAYER_ERROR_INVALID_PARAMETER;
2052 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);
2054 if (ret != MM_ERROR_NONE)
2055 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2057 if (type == PLAYER_STREAM_TYPE_VIDEO)
2058 return __set_callback(MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_VIDEO_BUFFER_STATUS, player, callback, user_data);
2060 return __set_callback(MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_AUDIO_BUFFER_STATUS, player, callback, user_data);
2063 int legacy_player_unset_media_stream_buffer_status_cb(player_h player, player_stream_type_e type)
2065 PLAYER_INSTANCE_CHECK(player);
2067 if (type == PLAYER_STREAM_TYPE_VIDEO)
2068 __unset_callback(MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_VIDEO_BUFFER_STATUS, player);
2069 else if (type == PLAYER_STREAM_TYPE_AUDIO)
2070 __unset_callback(MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_AUDIO_BUFFER_STATUS, player);
2072 return PLAYER_ERROR_INVALID_PARAMETER;
2074 return PLAYER_ERROR_NONE;
2077 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)
2079 player_s *handle = (player_s *)player;
2080 int ret = MM_ERROR_NONE;
2081 PLAYER_INSTANCE_CHECK(player);
2082 PLAYER_NULL_ARG_CHECK(callback);
2083 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
2085 /* the type can be expaned with default and text. */
2086 if ((type != PLAYER_STREAM_TYPE_VIDEO) && (type != PLAYER_STREAM_TYPE_AUDIO)) {
2087 LOGE("[%s] PLAYER_ERROR_INVALID_PARAMETER(type : %d)", __FUNCTION__, type);
2088 return PLAYER_ERROR_INVALID_PARAMETER;
2091 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);
2092 if (ret != MM_ERROR_NONE)
2093 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2095 if (type == PLAYER_STREAM_TYPE_VIDEO)
2096 return __set_callback(MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_VIDEO_SEEK, player, callback, user_data);
2098 return __set_callback(MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_AUDIO_SEEK, player, callback, user_data);
2101 int legacy_player_unset_media_stream_seek_cb(player_h player, player_stream_type_e type)
2103 PLAYER_INSTANCE_CHECK(player);
2105 if (type == PLAYER_STREAM_TYPE_VIDEO)
2106 __unset_callback(MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_VIDEO_SEEK, player);
2107 else if (type == PLAYER_STREAM_TYPE_AUDIO)
2108 __unset_callback(MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_AUDIO_SEEK, player);
2110 return PLAYER_ERROR_INVALID_PARAMETER;
2112 return PLAYER_ERROR_NONE;
2115 int legacy_player_push_media_stream(player_h player, media_packet_h packet)
2117 player_s *handle = (player_s *)player;
2118 int ret = MM_ERROR_NONE;
2119 PLAYER_INSTANCE_CHECK(player);
2121 PLAYER_CHECK_CONDITION(handle->error_code == PLAYER_ERROR_NONE, PLAYER_ERROR_NOT_SUPPORTED_FILE, "can't support this format");
2123 ret = mm_player_submit_packet(handle->mm_handle, packet);
2124 if (ret != MM_ERROR_NONE)
2125 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2127 return PLAYER_ERROR_NONE;
2130 int legacy_player_set_media_stream_info(player_h player, player_stream_type_e type, media_format_h format)
2132 player_s *handle = (player_s *)player;
2133 int ret = MM_ERROR_NONE;
2134 PLAYER_INSTANCE_CHECK(player);
2135 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
2137 handle->is_media_stream = true;
2139 if (type == PLAYER_STREAM_TYPE_VIDEO)
2140 ret = mm_player_set_video_info(handle->mm_handle, format);
2141 else if (type == PLAYER_STREAM_TYPE_AUDIO)
2142 ret = mm_player_set_audio_info(handle->mm_handle, format);
2144 return PLAYER_ERROR_INVALID_PARAMETER;
2146 if (ret != MM_ERROR_NONE)
2147 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2149 return PLAYER_ERROR_NONE;
2152 int legacy_player_set_media_stream_buffer_max_size(player_h player, player_stream_type_e type, unsigned long long max_size)
2154 player_s *handle = (player_s *)player;
2155 int ret = MM_ERROR_NONE;
2156 PLAYER_INSTANCE_CHECK(player);
2157 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2158 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
2159 return PLAYER_ERROR_INVALID_STATE;
2162 ret = mm_player_set_media_stream_buffer_max_size(handle->mm_handle, type, max_size);
2163 if (ret != MM_ERROR_NONE)
2164 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2166 return PLAYER_ERROR_NONE;
2169 int legacy_player_get_media_stream_buffer_max_size(player_h player, player_stream_type_e type, unsigned long long *max_size)
2171 player_s *handle = (player_s *)player;
2172 int ret = MM_ERROR_NONE;
2173 unsigned long long _max_size;
2174 PLAYER_INSTANCE_CHECK(player);
2175 PLAYER_NULL_ARG_CHECK(max_size);
2177 ret = mm_player_get_media_stream_buffer_max_size(handle->mm_handle, type, &_max_size);
2178 if (ret != MM_ERROR_NONE)
2179 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2181 *max_size = _max_size;
2182 return PLAYER_ERROR_NONE;
2185 int legacy_player_set_media_stream_buffer_min_threshold(player_h player, player_stream_type_e type, unsigned int percent)
2187 player_s *handle = (player_s *)player;
2188 int ret = MM_ERROR_NONE;
2189 PLAYER_INSTANCE_CHECK(player);
2190 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2191 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
2192 return PLAYER_ERROR_INVALID_STATE;
2195 ret = mm_player_set_media_stream_buffer_min_percent(handle->mm_handle, type, percent);
2196 if (ret != MM_ERROR_NONE)
2197 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2199 return PLAYER_ERROR_NONE;
2202 int legacy_player_get_media_stream_buffer_min_threshold(player_h player, player_stream_type_e type, unsigned int *percent)
2204 player_s *handle = (player_s *)player;
2205 int ret = MM_ERROR_NONE;
2206 unsigned int _value;
2207 PLAYER_INSTANCE_CHECK(player);
2208 PLAYER_NULL_ARG_CHECK(percent);
2210 ret = mm_player_get_media_stream_buffer_min_percent(handle->mm_handle, type, &_value);
2211 if (ret != MM_ERROR_NONE)
2212 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2215 return PLAYER_ERROR_NONE;
2218 int legacy_player_get_track_count(player_h player, player_stream_type_e type, int *count)
2220 player_s *handle = (player_s *)player;
2221 int ret = MM_ERROR_NONE;
2222 MMPlayerTrackType track_type = 0;
2223 PLAYER_INSTANCE_CHECK(player);
2224 PLAYER_NULL_ARG_CHECK(count);
2226 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
2227 LOGE("[%s] PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
2228 return PLAYER_ERROR_INVALID_STATE;
2232 case PLAYER_STREAM_TYPE_AUDIO:
2233 track_type = MM_PLAYER_TRACK_TYPE_AUDIO;
2235 case PLAYER_STREAM_TYPE_TEXT:
2236 track_type = MM_PLAYER_TRACK_TYPE_TEXT;
2239 LOGE("invalid stream type %d", type);
2240 return PLAYER_ERROR_INVALID_PARAMETER;
2243 ret = mm_player_get_track_count(handle->mm_handle, track_type, count);
2244 if (ret != MM_ERROR_NONE)
2245 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2247 return PLAYER_ERROR_NONE;
2250 int legacy_player_get_current_track(player_h player, player_stream_type_e type, int *index)
2252 player_s *handle = (player_s *)player;
2253 int ret = MM_ERROR_NONE;
2254 MMPlayerTrackType track_type = 0;
2255 PLAYER_INSTANCE_CHECK(player);
2256 PLAYER_NULL_ARG_CHECK(index);
2257 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
2258 LOGE("[%s] PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
2259 return PLAYER_ERROR_INVALID_STATE;
2263 case PLAYER_STREAM_TYPE_AUDIO:
2264 track_type = MM_PLAYER_TRACK_TYPE_AUDIO;
2266 case PLAYER_STREAM_TYPE_TEXT:
2267 track_type = MM_PLAYER_TRACK_TYPE_TEXT;
2270 LOGE("invalid stream type %d", type);
2271 return PLAYER_ERROR_INVALID_PARAMETER;
2274 ret = mm_player_get_current_track(handle->mm_handle, track_type, index);
2275 if (ret != MM_ERROR_NONE)
2276 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2278 return PLAYER_ERROR_NONE;
2281 int legacy_player_select_track(player_h player, player_stream_type_e type, int index)
2283 player_s *handle = (player_s *)player;
2284 int ret = MM_ERROR_NONE;
2285 MMPlayerTrackType track_type = 0;
2286 PLAYER_INSTANCE_CHECK(player);
2287 PLAYER_CHECK_CONDITION(index >= 0, PLAYER_ERROR_INVALID_PARAMETER, "PLAYER_ERROR_INVALID_PARAMETER");
2288 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
2289 LOGE("[%s] PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
2290 return PLAYER_ERROR_INVALID_STATE;
2294 case PLAYER_STREAM_TYPE_AUDIO:
2295 track_type = MM_PLAYER_TRACK_TYPE_AUDIO;
2297 case PLAYER_STREAM_TYPE_TEXT:
2298 track_type = MM_PLAYER_TRACK_TYPE_TEXT;
2301 LOGE("invalid stream type %d", type);
2302 return PLAYER_ERROR_INVALID_PARAMETER;
2305 ret = mm_player_select_track(handle->mm_handle, track_type, index);
2306 if (ret != MM_ERROR_NONE)
2307 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2309 return PLAYER_ERROR_NONE;
2312 int legacy_player_get_track_language_code(player_h player, player_stream_type_e type, int index, char **code, int *len)
2314 player_s *handle = (player_s *)player;
2315 int ret = MM_ERROR_NONE;
2316 MMPlayerTrackType track_type = 0;
2317 PLAYER_INSTANCE_CHECK(player);
2318 PLAYER_NULL_ARG_CHECK(code);
2319 PLAYER_NULL_ARG_CHECK(len);
2320 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
2321 LOGE("[%s] PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
2322 return PLAYER_ERROR_INVALID_STATE;
2326 case PLAYER_STREAM_TYPE_AUDIO:
2327 track_type = MM_PLAYER_TRACK_TYPE_AUDIO;
2329 case PLAYER_STREAM_TYPE_VIDEO:
2330 track_type = MM_PLAYER_TRACK_TYPE_VIDEO;
2332 case PLAYER_STREAM_TYPE_TEXT:
2333 track_type = MM_PLAYER_TRACK_TYPE_TEXT;
2336 LOGE("invalid stream type %d", type);
2337 return PLAYER_ERROR_INVALID_PARAMETER;
2341 ret = mm_player_get_track_language_code(handle->mm_handle, track_type, index, code);
2342 if (ret != MM_ERROR_NONE)
2343 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2345 LOGD("idx %d, lang code %s", index, *code);
2346 *len = strlen(*code);
2347 return PLAYER_ERROR_NONE;
2350 int legacy_player_set_video_roi_area(player_h player, double scale_x,
2351 double scale_y, double scale_width, double scale_heights)
2353 player_s *handle = (player_s *)player;
2354 int ret = MM_ERROR_NONE;
2355 PLAYER_INSTANCE_CHECK(player);
2359 if (handle->display_type != PLAYER_DISPLAY_TYPE_OVERLAY) {
2360 LOGE("not supportable display type %d", handle->display_type);
2361 return PLAYER_ERROR_INVALID_OPERATION;
2364 ret = mm_player_set_video_roi_area(handle->mm_handle, scale_x, scale_y, scale_width, scale_heights);
2365 if (ret != PLAYER_ERROR_NONE)
2366 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2368 return PLAYER_ERROR_NONE;
2371 int legacy_player_get_video_roi_area(player_h player, double *scale_x,
2372 double *scale_y, double *scale_width, double *scale_height)
2374 player_s *handle = (player_s *)player;
2375 int ret = MM_ERROR_NONE;
2376 PLAYER_INSTANCE_CHECK(player);
2377 PLAYER_NULL_ARG_CHECK(scale_x);
2378 PLAYER_NULL_ARG_CHECK(scale_y);
2379 PLAYER_NULL_ARG_CHECK(scale_width);
2380 PLAYER_NULL_ARG_CHECK(scale_height);
2384 ret = mm_player_get_video_roi_area(handle->mm_handle, scale_x, scale_y, scale_width, scale_height);
2385 if (ret != PLAYER_ERROR_NONE)
2386 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2388 return PLAYER_ERROR_NONE;
2391 int legacy_player_set_roi_area(player_h player, int x, int y, int w, int h)
2393 player_s *handle = (player_s *)player;
2394 int ret = MM_ERROR_NONE;
2395 PLAYER_INSTANCE_CHECK(player);
2400 ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_win_roi_x", x, "display_win_roi_y", y, "display_win_roi_width", w, "display_win_roi_height", h, (char *)NULL);
2401 if (ret != MM_ERROR_NONE)
2402 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2404 return PLAYER_ERROR_NONE;
2407 int legacy_player_set_display(player_h player, player_display_type_e type, unsigned int wl_surface_id)
2409 player_s *handle = (player_s *)player;
2410 int ret = MM_ERROR_NONE;
2411 void *set_handle = NULL;
2413 MMDisplaySurfaceType mmType = __player_convert_display_type(type);
2414 PLAYER_INSTANCE_CHECK(player);
2415 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2416 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
2417 return PLAYER_ERROR_INVALID_STATE;
2420 if (type == PLAYER_DISPLAY_TYPE_NONE) {
2422 handle->display_handle = 0;
2423 handle->display_type = type;
2426 /* get handle from overlay or evas surface */
2427 temp = handle->display_handle;
2428 if (type == PLAYER_DISPLAY_TYPE_OVERLAY) {
2429 LOGI("Wayland overlay surface type");
2430 LOGI("wl_surface_id %d", wl_surface_id);
2431 handle->display_handle = (void *)(uintptr_t)wl_surface_id;
2432 set_handle = &(handle->display_handle);
2433 #ifdef TIZEN_FEATURE_EVAS_RENDERER
2434 } else if (type == PLAYER_DISPLAY_TYPE_EVAS) {
2435 LOGI("Evas surface type");
2436 set_handle = &(handle->display_handle);
2439 LOGE("invalid surface type");
2440 return PLAYER_ERROR_INVALID_PARAMETER;
2444 /* set display handle */
2445 if (handle->display_type == PLAYER_DISPLAY_TYPE_NONE || type == handle->display_type) {
2446 /* first time or same type */
2447 LOGW("first time or same type");
2448 ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_surface_type", mmType, "display_overlay", set_handle, sizeof(wl_surface_id), NULL);
2450 if (ret != MM_ERROR_NONE) {
2451 handle->display_handle = temp;
2452 LOGE("Failed to display surface change: %d", ret);
2454 if (type != PLAYER_DISPLAY_TYPE_NONE) {
2455 handle->display_type = type;
2456 LOGI("video display has been changed- type: %d, addr: %p", handle->display_type, handle->display_handle);
2458 LOGI("NULL surface");
2462 /* changing surface case */
2463 ret = mm_player_change_videosink(handle->mm_handle, mmType, set_handle);
2464 if (ret != MM_ERROR_NONE) {
2465 handle->display_handle = temp;
2466 if (ret == MM_ERROR_NOT_SUPPORT_API) {
2467 LOGE("change video sink is not available.");
2468 ret = PLAYER_ERROR_NONE;
2470 LOGE("Failed to display surface change: %d", ret);
2473 handle->display_type = type;
2474 LOGI("video display has been changed- type: %d, addr: %p", handle->display_type, handle->display_handle);
2478 if (ret != MM_ERROR_NONE) {
2479 handle->display_type = PLAYER_DISPLAY_TYPE_NONE;
2480 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2483 return PLAYER_ERROR_NONE;
2486 int legacy_player_set_sound_stream_info_for_mused(player_h player, char *stream_type, int stream_index)
2488 player_s *handle = (player_s *)player;
2489 int ret = MM_ERROR_NONE;
2490 PLAYER_INSTANCE_CHECK(player);
2491 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
2493 if (stream_type == NULL || stream_index < 0) {
2494 LOGE("invalid parameter %p %d", stream_type, stream_index);
2495 return PLAYER_ERROR_INVALID_PARAMETER;
2498 ret = mm_player_set_sound_stream_info(handle->mm_handle, stream_type, stream_index);
2499 if (ret != MM_ERROR_NONE)
2500 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2502 return PLAYER_ERROR_NONE;
2505 int legacy_player_get_timeout_for_muse(player_h player, int *timeout)
2507 player_s *handle = (player_s *)player;
2508 int ret = MM_ERROR_NONE;
2509 PLAYER_INSTANCE_CHECK(player);
2511 ret = mm_player_get_timeout(handle->mm_handle, timeout);
2512 if (ret != MM_ERROR_NONE)
2513 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2515 return PLAYER_ERROR_NONE;
2518 int legacy_player_get_num_of_video_out_buffers(player_h player, int *num, int *extra_num)
2520 player_s *handle = (player_s *)player;
2521 int ret = MM_ERROR_NONE;
2522 PLAYER_INSTANCE_CHECK(player);
2523 PLAYER_NULL_ARG_CHECK(num);
2524 PLAYER_NULL_ARG_CHECK(extra_num);
2526 ret = mm_player_get_num_of_video_out_buffers(handle->mm_handle, num, extra_num);
2527 if (ret != MM_ERROR_NONE)
2528 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2530 return PLAYER_ERROR_NONE;
2533 int legacy_player_manage_external_storage_state(player_h player, int id, int state)
2535 player_s *handle = (player_s *)player;
2536 int ret = MM_ERROR_NONE;
2537 PLAYER_INSTANCE_CHECK(player);
2539 ret = mm_player_manage_external_storage_state(handle->mm_handle, id, state);
2540 if (ret != MM_ERROR_NONE)
2541 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2543 return PLAYER_ERROR_NONE;
2546 int legacy_player_get_adaptive_variant_info(player_h player, int *num, char **var_info)
2548 int ret = MM_ERROR_NONE;
2549 player_s *handle = (player_s *)player;
2550 PLAYER_INSTANCE_CHECK(player);
2551 PLAYER_NULL_ARG_CHECK(num);
2552 PLAYER_NULL_ARG_CHECK(var_info);
2554 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
2555 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
2556 return PLAYER_ERROR_INVALID_STATE;
2559 ret = mm_player_get_adaptive_variant_info(handle->mm_handle, num, var_info);
2560 if (ret != MM_ERROR_NONE)
2561 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2563 return PLAYER_ERROR_NONE;
2566 int legacy_player_set_max_adaptive_variant_limit(player_h player, int bandwidth, int width, int height)
2568 int ret = MM_ERROR_NONE;
2569 player_s *handle = (player_s *)player;
2570 PLAYER_INSTANCE_CHECK(player);
2572 ret = mm_player_set_max_adaptive_variant_limit(handle->mm_handle, bandwidth, width, height);
2573 if (ret != MM_ERROR_NONE)
2574 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2576 return PLAYER_ERROR_NONE;
2579 int legacy_player_get_max_adaptive_variant_limit(player_h player, int *bandwidth, int *width, int *height)
2581 player_s *handle = (player_s *)player;
2582 int ret = MM_ERROR_NONE;
2583 PLAYER_INSTANCE_CHECK(player);
2584 PLAYER_NULL_ARG_CHECK(bandwidth);
2585 PLAYER_NULL_ARG_CHECK(width);
2586 PLAYER_NULL_ARG_CHECK(height);
2588 ret = mm_player_get_max_adaptive_variant_limit(handle->mm_handle, bandwidth, width, height);
2589 if (ret != MM_ERROR_NONE)
2590 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2592 return PLAYER_ERROR_NONE;
2595 int legacy_player_set_audio_only(player_h player, bool audio_only)
2597 player_s *handle = (player_s *)player;
2598 int ret = MM_ERROR_NONE;
2599 PLAYER_INSTANCE_CHECK(player);
2601 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
2602 LOGE("[%s] PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
2603 return PLAYER_ERROR_INVALID_STATE;
2606 ret = mm_player_set_audio_only(handle->mm_handle, audio_only);
2607 if (ret != MM_ERROR_NONE)
2608 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2610 return PLAYER_ERROR_NONE;
2613 int legacy_player_is_audio_only(player_h player, bool *paudio_only)
2615 player_s *handle = (player_s *)player;
2616 int ret = MM_ERROR_NONE;
2617 bool audio_only = false;
2618 PLAYER_INSTANCE_CHECK(player);
2619 PLAYER_NULL_ARG_CHECK(paudio_only);
2621 ret = mm_player_get_audio_only(handle->mm_handle, &audio_only);
2622 if (ret != MM_ERROR_NONE)
2623 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2625 *paudio_only = audio_only;
2626 return PLAYER_ERROR_NONE;
2629 int legacy_player_set_streaming_buffering_time(player_h player, int buffer_ms, int rebuffer_ms)
2631 player_s *handle = (player_s *)player;
2632 int ret = MM_ERROR_NONE;
2633 PLAYER_INSTANCE_CHECK(player);
2634 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
2636 ret = mm_player_set_streaming_buffering_time(handle->mm_handle, buffer_ms, rebuffer_ms);
2637 if (ret != MM_ERROR_NONE)
2638 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2640 return PLAYER_ERROR_NONE;
2643 int legacy_player_get_streaming_buffering_time(player_h player, int *buffer_ms, int *rebuffer_ms)
2645 player_s *handle = (player_s *)player;
2646 int ret = MM_ERROR_NONE;
2647 PLAYER_INSTANCE_CHECK(player);
2648 PLAYER_NULL_ARG_CHECK(buffer_ms);
2649 PLAYER_NULL_ARG_CHECK(rebuffer_ms);
2651 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2652 LOGE("[%s] PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
2653 return PLAYER_ERROR_INVALID_STATE;
2656 ret = mm_player_get_streaming_buffering_time(handle->mm_handle, buffer_ms, rebuffer_ms);
2657 if (ret != MM_ERROR_NONE)
2658 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2660 return PLAYER_ERROR_NONE;
2663 int legacy_player_360_is_content_spherical(player_h player, bool *is_spherical)
2665 player_s *handle = (player_s *)player;
2666 int ret = MM_ERROR_NONE;
2667 PLAYER_INSTANCE_CHECK(player);
2668 PLAYER_NULL_ARG_CHECK(is_spherical);
2670 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
2671 LOGE("PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", PLAYER_ERROR_INVALID_STATE, handle->state);
2672 return PLAYER_ERROR_INVALID_STATE;
2675 ret = mm_player_360_is_content_spherical(handle->mm_handle, is_spherical);
2676 if (ret != MM_ERROR_NONE)
2677 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2679 return PLAYER_ERROR_NONE;
2682 int legacy_player_360_set_enabled(player_h player, bool enabled)
2684 player_s *handle = (player_s *)player;
2685 int ret = MM_ERROR_NONE;
2686 PLAYER_INSTANCE_CHECK(player);
2688 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2689 LOGE("PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", PLAYER_ERROR_INVALID_STATE, handle->state);
2690 return PLAYER_ERROR_INVALID_STATE;
2693 ret = mm_player_360_set_enabled(handle->mm_handle, enabled);
2694 if (ret != MM_ERROR_NONE)
2695 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2697 return PLAYER_ERROR_NONE;
2700 int legacy_player_360_is_enabled(player_h player, bool *enabled)
2702 player_s *handle = (player_s *)player;
2703 int ret = MM_ERROR_NONE;
2704 PLAYER_INSTANCE_CHECK(player);
2705 PLAYER_NULL_ARG_CHECK(enabled);
2706 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2707 LOGE("PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", PLAYER_ERROR_INVALID_STATE, handle->state);
2708 return PLAYER_ERROR_INVALID_STATE;
2711 ret = mm_player_360_is_enabled(handle->mm_handle, enabled);
2712 if (ret != MM_ERROR_NONE)
2713 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2715 return PLAYER_ERROR_NONE;
2718 int legacy_player_360_set_direction_of_view(player_h player, float yaw, float pitch)
2720 player_s *handle = (player_s *)player;
2721 int ret = MM_ERROR_NONE;
2722 PLAYER_INSTANCE_CHECK(player);
2724 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2725 LOGE("PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", PLAYER_ERROR_INVALID_STATE, handle->state);
2726 return PLAYER_ERROR_INVALID_STATE;
2729 ret = mm_player_360_set_direction_of_view(handle->mm_handle, yaw, pitch);
2730 if (ret != MM_ERROR_NONE)
2731 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2733 return PLAYER_ERROR_NONE;
2736 int legacy_player_360_get_direction_of_view(player_h player, float *yaw, float *pitch)
2738 player_s *handle = (player_s *)player;
2739 int ret = MM_ERROR_NONE;
2740 PLAYER_INSTANCE_CHECK(player);
2741 PLAYER_NULL_ARG_CHECK(yaw);
2742 PLAYER_NULL_ARG_CHECK(pitch);
2744 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2745 LOGE("PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", PLAYER_ERROR_INVALID_STATE, handle->state);
2746 return PLAYER_ERROR_INVALID_STATE;
2749 ret = mm_player_360_get_direction_of_view(handle->mm_handle, yaw, pitch);
2750 if (ret != MM_ERROR_NONE)
2751 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2753 return PLAYER_ERROR_NONE;
2756 int legacy_player_360_set_zoom(player_h player, float level)
2758 player_s *handle = (player_s *)player;
2759 int ret = MM_ERROR_NONE;
2760 PLAYER_INSTANCE_CHECK(player);
2762 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2763 LOGE("PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", PLAYER_ERROR_INVALID_STATE, handle->state);
2764 return PLAYER_ERROR_INVALID_STATE;
2767 ret = mm_player_360_set_zoom(handle->mm_handle, level);
2768 if (ret != MM_ERROR_NONE)
2769 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2771 return PLAYER_ERROR_NONE;
2774 int legacy_player_360_get_zoom(player_h player, float *level)
2776 player_s *handle = (player_s *)player;
2777 int ret = MM_ERROR_NONE;
2778 PLAYER_INSTANCE_CHECK(player);
2780 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2781 LOGE("PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", PLAYER_ERROR_INVALID_STATE, handle->state);
2782 return PLAYER_ERROR_INVALID_STATE;
2785 ret = mm_player_360_get_zoom(handle->mm_handle, level);
2786 if (ret != MM_ERROR_NONE)
2787 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2789 return PLAYER_ERROR_NONE;
2792 int legacy_player_360_set_field_of_view(player_h player, int horizontal_degrees, int vertical_degrees)
2794 player_s *handle = (player_s *)player;
2795 int ret = MM_ERROR_NONE;
2796 PLAYER_INSTANCE_CHECK(player);
2798 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2799 LOGE("PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", PLAYER_ERROR_INVALID_STATE, handle->state);
2800 return PLAYER_ERROR_INVALID_STATE;
2803 ret = mm_player_360_set_field_of_view(handle->mm_handle, horizontal_degrees, vertical_degrees);
2804 if (ret != MM_ERROR_NONE)
2805 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2807 return PLAYER_ERROR_NONE;
2810 int legacy_player_360_get_field_of_view(player_h player, int *horizontal_degrees, int *vertical_degrees)
2812 player_s *handle = (player_s *)player;
2813 int ret = MM_ERROR_NONE;
2814 PLAYER_INSTANCE_CHECK(player);
2815 PLAYER_NULL_ARG_CHECK(horizontal_degrees);
2816 PLAYER_NULL_ARG_CHECK(vertical_degrees);
2818 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2819 LOGE("PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", PLAYER_ERROR_INVALID_STATE, handle->state);
2820 return PLAYER_ERROR_INVALID_STATE;
2823 ret = mm_player_360_get_field_of_view(handle->mm_handle, horizontal_degrees, vertical_degrees);
2824 if (ret != MM_ERROR_NONE)
2825 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2827 return PLAYER_ERROR_NONE;
2830 int legacy_player_set_replaygain_enabled(player_h player, bool enabled)
2832 player_s *handle = (player_s *)player;
2833 int ret = MM_ERROR_NONE;
2834 PLAYER_INSTANCE_CHECK(player);
2836 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2837 LOGE("PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", PLAYER_ERROR_INVALID_STATE, handle->state);
2838 return PLAYER_ERROR_INVALID_STATE;
2841 ret = mm_player_set_replaygain_enabled(handle->mm_handle, enabled);
2842 if (ret != MM_ERROR_NONE)
2843 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2845 return PLAYER_ERROR_NONE;
2848 int legacy_player_is_replaygain_enabled(player_h player, bool *enabled)
2850 player_s *handle = (player_s *)player;
2851 int ret = MM_ERROR_NONE;
2853 PLAYER_INSTANCE_CHECK(player);
2854 PLAYER_NULL_ARG_CHECK(enabled);
2856 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2857 LOGE("PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", PLAYER_ERROR_INVALID_STATE, handle->state);
2858 return PLAYER_ERROR_INVALID_STATE;
2861 ret = mm_player_is_replaygain_enabled(handle->mm_handle, &_enable);
2862 if (ret != MM_ERROR_NONE)
2863 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2866 return PLAYER_ERROR_NONE;