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("Event type : %d ", 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("Event type : %d ", 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 player_error_e err_code = PLAYER_ERROR_NONE;
414 LOGW("Got message type : 0x%x", message);
416 case MM_MESSAGE_ERROR: /* 0x01 */
417 err_code = __player_convert_error_code(msg->code, (char *)__FUNCTION__);
419 LEGACY_PLAYER_USER_CB_LOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
420 if (PLAYER_ERROR_NOT_SUPPORTED_FILE == err_code && handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
421 LOGW("Failed to pause, so prepare cb will be released soon");
422 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
423 if (handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
424 g_free(handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE]);
425 handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
428 LEGACY_PLAYER_USER_CB_UNLOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
430 case MM_MESSAGE_STATE_CHANGED: /* 0x03 */
431 LOGI("STATE CHANGED INTERNALLY - from : %d, to : %d (CAPI State : %d)", msg->state.previous, msg->state.current, handle->state);
432 if (msg->state.previous == MM_PLAYER_STATE_READY && msg->state.current == MM_PLAYER_STATE_PAUSED) {
433 LEGACY_PLAYER_USER_CB_LOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
434 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
435 /* asyc && prepared cb has been set */
436 LOGI("Prepared! [current state : %d]", handle->state);
437 PLAYER_TRACE_ASYNC_END("MM:PLAYER:PREPARE_ASYNC", *(int *)handle);
438 __ADD_MESSAGE(handle, PLAYER_MESSAGE_PREPARED);
440 LEGACY_PLAYER_USER_CB_UNLOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
443 case MM_MESSAGE_BEGIN_OF_STREAM: /* 0x104 */
444 LOGI("Ready to streaming information (BOS) [current state : %d]", handle->state);
446 case MM_MESSAGE_END_OF_STREAM: /* 0x105 */
447 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_COMPLETE])
448 __ADD_MESSAGE(handle, PLAYER_MESSAGE_EOS);
450 #ifdef TIZEN_FEATURE_EVAS_RENDERER
451 case MM_MESSAGE_GAPLESS_CONSTRUCTION: /* 0x105 */
452 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_RETURN_BUFFER])
453 __ADD_MESSAGE(handle, PLAYER_MESSAGE_GAPLESS_CONSTRUCTION);
456 case MM_MESSAGE_BUFFERING: /* 0x103 */
457 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_BUFFERING])
458 ((player_buffering_cb)handle->user_cb[MUSE_PLAYER_EVENT_TYPE_BUFFERING])(msg->connection.buffering, handle->user_data[MUSE_PLAYER_EVENT_TYPE_BUFFERING]);
460 case MM_MESSAGE_STATE_INTERRUPTED: /* 0x04 */
461 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_INTERRUPT]) {
462 if (msg->union_type == MM_MSG_UNION_STATE) {
463 LOGW("received mm state msg prev:%d, curr:%d", msg->state.previous, msg->state.current);
464 handle->state = __convert_player_state(msg->state.current);
465 LOGW("player state is changed to %d by resource conflict", handle->state);
467 ((player_interrupted_cb)handle->user_cb[MUSE_PLAYER_EVENT_TYPE_INTERRUPT])(handle->user_data[MUSE_PLAYER_EVENT_TYPE_INTERRUPT]);
470 case MM_MESSAGE_CONNECTION_TIMEOUT: /* 0x102 */
471 LOGE("PLAYER_ERROR_CONNECTION_FAILED : CONNECTION_TIMEOUT");
472 err_code = PLAYER_ERROR_CONNECTION_FAILED;
474 case MM_MESSAGE_UPDATE_SUBTITLE: /* 0x109 */
475 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SUBTITLE])
476 ((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]);
478 case MM_MESSAGE_VIDEO_NOT_CAPTURED: /* 0x113 */
479 LOGE("PLAYER_ERROR_VIDEO_CAPTURE_FAILED");
480 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_ERROR])
481 ((player_error_cb)handle->user_cb[MUSE_PLAYER_EVENT_TYPE_ERROR])(PLAYER_ERROR_VIDEO_CAPTURE_FAILED, handle->user_data[MUSE_PLAYER_EVENT_TYPE_ERROR]);
483 case MM_MESSAGE_VIDEO_CAPTURED: /* 0x110 */
485 MMPlayerVideoCapture *capture = (MMPlayerVideoCapture *)msg->data;
487 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_CAPTURE]) {
488 if (!capture || !capture->data) {
489 LOGE("PLAYER_ERROR_VIDEO_CAPTURE_FAILED : Failed to get capture data");
490 err_code = PLAYER_ERROR_VIDEO_CAPTURE_FAILED;
492 LOGI("captured image ori: %d, width: %d, height: %d, size: %d",
493 capture->orientation, capture->width, capture->height, capture->size);
495 /* call application callback */
496 ((player_video_captured_cb)handle->user_cb[MUSE_PLAYER_EVENT_TYPE_CAPTURE])
497 (capture->data, capture->width, capture->height, capture->size, handle->user_data[MUSE_PLAYER_EVENT_TYPE_CAPTURE]);
500 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_CAPTURE] = NULL;
501 handle->user_data[MUSE_PLAYER_EVENT_TYPE_CAPTURE] = NULL;
504 /* capure->data have to be released to avoid mem leak in all cases. */
506 g_free(capture->data);
507 capture->data = NULL;
511 case MM_MESSAGE_FILE_NOT_SUPPORTED: /* 0x10f */
512 LOGE("PLAYER_ERROR_NOT_SUPPORTED_FILE : FILE_NOT_SUPPORTED");
513 err_code = PLAYER_ERROR_NOT_SUPPORTED_FILE;
515 case MM_MESSAGE_FILE_NOT_FOUND: /* 0x110 */
516 LOGE("PLAYER_ERROR_NOT_SUPPORTED_FILE : FILE_NOT_FOUND");
517 err_code = PLAYER_ERROR_NOT_SUPPORTED_FILE;
519 case MM_MESSAGE_SEEK_COMPLETED: /* 0x114 */
520 if (handle->display_type != PLAYER_DISPLAY_TYPE_NONE && handle->state == PLAYER_STATE_READY) {
521 if (handle->is_display_visible) {
522 int ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_visible", 1, (char *)NULL);
523 if (ret != MM_ERROR_NONE)
524 LOGW("Failed to set display_visible '1' (0x%x)", ret);
527 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK]) {
528 __ADD_MESSAGE(handle, PLAYER_MESSAGE_SEEK_DONE);
531 case MM_MESSAGE_PLAY_POSITION:
532 LOGI("MM_MESSAGE_PLAY_POSITION (%"PRId64" ns)", msg->time.elapsed);
533 handle->last_play_position = msg->time.elapsed;
535 case MM_MESSAGE_UNKNOWN: /* 0x00 */
536 case MM_MESSAGE_WARNING: /* 0x02 */
537 case MM_MESSAGE_CONNECTING: /* 0x100 */
538 case MM_MESSAGE_CONNECTED: /* 0x101 */
539 case MM_MESSAGE_BLUETOOTH_ON: /* 0x106 */
540 case MM_MESSAGE_BLUETOOTH_OFF: /* 0x107 */
541 case MM_MESSAGE_RTP_SENDER_REPORT: /* 0x10a */
542 case MM_MESSAGE_RTP_RECEIVER_REPORT: /* 0x10b */
543 case MM_MESSAGE_RTP_SESSION_STATUS: /* 0x10c */
544 case MM_MESSAGE_SENDER_STATE: /* 0x10d */
545 case MM_MESSAGE_RECEIVER_STATE: /* 0x10e */
550 if (err_code != PLAYER_ERROR_NONE && handle->user_cb[MUSE_PLAYER_EVENT_TYPE_ERROR]) {
551 handle->error_code = err_code;
552 __ADD_MESSAGE(handle, PLAYER_MESSAGE_ERROR);
559 static MMDisplaySurfaceType __player_convert_display_type(player_display_type_e type)
562 case PLAYER_DISPLAY_TYPE_OVERLAY:
563 return MM_DISPLAY_SURFACE_OVERLAY;
564 case PLAYER_DISPLAY_TYPE_EVAS: /* fall through ifndef TIZEN_FEATURE_EVAS_RENDERER */
565 #ifdef TIZEN_FEATURE_EVAS_RENDERER
566 return MM_DISPLAY_SURFACE_REMOTE;
568 case PLAYER_DISPLAY_TYPE_NONE: /* fall through */
570 return MM_DISPLAY_SURFACE_NULL;
574 bool _check_enabled_user_cb_lock(int type)
577 case MUSE_PLAYER_EVENT_TYPE_PREPARE: /* fall through */
578 case MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_AUDIO_BUFFER_STATUS_WITH_INFO: /* fall through */
579 case MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_VIDEO_BUFFER_STATUS_WITH_INFO: /* fall through */
587 * Public Implementation
590 int legacy_player_create(player_h *player)
593 int ret = MM_ERROR_NONE;
595 PLAYER_INSTANCE_CHECK(player);
596 PLAYER_TRACE_BEGIN("MM:PLAYER:CREATE");
598 handle = g_try_new0(player_s, 1);
600 LOGE("PLAYER_ERROR_OUT_OF_MEMORY");
601 return PLAYER_ERROR_OUT_OF_MEMORY;
603 ret = mm_player_create(&handle->mm_handle);
604 if (ret != MM_ERROR_NONE) {
605 LOGE("Failed to create player 0x%X", ret);
606 __player_update_state(handle, PLAYER_INTERNAL_STATE_NONE);
609 return __player_convert_error_code(ret, (char *)__FUNCTION__);
612 muse_player_event_e type = MUSE_PLAYER_EVENT_TYPE_PREPARE;
614 *player = (player_h)handle;
615 __player_update_state(handle, PLAYER_INTERNAL_STATE_IDLE);
616 handle->display_type = PLAYER_DISPLAY_TYPE_NONE;
617 handle->is_display_visible = true;
618 handle->is_media_stream = false;
620 for (type = MUSE_PLAYER_EVENT_TYPE_PREPARE; type < MUSE_PLAYER_EVENT_TYPE_NUM; type++) {
621 if (_check_enabled_user_cb_lock(type))
622 g_mutex_init(&handle->user_cb_lock[type]);
625 handle->message_queue = g_queue_new();
626 g_mutex_init(&handle->message_queue_lock);
627 g_cond_init(&handle->message_queue_cond);
628 ret = pthread_create(&handle->message_thread, NULL, (void *)__message_cb_loop, (void *)handle);
630 LOGE("Failed to create message thread 0x%X", ret);
631 return PLAYER_ERROR_OUT_OF_MEMORY;
634 LOGI("new handle : %p", *player);
636 return PLAYER_ERROR_NONE;
639 int legacy_player_destroy(player_h player)
641 player_s *handle = (player_s *)player;
642 int ret = MM_ERROR_NONE;
644 LOGI("<Enter: %p>", player);
645 PLAYER_TRACE_BEGIN("MM:PLAYER:DESTROY");
646 PLAYER_INSTANCE_CHECK(player);
648 handle->is_shutdown = true;
650 __ADD_MESSAGE(handle, PLAYER_MESSAGE_LOOP_EXIT);
652 LEGACY_PLAYER_USER_CB_LOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
653 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
654 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
655 g_free(handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE]);
656 handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
658 LEGACY_PLAYER_USER_CB_UNLOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
660 /* stop the pause state trasition to release prepare thread */
661 if (handle->internal_state == PLAYER_INTERNAL_STATE_PRE_READY)
662 mm_player_abort_pause(handle->mm_handle);
664 __RELEASEIF_PREPARE_THREAD(handle->prepare_async_thread);
665 __RELEASEIF_MESSAGE_THREAD(handle->message_thread);
667 ret = mm_player_destroy(handle->mm_handle);
668 if (ret != MM_ERROR_NONE) {
669 LOGE("Failed to player destroy 0x%X", ret);
670 return PLAYER_ERROR_INVALID_OPERATION;
672 LOGI("Done mm_player_destroy");
674 muse_player_event_e type = MUSE_PLAYER_EVENT_TYPE_PREPARE;
676 __player_update_state(handle, PLAYER_INTERNAL_STATE_NONE);
678 for (type = MUSE_PLAYER_EVENT_TYPE_PREPARE; type < MUSE_PLAYER_EVENT_TYPE_NUM; type++) {
679 if (_check_enabled_user_cb_lock(type))
680 g_mutex_clear(&handle->user_cb_lock[type]);
683 if (handle->message_queue) {
684 g_queue_free(handle->message_queue);
685 handle->message_queue = NULL;
688 g_cond_broadcast(&handle->message_queue_cond);
689 g_mutex_clear(&handle->message_queue_lock);
690 g_cond_clear(&handle->message_queue_cond);
697 return PLAYER_ERROR_NONE;
700 static void *__prepare_async_thread_func(void *data)
702 player_s *handle = data;
703 int ret = MM_ERROR_NONE;
706 ret = mm_player_pause(handle->mm_handle);
707 if (ret != MM_ERROR_NONE) {
708 LOGE("Failed to pause - core fw error(0x%x)", ret);
709 __player_update_state(handle, PLAYER_INTERNAL_STATE_IDLE);
711 if (handle->error_code == PLAYER_ERROR_NONE) {
712 /* if there is no received error msg, it has to be posted here. */
713 MMMessageParamType msg_param;
714 msg_param.code = ret;
715 __msg_callback(MM_MESSAGE_ERROR, (void *)&msg_param, (void *)handle);
718 if (!handle->is_shutdown) {
719 ret = mm_player_unrealize(handle->mm_handle);
720 if (ret != MM_ERROR_NONE)
721 LOGE("Failed to unrealize - 0x%x", ret);
729 int legacy_player_prepare_async(player_h player, player_prepared_cb callback, void *user_data)
731 player_s *handle = (player_s *)player;
732 int ret = MM_ERROR_NONE;
737 PLAYER_INSTANCE_CHECK(player);
738 PLAYER_TRACE_ASYNC_BEGIN("MM:PLAYER:PREPARE_ASYNC", *(int *)handle);
739 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
741 __player_update_state(handle, PLAYER_INTERNAL_STATE_PRE_READY);
742 LEGACY_PLAYER_USER_CB_LOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
744 handle->last_play_position = 0;
745 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
746 LOGE("player is already prepareing");
747 LEGACY_PLAYER_USER_CB_UNLOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
748 __player_update_state(handle, PLAYER_INTERNAL_STATE_IDLE);
749 return PLAYER_ERROR_INVALID_OPERATION;
752 /* LOGI("Event type : %d ", MUSE_PLAYER_EVENT_TYPE_PREPARE); */
753 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE] = callback;
754 handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE] = user_data;
756 LEGACY_PLAYER_USER_CB_UNLOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
758 ret = mm_player_set_message_callback(handle->mm_handle, __msg_callback, (void *)handle);
759 if (ret != MM_ERROR_NONE)
760 LOGW("Failed to set message callback function (0x%x)", ret);
762 if (handle->display_type == PLAYER_DISPLAY_TYPE_NONE) {
763 ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_surface_type", MM_DISPLAY_SURFACE_NULL, (char *)NULL);
764 if (ret != MM_ERROR_NONE)
765 LOGW("Failed to set display surface type 'MM_DISPLAY_SURFACE_NULL' (0x%x)", ret);
768 /* FIXME : new funct path is needed to update video instead of set attr again */
769 ret = mm_player_get_attribute(handle->mm_handle, NULL, "display_visible", &visible, (char *)NULL);
770 if (ret != MM_ERROR_NONE) goto ERROR;
777 ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_visible", value, (char *)NULL);
778 if (ret != MM_ERROR_NONE) goto ERROR;
781 ret = mm_player_realize(handle->mm_handle);
782 if (ret != MM_ERROR_NONE) {
783 LOGE("Failed to realize - 0x%x", ret);
787 ret = pthread_create(&handle->prepare_async_thread, NULL, (void *)__prepare_async_thread_func, (void *)handle);
790 LOGE("Failed to create thread ret = %d", ret);
791 LEGACY_PLAYER_USER_CB_LOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
792 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
793 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
794 /* user_data will be free at player_disp_prepare_async() */
795 handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
797 LEGACY_PLAYER_USER_CB_UNLOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
798 __player_update_state(handle, PLAYER_INTERNAL_STATE_IDLE);
799 return PLAYER_ERROR_OUT_OF_MEMORY;
803 return PLAYER_ERROR_NONE;
806 LOGW("prepare cb is released");
807 LEGACY_PLAYER_USER_CB_LOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
808 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
809 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
810 /* user_data will be free at player_disp_prepare_async() */
811 handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
813 LEGACY_PLAYER_USER_CB_UNLOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
814 __player_update_state(handle, PLAYER_INTERNAL_STATE_IDLE);
816 LOGE("LEAVE 0x%X", ret);
817 return __player_convert_error_code(ret, (char *)__FUNCTION__);
820 int legacy_player_prepare(player_h player)
822 int ret = MM_ERROR_NONE;
824 player_s *handle = (player_s *)player;
827 PLAYER_TRACE_BEGIN("MM:PLAYER:PREPARE");
828 PLAYER_INSTANCE_CHECK(player);
829 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
830 __player_update_state(handle, PLAYER_INTERNAL_STATE_PRE_READY);
832 handle->last_play_position = 0;
833 ret = mm_player_set_message_callback(handle->mm_handle, __msg_callback, (void *)handle);
834 if (ret != MM_ERROR_NONE)
835 LOGW("Failed to set message callback function (0x%x)", ret);
837 if (handle->display_type == PLAYER_DISPLAY_TYPE_NONE) {
838 ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_surface_type", MM_DISPLAY_SURFACE_NULL, (char *)NULL);
839 if (ret != MM_ERROR_NONE)
840 LOGW("Failed to set display surface type 'MM_DISPLAY_SURFACE_NULL' (0x%x)", ret);
842 ret = mm_player_get_attribute(handle->mm_handle, NULL, "display_visible", &visible, (char *)NULL);
843 if (ret != MM_ERROR_NONE) {
844 __player_update_state(handle, PLAYER_INTERNAL_STATE_IDLE);
845 return __player_convert_error_code(ret, (char *)__FUNCTION__);
848 ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_visible", visible, (char *)NULL);
849 if (ret != MM_ERROR_NONE)
850 LOGW("Failed to set display display_visible '%d' (0x%x)", visible, ret);
853 ret = mm_player_realize(handle->mm_handle);
854 if (ret != MM_ERROR_NONE) {
855 LOGE("Failed to realize - 0x%x", ret);
856 __player_update_state(handle, PLAYER_INTERNAL_STATE_IDLE);
857 return __player_convert_error_code(ret, (char *)__FUNCTION__);
860 ret = mm_player_pause(handle->mm_handle);
861 if (ret != MM_ERROR_NONE) {
863 uret = mm_player_unrealize(handle->mm_handle);
864 if (uret != MM_ERROR_NONE)
865 LOGE("Failed to unrealize - 0x%x", uret);
867 LOGE("Failed to pause - 0x%x", ret);
868 __player_update_state(handle, PLAYER_INTERNAL_STATE_IDLE);
869 return __player_convert_error_code(ret, (char *)__FUNCTION__);
872 __player_update_state(handle, PLAYER_INTERNAL_STATE_READY);
876 return PLAYER_ERROR_NONE;
879 int legacy_player_unprepare(player_h player)
881 player_s *handle = (player_s *)player;
882 int ret = MM_ERROR_NONE;
885 PLAYER_TRACE_BEGIN("MM:PLAYER:UNPREPARE");
886 PLAYER_INSTANCE_CHECK(player);
888 handle->is_shutdown = true;
890 /* Initialize the setting regardless of error return */
891 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK]) {
892 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK] = NULL;
893 handle->user_data[MUSE_PLAYER_EVENT_TYPE_SEEK] = NULL;
896 if (!__player_state_validate(handle, PLAYER_STATE_READY) && !handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
897 LOGE("PLAYER_ERROR_INVALID_STATE : current state - %d", handle->state);
898 return PLAYER_ERROR_INVALID_STATE;
901 LEGACY_PLAYER_USER_CB_LOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
902 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
903 LOGW("Need to check. prepare cb have to be reset before");
904 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
905 g_free(handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE]);
906 handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
908 LEGACY_PLAYER_USER_CB_UNLOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
910 /* stop the pause state trasition to release prepare thread */
911 if (handle->internal_state == PLAYER_INTERNAL_STATE_PRE_READY)
912 mm_player_abort_pause(handle->mm_handle);
914 __RELEASEIF_PREPARE_THREAD(handle->prepare_async_thread);
916 ret = mm_player_unrealize(handle->mm_handle);
917 if (ret != MM_ERROR_NONE)
918 return __player_convert_error_code(ret, (char *)__FUNCTION__);
920 __player_update_state(handle, PLAYER_INTERNAL_STATE_IDLE);
921 handle->is_display_visible = true;
925 return PLAYER_ERROR_NONE;
928 int legacy_player_set_uri(player_h player, const char *uri)
930 player_s *handle = (player_s *)player;
931 int ret = MM_ERROR_NONE;
932 PLAYER_INSTANCE_CHECK(player);
933 PLAYER_NULL_ARG_CHECK(uri);
934 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
936 handle->is_media_stream = false;
937 ret = mm_player_set_uri(handle->mm_handle, uri);
938 if (ret != MM_ERROR_NONE)
939 return __player_convert_error_code(ret, (char *)__FUNCTION__);
941 return PLAYER_ERROR_NONE;
944 int legacy_player_set_memory_buffer(player_h player, const void *data, int size)
946 player_s *handle = (player_s *)player;
948 int ret = MM_ERROR_NONE;
949 PLAYER_INSTANCE_CHECK(player);
950 PLAYER_NULL_ARG_CHECK(data);
951 PLAYER_CHECK_CONDITION(size >= 0, PLAYER_ERROR_INVALID_PARAMETER, "PLAYER_ERROR_INVALID_PARAMETER");
952 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
954 handle->is_media_stream = FALSE;
956 snprintf(uri, sizeof(uri), "mem:///ext=%s,size=%d", "", size);
957 ret = mm_player_set_attribute(handle->mm_handle, NULL, MM_PLAYER_CONTENT_URI, uri, strlen(uri), MM_PLAYER_MEMORY_SRC, data, size, (char *)NULL);
958 if (ret != MM_ERROR_NONE)
959 return __player_convert_error_code(ret, (char *)__FUNCTION__);
961 return PLAYER_ERROR_NONE;
964 int legacy_player_get_state(player_h player, player_state_e *state)
966 player_s *handle = (player_s *)player;
967 PLAYER_INSTANCE_CHECK(player);
968 PLAYER_NULL_ARG_CHECK(state);
969 *state = handle->state;
970 return PLAYER_ERROR_NONE;
973 int legacy_player_set_volume(player_h player, float left, float right)
975 player_s *handle = (player_s *)player;
976 MMPlayerVolumeType vol;
977 int ret = MM_ERROR_NONE;
978 PLAYER_INSTANCE_CHECK(player);
979 PLAYER_CHECK_CONDITION(left >= 0 && left <= 1.0, PLAYER_ERROR_INVALID_PARAMETER, "PLAYER_ERROR_INVALID_PARAMETER");
980 PLAYER_CHECK_CONDITION(right >= 0 && right <= 1.0, PLAYER_ERROR_INVALID_PARAMETER, "PLAYER_ERROR_INVALID_PARAMETER");
982 vol.level[MM_VOLUME_CHANNEL_LEFT] = left;
983 vol.level[MM_VOLUME_CHANNEL_RIGHT] = right;
984 ret = mm_player_set_volume(handle->mm_handle, &vol);
985 if (ret != MM_ERROR_NONE)
986 return __player_convert_error_code(ret, (char *)__FUNCTION__);
988 return PLAYER_ERROR_NONE;
991 int legacy_player_get_volume(player_h player, float *left, float *right)
993 player_s *handle = (player_s *)player;
994 MMPlayerVolumeType vol;
995 int ret = MM_ERROR_NONE;
996 PLAYER_INSTANCE_CHECK(player);
997 PLAYER_NULL_ARG_CHECK(left);
998 PLAYER_NULL_ARG_CHECK(right);
1000 ret = mm_player_get_volume(handle->mm_handle, &vol);
1001 if (ret != MM_ERROR_NONE) {
1002 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1005 *left = vol.level[MM_VOLUME_CHANNEL_LEFT];
1006 *right = vol.level[MM_VOLUME_CHANNEL_RIGHT];
1007 return PLAYER_ERROR_NONE;
1010 int legacy_player_set_sound_stream_info(player_h player, sound_stream_info_h stream_info)
1012 player_s *handle = (player_s *)player;
1013 int ret = MM_ERROR_NONE;
1014 bool is_available = false;
1015 PLAYER_INSTANCE_CHECK(player);
1016 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
1018 /* check if stream_info is valid */
1019 ret = sound_manager_is_available_stream_information(stream_info, NATIVE_API_PLAYER, &is_available);
1020 if (ret != MM_ERROR_NONE)
1021 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1024 char *stream_type = NULL;
1025 int stream_index = 0;
1026 ret = sound_manager_get_type_from_stream_information(stream_info, &stream_type);
1027 ret = sound_manager_get_index_from_stream_information(stream_info, &stream_index);
1028 if (ret == SOUND_MANAGER_ERROR_NONE)
1029 ret = mm_player_set_sound_stream_info(handle->mm_handle, stream_type, stream_index);
1031 ret = MM_ERROR_PLAYER_INTERNAL;
1033 ret = MM_ERROR_NOT_SUPPORT_API;
1036 if (ret != MM_ERROR_NONE)
1037 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1039 return PLAYER_ERROR_NONE;
1042 int legacy_player_set_audio_latency_mode(player_h player, audio_latency_mode_e latency_mode)
1044 player_s *handle = (player_s *)player;
1045 int ret = MM_ERROR_NONE;
1046 PLAYER_INSTANCE_CHECK(player);
1048 ret = mm_player_set_attribute(handle->mm_handle, NULL, "sound_latency_mode", latency_mode, (char *)NULL);
1049 if (ret != MM_ERROR_NONE)
1050 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1052 return PLAYER_ERROR_NONE;
1055 int legacy_player_get_audio_latency_mode(player_h player, audio_latency_mode_e *latency_mode)
1057 player_s *handle = (player_s *)player;
1058 int ret = MM_ERROR_NONE;
1059 PLAYER_INSTANCE_CHECK(player);
1060 PLAYER_NULL_ARG_CHECK(latency_mode);
1062 ret = mm_player_get_attribute(handle->mm_handle, NULL, "sound_latency_mode", latency_mode, (char *)NULL);
1063 if (ret != MM_ERROR_NONE)
1064 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1066 return PLAYER_ERROR_NONE;
1069 int legacy_player_start(player_h player)
1071 player_s *handle = (player_s *)player;
1072 int ret = MM_ERROR_NONE;
1075 PLAYER_INSTANCE_CHECK(player);
1077 if (handle->state > PLAYER_STATE_IDLE) {
1078 if (handle->display_type == PLAYER_DISPLAY_TYPE_OVERLAY && handle->is_display_visible) {
1079 ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_visible", 1, (char *)NULL);
1080 if (ret != MM_ERROR_NONE)
1081 LOGW("Failed to set display_visible '1' (0x%x)", ret);
1083 if (handle->internal_state == PLAYER_INTERNAL_STATE_STOPPED) {
1084 ret = mm_player_start(handle->mm_handle);
1085 LOGI("stop -> start() ");
1087 if (handle->state == PLAYER_STATE_READY)
1088 ret = mm_player_start(handle->mm_handle);
1090 ret = mm_player_resume(handle->mm_handle);
1093 LOGE("PLAYER_ERROR_INVALID_STATE : current state - %d", handle->state);
1094 return PLAYER_ERROR_INVALID_STATE;
1097 if (ret != MM_ERROR_NONE)
1098 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1100 __player_update_state(handle, PLAYER_INTERNAL_STATE_PLAYING);
1103 return PLAYER_ERROR_NONE;
1106 int legacy_player_stop(player_h player)
1108 player_s *handle = (player_s *)player;
1109 int ret = MM_ERROR_NONE;
1112 PLAYER_INSTANCE_CHECK(player);
1114 if (handle->state == PLAYER_STATE_PLAYING || handle->state == PLAYER_STATE_PAUSED) {
1115 if (handle->display_type == PLAYER_DISPLAY_TYPE_OVERLAY) {
1116 ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_visible", 0, (char *)NULL);
1117 if (ret != MM_ERROR_NONE)
1118 LOGW("Failed to set display_visible '0' (0x%x)", ret);
1121 ret = mm_player_stop(handle->mm_handle);
1122 if (ret != MM_ERROR_NONE) {
1123 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1126 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK]) {
1127 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK] = NULL;
1128 handle->user_data[MUSE_PLAYER_EVENT_TYPE_SEEK] = NULL;
1131 __player_update_state(handle, PLAYER_INTERNAL_STATE_STOPPED);
1134 return PLAYER_ERROR_NONE;
1137 LOGE("PLAYER_ERROR_INVALID_STATE : current state - %d", handle->state);
1138 return PLAYER_ERROR_INVALID_STATE;
1141 int legacy_player_pause(player_h player)
1143 player_s *handle = (player_s *)player;
1144 int ret = MM_ERROR_NONE;
1147 PLAYER_INSTANCE_CHECK(player);
1148 PLAYER_STATE_CHECK(handle, PLAYER_STATE_PLAYING);
1150 ret = mm_player_pause(handle->mm_handle);
1151 if (ret != MM_ERROR_NONE)
1152 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1154 __player_update_state(handle, PLAYER_INTERNAL_STATE_PAUSED);
1157 return PLAYER_ERROR_NONE;
1160 int legacy_player_set_play_position(player_h player, int64_t nanoseconds, bool accurate, player_seek_completed_cb callback, void *user_data)
1162 player_s *handle = (player_s *)player;
1163 int ret = MM_ERROR_NONE;
1164 int accurated = accurate ? 1 : 0;
1167 PLAYER_INSTANCE_CHECK(player);
1168 PLAYER_CHECK_CONDITION(nanoseconds >= 0, PLAYER_ERROR_INVALID_PARAMETER, "PLAYER_ERROR_INVALID_PARAMETER");
1170 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
1171 LOGE("PLAYER_ERROR_INVALID_STATE : current state - %d", handle->state);
1172 return PLAYER_ERROR_INVALID_STATE;
1175 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK] && !handle->is_media_stream) {
1176 LOGE("previous seeking request is in processing.");
1177 return PLAYER_ERROR_SEEK_FAILED;
1180 LOGI("Event type : %d, pos : %"PRId64, MUSE_PLAYER_EVENT_TYPE_SEEK, nanoseconds);
1181 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK] = callback;
1182 handle->user_data[MUSE_PLAYER_EVENT_TYPE_SEEK] = user_data;
1184 ret = mm_player_set_attribute(handle->mm_handle, NULL, "accurate_seek", accurated, (char *)NULL);
1185 if (ret != MM_ERROR_NONE)
1186 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1188 ret = mm_player_set_position(handle->mm_handle, nanoseconds);
1189 if (ret != MM_ERROR_NONE) {
1190 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK] = NULL;
1191 handle->user_data[MUSE_PLAYER_EVENT_TYPE_SEEK] = NULL;
1192 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1196 return PLAYER_ERROR_NONE;
1199 int legacy_player_get_play_position(player_h player, int64_t *nanoseconds)
1201 player_s *handle = (player_s *)player;
1202 int ret = MM_ERROR_NONE;
1204 PLAYER_INSTANCE_CHECK(player);
1205 PLAYER_NULL_ARG_CHECK(nanoseconds);
1207 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
1208 LOGE("PLAYER_ERROR_INVALID_STATE : current state - %d", handle->state);
1209 return PLAYER_ERROR_INVALID_STATE;
1212 ret = mm_player_get_position(handle->mm_handle, &pos);
1213 if (ret != MM_ERROR_NONE) {
1214 if (ret == MM_ERROR_PLAYER_NOT_INITIALIZED) {
1215 /* During playbak if a interrupt is occurred, the player can be destroyed internally.
1216 libmm-player will post position msg with last playback position before destory pipeline */
1217 if (handle->state == PLAYER_STATE_IDLE) {
1218 if (handle->last_play_position > 0)
1219 *nanoseconds = handle->last_play_position;
1222 LOGD("position %"PRId64, *nanoseconds);
1223 return PLAYER_ERROR_NONE;
1226 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1230 return PLAYER_ERROR_NONE;
1233 int legacy_player_set_mute(player_h player, bool muted)
1235 player_s *handle = (player_s *)player;
1236 int ret = MM_ERROR_NONE;
1237 PLAYER_INSTANCE_CHECK(player);
1239 ret = mm_player_set_mute(handle->mm_handle, muted);
1240 if (ret != MM_ERROR_NONE)
1241 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1243 return PLAYER_ERROR_NONE;
1246 int legacy_player_is_muted(player_h player, bool *muted)
1248 player_s *handle = (player_s *)player;
1250 int ret = MM_ERROR_NONE;
1251 PLAYER_INSTANCE_CHECK(player);
1252 PLAYER_NULL_ARG_CHECK(muted);
1254 ret = mm_player_get_mute(handle->mm_handle, &_mute);
1255 if (ret != MM_ERROR_NONE)
1256 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1258 *muted = (bool)_mute;
1260 return PLAYER_ERROR_NONE;
1263 int legacy_player_set_looping(player_h player, bool looping)
1265 player_s *handle = (player_s *)player;
1266 int ret = MM_ERROR_NONE;
1268 PLAYER_INSTANCE_CHECK(player);
1273 ret = mm_player_set_attribute(handle->mm_handle, NULL, MM_PLAYER_PLAYBACK_COUNT, value, (char *)NULL);
1274 if (ret != MM_ERROR_NONE)
1275 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1277 return PLAYER_ERROR_NONE;
1280 int legacy_player_is_looping(player_h player, bool *looping)
1282 player_s *handle = (player_s *)player;
1283 int ret = MM_ERROR_NONE;
1285 PLAYER_INSTANCE_CHECK(player);
1286 PLAYER_NULL_ARG_CHECK(looping);
1288 ret = mm_player_get_attribute(handle->mm_handle, NULL, MM_PLAYER_PLAYBACK_COUNT, &count, (char *)NULL);
1289 if (ret != MM_ERROR_NONE)
1290 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1292 *looping = (count == -1) ? true : false;
1294 return PLAYER_ERROR_NONE;
1297 int legacy_player_get_duration(player_h player, int64_t *duration)
1299 player_s *handle = (player_s *)player;
1300 int ret = MM_ERROR_NONE;
1301 PLAYER_INSTANCE_CHECK(player);
1302 PLAYER_NULL_ARG_CHECK(duration);
1304 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
1305 LOGE("PLAYER_ERROR_INVALID_STATE : current state - %d", handle->state);
1306 return PLAYER_ERROR_INVALID_STATE;
1309 ret = mm_player_get_duration(handle->mm_handle, duration);
1310 if (ret != MM_ERROR_NONE)
1311 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1313 LOGD("content dur: %"PRId64, *duration);
1314 return PLAYER_ERROR_NONE;
1317 int legacy_player_set_display_mode(player_h player, player_display_mode_e mode)
1319 player_s *handle = (player_s *)player;
1320 int ret = MM_ERROR_NONE;
1322 LOGI("<ENTER: mode:%d>", mode);
1323 PLAYER_INSTANCE_CHECK(player);
1325 ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_method", mode, (char *)NULL);
1326 if (ret != MM_ERROR_NONE)
1327 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1329 return PLAYER_ERROR_NONE;
1332 int legacy_player_get_display_mode(player_h player, player_display_mode_e *mode)
1334 player_s *handle = (player_s *)player;
1335 int ret = MM_ERROR_NONE;
1336 PLAYER_INSTANCE_CHECK(player);
1337 PLAYER_NULL_ARG_CHECK(mode);
1339 ret = mm_player_get_attribute(handle->mm_handle, NULL, "display_method", mode, (char *)NULL);
1340 if (ret != MM_ERROR_NONE)
1341 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1343 return PLAYER_ERROR_NONE;
1346 int legacy_player_set_playback_rate(player_h player, float rate)
1348 player_s *handle = (player_s *)player;
1349 int ret = MM_ERROR_NONE;
1350 LOGI("<ENTER: rate %0.1f>", rate);
1351 PLAYER_INSTANCE_CHECK(player);
1352 PLAYER_CHECK_CONDITION(rate >= -5.0 && rate <= 5.0, PLAYER_ERROR_INVALID_PARAMETER, "PLAYER_ERROR_INVALID_PARAMETER");
1354 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
1355 LOGE("PLAYER_ERROR_INVALID_STATE : current state - %d", handle->state);
1356 return PLAYER_ERROR_INVALID_STATE;
1359 ret = mm_player_set_play_speed(handle->mm_handle, rate, false);
1362 case MM_ERROR_PLAYER_NO_OP:
1363 ret = PLAYER_ERROR_NONE;
1365 case MM_ERROR_NOT_SUPPORT_API:
1366 case MM_ERROR_PLAYER_SEEK:
1367 LOGE("PLAYER_ERROR_INVALID_OPERATION : seek error");
1368 ret = PLAYER_ERROR_INVALID_OPERATION;
1371 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1377 int legacy_player_set_display_rotation(player_h player, player_display_rotation_e rotation)
1379 player_s *handle = (player_s *)player;
1380 int ret = MM_ERROR_NONE;
1381 PLAYER_INSTANCE_CHECK(player);
1383 ret = mm_player_set_attribute(handle->mm_handle, NULL, MM_PLAYER_VIDEO_ROTATION, rotation, (char *)NULL);
1384 if (ret != MM_ERROR_NONE)
1385 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1387 return PLAYER_ERROR_NONE;
1390 int legacy_player_get_display_rotation(player_h player, player_display_rotation_e *rotation)
1392 player_s *handle = (player_s *)player;
1393 int ret = MM_ERROR_NONE;
1394 PLAYER_INSTANCE_CHECK(player);
1395 PLAYER_NULL_ARG_CHECK(rotation);
1397 ret = mm_player_get_attribute(handle->mm_handle, NULL, MM_PLAYER_VIDEO_ROTATION, rotation, (char *)NULL);
1398 if (ret != MM_ERROR_NONE)
1399 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1401 return PLAYER_ERROR_NONE;
1404 int legacy_player_set_display_visible(player_h player, bool visible)
1406 player_s *handle = (player_s *)player;
1407 int ret = MM_ERROR_NONE;
1409 PLAYER_INSTANCE_CHECK(player);
1414 ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_visible", value, (char *)NULL);
1415 if (ret != MM_ERROR_NONE)
1416 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1418 handle->is_display_visible = visible;
1419 return PLAYER_ERROR_NONE;
1422 int legacy_player_is_display_visible(player_h player, bool *visible)
1424 player_s *handle = (player_s *)player;
1425 int ret = MM_ERROR_NONE;
1427 PLAYER_INSTANCE_CHECK(player);
1428 PLAYER_NULL_ARG_CHECK(visible);
1430 ret = mm_player_get_attribute(handle->mm_handle, NULL, "display_visible", &value, (char *)NULL);
1431 if (ret != MM_ERROR_NONE)
1432 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1434 *visible = (value == 0) ? false : true;
1436 return PLAYER_ERROR_NONE;
1439 int legacy_player_get_content_info(player_h player, player_content_info_e key, char **value)
1441 player_s *handle = (player_s *)player;
1442 int ret = MM_ERROR_NONE;
1446 PLAYER_INSTANCE_CHECK(player);
1447 PLAYER_NULL_ARG_CHECK(value);
1449 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
1450 LOGE("PLAYER_ERROR_INVALID_STATE : current state - %d", handle->state);
1451 return PLAYER_ERROR_INVALID_STATE;
1455 case PLAYER_CONTENT_INFO_ALBUM:
1456 attr = MM_PLAYER_TAG_ALBUM;
1458 case PLAYER_CONTENT_INFO_ARTIST:
1459 attr = MM_PLAYER_TAG_ARTIST;
1461 case PLAYER_CONTENT_INFO_AUTHOR:
1462 attr = MM_PLAYER_TAG_AUTHOUR;
1464 case PLAYER_CONTENT_INFO_GENRE:
1465 attr = MM_PLAYER_TAG_GENRE;
1467 case PLAYER_CONTENT_INFO_TITLE:
1468 attr = MM_PLAYER_TAG_TITLE;
1470 case PLAYER_CONTENT_INFO_YEAR:
1471 attr = MM_PLAYER_TAG_DATE;
1477 ret = mm_player_get_attribute(handle->mm_handle, NULL, attr, &val, &val_len, (char *)NULL);
1478 if (ret != MM_ERROR_NONE)
1479 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1483 *value = strndup(val, val_len);
1485 *value = strndup("", 0);
1487 if (*value == NULL) {
1488 LOGE("PLAYER_ERROR_OUT_OF_MEMORY : fail to strdup");
1489 return PLAYER_ERROR_OUT_OF_MEMORY;
1492 return PLAYER_ERROR_NONE;
1495 int legacy_player_get_codec_info(player_h player, char **audio_codec, char **video_codec)
1497 player_s *handle = (player_s *)player;
1498 int ret = MM_ERROR_NONE;
1503 PLAYER_INSTANCE_CHECK(player);
1504 PLAYER_NULL_ARG_CHECK(audio_codec);
1505 PLAYER_NULL_ARG_CHECK(video_codec);
1507 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
1508 LOGE("PLAYER_ERROR_INVALID_STATE : current state - %d", handle->state);
1509 return PLAYER_ERROR_INVALID_STATE;
1512 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);
1513 if (ret != MM_ERROR_NONE)
1514 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1516 *audio_codec = NULL;
1518 *audio_codec = strndup(audio, audio_len);
1520 *audio_codec = strndup("", 0);
1522 *video_codec = NULL;
1524 *video_codec = strndup(video, video_len);
1526 *video_codec = strndup("", 0);
1528 LOGD("codec info: %s, %s", *audio_codec, *video_codec);
1529 return PLAYER_ERROR_NONE;
1532 int legacy_player_get_audio_stream_info(player_h player, int *sample_rate, int *channel, int *bit_rate)
1534 player_s *handle = (player_s *)player;
1535 int ret = MM_ERROR_NONE;
1536 PLAYER_INSTANCE_CHECK(player);
1537 PLAYER_NULL_ARG_CHECK(sample_rate);
1538 PLAYER_NULL_ARG_CHECK(channel);
1539 PLAYER_NULL_ARG_CHECK(bit_rate);
1541 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
1542 LOGE("PLAYER_ERROR_INVALID_STATE : current state - %d", handle->state);
1543 return PLAYER_ERROR_INVALID_STATE;
1545 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);
1546 if (ret != MM_ERROR_NONE)
1547 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1549 return PLAYER_ERROR_NONE;
1552 int legacy_player_get_video_stream_info(player_h player, int *fps, int *bit_rate)
1554 player_s *handle = (player_s *)player;
1555 int ret = MM_ERROR_NONE;
1556 PLAYER_INSTANCE_CHECK(player);
1557 PLAYER_NULL_ARG_CHECK(fps);
1558 PLAYER_NULL_ARG_CHECK(bit_rate);
1560 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
1561 LOGE("PLAYER_ERROR_INVALID_STATE : current state - %d", handle->state);
1562 return PLAYER_ERROR_INVALID_STATE;
1564 ret = mm_player_get_attribute(handle->mm_handle, NULL, "content_video_fps", fps, "content_video_bitrate", bit_rate, (char *)NULL);
1565 if (ret != MM_ERROR_NONE)
1566 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1568 return PLAYER_ERROR_NONE;
1571 int legacy_player_get_video_size(player_h player, int *width, int *height)
1573 player_s *handle = (player_s *)player;
1574 int ret = MM_ERROR_NONE;
1577 PLAYER_INSTANCE_CHECK(player);
1578 PLAYER_NULL_ARG_CHECK(width);
1579 PLAYER_NULL_ARG_CHECK(height);
1580 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
1581 LOGE("PLAYER_ERROR_INVALID_STATE : current state - %d", handle->state);
1582 return PLAYER_ERROR_INVALID_STATE;
1584 ret = mm_player_get_attribute(handle->mm_handle, NULL, MM_PLAYER_VIDEO_WIDTH, &w, MM_PLAYER_VIDEO_HEIGHT, &h, (char *)NULL);
1585 if (ret != MM_ERROR_NONE)
1586 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1590 LOGI("width : %d, height : %d", w, h);
1591 return PLAYER_ERROR_NONE;
1594 int legacy_player_get_album_art(player_h player, void **album_art, int *size)
1596 player_s *handle = (player_s *)player;
1597 int ret = MM_ERROR_NONE;
1598 PLAYER_INSTANCE_CHECK(player);
1599 PLAYER_NULL_ARG_CHECK(size);
1600 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
1601 LOGE("PLAYER_ERROR_INVALID_STATE : current state - %d", handle->state);
1602 return PLAYER_ERROR_INVALID_STATE;
1605 ret = mm_player_get_attribute(handle->mm_handle, NULL, "tag_album_cover", album_art, size, (char *)NULL);
1606 if (ret != MM_ERROR_NONE)
1607 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1609 return PLAYER_ERROR_NONE;
1612 int legacy_player_audio_effect_get_equalizer_bands_count(player_h player, int *count)
1614 player_s *handle = (player_s *)player;
1615 int ret = MM_ERROR_NONE;
1616 PLAYER_INSTANCE_CHECK(player);
1617 PLAYER_NULL_ARG_CHECK(count);
1619 ret = mm_player_audio_effect_custom_get_eq_bands_number(handle->mm_handle, count);
1620 if (ret != MM_ERROR_NONE)
1621 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1623 return PLAYER_ERROR_NONE;
1626 int legacy_player_audio_effect_set_equalizer_all_bands(player_h player, int *band_levels, int length)
1628 player_s *handle = (player_s *)player;
1629 int ret = MM_ERROR_NONE;
1630 PLAYER_INSTANCE_CHECK(player);
1631 PLAYER_NULL_ARG_CHECK(band_levels);
1633 ret = mm_player_audio_effect_custom_set_level_eq_from_list(handle->mm_handle, band_levels, length);
1634 if (ret != MM_ERROR_NONE)
1635 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1637 ret = mm_player_audio_effect_custom_apply(handle->mm_handle);
1638 return (ret == MM_ERROR_NONE) ? PLAYER_ERROR_NONE : __player_convert_error_code(ret, (char *)__FUNCTION__);
1641 int legacy_player_audio_effect_set_equalizer_band_level(player_h player, int index, int level)
1643 player_s *handle = (player_s *)player;
1644 int ret = MM_ERROR_NONE;
1645 PLAYER_INSTANCE_CHECK(player);
1647 ret = mm_player_audio_effect_custom_set_level(handle->mm_handle, MM_AUDIO_EFFECT_CUSTOM_EQ, index, level);
1648 if (ret != MM_ERROR_NONE)
1649 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1651 ret = mm_player_audio_effect_custom_apply(handle->mm_handle);
1652 if (ret != MM_ERROR_NONE)
1653 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1655 return PLAYER_ERROR_NONE;
1658 int legacy_player_audio_effect_get_equalizer_band_level(player_h player, int index, int *level)
1660 player_s *handle = (player_s *)player;
1661 int ret = MM_ERROR_NONE;
1662 PLAYER_INSTANCE_CHECK(player);
1663 PLAYER_NULL_ARG_CHECK(level);
1665 ret = mm_player_audio_effect_custom_get_level(handle->mm_handle, MM_AUDIO_EFFECT_CUSTOM_EQ, index, level);
1666 if (ret != MM_ERROR_NONE)
1667 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1669 return PLAYER_ERROR_NONE;
1672 int legacy_player_audio_effect_get_equalizer_level_range(player_h player, int *min, int *max)
1674 player_s *handle = (player_s *)player;
1675 int ret = MM_ERROR_NONE;
1676 PLAYER_INSTANCE_CHECK(player);
1677 PLAYER_NULL_ARG_CHECK(min);
1678 PLAYER_NULL_ARG_CHECK(max);
1680 ret = mm_player_audio_effect_custom_get_level_range(handle->mm_handle, MM_AUDIO_EFFECT_CUSTOM_EQ, min, max);
1681 if (ret != MM_ERROR_NONE)
1682 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1684 return PLAYER_ERROR_NONE;
1687 int legacy_player_audio_effect_get_equalizer_band_frequency(player_h player, int index, int *frequency)
1689 player_s *handle = (player_s *)player;
1690 int ret = MM_ERROR_NONE;
1691 PLAYER_INSTANCE_CHECK(player);
1692 PLAYER_NULL_ARG_CHECK(frequency);
1694 ret = mm_player_audio_effect_custom_get_eq_bands_freq(handle->mm_handle, index, frequency);
1695 if (ret != MM_ERROR_NONE)
1696 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1698 return PLAYER_ERROR_NONE;
1701 int legacy_player_audio_effect_get_equalizer_band_frequency_range(player_h player, int index, int *range)
1703 player_s *handle = (player_s *)player;
1704 int ret = MM_ERROR_NONE;
1705 PLAYER_INSTANCE_CHECK(player);
1706 PLAYER_NULL_ARG_CHECK(range);
1708 ret = mm_player_audio_effect_custom_get_eq_bands_width(handle->mm_handle, index, range);
1709 if (ret != MM_ERROR_NONE)
1710 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1712 return PLAYER_ERROR_NONE;
1715 int legacy_player_audio_effect_equalizer_clear(player_h player)
1717 player_s *handle = (player_s *)player;
1718 int ret = MM_ERROR_NONE;
1719 PLAYER_INSTANCE_CHECK(player);
1721 ret = mm_player_audio_effect_custom_clear_eq_all(handle->mm_handle);
1722 if (ret != MM_ERROR_NONE)
1723 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1725 ret = mm_player_audio_effect_custom_apply(handle->mm_handle);
1726 if (ret != MM_ERROR_NONE)
1727 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1729 return PLAYER_ERROR_NONE;
1732 int legacy_player_audio_effect_equalizer_is_available(player_h player, bool *available)
1734 player_s *handle = (player_s *)player;
1735 int ret = MM_ERROR_NONE;
1736 PLAYER_INSTANCE_CHECK(player);
1737 PLAYER_NULL_ARG_CHECK(available);
1738 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
1739 LOGE("PLAYER_ERROR_INVALID_STATE : current state - %d", handle->state);
1740 return PLAYER_ERROR_INVALID_STATE;
1743 ret = mm_player_is_supported_custom_effect_type(handle->mm_handle, MM_AUDIO_EFFECT_CUSTOM_EQ);
1744 if (ret != MM_ERROR_NONE)
1749 return PLAYER_ERROR_NONE;
1752 int legacy_player_set_subtitle_path(player_h player, const char *path)
1754 player_s *handle = (player_s *)player;
1755 int ret = MM_ERROR_NONE;
1758 PLAYER_INSTANCE_CHECK(player);
1760 if ((path == NULL) && (handle->state != PLAYER_STATE_IDLE))
1761 return PLAYER_ERROR_INVALID_PARAMETER;
1763 ret = mm_player_set_external_subtitle_path(handle->mm_handle, path);
1764 if (ret != MM_ERROR_NONE)
1765 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1768 return PLAYER_ERROR_NONE;
1771 int legacy_player_set_subtitle_position_offset(player_h player, int millisecond)
1773 /* PLAYER_CHECK_CONDITION(millisecond>=0 ,PLAYER_ERROR_INVALID_PARAMETER ,"PLAYER_ERROR_INVALID_PARAMETER" ); */
1774 player_s *handle = (player_s *)player;
1775 int ret = MM_ERROR_NONE;
1776 PLAYER_INSTANCE_CHECK(player);
1777 if (!__player_state_validate(handle, PLAYER_STATE_PLAYING)) {
1778 LOGE("PLAYER_ERROR_INVALID_STATE : current state - %d", handle->state);
1779 return PLAYER_ERROR_INVALID_STATE;
1782 ret = mm_player_adjust_subtitle_position(handle->mm_handle, MM_PLAYER_POS_FORMAT_TIME, millisecond);
1783 if (ret != MM_ERROR_NONE)
1784 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1786 return PLAYER_ERROR_NONE;
1789 int legacy_player_capture_video(player_h player, player_video_captured_cb callback, void *user_data)
1791 player_s *handle = (player_s *)player;
1792 int ret = MM_ERROR_NONE;
1795 PLAYER_INSTANCE_CHECK(player);
1796 PLAYER_NULL_ARG_CHECK(callback);
1797 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_CAPTURE]) {
1798 LOGE("previous capturing request is in processing.");
1799 return PLAYER_ERROR_VIDEO_CAPTURE_FAILED;
1802 LOGI("Event type : %d ", MUSE_PLAYER_EVENT_TYPE_CAPTURE);
1803 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_CAPTURE] = callback;
1804 handle->user_data[MUSE_PLAYER_EVENT_TYPE_CAPTURE] = user_data;
1806 if (handle->state >= PLAYER_STATE_READY) {
1807 ret = mm_player_do_video_capture(handle->mm_handle);
1808 if (ret == MM_ERROR_PLAYER_NO_OP) {
1809 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_CAPTURE] = NULL;
1810 handle->user_data[MUSE_PLAYER_EVENT_TYPE_CAPTURE] = NULL;
1811 LOGE("PLAYER_ERROR_INVALID_OPERATION : video display must be set : %d", handle->display_type);
1812 return PLAYER_ERROR_INVALID_OPERATION;
1814 if (ret != MM_ERROR_NONE) {
1815 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_CAPTURE] = NULL;
1816 handle->user_data[MUSE_PLAYER_EVENT_TYPE_CAPTURE] = NULL;
1817 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1819 return PLAYER_ERROR_NONE;
1822 LOGE("PLAYER_ERROR_INVALID_STATE : current state - %d", handle->state);
1823 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_CAPTURE] = NULL;
1824 handle->user_data[MUSE_PLAYER_EVENT_TYPE_CAPTURE] = NULL;
1827 return PLAYER_ERROR_INVALID_STATE;
1830 int legacy_player_set_streaming_cookie(player_h player, const char *cookie, int size)
1832 player_s *handle = (player_s *)player;
1833 int ret = MM_ERROR_NONE;
1834 PLAYER_INSTANCE_CHECK(player);
1835 PLAYER_NULL_ARG_CHECK(cookie);
1836 PLAYER_CHECK_CONDITION(size >= 0, PLAYER_ERROR_INVALID_PARAMETER, "PLAYER_ERROR_INVALID_PARAMETER");
1837 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
1839 ret = mm_player_set_attribute(handle->mm_handle, NULL, MM_PLAYER_STREAMING_COOKIE, cookie, size, (char *)NULL);
1840 if (ret != MM_ERROR_NONE)
1841 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1843 return PLAYER_ERROR_NONE;
1846 int legacy_player_set_streaming_user_agent(player_h player, const char *user_agent, int size)
1848 player_s *handle = (player_s *)player;
1849 int ret = MM_ERROR_NONE;
1850 PLAYER_INSTANCE_CHECK(player);
1851 PLAYER_NULL_ARG_CHECK(user_agent);
1852 PLAYER_CHECK_CONDITION(size >= 0, PLAYER_ERROR_INVALID_PARAMETER, "PLAYER_ERROR_INVALID_PARAMETER");
1853 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
1855 ret = mm_player_set_attribute(handle->mm_handle, NULL, MM_PLAYER_STREAMING_USER_AGENT, user_agent, size, (char *)NULL);
1856 if (ret != MM_ERROR_NONE)
1857 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1859 return PLAYER_ERROR_NONE;
1862 int legacy_player_get_streaming_download_progress(player_h player, int *start_pos, int *end_pos)
1864 player_s *handle = (player_s *)player;
1865 int ret = MM_ERROR_NONE;
1866 PLAYER_INSTANCE_CHECK(player);
1867 PLAYER_NULL_ARG_CHECK(start_pos && end_pos);
1868 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
1869 LOGE("invalid state error, current state - %d", handle->state);
1870 return PLAYER_ERROR_INVALID_STATE;
1873 ret = mm_player_get_buffer_position(handle->mm_handle, start_pos, end_pos);
1874 if (ret != MM_ERROR_NONE)
1875 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1877 return PLAYER_ERROR_NONE;
1880 int legacy_player_set_completed_cb(player_h player, player_completed_cb callback, void *user_data)
1882 return __set_callback(MUSE_PLAYER_EVENT_TYPE_COMPLETE, player, callback, user_data);
1885 int legacy_player_unset_completed_cb(player_h player)
1887 return __unset_callback(MUSE_PLAYER_EVENT_TYPE_COMPLETE, player);
1890 #ifdef TIZEN_FEATURE_EVAS_RENDERER
1891 int legacy_player_set_retrieve_buffer_cb(player_h player, player_retrieve_buffer_cb callback, void *user_data)
1893 return __set_callback(MUSE_PLAYER_EVENT_TYPE_RETURN_BUFFER, player, callback, user_data);
1896 int legacy_player_unset_retrieve_buffer_cb(player_h player)
1898 return __unset_callback(MUSE_PLAYER_EVENT_TYPE_RETURN_BUFFER, player);
1902 int legacy_player_set_interrupted_cb(player_h player, player_interrupted_cb callback, void *user_data)
1904 return __set_callback(MUSE_PLAYER_EVENT_TYPE_INTERRUPT, player, callback, user_data);
1907 int legacy_player_unset_interrupted_cb(player_h player)
1909 return __unset_callback(MUSE_PLAYER_EVENT_TYPE_INTERRUPT, player);
1912 int legacy_player_set_error_cb(player_h player, player_error_cb callback, void *user_data)
1914 return __set_callback(MUSE_PLAYER_EVENT_TYPE_ERROR, player, callback, user_data);
1917 int legacy_player_unset_error_cb(player_h player)
1919 return __unset_callback(MUSE_PLAYER_EVENT_TYPE_ERROR, player);
1922 int legacy_player_set_buffering_cb(player_h player, player_buffering_cb callback, void *user_data)
1924 return __set_callback(MUSE_PLAYER_EVENT_TYPE_BUFFERING, player, callback, user_data);
1927 int legacy_player_unset_buffering_cb(player_h player)
1929 return __unset_callback(MUSE_PLAYER_EVENT_TYPE_BUFFERING, player);
1932 int legacy_player_set_subtitle_updated_cb(player_h player, player_subtitle_updated_cb callback, void *user_data)
1934 return __set_callback(MUSE_PLAYER_EVENT_TYPE_SUBTITLE, player, callback, user_data);
1937 int legacy_player_unset_subtitle_updated_cb(player_h player)
1939 return __unset_callback(MUSE_PLAYER_EVENT_TYPE_SUBTITLE, player);
1942 int legacy_player_release_video_stream_bo(player_h player, void *bo)
1944 player_s *handle = (player_s *)player;
1945 PLAYER_INSTANCE_CHECK(player);
1947 LOGD("ENTER %p %p", player, bo);
1949 mm_player_release_video_stream_bo(handle->mm_handle, bo);
1953 return PLAYER_ERROR_NONE;
1956 int legacy_player_set_media_packet_video_frame_decoded_cb(player_h player, legacy_player_media_packet_video_decoded_cb callback, void *user_data)
1958 player_s *handle = (player_s *)player;
1959 int ret = MM_ERROR_NONE;
1960 PLAYER_INSTANCE_CHECK(player);
1961 PLAYER_NULL_ARG_CHECK(callback);
1962 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
1964 ret = mm_player_set_video_stream_callback(handle->mm_handle, (mm_player_video_stream_callback)callback, user_data);
1965 if (ret != MM_ERROR_NONE)
1966 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1968 return PLAYER_ERROR_NONE;
1971 static bool __video_stream_changed_callback(void *user_data)
1973 player_s *handle = (player_s *)user_data;
1974 int ret = MM_ERROR_NONE;
1975 muse_player_event_e event_type = MUSE_PLAYER_EVENT_TYPE_VIDEO_STREAM_CHANGED;
1977 LOGE("event type %d", event_type);
1979 if (handle->user_cb[event_type]) {
1980 int width = 0, height = 0, fps = 0, bit_rate = 0;
1981 ret = mm_player_get_attribute(handle->mm_handle, NULL,
1982 MM_PLAYER_VIDEO_WIDTH, &width,
1983 MM_PLAYER_VIDEO_HEIGHT, &height,
1984 "content_video_fps", &fps,
1985 "content_video_bitrate", &bit_rate, (char *)NULL);
1987 if (ret != MM_ERROR_NONE) {
1988 LOGE("get attr is failed");
1991 ((player_video_stream_changed_cb)handle->user_cb[event_type])(width, height, fps, bit_rate, handle->user_data[event_type]);
1995 LOGE("video stream changed cb was not set.");
1999 int legacy_player_set_video_stream_changed_cb(player_h player, player_video_stream_changed_cb callback, void *user_data)
2001 player_s *handle = (player_s *)player;
2002 int ret = MM_ERROR_NONE;
2003 PLAYER_INSTANCE_CHECK(player);
2004 PLAYER_NULL_ARG_CHECK(callback);
2005 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
2007 ret = mm_player_set_video_stream_changed_callback(handle->mm_handle, (mm_player_stream_changed_callback)__video_stream_changed_callback, (void *)handle);
2008 if (ret != MM_ERROR_NONE)
2009 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2011 return __set_callback(MUSE_PLAYER_EVENT_TYPE_VIDEO_STREAM_CHANGED, player, callback, user_data);
2014 int legacy_player_unset_video_stream_changed_cb(player_h player)
2016 PLAYER_INSTANCE_CHECK(player);
2018 __unset_callback(MUSE_PLAYER_EVENT_TYPE_VIDEO_STREAM_CHANGED, player);
2020 return PLAYER_ERROR_NONE;
2023 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)
2025 player_s *handle = (player_s *)user_data;
2026 muse_player_event_e event_type;
2028 if (type == PLAYER_STREAM_TYPE_AUDIO)
2029 event_type = MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_AUDIO_BUFFER_STATUS;
2030 else if (type == PLAYER_STREAM_TYPE_VIDEO)
2031 event_type = MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_VIDEO_BUFFER_STATUS;
2035 LOGE("event type %d", event_type);
2037 if (handle->user_cb[event_type]) {
2038 ((player_media_stream_buffer_status_cb)handle->user_cb[event_type])(status, handle->user_data[event_type]);
2040 LOGE("[type:%d] buffer status cb was not set.", type);
2047 static bool __media_stream_seek_data_callback(player_stream_type_e type, unsigned long long offset, void *user_data)
2049 player_s *handle = (player_s *)user_data;
2050 muse_player_event_e event_type;
2052 if (type == PLAYER_STREAM_TYPE_AUDIO)
2053 event_type = MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_AUDIO_SEEK;
2054 else if (type == PLAYER_STREAM_TYPE_VIDEO)
2055 event_type = MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_VIDEO_SEEK;
2059 LOGE("event type %d", event_type);
2061 if (handle->user_cb[event_type]) {
2062 ((player_media_stream_seek_cb)handle->user_cb[event_type])(offset, handle->user_data[event_type]);
2064 LOGE("[type:%d] seek cb was not set.", type);
2071 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)
2073 player_s *handle = (player_s *)player;
2074 int ret = MM_ERROR_NONE;
2075 PLAYER_INSTANCE_CHECK(player);
2076 PLAYER_NULL_ARG_CHECK(callback);
2077 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
2079 /* the type can be expaned with default and text. */
2080 if ((type != PLAYER_STREAM_TYPE_VIDEO) && (type != PLAYER_STREAM_TYPE_AUDIO)) {
2081 LOGE("PLAYER_ERROR_INVALID_PARAMETER(type : %d)", type);
2082 return PLAYER_ERROR_INVALID_PARAMETER;
2085 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);
2087 if (ret != MM_ERROR_NONE)
2088 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2090 if (type == PLAYER_STREAM_TYPE_VIDEO)
2091 return __set_callback(MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_VIDEO_BUFFER_STATUS, player, callback, user_data);
2093 return __set_callback(MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_AUDIO_BUFFER_STATUS, player, callback, user_data);
2096 int legacy_player_unset_media_stream_buffer_status_cb(player_h player, player_stream_type_e type)
2098 PLAYER_INSTANCE_CHECK(player);
2100 if (type == PLAYER_STREAM_TYPE_VIDEO)
2101 __unset_callback(MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_VIDEO_BUFFER_STATUS, player);
2102 else if (type == PLAYER_STREAM_TYPE_AUDIO)
2103 __unset_callback(MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_AUDIO_BUFFER_STATUS, player);
2105 return PLAYER_ERROR_INVALID_PARAMETER;
2107 return PLAYER_ERROR_NONE;
2110 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)
2112 player_s *handle = (player_s *)player;
2113 int ret = MM_ERROR_NONE;
2114 PLAYER_INSTANCE_CHECK(player);
2115 PLAYER_NULL_ARG_CHECK(callback);
2116 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
2118 /* the type can be expaned with default and text. */
2119 if ((type != PLAYER_STREAM_TYPE_VIDEO) && (type != PLAYER_STREAM_TYPE_AUDIO)) {
2120 LOGE("PLAYER_ERROR_INVALID_PARAMETER(type : %d)", type);
2121 return PLAYER_ERROR_INVALID_PARAMETER;
2124 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);
2125 if (ret != MM_ERROR_NONE)
2126 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2128 if (type == PLAYER_STREAM_TYPE_VIDEO)
2129 return __set_callback(MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_VIDEO_SEEK, player, callback, user_data);
2131 return __set_callback(MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_AUDIO_SEEK, player, callback, user_data);
2134 int legacy_player_unset_media_stream_seek_cb(player_h player, player_stream_type_e type)
2136 PLAYER_INSTANCE_CHECK(player);
2138 if (type == PLAYER_STREAM_TYPE_VIDEO)
2139 __unset_callback(MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_VIDEO_SEEK, player);
2140 else if (type == PLAYER_STREAM_TYPE_AUDIO)
2141 __unset_callback(MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_AUDIO_SEEK, player);
2143 return PLAYER_ERROR_INVALID_PARAMETER;
2145 return PLAYER_ERROR_NONE;
2148 int legacy_player_push_media_stream(player_h player, media_packet_h packet)
2150 player_s *handle = (player_s *)player;
2151 int ret = MM_ERROR_NONE;
2152 PLAYER_INSTANCE_CHECK(player);
2154 PLAYER_CHECK_CONDITION(handle->error_code == PLAYER_ERROR_NONE, PLAYER_ERROR_NOT_SUPPORTED_FILE, "can't support this format");
2156 ret = mm_player_submit_packet(handle->mm_handle, packet);
2157 if (ret != MM_ERROR_NONE)
2158 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2160 return PLAYER_ERROR_NONE;
2163 int legacy_player_set_media_stream_info(player_h player, player_stream_type_e type, media_format_h format)
2165 player_s *handle = (player_s *)player;
2166 int ret = MM_ERROR_NONE;
2167 PLAYER_INSTANCE_CHECK(player);
2168 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
2170 handle->is_media_stream = true;
2172 if (type == PLAYER_STREAM_TYPE_VIDEO)
2173 ret = mm_player_set_video_info(handle->mm_handle, format);
2174 else if (type == PLAYER_STREAM_TYPE_AUDIO)
2175 ret = mm_player_set_audio_info(handle->mm_handle, format);
2177 return PLAYER_ERROR_INVALID_PARAMETER;
2179 if (ret != MM_ERROR_NONE)
2180 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2182 return PLAYER_ERROR_NONE;
2185 int legacy_player_set_media_stream_buffer_max_size(player_h player, player_stream_type_e type, unsigned long long max_size)
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("PLAYER_ERROR_INVALID_STATE : current state - %d", handle->state);
2192 return PLAYER_ERROR_INVALID_STATE;
2195 ret = mm_player_set_media_stream_buffer_max_size(handle->mm_handle, type, max_size);
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_max_size(player_h player, player_stream_type_e type, unsigned long long *max_size)
2204 player_s *handle = (player_s *)player;
2205 int ret = MM_ERROR_NONE;
2206 unsigned long long _max_size;
2207 PLAYER_INSTANCE_CHECK(player);
2208 PLAYER_NULL_ARG_CHECK(max_size);
2210 ret = mm_player_get_media_stream_buffer_max_size(handle->mm_handle, type, &_max_size);
2211 if (ret != MM_ERROR_NONE)
2212 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2214 *max_size = _max_size;
2215 return PLAYER_ERROR_NONE;
2218 int legacy_player_set_media_stream_buffer_min_threshold(player_h player, player_stream_type_e type, unsigned int percent)
2220 player_s *handle = (player_s *)player;
2221 int ret = MM_ERROR_NONE;
2222 PLAYER_INSTANCE_CHECK(player);
2223 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2224 LOGE("PLAYER_ERROR_INVALID_STATE : current state - %d", handle->state);
2225 return PLAYER_ERROR_INVALID_STATE;
2228 ret = mm_player_set_media_stream_buffer_min_percent(handle->mm_handle, type, percent);
2229 if (ret != MM_ERROR_NONE)
2230 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2232 return PLAYER_ERROR_NONE;
2235 int legacy_player_get_media_stream_buffer_min_threshold(player_h player, player_stream_type_e type, unsigned int *percent)
2237 player_s *handle = (player_s *)player;
2238 int ret = MM_ERROR_NONE;
2239 unsigned int _value;
2240 PLAYER_INSTANCE_CHECK(player);
2241 PLAYER_NULL_ARG_CHECK(percent);
2243 ret = mm_player_get_media_stream_buffer_min_percent(handle->mm_handle, type, &_value);
2244 if (ret != MM_ERROR_NONE)
2245 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2248 return PLAYER_ERROR_NONE;
2251 int legacy_player_get_track_count(player_h player, player_stream_type_e type, int *count)
2253 player_s *handle = (player_s *)player;
2254 int ret = MM_ERROR_NONE;
2255 MMPlayerTrackType track_type = 0;
2256 PLAYER_INSTANCE_CHECK(player);
2257 PLAYER_NULL_ARG_CHECK(count);
2259 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
2260 LOGE("PLAYER_ERROR_INVALID_STATE : current state - %d", handle->state);
2261 return PLAYER_ERROR_INVALID_STATE;
2265 case PLAYER_STREAM_TYPE_AUDIO:
2266 track_type = MM_PLAYER_TRACK_TYPE_AUDIO;
2268 case PLAYER_STREAM_TYPE_TEXT:
2269 track_type = MM_PLAYER_TRACK_TYPE_TEXT;
2272 LOGE("invalid stream type %d", type);
2273 return PLAYER_ERROR_INVALID_PARAMETER;
2276 ret = mm_player_get_track_count(handle->mm_handle, track_type, count);
2277 if (ret != MM_ERROR_NONE)
2278 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2280 return PLAYER_ERROR_NONE;
2283 int legacy_player_get_current_track(player_h player, player_stream_type_e type, int *index)
2285 player_s *handle = (player_s *)player;
2286 int ret = MM_ERROR_NONE;
2287 MMPlayerTrackType track_type = 0;
2288 PLAYER_INSTANCE_CHECK(player);
2289 PLAYER_NULL_ARG_CHECK(index);
2290 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
2291 LOGE("PLAYER_ERROR_INVALID_STATE : current state - %d", handle->state);
2292 return PLAYER_ERROR_INVALID_STATE;
2296 case PLAYER_STREAM_TYPE_AUDIO:
2297 track_type = MM_PLAYER_TRACK_TYPE_AUDIO;
2299 case PLAYER_STREAM_TYPE_TEXT:
2300 track_type = MM_PLAYER_TRACK_TYPE_TEXT;
2303 LOGE("invalid stream type %d", type);
2304 return PLAYER_ERROR_INVALID_PARAMETER;
2307 ret = mm_player_get_current_track(handle->mm_handle, track_type, index);
2308 if (ret != MM_ERROR_NONE)
2309 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2311 return PLAYER_ERROR_NONE;
2314 int legacy_player_select_track(player_h player, player_stream_type_e type, int index)
2316 player_s *handle = (player_s *)player;
2317 int ret = MM_ERROR_NONE;
2318 MMPlayerTrackType track_type = 0;
2321 PLAYER_INSTANCE_CHECK(player);
2322 PLAYER_CHECK_CONDITION(index >= 0, PLAYER_ERROR_INVALID_PARAMETER, "PLAYER_ERROR_INVALID_PARAMETER");
2323 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
2324 LOGE("PLAYER_ERROR_INVALID_STATE : current state - %d", handle->state);
2325 return PLAYER_ERROR_INVALID_STATE;
2329 case PLAYER_STREAM_TYPE_AUDIO:
2330 track_type = MM_PLAYER_TRACK_TYPE_AUDIO;
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;
2340 ret = mm_player_select_track(handle->mm_handle, track_type, index);
2341 if (ret != MM_ERROR_NONE)
2342 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2345 return PLAYER_ERROR_NONE;
2348 int legacy_player_get_track_language_code(player_h player, player_stream_type_e type, int index, char **code, int *len)
2350 player_s *handle = (player_s *)player;
2351 int ret = MM_ERROR_NONE;
2352 MMPlayerTrackType track_type = 0;
2353 PLAYER_INSTANCE_CHECK(player);
2354 PLAYER_NULL_ARG_CHECK(code);
2355 PLAYER_NULL_ARG_CHECK(len);
2356 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
2357 LOGE("PLAYER_ERROR_INVALID_STATE : current state - %d", handle->state);
2358 return PLAYER_ERROR_INVALID_STATE;
2362 case PLAYER_STREAM_TYPE_AUDIO:
2363 track_type = MM_PLAYER_TRACK_TYPE_AUDIO;
2365 case PLAYER_STREAM_TYPE_VIDEO:
2366 track_type = MM_PLAYER_TRACK_TYPE_VIDEO;
2368 case PLAYER_STREAM_TYPE_TEXT:
2369 track_type = MM_PLAYER_TRACK_TYPE_TEXT;
2372 LOGE("invalid stream type %d", type);
2373 return PLAYER_ERROR_INVALID_PARAMETER;
2377 ret = mm_player_get_track_language_code(handle->mm_handle, track_type, index, code);
2378 if (ret != MM_ERROR_NONE)
2379 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2381 LOGD("idx %d, lang code %s", index, *code);
2382 *len = strlen(*code);
2383 return PLAYER_ERROR_NONE;
2386 int legacy_player_set_video_roi_area(player_h player, double scale_x,
2387 double scale_y, double scale_width, double scale_heights)
2389 player_s *handle = (player_s *)player;
2390 int ret = MM_ERROR_NONE;
2391 PLAYER_INSTANCE_CHECK(player);
2395 if (handle->display_type != PLAYER_DISPLAY_TYPE_OVERLAY) {
2396 LOGE("not supportable display type %d", handle->display_type);
2397 return PLAYER_ERROR_INVALID_OPERATION;
2400 ret = mm_player_set_video_roi_area(handle->mm_handle, scale_x, scale_y, scale_width, scale_heights);
2401 if (ret != PLAYER_ERROR_NONE)
2402 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2404 return PLAYER_ERROR_NONE;
2407 int legacy_player_get_video_roi_area(player_h player, double *scale_x,
2408 double *scale_y, double *scale_width, double *scale_height)
2410 player_s *handle = (player_s *)player;
2411 int ret = MM_ERROR_NONE;
2412 PLAYER_INSTANCE_CHECK(player);
2413 PLAYER_NULL_ARG_CHECK(scale_x);
2414 PLAYER_NULL_ARG_CHECK(scale_y);
2415 PLAYER_NULL_ARG_CHECK(scale_width);
2416 PLAYER_NULL_ARG_CHECK(scale_height);
2420 ret = mm_player_get_video_roi_area(handle->mm_handle, scale_x, scale_y, scale_width, scale_height);
2421 if (ret != PLAYER_ERROR_NONE)
2422 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2424 return PLAYER_ERROR_NONE;
2427 int legacy_player_set_roi_area(player_h player, int x, int y, int w, int h)
2429 player_s *handle = (player_s *)player;
2430 int ret = MM_ERROR_NONE;
2431 PLAYER_INSTANCE_CHECK(player);
2436 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);
2437 if (ret != MM_ERROR_NONE)
2438 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2440 return PLAYER_ERROR_NONE;
2443 int legacy_player_set_display(player_h player, player_display_type_e type, unsigned int wl_surface_id)
2445 player_s *handle = (player_s *)player;
2446 int ret = MM_ERROR_NONE;
2447 void *set_handle = NULL;
2449 MMDisplaySurfaceType mmType = __player_convert_display_type(type);
2450 PLAYER_INSTANCE_CHECK(player);
2451 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2452 LOGE("PLAYER_ERROR_INVALID_STATE : current state - %d", handle->state);
2453 return PLAYER_ERROR_INVALID_STATE;
2456 if (type == PLAYER_DISPLAY_TYPE_NONE) {
2458 handle->display_handle = 0;
2459 handle->display_type = type;
2462 /* get handle from overlay or evas surface */
2463 temp = handle->display_handle;
2464 if (type == PLAYER_DISPLAY_TYPE_OVERLAY) {
2465 LOGI("Wayland overlay surface type");
2466 LOGI("wl_surface_id %d", wl_surface_id);
2467 handle->display_handle = (void *)(uintptr_t)wl_surface_id;
2468 set_handle = &(handle->display_handle);
2469 #ifdef TIZEN_FEATURE_EVAS_RENDERER
2470 } else if (type == PLAYER_DISPLAY_TYPE_EVAS) {
2471 LOGI("Evas surface type");
2472 set_handle = &(handle->display_handle);
2475 LOGE("invalid surface type");
2476 return PLAYER_ERROR_INVALID_PARAMETER;
2480 /* set display handle */
2481 if (handle->display_type == PLAYER_DISPLAY_TYPE_NONE || type == handle->display_type) {
2482 /* first time or same type */
2483 LOGW("first time or same type");
2484 ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_surface_type", mmType, "display_overlay", set_handle, sizeof(wl_surface_id), NULL);
2486 if (ret != MM_ERROR_NONE) {
2487 handle->display_handle = temp;
2488 LOGE("Failed to display surface change: %d", ret);
2490 if (type != PLAYER_DISPLAY_TYPE_NONE) {
2491 handle->display_type = type;
2492 LOGI("video display has been changed- type: %d, addr: %p", handle->display_type, handle->display_handle);
2494 LOGI("NULL surface");
2498 /* changing surface case */
2499 ret = mm_player_change_videosink(handle->mm_handle, mmType, set_handle);
2500 if (ret != MM_ERROR_NONE) {
2501 handle->display_handle = temp;
2502 if (ret == MM_ERROR_NOT_SUPPORT_API) {
2503 LOGE("change video sink is not available.");
2504 ret = PLAYER_ERROR_NONE;
2506 LOGE("Failed to display surface change: %d", ret);
2509 handle->display_type = type;
2510 LOGI("video display has been changed- type: %d, addr: %p", handle->display_type, handle->display_handle);
2514 if (ret != MM_ERROR_NONE) {
2515 handle->display_type = PLAYER_DISPLAY_TYPE_NONE;
2516 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2519 return PLAYER_ERROR_NONE;
2522 int legacy_player_set_sound_stream_info_for_mused(player_h player, char *stream_type, int stream_index)
2524 player_s *handle = (player_s *)player;
2525 int ret = MM_ERROR_NONE;
2526 PLAYER_INSTANCE_CHECK(player);
2527 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
2529 if (stream_type == NULL || stream_index < 0) {
2530 LOGE("invalid parameter %p %d", stream_type, stream_index);
2531 return PLAYER_ERROR_INVALID_PARAMETER;
2534 ret = mm_player_set_sound_stream_info(handle->mm_handle, stream_type, stream_index);
2535 if (ret != MM_ERROR_NONE)
2536 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2538 return PLAYER_ERROR_NONE;
2541 int legacy_player_get_timeout_for_muse(player_h player, int *timeout)
2543 player_s *handle = (player_s *)player;
2544 int ret = MM_ERROR_NONE;
2545 PLAYER_INSTANCE_CHECK(player);
2547 ret = mm_player_get_timeout(handle->mm_handle, timeout);
2548 if (ret != MM_ERROR_NONE)
2549 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2551 return PLAYER_ERROR_NONE;
2554 int legacy_player_get_num_of_video_out_buffers(player_h player, int *num, int *extra_num)
2556 player_s *handle = (player_s *)player;
2557 int ret = MM_ERROR_NONE;
2558 PLAYER_INSTANCE_CHECK(player);
2559 PLAYER_NULL_ARG_CHECK(num);
2560 PLAYER_NULL_ARG_CHECK(extra_num);
2562 ret = mm_player_get_num_of_video_out_buffers(handle->mm_handle, num, extra_num);
2563 if (ret != MM_ERROR_NONE)
2564 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2566 return PLAYER_ERROR_NONE;
2569 int legacy_player_manage_external_storage_state(player_h player, int id, int state)
2571 player_s *handle = (player_s *)player;
2572 int ret = MM_ERROR_NONE;
2573 PLAYER_INSTANCE_CHECK(player);
2575 ret = mm_player_manage_external_storage_state(handle->mm_handle, id, state);
2576 if (ret != MM_ERROR_NONE)
2577 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2579 return PLAYER_ERROR_NONE;
2582 int legacy_player_get_adaptive_variant_info(player_h player, int *num, char **var_info)
2584 int ret = MM_ERROR_NONE;
2585 player_s *handle = (player_s *)player;
2586 PLAYER_INSTANCE_CHECK(player);
2587 PLAYER_NULL_ARG_CHECK(num);
2588 PLAYER_NULL_ARG_CHECK(var_info);
2590 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
2591 LOGE("PLAYER_ERROR_INVALID_STATE : current state - %d", handle->state);
2592 return PLAYER_ERROR_INVALID_STATE;
2595 ret = mm_player_get_adaptive_variant_info(handle->mm_handle, num, var_info);
2596 if (ret != MM_ERROR_NONE)
2597 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2599 return PLAYER_ERROR_NONE;
2602 int legacy_player_set_max_adaptive_variant_limit(player_h player, int bandwidth, int width, int height)
2604 int ret = MM_ERROR_NONE;
2605 player_s *handle = (player_s *)player;
2606 PLAYER_INSTANCE_CHECK(player);
2608 ret = mm_player_set_max_adaptive_variant_limit(handle->mm_handle, bandwidth, width, height);
2609 if (ret != MM_ERROR_NONE)
2610 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2612 return PLAYER_ERROR_NONE;
2615 int legacy_player_get_max_adaptive_variant_limit(player_h player, int *bandwidth, int *width, int *height)
2617 player_s *handle = (player_s *)player;
2618 int ret = MM_ERROR_NONE;
2619 PLAYER_INSTANCE_CHECK(player);
2620 PLAYER_NULL_ARG_CHECK(bandwidth);
2621 PLAYER_NULL_ARG_CHECK(width);
2622 PLAYER_NULL_ARG_CHECK(height);
2624 ret = mm_player_get_max_adaptive_variant_limit(handle->mm_handle, bandwidth, width, height);
2625 if (ret != MM_ERROR_NONE)
2626 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2628 return PLAYER_ERROR_NONE;
2631 int legacy_player_set_audio_only(player_h player, bool audio_only)
2633 player_s *handle = (player_s *)player;
2634 int ret = MM_ERROR_NONE;
2635 PLAYER_INSTANCE_CHECK(player);
2637 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
2638 LOGE("PLAYER_ERROR_INVALID_STATE : current state - %d", handle->state);
2639 return PLAYER_ERROR_INVALID_STATE;
2642 ret = mm_player_set_audio_only(handle->mm_handle, audio_only);
2643 if (ret != MM_ERROR_NONE)
2644 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2646 return PLAYER_ERROR_NONE;
2649 int legacy_player_is_audio_only(player_h player, bool *paudio_only)
2651 player_s *handle = (player_s *)player;
2652 int ret = MM_ERROR_NONE;
2653 bool audio_only = false;
2654 PLAYER_INSTANCE_CHECK(player);
2655 PLAYER_NULL_ARG_CHECK(paudio_only);
2657 ret = mm_player_get_audio_only(handle->mm_handle, &audio_only);
2658 if (ret != MM_ERROR_NONE)
2659 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2661 *paudio_only = audio_only;
2662 return PLAYER_ERROR_NONE;
2665 int legacy_player_set_streaming_buffering_time(player_h player, int buffer_ms, int rebuffer_ms)
2667 player_s *handle = (player_s *)player;
2668 int ret = MM_ERROR_NONE;
2669 PLAYER_INSTANCE_CHECK(player);
2670 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
2672 ret = mm_player_set_streaming_buffering_time(handle->mm_handle, buffer_ms, rebuffer_ms);
2673 if (ret != MM_ERROR_NONE)
2674 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2676 return PLAYER_ERROR_NONE;
2679 int legacy_player_get_streaming_buffering_time(player_h player, int *buffer_ms, int *rebuffer_ms)
2681 player_s *handle = (player_s *)player;
2682 int ret = MM_ERROR_NONE;
2683 PLAYER_INSTANCE_CHECK(player);
2684 PLAYER_NULL_ARG_CHECK(buffer_ms);
2685 PLAYER_NULL_ARG_CHECK(rebuffer_ms);
2687 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2688 LOGE("PLAYER_ERROR_INVALID_STATE : current state - %d", handle->state);
2689 return PLAYER_ERROR_INVALID_STATE;
2692 ret = mm_player_get_streaming_buffering_time(handle->mm_handle, buffer_ms, rebuffer_ms);
2693 if (ret != MM_ERROR_NONE)
2694 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2696 return PLAYER_ERROR_NONE;
2699 int legacy_player_360_is_content_spherical(player_h player, bool *is_spherical)
2701 player_s *handle = (player_s *)player;
2702 int ret = MM_ERROR_NONE;
2703 PLAYER_INSTANCE_CHECK(player);
2704 PLAYER_NULL_ARG_CHECK(is_spherical);
2706 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
2707 LOGE("PLAYER_ERROR_INVALID_STATE : current state - %d", handle->state);
2708 return PLAYER_ERROR_INVALID_STATE;
2711 ret = mm_player_360_is_content_spherical(handle->mm_handle, is_spherical);
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_enabled(player_h player, bool enabled)
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 : current state - %d", handle->state);
2726 return PLAYER_ERROR_INVALID_STATE;
2729 ret = mm_player_360_set_enabled(handle->mm_handle, enabled);
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_is_enabled(player_h player, bool *enabled)
2738 player_s *handle = (player_s *)player;
2739 int ret = MM_ERROR_NONE;
2740 PLAYER_INSTANCE_CHECK(player);
2741 PLAYER_NULL_ARG_CHECK(enabled);
2742 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2743 LOGE("PLAYER_ERROR_INVALID_STATE : current state - %d", handle->state);
2744 return PLAYER_ERROR_INVALID_STATE;
2747 ret = mm_player_360_is_enabled(handle->mm_handle, enabled);
2748 if (ret != MM_ERROR_NONE)
2749 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2751 return PLAYER_ERROR_NONE;
2754 int legacy_player_360_set_direction_of_view(player_h player, float yaw, float pitch)
2756 player_s *handle = (player_s *)player;
2757 int ret = MM_ERROR_NONE;
2758 PLAYER_INSTANCE_CHECK(player);
2760 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2761 LOGE("PLAYER_ERROR_INVALID_STATE : current state - %d", handle->state);
2762 return PLAYER_ERROR_INVALID_STATE;
2765 ret = mm_player_360_set_direction_of_view(handle->mm_handle, yaw, pitch);
2766 if (ret != MM_ERROR_NONE)
2767 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2769 return PLAYER_ERROR_NONE;
2772 int legacy_player_360_get_direction_of_view(player_h player, float *yaw, float *pitch)
2774 player_s *handle = (player_s *)player;
2775 int ret = MM_ERROR_NONE;
2776 PLAYER_INSTANCE_CHECK(player);
2777 PLAYER_NULL_ARG_CHECK(yaw);
2778 PLAYER_NULL_ARG_CHECK(pitch);
2780 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2781 LOGE("PLAYER_ERROR_INVALID_STATE : current state - %d", handle->state);
2782 return PLAYER_ERROR_INVALID_STATE;
2785 ret = mm_player_360_get_direction_of_view(handle->mm_handle, yaw, pitch);
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_zoom(player_h player, float level)
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 : current state - %d", handle->state);
2800 return PLAYER_ERROR_INVALID_STATE;
2803 ret = mm_player_360_set_zoom(handle->mm_handle, level);
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_zoom(player_h player, float *level)
2812 player_s *handle = (player_s *)player;
2813 int ret = MM_ERROR_NONE;
2814 PLAYER_INSTANCE_CHECK(player);
2816 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2817 LOGE("PLAYER_ERROR_INVALID_STATE : current state - %d", handle->state);
2818 return PLAYER_ERROR_INVALID_STATE;
2821 ret = mm_player_360_get_zoom(handle->mm_handle, level);
2822 if (ret != MM_ERROR_NONE)
2823 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2825 return PLAYER_ERROR_NONE;
2828 int legacy_player_360_set_field_of_view(player_h player, int horizontal_degrees, int vertical_degrees)
2830 player_s *handle = (player_s *)player;
2831 int ret = MM_ERROR_NONE;
2832 PLAYER_INSTANCE_CHECK(player);
2834 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2835 LOGE("PLAYER_ERROR_INVALID_STATE : current state - %d", handle->state);
2836 return PLAYER_ERROR_INVALID_STATE;
2839 ret = mm_player_360_set_field_of_view(handle->mm_handle, horizontal_degrees, vertical_degrees);
2840 if (ret != MM_ERROR_NONE)
2841 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2843 return PLAYER_ERROR_NONE;
2846 int legacy_player_360_get_field_of_view(player_h player, int *horizontal_degrees, int *vertical_degrees)
2848 player_s *handle = (player_s *)player;
2849 int ret = MM_ERROR_NONE;
2850 PLAYER_INSTANCE_CHECK(player);
2851 PLAYER_NULL_ARG_CHECK(horizontal_degrees);
2852 PLAYER_NULL_ARG_CHECK(vertical_degrees);
2854 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2855 LOGE("PLAYER_ERROR_INVALID_STATE : current state - %d", handle->state);
2856 return PLAYER_ERROR_INVALID_STATE;
2859 ret = mm_player_360_get_field_of_view(handle->mm_handle, horizontal_degrees, vertical_degrees);
2860 if (ret != MM_ERROR_NONE)
2861 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2863 return PLAYER_ERROR_NONE;
2866 int legacy_player_set_replaygain_enabled(player_h player, bool enabled)
2868 player_s *handle = (player_s *)player;
2869 int ret = MM_ERROR_NONE;
2870 PLAYER_INSTANCE_CHECK(player);
2872 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2873 LOGE("PLAYER_ERROR_INVALID_STATE : current state - %d", handle->state);
2874 return PLAYER_ERROR_INVALID_STATE;
2877 ret = mm_player_set_replaygain_enabled(handle->mm_handle, enabled);
2878 if (ret != MM_ERROR_NONE)
2879 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2881 return PLAYER_ERROR_NONE;
2884 int legacy_player_is_replaygain_enabled(player_h player, bool *enabled)
2886 player_s *handle = (player_s *)player;
2887 int ret = MM_ERROR_NONE;
2889 PLAYER_INSTANCE_CHECK(player);
2890 PLAYER_NULL_ARG_CHECK(enabled);
2892 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2893 LOGE("PLAYER_ERROR_INVALID_STATE : current state - %d", handle->state);
2894 return PLAYER_ERROR_INVALID_STATE;
2897 ret = mm_player_is_replaygain_enabled(handle->mm_handle, &_enable);
2898 if (ret != MM_ERROR_NONE)
2899 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2902 return PLAYER_ERROR_NONE;