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)
284 static int __set_callback(muse_player_event_e type, player_h player, void *callback, void *user_data)
286 PLAYER_INSTANCE_CHECK(player);
287 PLAYER_NULL_ARG_CHECK(callback);
289 player_s *handle = (player_s *)player;
290 handle->user_cb[type] = callback;
291 handle->user_data[type] = user_data;
292 LOGI("[%s] Event type : %d ", __FUNCTION__, type);
293 return PLAYER_ERROR_NONE;
296 static int __unset_callback(muse_player_event_e type, player_h player)
298 PLAYER_INSTANCE_CHECK(player);
299 player_s *handle = (player_s *)player;
300 handle->user_cb[type] = NULL;
301 handle->user_data[type] = NULL;
302 LOGI("[%s] Event type : %d ", __FUNCTION__, type);
303 return PLAYER_ERROR_NONE;
306 static void __message_cb_loop(void *data)
309 player_s *handle = (player_s *)data;
311 LOGE("null handle in __message_cb_loop");
315 __GET_MESSAGE(handle);
316 switch (handle->current_message) {
317 case PLAYER_MESSAGE_NONE:
319 LOGW("PLAYER_MESSAGE_NONE");
323 case PLAYER_MESSAGE_PREPARED:
325 LOGW("PLAYER_MESSAGE_PREPARED");
327 LEGACY_PLAYER_USER_CB_LOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
328 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
329 __player_update_state(handle, PLAYER_INTERNAL_STATE_READY);
330 ((player_prepared_cb)handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE])(handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE]);
331 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
332 handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
334 LOGE("null handle in PLAYER_MESSAGE_PREPARED");
336 LEGACY_PLAYER_USER_CB_UNLOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
339 case PLAYER_MESSAGE_ERROR:
341 LOGW("PLAYER_MESSAGE_ERROR");
342 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_ERROR])
343 ((player_error_cb)handle->user_cb[MUSE_PLAYER_EVENT_TYPE_ERROR])(handle->error_code, handle->user_data[MUSE_PLAYER_EVENT_TYPE_ERROR]);
345 LOGE("null handle in PLAYER_MESSAGE_ERROR");
348 case PLAYER_MESSAGE_SEEK_DONE:
350 LOGW("PLAYER_MESSAGE_SEEK_DONE");
351 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK]) {
352 ((player_seek_completed_cb)handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK])(handle->user_data[MUSE_PLAYER_EVENT_TYPE_SEEK]);
353 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK] = NULL;
354 handle->user_data[MUSE_PLAYER_EVENT_TYPE_SEEK] = NULL;
356 LOGE("null handle in PLAYER_MESSAGE_SEEK_DONE");
360 case PLAYER_MESSAGE_EOS:
362 LOGW("PLAYER_MESSAGE_EOS");
363 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_COMPLETE])
364 ((player_completed_cb)handle->user_cb[MUSE_PLAYER_EVENT_TYPE_COMPLETE])(handle->user_data[MUSE_PLAYER_EVENT_TYPE_COMPLETE]);
366 LOGE("null handle in PLAYER_MESSAGE_EOS");
369 #ifdef TIZEN_FEATURE_EVAS_RENDERER
370 case PLAYER_MESSAGE_GAPLESS_CONSTRUCTION:
372 LOGW("PLAYER_MESSAGE_GAPLESS_CONSTRUCTION");
373 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_RETURN_BUFFER]) {
374 ((player_retrieve_buffer_cb)handle->user_cb[MUSE_PLAYER_EVENT_TYPE_RETURN_BUFFER])(handle->user_data[MUSE_PLAYER_EVENT_TYPE_RETURN_BUFFER]);
376 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 int __msg_callback(int message, void *param, void *user_data)
402 player_s *handle = (player_s *)user_data;
403 MMMessageParamType *msg = (MMMessageParamType *)param;
404 LOGW("[%s] Got message type : 0x%x", __FUNCTION__, message);
405 player_error_e err_code = PLAYER_ERROR_NONE;
407 case MM_MESSAGE_ERROR: /* 0x01 */
408 err_code = __player_convert_error_code(msg->code, (char *)__FUNCTION__);
410 LEGACY_PLAYER_USER_CB_LOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
411 if (PLAYER_ERROR_NOT_SUPPORTED_FILE == err_code && handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
412 LOGW("failed to pause, so prepare cb will be released soon");
413 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
414 if (handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
415 g_free(handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE]);
416 handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
419 LEGACY_PLAYER_USER_CB_UNLOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
421 case MM_MESSAGE_STATE_CHANGED: /* 0x03 */
422 LOGI("STATE CHANGED INTERNALLY - from : %d, to : %d (CAPI State : %d)", msg->state.previous, msg->state.current, handle->state);
423 if ((handle->is_progressive_download && msg->state.previous == MM_PLAYER_STATE_NULL && msg->state.current == MM_PLAYER_STATE_READY) ||
424 (msg->state.previous == MM_PLAYER_STATE_READY && msg->state.current == MM_PLAYER_STATE_PAUSED)) {
425 LEGACY_PLAYER_USER_CB_LOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
426 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
427 /* asyc && prepared cb has been set */
428 LOGI("[%s] Prepared! [current state : %d]", __FUNCTION__, handle->state);
429 PLAYER_TRACE_ASYNC_END("MM:PLAYER:PREPARE_ASYNC", *(int *)handle);
430 __ADD_MESSAGE(handle, PLAYER_MESSAGE_PREPARED);
432 LEGACY_PLAYER_USER_CB_UNLOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
435 case MM_MESSAGE_BEGIN_OF_STREAM: /* 0x104 */
436 LOGI("[%s] Ready to streaming information (BOS) [current state : %d]", __FUNCTION__, handle->state);
438 case MM_MESSAGE_END_OF_STREAM: /* 0x105 */
439 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_COMPLETE]) {
440 __ADD_MESSAGE(handle, PLAYER_MESSAGE_EOS);
443 #ifdef TIZEN_FEATURE_EVAS_RENDERER
444 case MM_MESSAGE_GAPLESS_CONSTRUCTION: /* 0x105 */
445 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_RETURN_BUFFER]) {
446 __ADD_MESSAGE(handle, PLAYER_MESSAGE_GAPLESS_CONSTRUCTION);
450 case MM_MESSAGE_BUFFERING: /* 0x103 */
451 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_BUFFERING])
452 ((player_buffering_cb)handle->user_cb[MUSE_PLAYER_EVENT_TYPE_BUFFERING])(msg->connection.buffering, handle->user_data[MUSE_PLAYER_EVENT_TYPE_BUFFERING]);
454 case MM_MESSAGE_STATE_INTERRUPTED: /* 0x04 */
455 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_INTERRUPT])
456 ((player_interrupted_cb)handle->user_cb[MUSE_PLAYER_EVENT_TYPE_INTERRUPT])(handle->user_data[MUSE_PLAYER_EVENT_TYPE_INTERRUPT]);
458 case MM_MESSAGE_CONNECTION_TIMEOUT: /* 0x102 */
459 LOGI("[%s] PLAYER_ERROR_CONNECTION_FAILED (0x%08x) : CONNECTION_TIMEOUT", __FUNCTION__, PLAYER_ERROR_CONNECTION_FAILED);
460 err_code = PLAYER_ERROR_CONNECTION_FAILED;
462 case MM_MESSAGE_UPDATE_SUBTITLE: /* 0x109 */
463 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SUBTITLE])
464 ((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]);
466 case MM_MESSAGE_VIDEO_NOT_CAPTURED: /* 0x113 */
467 LOGI("[%s] PLAYER_ERROR_VIDEO_CAPTURE_FAILED (0x%08x)", __FUNCTION__, PLAYER_ERROR_VIDEO_CAPTURE_FAILED);
468 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_ERROR])
469 ((player_error_cb)handle->user_cb[MUSE_PLAYER_EVENT_TYPE_ERROR])(PLAYER_ERROR_VIDEO_CAPTURE_FAILED, handle->user_data[MUSE_PLAYER_EVENT_TYPE_ERROR]);
471 case MM_MESSAGE_VIDEO_CAPTURED: /* 0x110 */
473 MMPlayerVideoCapture *capture = (MMPlayerVideoCapture *)msg->data;
475 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_CAPTURE]) {
476 if (!capture || !capture->data) {
477 LOGE("PLAYER_ERROR_VIDEO_CAPTURE_FAILED (0x%08x) : Failed to get capture data", PLAYER_ERROR_VIDEO_CAPTURE_FAILED);
478 err_code = PLAYER_ERROR_VIDEO_CAPTURE_FAILED;
480 LOGI("captured image ori: %d, width: %d, height: %d, size: %d",
481 capture->orientation, capture->width, capture->height, capture->size);
483 /* call application callback */
484 ((player_video_captured_cb)handle->user_cb[MUSE_PLAYER_EVENT_TYPE_CAPTURE])
485 (capture->data, capture->width, capture->height, capture->size, handle->user_data[MUSE_PLAYER_EVENT_TYPE_CAPTURE]);
488 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_CAPTURE] = NULL;
489 handle->user_data[MUSE_PLAYER_EVENT_TYPE_CAPTURE] = NULL;
492 /* capure->data have to be released to avoid mem leak in all cases. */
493 if (capture && capture->data) {
494 g_free(capture->data);
495 capture->data = NULL;
499 case MM_MESSAGE_FILE_NOT_SUPPORTED: /* 0x10f */
500 LOGI("[%s] PLAYER_ERROR_NOT_SUPPORTED_FILE (0x%08x) : FILE_NOT_SUPPORTED", __FUNCTION__, PLAYER_ERROR_NOT_SUPPORTED_FILE);
501 err_code = PLAYER_ERROR_NOT_SUPPORTED_FILE;
503 case MM_MESSAGE_FILE_NOT_FOUND: /* 0x110 */
504 LOGI("[%s] PLAYER_ERROR_NOT_SUPPORTED_FILE (0x%08x) : FILE_NOT_FOUND", __FUNCTION__, PLAYER_ERROR_NOT_SUPPORTED_FILE);
505 err_code = PLAYER_ERROR_NOT_SUPPORTED_FILE;
507 case MM_MESSAGE_SEEK_COMPLETED: /* 0x114 */
508 if (handle->display_type != PLAYER_DISPLAY_TYPE_NONE && handle->state == PLAYER_STATE_READY) {
509 if (handle->is_display_visible) {
510 int ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_visible", 1, (char *)NULL);
511 if (ret != MM_ERROR_NONE)
512 LOGW("[%s] Failed to set display_visible '1' (0x%x)", __FUNCTION__, ret);
515 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK]) {
516 __ADD_MESSAGE(handle, PLAYER_MESSAGE_SEEK_DONE);
519 case MM_MESSAGE_PLAY_POSITION:
520 LOGI("MM_MESSAGE_PLAY_POSITION (%"PRId64" ns)", msg->time.elapsed);
521 handle->last_play_position = msg->time.elapsed;
523 case MM_MESSAGE_UNKNOWN: /* 0x00 */
524 case MM_MESSAGE_WARNING: /* 0x02 */
525 case MM_MESSAGE_CONNECTING: /* 0x100 */
526 case MM_MESSAGE_CONNECTED: /* 0x101 */
527 case MM_MESSAGE_BLUETOOTH_ON: /* 0x106 */
528 case MM_MESSAGE_BLUETOOTH_OFF: /* 0x107 */
529 case MM_MESSAGE_RTP_SENDER_REPORT: /* 0x10a */
530 case MM_MESSAGE_RTP_RECEIVER_REPORT: /* 0x10b */
531 case MM_MESSAGE_RTP_SESSION_STATUS: /* 0x10c */
532 case MM_MESSAGE_SENDER_STATE: /* 0x10d */
533 case MM_MESSAGE_RECEIVER_STATE: /* 0x10e */
538 if (err_code != PLAYER_ERROR_NONE && handle->user_cb[MUSE_PLAYER_EVENT_TYPE_ERROR]) {
539 handle->error_code = err_code;
540 __ADD_MESSAGE(handle, PLAYER_MESSAGE_ERROR);
542 LOGW("[%s] End", __FUNCTION__);
546 static int __pd_message_callback(int message, void *param, void *user_data)
548 player_s *handle = (player_s *)user_data;
549 player_pd_message_type_e type;
551 case MM_MESSAGE_PD_DOWNLOADER_START:
552 type = PLAYER_PD_STARTED;
554 case MM_MESSAGE_PD_DOWNLOADER_END:
555 type = PLAYER_PD_COMPLETED;
561 LEGACY_PLAYER_USER_CB_LOCK(handle, MUSE_PLAYER_EVENT_TYPE_PD);
563 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PD])
564 ((player_pd_message_cb)handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PD])(type, handle->user_data[MUSE_PLAYER_EVENT_TYPE_PD]);
566 LEGACY_PLAYER_USER_CB_UNLOCK(handle, MUSE_PLAYER_EVENT_TYPE_PD);
571 static MMDisplaySurfaceType __player_convert_display_type(player_display_type_e type)
574 case PLAYER_DISPLAY_TYPE_OVERLAY:
575 return MM_DISPLAY_SURFACE_OVERLAY;
576 case PLAYER_DISPLAY_TYPE_EVAS: /* fall through ifndef TIZEN_FEATURE_EVAS_RENDERER */
577 #ifdef TIZEN_FEATURE_EVAS_RENDERER
578 return MM_DISPLAY_SURFACE_REMOTE;
580 case PLAYER_DISPLAY_TYPE_NONE: /* fall through */
582 return MM_DISPLAY_SURFACE_NULL;
586 bool _check_enabled_user_cb_lock(int type)
589 case MUSE_PLAYER_EVENT_TYPE_PREPARE: /* fall through */
590 case MUSE_PLAYER_EVENT_TYPE_PD: /* fall through */
591 case MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_AUDIO_BUFFER_STATUS_WITH_INFO: /* fall through */
592 case MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_VIDEO_BUFFER_STATUS_WITH_INFO: /* fall through */
600 * Public Implementation
603 int legacy_player_create(player_h *player)
605 PLAYER_INSTANCE_CHECK(player);
606 PLAYER_TRACE_BEGIN("MM:PLAYER:CREATE");
608 handle = (player_s *)malloc(sizeof(player_s));
610 memset(handle, 0, sizeof(player_s));
612 LOGE("[%s] PLAYER_ERROR_OUT_OF_MEMORY(0x%08x)", __FUNCTION__, PLAYER_ERROR_OUT_OF_MEMORY);
613 return PLAYER_ERROR_OUT_OF_MEMORY;
615 int ret = mm_player_create(&handle->mm_handle);
616 if (ret != MM_ERROR_NONE) {
617 LOGE("[%s] PLAYER_ERROR_INVALID_OPERATION(0x%08x)", __FUNCTION__, PLAYER_ERROR_INVALID_OPERATION);
618 __player_update_state(handle, PLAYER_INTERNAL_STATE_NONE);
621 return __player_convert_error_code(ret, (char *)__FUNCTION__);
623 muse_player_event_e type = MUSE_PLAYER_EVENT_TYPE_PREPARE;
625 *player = (player_h)handle;
626 __player_update_state(handle, PLAYER_INTERNAL_STATE_IDLE);
627 handle->display_type = PLAYER_DISPLAY_TYPE_NONE;
628 handle->is_display_visible = TRUE;
629 handle->is_media_stream = FALSE;
631 for (type = MUSE_PLAYER_EVENT_TYPE_PREPARE; type < MUSE_PLAYER_EVENT_TYPE_NUM; type++) {
632 if (_check_enabled_user_cb_lock(type))
633 g_mutex_init(&handle->user_cb_lock[type]);
636 handle->message_queue = g_queue_new();
637 g_mutex_init(&handle->message_queue_lock);
638 g_cond_init(&handle->message_queue_cond);
639 ret = pthread_create(&handle->message_thread, NULL, (void *)__message_cb_loop, (void *)handle);
641 LOGE("[%s] failed to create message thread ret = %d", __FUNCTION__, ret);
642 return PLAYER_ERROR_OUT_OF_MEMORY;
645 LOGI("[%s] new handle : %p", __FUNCTION__, *player);
647 return PLAYER_ERROR_NONE;
651 int legacy_player_destroy(player_h player)
653 LOGI("[%s] Start, handle to destroy : %p", __FUNCTION__, player);
654 PLAYER_TRACE_BEGIN("MM:PLAYER:DESTROY");
655 PLAYER_INSTANCE_CHECK(player);
656 player_s *handle = (player_s *)player;
658 __ADD_MESSAGE(handle, PLAYER_MESSAGE_LOOP_EXIT);
660 LEGACY_PLAYER_USER_CB_LOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
661 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
662 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
663 if (handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
664 g_free(handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE]);
665 handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
668 LEGACY_PLAYER_USER_CB_UNLOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
670 /* stop the pause state trasition to release prepare thread */
671 if (handle->internal_state == PLAYER_INTERNAL_STATE_PRE_READY)
672 mm_player_abort_pause(handle->mm_handle);
674 __RELEASEIF_PREPARE_THREAD(handle->prepare_async_thread);
675 __RELEASEIF_MESSAGE_THREAD(handle->message_thread);
677 int ret = mm_player_destroy(handle->mm_handle);
679 LOGI("[%s] Done mm_player_destroy", __FUNCTION__);
681 if (ret != MM_ERROR_NONE) {
682 LOGE("[%s] PLAYER_ERROR_INVALID_OPERATION(0x%08x)", __FUNCTION__, PLAYER_ERROR_INVALID_OPERATION);
683 return PLAYER_ERROR_INVALID_OPERATION;
685 muse_player_event_e type = MUSE_PLAYER_EVENT_TYPE_PREPARE;
687 __player_update_state(handle, PLAYER_INTERNAL_STATE_NONE);
689 for (type = MUSE_PLAYER_EVENT_TYPE_PREPARE; type < MUSE_PLAYER_EVENT_TYPE_NUM; type++) {
690 if (_check_enabled_user_cb_lock(type))
691 g_mutex_clear(&handle->user_cb_lock[type]);
694 if (handle->message_queue) {
695 g_queue_free(handle->message_queue);
696 handle->message_queue = NULL;
699 g_cond_broadcast(&handle->message_queue_cond);
700 g_mutex_clear(&handle->message_queue_lock);
701 g_cond_clear(&handle->message_queue_cond);
705 LOGI("[%s] End", __FUNCTION__);
707 return PLAYER_ERROR_NONE;
711 static void *__prepare_async_thread_func(void *data)
713 player_s *handle = data;
714 int ret = MM_ERROR_NONE;
715 LOGI("[%s]", __FUNCTION__);
717 ret = mm_player_pause(handle->mm_handle);
718 if (ret != MM_ERROR_NONE) {
719 LOGE("[%s] Failed to pause - core fw error(0x%x)", __FUNCTION__, ret);
720 if (handle->error_code == PLAYER_ERROR_NONE) {
721 /*MM_MESSAGE_ERROR will not be posted as legacy_player_prepare(sync API) works with return value
722 of mm_player_pause So in case of async API we post the error message to application from here */
723 MMMessageParamType msg_param;
724 msg_param.code = ret;
725 __msg_callback(MM_MESSAGE_ERROR, (void *)&msg_param, (void *)handle);
727 ret = mm_player_unrealize(handle->mm_handle);
728 if (ret != MM_ERROR_NONE)
729 LOGE("[%s] Failed to unrealize - 0x%x", __FUNCTION__, ret);
730 __player_update_state(handle, PLAYER_INTERNAL_STATE_IDLE);
732 LOGI("[%s], done", __FUNCTION__);
736 int legacy_player_prepare_async(player_h player, player_prepared_cb callback, void *user_data)
738 int ret = MM_ERROR_NONE;
742 LOGI("[%s] Start", __FUNCTION__);
743 PLAYER_INSTANCE_CHECK(player);
744 player_s *handle = (player_s *)player;
745 PLAYER_TRACE_ASYNC_BEGIN("MM:PLAYER:PREPARE_ASYNC", *(int *)handle);
746 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
748 __player_update_state(handle, PLAYER_INTERNAL_STATE_PRE_READY);
749 LEGACY_PLAYER_USER_CB_LOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
751 handle->last_play_position = 0;
752 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
753 LOGE("[%s] PLAYER_ERROR_INVALID_OPERATION (0x%08x) : preparing... we can't do any more ", __FUNCTION__, PLAYER_ERROR_INVALID_OPERATION);
754 LEGACY_PLAYER_USER_CB_UNLOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
755 __player_update_state(handle, PLAYER_INTERNAL_STATE_IDLE);
756 return PLAYER_ERROR_INVALID_OPERATION;
758 /* LOGI("[%s] Event type : %d ",__FUNCTION__, MUSE_PLAYER_EVENT_TYPE_PREPARE); */
759 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE] = callback;
760 handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE] = user_data;
762 LEGACY_PLAYER_USER_CB_UNLOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
764 ret = mm_player_set_message_callback(handle->mm_handle, __msg_callback, (void *)handle);
765 if (ret != MM_ERROR_NONE)
766 LOGW("[%s] Failed to set message callback function (0x%x)", __FUNCTION__, ret);
768 if (handle->display_type == PLAYER_DISPLAY_TYPE_NONE) {
769 ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_surface_type", MM_DISPLAY_SURFACE_NULL, (char *)NULL);
770 if (ret != MM_ERROR_NONE)
771 LOGW("[%s] Failed to set display surface type 'MM_DISPLAY_SURFACE_NULL' (0x%x)", __FUNCTION__, ret);
774 /* FIXME : new funct path is needed to update video instead of set attr again */
775 ret = mm_player_get_attribute(handle->mm_handle, NULL, "display_visible", &visible, (char *)NULL);
776 if (ret != MM_ERROR_NONE) goto ERROR;
783 ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_visible", value, (char *)NULL);
784 if (ret != MM_ERROR_NONE) goto ERROR;
787 ret = mm_player_realize(handle->mm_handle);
788 if (ret != MM_ERROR_NONE) {
789 LOGE("[%s] Failed to realize - 0x%x", __FUNCTION__, ret);
793 if (!handle->is_progressive_download) {
794 ret = pthread_create(&handle->prepare_async_thread, NULL, (void *)__prepare_async_thread_func, (void *)handle);
797 LOGE("[%s] failed to create thread ret = %d", __FUNCTION__, ret);
798 LEGACY_PLAYER_USER_CB_LOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
799 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
800 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
801 /* user_data will be free at player_disp_prepare_async() */
802 handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
804 LEGACY_PLAYER_USER_CB_UNLOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
805 __player_update_state(handle, PLAYER_INTERNAL_STATE_IDLE);
806 return PLAYER_ERROR_OUT_OF_MEMORY;
810 LOGI("[%s] End", __FUNCTION__);
811 return PLAYER_ERROR_NONE;
814 LOGW("prepare cb is released");
815 LEGACY_PLAYER_USER_CB_LOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
816 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
817 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
818 /* user_data will be free at player_disp_prepare_async() */
819 handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
821 LEGACY_PLAYER_USER_CB_UNLOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
822 __player_update_state(handle, PLAYER_INTERNAL_STATE_IDLE);
824 LOGE("LEAVE mm_err:0x%X", ret);
825 return __player_convert_error_code(ret, (char *)__FUNCTION__);
828 int legacy_player_prepare(player_h player)
830 int ret = MM_ERROR_NONE;
834 LOGI("[%s] Start", __FUNCTION__);
835 PLAYER_TRACE_BEGIN("MM:PLAYER:PREPARE");
836 PLAYER_INSTANCE_CHECK(player);
837 player_s *handle = (player_s *)player;
838 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
839 __player_update_state(handle, PLAYER_INTERNAL_STATE_PRE_READY);
841 handle->last_play_position = 0;
842 ret = mm_player_set_message_callback(handle->mm_handle, __msg_callback, (void *)handle);
843 if (ret != MM_ERROR_NONE)
844 LOGW("[%s] Failed to set message callback function (0x%x)", __FUNCTION__, ret);
846 if (handle->display_type == PLAYER_DISPLAY_TYPE_NONE) {
847 ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_surface_type", MM_DISPLAY_SURFACE_NULL, (char *)NULL);
848 if (ret != MM_ERROR_NONE)
849 LOGW("[%s] Failed to set display surface type 'MM_DISPLAY_SURFACE_NULL' (0x%x)", __FUNCTION__, ret);
851 ret = mm_player_get_attribute(handle->mm_handle, NULL, "display_visible", &visible, (char *)NULL);
852 if (ret != MM_ERROR_NONE) {
853 __player_update_state(handle, PLAYER_INTERNAL_STATE_IDLE);
854 return __player_convert_error_code(ret, (char *)__FUNCTION__);
862 ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_visible", value, (char *)NULL);
864 if (ret != MM_ERROR_NONE)
865 LOGW("[%s] Failed to set display display_visible '0' (0x%x)", __FUNCTION__, ret);
868 ret = mm_player_realize(handle->mm_handle);
869 if (ret != MM_ERROR_NONE) {
870 LOGE("[%s] Failed to realize - 0x%x", __FUNCTION__, ret);
871 __player_update_state(handle, PLAYER_INTERNAL_STATE_IDLE);
872 return __player_convert_error_code(ret, (char *)__FUNCTION__);
875 if (!handle->is_progressive_download)
876 ret = mm_player_pause(handle->mm_handle);
878 if (ret != MM_ERROR_NONE) {
880 uret = mm_player_unrealize(handle->mm_handle);
881 if (uret != MM_ERROR_NONE)
882 LOGE("[%s] Failed to unrealize - 0x%x", __FUNCTION__, uret);
884 LOGE("[%s] Failed to pause - 0x%x", __FUNCTION__, ret);
885 __player_update_state(handle, PLAYER_INTERNAL_STATE_IDLE);
886 return __player_convert_error_code(ret, (char *)__FUNCTION__);
888 __player_update_state(handle, PLAYER_INTERNAL_STATE_READY);
889 LOGI("[%s] End", __FUNCTION__);
891 return PLAYER_ERROR_NONE;
895 int legacy_player_unprepare(player_h player)
897 LOGI("[%s] Start", __FUNCTION__);
898 PLAYER_TRACE_BEGIN("MM:PLAYER:UNPREPARE");
899 PLAYER_INSTANCE_CHECK(player);
900 player_s *handle = (player_s *)player;
902 /* Initialize the setting regardless of error return */
903 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK]) {
904 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK] = NULL;
905 handle->user_data[MUSE_PLAYER_EVENT_TYPE_SEEK] = NULL;
908 if (!__player_state_validate(handle, PLAYER_STATE_READY) && !handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
909 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
910 return PLAYER_ERROR_INVALID_STATE;
913 LEGACY_PLAYER_USER_CB_LOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
914 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
915 LOGW("Need to check. prepare cb have to be reset before");
916 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
917 if (handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
918 g_free(handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE]);
919 handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
922 LEGACY_PLAYER_USER_CB_UNLOCK(handle, MUSE_PLAYER_EVENT_TYPE_PREPARE);
924 /* stop the pause state trasition to release prepare thread */
925 if (handle->internal_state == PLAYER_INTERNAL_STATE_PRE_READY)
926 mm_player_abort_pause(handle->mm_handle);
928 __RELEASEIF_PREPARE_THREAD(handle->prepare_async_thread);
930 int ret = mm_player_unrealize(handle->mm_handle);
932 if (ret != MM_ERROR_NONE) {
933 return __player_convert_error_code(ret, (char *)__FUNCTION__);
935 __player_update_state(handle, PLAYER_INTERNAL_STATE_IDLE);
936 handle->is_display_visible = TRUE;
937 handle->is_progressive_download = FALSE;
938 LOGI("[%s] End", __FUNCTION__);
940 return PLAYER_ERROR_NONE;
944 int legacy_player_set_uri(player_h player, const char *uri)
946 PLAYER_INSTANCE_CHECK(player);
947 PLAYER_NULL_ARG_CHECK(uri);
948 player_s *handle = (player_s *)player;
949 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
951 handle->is_media_stream = FALSE;
952 int ret = mm_player_set_uri(handle->mm_handle, uri);
954 if (ret != MM_ERROR_NONE)
955 return __player_convert_error_code(ret, (char *)__FUNCTION__);
957 return PLAYER_ERROR_NONE;
960 int legacy_player_set_memory_buffer(player_h player, const void *data, int size)
962 PLAYER_INSTANCE_CHECK(player);
963 PLAYER_NULL_ARG_CHECK(data);
964 PLAYER_CHECK_CONDITION(size >= 0, PLAYER_ERROR_INVALID_PARAMETER, "PLAYER_ERROR_INVALID_PARAMETER");
965 player_s *handle = (player_s *)player;
966 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
969 handle->is_media_stream = FALSE;
971 snprintf(uri, sizeof(uri), "mem:///ext=%s,size=%d", "", size);
972 int ret = mm_player_set_attribute(handle->mm_handle, NULL, MM_PLAYER_CONTENT_URI, uri, strlen(uri), MM_PLAYER_MEMORY_SRC, data, size, (char *)NULL);
973 if (ret != MM_ERROR_NONE)
974 return __player_convert_error_code(ret, (char *)__FUNCTION__);
976 return PLAYER_ERROR_NONE;
979 int legacy_player_get_state(player_h player, player_state_e *state)
981 PLAYER_INSTANCE_CHECK(player);
982 PLAYER_NULL_ARG_CHECK(state);
983 player_s *handle = (player_s *)player;
984 *state = handle->state;
985 return PLAYER_ERROR_NONE;
988 int legacy_player_set_volume(player_h player, float left, float right)
990 PLAYER_INSTANCE_CHECK(player);
991 PLAYER_CHECK_CONDITION(left >= 0 && left <= 1.0, PLAYER_ERROR_INVALID_PARAMETER, "PLAYER_ERROR_INVALID_PARAMETER");
992 PLAYER_CHECK_CONDITION(right >= 0 && right <= 1.0, PLAYER_ERROR_INVALID_PARAMETER, "PLAYER_ERROR_INVALID_PARAMETER");
993 player_s *handle = (player_s *)player;
994 MMPlayerVolumeType vol;
995 vol.level[MM_VOLUME_CHANNEL_LEFT] = left;
996 vol.level[MM_VOLUME_CHANNEL_RIGHT] = right;
997 int ret = mm_player_set_volume(handle->mm_handle, &vol);
998 if (ret != MM_ERROR_NONE)
999 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1001 return PLAYER_ERROR_NONE;
1004 int legacy_player_get_volume(player_h player, float *left, float *right)
1006 PLAYER_INSTANCE_CHECK(player);
1007 PLAYER_NULL_ARG_CHECK(left);
1008 PLAYER_NULL_ARG_CHECK(right);
1009 player_s *handle = (player_s *)player;
1010 MMPlayerVolumeType vol;
1011 int ret = mm_player_get_volume(handle->mm_handle, &vol);
1012 if (ret != MM_ERROR_NONE) {
1013 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1015 *left = vol.level[MM_VOLUME_CHANNEL_LEFT];
1016 *right = vol.level[MM_VOLUME_CHANNEL_RIGHT];
1017 return PLAYER_ERROR_NONE;
1021 int legacy_player_set_sound_stream_info(player_h player, sound_stream_info_h stream_info)
1023 PLAYER_INSTANCE_CHECK(player);
1024 player_s *handle = (player_s *)player;
1025 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
1027 bool is_available = FALSE;
1029 /* check if stream_info is valid */
1030 int ret = sound_manager_is_available_stream_information(stream_info, NATIVE_API_PLAYER, &is_available);
1032 if (ret != MM_ERROR_NONE) {
1033 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1035 if (is_available == FALSE)
1036 ret = MM_ERROR_NOT_SUPPORT_API;
1038 char *stream_type = NULL;
1039 int stream_index = 0;
1040 ret = sound_manager_get_type_from_stream_information(stream_info, &stream_type);
1041 ret = sound_manager_get_index_from_stream_information(stream_info, &stream_index);
1042 if (ret == SOUND_MANAGER_ERROR_NONE)
1043 ret = mm_player_set_sound_stream_info(handle->mm_handle, stream_type, stream_index);
1045 ret = MM_ERROR_PLAYER_INTERNAL;
1049 if (ret != MM_ERROR_NONE)
1050 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1052 return PLAYER_ERROR_NONE;
1055 int legacy_player_set_audio_latency_mode(player_h player, audio_latency_mode_e latency_mode)
1057 PLAYER_INSTANCE_CHECK(player);
1058 player_s *handle = (player_s *)player;
1060 int ret = mm_player_set_attribute(handle->mm_handle, NULL, "sound_latency_mode", latency_mode, (char *)NULL);
1061 if (ret != MM_ERROR_NONE)
1062 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1064 return PLAYER_ERROR_NONE;
1067 int legacy_player_get_audio_latency_mode(player_h player, audio_latency_mode_e * latency_mode)
1069 PLAYER_INSTANCE_CHECK(player);
1070 PLAYER_NULL_ARG_CHECK(latency_mode);
1071 player_s *handle = (player_s *)player;
1073 int ret = mm_player_get_attribute(handle->mm_handle, NULL, "sound_latency_mode", latency_mode, (char *)NULL);
1074 if (ret != MM_ERROR_NONE)
1075 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1077 return PLAYER_ERROR_NONE;
1080 int legacy_player_start(player_h player)
1082 LOGI("[%s] Start", __FUNCTION__);
1083 PLAYER_INSTANCE_CHECK(player);
1084 player_s *handle = (player_s *)player;
1086 if (handle->state > PLAYER_STATE_IDLE) {
1087 if (handle->display_type == PLAYER_DISPLAY_TYPE_OVERLAY && handle->is_display_visible) {
1088 ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_visible", 1, (char *)NULL);
1089 if (ret != MM_ERROR_NONE)
1090 LOGW("[%s] Failed to set display_visible '1' (0x%x)", __FUNCTION__, ret);
1092 if (handle->internal_state == PLAYER_INTERNAL_STATE_STOPPED) {
1093 if (handle->is_progressive_download) {
1094 LOGE("[%s] PLAYER_ERROR_INVALID_OPERATION(0x%08x)", __FUNCTION__, PLAYER_ERROR_INVALID_OPERATION);
1095 return PLAYER_ERROR_INVALID_OPERATION;
1098 ret = mm_player_start(handle->mm_handle);
1099 LOGI("[%s] stop -> start() ", __FUNCTION__);
1101 if (handle->state == PLAYER_STATE_READY)
1102 ret = mm_player_start(handle->mm_handle);
1104 ret = mm_player_resume(handle->mm_handle);
1107 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1108 return PLAYER_ERROR_INVALID_STATE;
1111 if (ret != MM_ERROR_NONE) {
1112 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1114 __player_update_state(handle, PLAYER_INTERNAL_STATE_PLAYING);
1115 LOGI("[%s] End", __FUNCTION__);
1116 return PLAYER_ERROR_NONE;
1120 int legacy_player_stop(player_h player)
1122 LOGI("[%s] Start", __FUNCTION__);
1123 PLAYER_INSTANCE_CHECK(player);
1124 player_s *handle = (player_s *)player;
1125 int ret = MM_ERROR_NONE;
1127 if (handle->state == PLAYER_STATE_PLAYING || handle->state == PLAYER_STATE_PAUSED) {
1128 if (handle->display_type == PLAYER_DISPLAY_TYPE_OVERLAY) {
1129 ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_visible", 0, (char *)NULL);
1130 if (ret != MM_ERROR_NONE)
1131 LOGW("[%s] Failed to set display_visible '0' (0x%x)", __FUNCTION__, ret);
1134 ret = mm_player_stop(handle->mm_handle);
1135 if (ret != MM_ERROR_NONE) {
1136 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1138 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK]) {
1139 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK] = NULL;
1140 handle->user_data[MUSE_PLAYER_EVENT_TYPE_SEEK] = NULL;
1143 __player_update_state(handle, PLAYER_INTERNAL_STATE_STOPPED);
1145 LOGI("[%s] End", __FUNCTION__);
1146 return PLAYER_ERROR_NONE;
1149 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1150 return PLAYER_ERROR_INVALID_STATE;
1154 int legacy_player_pause(player_h player)
1156 LOGI("[%s] Start", __FUNCTION__);
1157 PLAYER_INSTANCE_CHECK(player);
1158 player_s *handle = (player_s *)player;
1159 PLAYER_STATE_CHECK(handle, PLAYER_STATE_PLAYING);
1161 int ret = mm_player_pause(handle->mm_handle);
1162 if (ret != MM_ERROR_NONE) {
1163 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1165 __player_update_state(handle, PLAYER_INTERNAL_STATE_PAUSED);
1166 LOGI("[%s] End", __FUNCTION__);
1167 return PLAYER_ERROR_NONE;
1171 int legacy_player_set_play_position(player_h player, int64_t nanoseconds, bool accurate, player_seek_completed_cb callback, void *user_data)
1173 PLAYER_INSTANCE_CHECK(player);
1174 PLAYER_CHECK_CONDITION(nanoseconds >= 0, PLAYER_ERROR_INVALID_PARAMETER, "PLAYER_ERROR_INVALID_PARAMETER");
1175 player_s *handle = (player_s *)player;
1176 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
1177 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1178 return PLAYER_ERROR_INVALID_STATE;
1181 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK] && handle->is_media_stream == FALSE) {
1182 LOGE("[%s] PLAYER_ERROR_SEEK_FAILED temp (0x%08x) : seeking... we can't do any more ", __FUNCTION__, PLAYER_ERROR_SEEK_FAILED);
1183 return PLAYER_ERROR_SEEK_FAILED;
1185 LOGI("[%s] Event type : %d, pos : %"PRId64, __FUNCTION__, MUSE_PLAYER_EVENT_TYPE_SEEK, nanoseconds);
1186 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK] = callback;
1187 handle->user_data[MUSE_PLAYER_EVENT_TYPE_SEEK] = user_data;
1189 int accurated = accurate ? 1 : 0;
1190 int ret = mm_player_set_attribute(handle->mm_handle, NULL, "accurate_seek", accurated, (char *)NULL);
1191 if (ret != MM_ERROR_NONE)
1192 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1194 ret = mm_player_set_position(handle->mm_handle, nanoseconds);
1195 if (ret != MM_ERROR_NONE) {
1196 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_SEEK] = NULL;
1197 handle->user_data[MUSE_PLAYER_EVENT_TYPE_SEEK] = NULL;
1198 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1200 return PLAYER_ERROR_NONE;
1204 int legacy_player_get_play_position(player_h player, int64_t *nanoseconds)
1208 PLAYER_INSTANCE_CHECK(player);
1209 PLAYER_NULL_ARG_CHECK(nanoseconds);
1210 player_s *handle = (player_s *)player;
1211 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
1212 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1213 return PLAYER_ERROR_INVALID_STATE;
1216 int ret = mm_player_get_position(handle->mm_handle, &pos);
1217 if (ret != MM_ERROR_NONE) {
1218 if (ret == MM_ERROR_PLAYER_NOT_INITIALIZED) {
1219 /* During playbak if a interrupt is occurred, the player can be destroyed internally.
1220 libmm-player will post position msg with last playback position before destory pipeline */
1221 if (handle->state == PLAYER_STATE_IDLE) {
1222 if (handle->last_play_position > 0)
1223 *nanoseconds = handle->last_play_position;
1226 LOGD("position %"PRId64, *nanoseconds);
1227 return PLAYER_ERROR_NONE;
1231 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1234 return PLAYER_ERROR_NONE;
1238 int legacy_player_set_mute(player_h player, bool muted)
1240 PLAYER_INSTANCE_CHECK(player);
1241 player_s *handle = (player_s *)player;
1243 int ret = mm_player_set_mute(handle->mm_handle, muted);
1244 if (ret != MM_ERROR_NONE)
1245 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1247 return PLAYER_ERROR_NONE;
1250 int legacy_player_is_muted(player_h player, bool *muted)
1252 PLAYER_INSTANCE_CHECK(player);
1253 PLAYER_NULL_ARG_CHECK(muted);
1254 player_s *handle = (player_s *)player;
1257 int ret = mm_player_get_mute(handle->mm_handle, &_mute);
1258 if (ret != MM_ERROR_NONE) {
1259 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1265 return PLAYER_ERROR_NONE;
1269 int legacy_player_set_looping(player_h player, bool looping)
1271 PLAYER_INSTANCE_CHECK(player);
1272 player_s *handle = (player_s *)player;
1275 if (looping == TRUE)
1278 int ret = mm_player_set_attribute(handle->mm_handle, NULL, MM_PLAYER_PLAYBACK_COUNT, value, (char *)NULL);
1280 if (ret != MM_ERROR_NONE)
1281 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1283 return PLAYER_ERROR_NONE;
1286 int legacy_player_is_looping(player_h player, bool *looping)
1288 PLAYER_INSTANCE_CHECK(player);
1289 PLAYER_NULL_ARG_CHECK(looping);
1290 player_s *handle = (player_s *)player;
1293 int ret = mm_player_get_attribute(handle->mm_handle, NULL, MM_PLAYER_PLAYBACK_COUNT, &count, (char *)NULL);
1294 if (ret != MM_ERROR_NONE) {
1295 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1302 return PLAYER_ERROR_NONE;
1306 int legacy_player_get_duration(player_h player, int64_t *duration)
1308 PLAYER_INSTANCE_CHECK(player);
1309 PLAYER_NULL_ARG_CHECK(duration);
1310 int ret = MM_ERROR_NONE;
1312 player_s *handle = (player_s *)player;
1314 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
1315 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1316 return PLAYER_ERROR_INVALID_STATE;
1319 ret = mm_player_get_duration(handle->mm_handle, duration);
1320 if (ret != MM_ERROR_NONE) {
1321 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1324 LOGD("content dur: %"PRId64, *duration);
1325 return PLAYER_ERROR_NONE;
1328 int legacy_player_set_display_mode(player_h player, player_display_mode_e mode)
1330 PLAYER_INSTANCE_CHECK(player);
1331 player_s *handle = (player_s *)player;
1332 LOGI("[%s] mode:%d", __FUNCTION__, mode);
1334 int ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_method", mode, (char *)NULL);
1335 if (ret != MM_ERROR_NONE)
1336 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1338 return PLAYER_ERROR_NONE;
1341 int legacy_player_get_display_mode(player_h player, player_display_mode_e *mode)
1343 PLAYER_INSTANCE_CHECK(player);
1344 PLAYER_NULL_ARG_CHECK(mode);
1345 player_s *handle = (player_s *)player;
1346 int ret = mm_player_get_attribute(handle->mm_handle, NULL, "display_method", mode, (char *)NULL);
1347 if (ret != MM_ERROR_NONE)
1348 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1350 return PLAYER_ERROR_NONE;
1353 int legacy_player_set_playback_rate(player_h player, float rate)
1355 LOGI("[%s] rate : %0.1f", __FUNCTION__, rate);
1356 PLAYER_INSTANCE_CHECK(player);
1357 PLAYER_CHECK_CONDITION(rate >= -5.0 && rate <= 5.0, PLAYER_ERROR_INVALID_PARAMETER, "PLAYER_ERROR_INVALID_PARAMETER");
1358 player_s *handle = (player_s *)player;
1360 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
1361 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1362 return PLAYER_ERROR_INVALID_STATE;
1365 int ret = mm_player_set_play_speed(handle->mm_handle, rate, FALSE);
1369 case MM_ERROR_PLAYER_NO_OP:
1370 ret = PLAYER_ERROR_NONE;
1372 case MM_ERROR_NOT_SUPPORT_API:
1373 case MM_ERROR_PLAYER_SEEK:
1374 LOGE("[%s] PLAYER_ERROR_INVALID_OPERATION(0x%08x) : seek error", __FUNCTION__, PLAYER_ERROR_INVALID_OPERATION);
1375 ret = PLAYER_ERROR_INVALID_OPERATION;
1378 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1383 int legacy_player_set_display_rotation(player_h player, player_display_rotation_e rotation)
1385 PLAYER_INSTANCE_CHECK(player);
1386 player_s *handle = (player_s *)player;
1388 int ret = mm_player_set_attribute(handle->mm_handle, NULL, MM_PLAYER_VIDEO_ROTATION, rotation, (char *)NULL);
1389 if (ret != MM_ERROR_NONE)
1390 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1392 return PLAYER_ERROR_NONE;
1395 int legacy_player_get_display_rotation(player_h player, player_display_rotation_e *rotation)
1397 PLAYER_INSTANCE_CHECK(player);
1398 PLAYER_NULL_ARG_CHECK(rotation);
1399 player_s *handle = (player_s *)player;
1400 int ret = mm_player_get_attribute(handle->mm_handle, NULL, MM_PLAYER_VIDEO_ROTATION, rotation, (char *)NULL);
1401 if (ret != MM_ERROR_NONE)
1402 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1404 return PLAYER_ERROR_NONE;
1407 int legacy_player_set_display_visible(player_h player, bool visible)
1409 PLAYER_INSTANCE_CHECK(player);
1410 player_s *handle = (player_s *)player;
1413 if (visible == TRUE)
1416 int ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_visible", value, (char *)NULL);
1417 if (ret != MM_ERROR_NONE) {
1418 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1420 handle->is_display_visible = visible;
1421 return PLAYER_ERROR_NONE;
1425 int legacy_player_is_display_visible(player_h player, bool *visible)
1427 PLAYER_INSTANCE_CHECK(player);
1428 PLAYER_NULL_ARG_CHECK(visible);
1429 player_s *handle = (player_s *)player;
1431 int ret = mm_player_get_attribute(handle->mm_handle, NULL, "display_visible", &count, (char *)NULL);
1432 if (ret != MM_ERROR_NONE) {
1433 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1440 return PLAYER_ERROR_NONE;
1444 int legacy_player_get_content_info(player_h player, player_content_info_e key, char **value)
1446 PLAYER_INSTANCE_CHECK(player);
1447 PLAYER_NULL_ARG_CHECK(value);
1448 player_s *handle = (player_s *)player;
1449 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
1450 LOGE("[%s] PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1451 return PLAYER_ERROR_INVALID_STATE;
1459 case PLAYER_CONTENT_INFO_ALBUM:
1460 attr = MM_PLAYER_TAG_ALBUM;
1462 case PLAYER_CONTENT_INFO_ARTIST:
1463 attr = MM_PLAYER_TAG_ARTIST;
1465 case PLAYER_CONTENT_INFO_AUTHOR:
1466 attr = MM_PLAYER_TAG_AUTHOUR;
1468 case PLAYER_CONTENT_INFO_GENRE:
1469 attr = MM_PLAYER_TAG_GENRE;
1471 case PLAYER_CONTENT_INFO_TITLE:
1472 attr = MM_PLAYER_TAG_TITLE;
1474 case PLAYER_CONTENT_INFO_YEAR:
1475 attr = MM_PLAYER_TAG_DATE;
1481 int ret = mm_player_get_attribute(handle->mm_handle, NULL, attr, &val, &val_len, (char *)NULL);
1482 if (ret != MM_ERROR_NONE) {
1483 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1487 *value = strndup(val, val_len);
1489 *value = strndup("", 0);
1491 if (*value == NULL) {
1492 LOGE("[%s] PLAYER_ERROR_OUT_OF_MEMORY(0x%08x) : fail to strdup ", __FUNCTION__, PLAYER_ERROR_OUT_OF_MEMORY);
1493 return PLAYER_ERROR_OUT_OF_MEMORY;
1495 return PLAYER_ERROR_NONE;
1499 int legacy_player_get_codec_info(player_h player, char **audio_codec, char **video_codec)
1501 PLAYER_INSTANCE_CHECK(player);
1502 PLAYER_NULL_ARG_CHECK(audio_codec);
1503 PLAYER_NULL_ARG_CHECK(video_codec);
1504 player_s *handle = (player_s *)player;
1505 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
1506 LOGE("[%s] PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1507 return PLAYER_ERROR_INVALID_STATE;
1515 int ret = mm_player_get_attribute(handle->mm_handle, NULL, MM_PLAYER_AUDIO_CODEC, &audio, &audio_len, MM_PLAYER_VIDEO_CODEC, &video, &video_len, (char *)NULL);
1516 if (ret != MM_ERROR_NONE) {
1517 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1519 *audio_codec = NULL;
1521 *audio_codec = strndup(audio, audio_len);
1523 *audio_codec = strndup("", 0);
1525 *video_codec = NULL;
1527 *video_codec = strndup(video, video_len);
1529 *video_codec = strndup("", 0);
1531 LOGD("codec info: %s, %s", *audio_codec, *video_codec);
1532 return PLAYER_ERROR_NONE;
1536 int legacy_player_get_audio_stream_info(player_h player, int *sample_rate, int *channel, int *bit_rate)
1538 PLAYER_INSTANCE_CHECK(player);
1539 PLAYER_NULL_ARG_CHECK(sample_rate);
1540 PLAYER_NULL_ARG_CHECK(channel);
1541 PLAYER_NULL_ARG_CHECK(bit_rate);
1542 player_s *handle = (player_s *)player;
1543 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
1544 LOGE("[%s] PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1545 return PLAYER_ERROR_INVALID_STATE;
1547 int ret = mm_player_get_attribute(handle->mm_handle, NULL, MM_PLAYER_AUDIO_SAMPLERATE, sample_rate, MM_PLAYER_AUDIO_CHANNEL, channel, MM_PLAYER_AUDIO_BITRATE, bit_rate, (char *)NULL);
1548 if (ret != MM_ERROR_NONE)
1549 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1551 return PLAYER_ERROR_NONE;
1554 int legacy_player_get_video_stream_info(player_h player, int *fps, int *bit_rate)
1556 PLAYER_INSTANCE_CHECK(player);
1557 PLAYER_NULL_ARG_CHECK(fps);
1558 PLAYER_NULL_ARG_CHECK(bit_rate);
1559 player_s *handle = (player_s *)player;
1560 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
1561 LOGE("[%s] PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1562 return PLAYER_ERROR_INVALID_STATE;
1564 int 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_INSTANCE_CHECK(player);
1574 PLAYER_NULL_ARG_CHECK(width);
1575 PLAYER_NULL_ARG_CHECK(height);
1576 player_s *handle = (player_s *)player;
1577 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
1578 LOGE("[%s] PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1579 return PLAYER_ERROR_INVALID_STATE;
1583 int ret = mm_player_get_attribute(handle->mm_handle, NULL, MM_PLAYER_VIDEO_WIDTH, &w, MM_PLAYER_VIDEO_HEIGHT, &h, (char *)NULL);
1584 if (ret != MM_ERROR_NONE) {
1585 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1589 LOGI("[%s] width : %d, height : %d", __FUNCTION__, w, h);
1590 return PLAYER_ERROR_NONE;
1594 int legacy_player_get_album_art(player_h player, void **album_art, int *size)
1596 PLAYER_INSTANCE_CHECK(player);
1597 PLAYER_NULL_ARG_CHECK(size);
1598 player_s *handle = (player_s *)player;
1599 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
1600 LOGE("[%s] PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1601 return PLAYER_ERROR_INVALID_STATE;
1604 int ret = mm_player_get_attribute(handle->mm_handle, NULL, "tag_album_cover", album_art, size, (char *)NULL);
1605 if (ret != MM_ERROR_NONE)
1606 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1608 return PLAYER_ERROR_NONE;
1611 int legacy_player_audio_effect_get_equalizer_bands_count(player_h player, int *count)
1613 PLAYER_INSTANCE_CHECK(player);
1614 PLAYER_NULL_ARG_CHECK(count);
1615 player_s *handle = (player_s *)player;
1617 int ret = mm_player_audio_effect_custom_get_eq_bands_number(handle->mm_handle, count);
1618 if (ret != MM_ERROR_NONE)
1619 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1621 return PLAYER_ERROR_NONE;
1624 int legacy_player_audio_effect_set_equalizer_all_bands(player_h player, int *band_levels, int length)
1626 PLAYER_INSTANCE_CHECK(player);
1627 PLAYER_NULL_ARG_CHECK(band_levels);
1628 player_s *handle = (player_s *)player;
1630 int ret = mm_player_audio_effect_custom_set_level_eq_from_list(handle->mm_handle, band_levels, length);
1631 if (ret != MM_ERROR_NONE) {
1632 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1634 ret = mm_player_audio_effect_custom_apply(handle->mm_handle);
1635 return (ret == MM_ERROR_NONE) ? PLAYER_ERROR_NONE : __player_convert_error_code(ret, (char *)__FUNCTION__);
1639 int legacy_player_audio_effect_set_equalizer_band_level(player_h player, int index, int level)
1641 PLAYER_INSTANCE_CHECK(player);
1642 player_s *handle = (player_s *)player;
1644 int ret = mm_player_audio_effect_custom_set_level(handle->mm_handle, MM_AUDIO_EFFECT_CUSTOM_EQ, index, level);
1645 if (ret != MM_ERROR_NONE) {
1646 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1648 ret = mm_player_audio_effect_custom_apply(handle->mm_handle);
1649 return (ret == MM_ERROR_NONE) ? PLAYER_ERROR_NONE : __player_convert_error_code(ret, (char *)__FUNCTION__);
1653 int legacy_player_audio_effect_get_equalizer_band_level(player_h player, int index, int *level)
1655 PLAYER_INSTANCE_CHECK(player);
1656 PLAYER_NULL_ARG_CHECK(level);
1657 player_s *handle = (player_s *)player;
1659 int ret = mm_player_audio_effect_custom_get_level(handle->mm_handle, MM_AUDIO_EFFECT_CUSTOM_EQ, index, level);
1660 if (ret != MM_ERROR_NONE)
1661 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1663 return PLAYER_ERROR_NONE;
1666 int legacy_player_audio_effect_get_equalizer_level_range(player_h player, int *min, int *max)
1668 PLAYER_INSTANCE_CHECK(player);
1669 PLAYER_NULL_ARG_CHECK(min);
1670 PLAYER_NULL_ARG_CHECK(max);
1671 player_s *handle = (player_s *)player;
1673 int ret = mm_player_audio_effect_custom_get_level_range(handle->mm_handle, MM_AUDIO_EFFECT_CUSTOM_EQ, min, max);
1674 if (ret != MM_ERROR_NONE)
1675 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1677 return PLAYER_ERROR_NONE;
1680 int legacy_player_audio_effect_get_equalizer_band_frequency(player_h player, int index, int *frequency)
1682 PLAYER_INSTANCE_CHECK(player);
1683 PLAYER_NULL_ARG_CHECK(frequency);
1684 player_s *handle = (player_s *)player;
1686 int ret = mm_player_audio_effect_custom_get_eq_bands_freq(handle->mm_handle, index, frequency);
1687 if (ret != MM_ERROR_NONE)
1688 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1690 return PLAYER_ERROR_NONE;
1693 int legacy_player_audio_effect_get_equalizer_band_frequency_range(player_h player, int index, int *range)
1695 PLAYER_INSTANCE_CHECK(player);
1696 PLAYER_NULL_ARG_CHECK(range);
1697 player_s *handle = (player_s *)player;
1699 int ret = mm_player_audio_effect_custom_get_eq_bands_width(handle->mm_handle, index, range);
1700 if (ret != MM_ERROR_NONE)
1701 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1703 return PLAYER_ERROR_NONE;
1706 int legacy_player_audio_effect_equalizer_clear(player_h player)
1708 PLAYER_INSTANCE_CHECK(player);
1709 player_s *handle = (player_s *)player;
1711 int ret = mm_player_audio_effect_custom_clear_eq_all(handle->mm_handle);
1712 if (ret != MM_ERROR_NONE) {
1713 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1715 ret = mm_player_audio_effect_custom_apply(handle->mm_handle);
1716 return (ret == MM_ERROR_NONE) ? PLAYER_ERROR_NONE : __player_convert_error_code(ret, (char *)__FUNCTION__);
1720 int legacy_player_audio_effect_equalizer_is_available(player_h player, bool *available)
1722 PLAYER_INSTANCE_CHECK(player);
1723 PLAYER_NULL_ARG_CHECK(available);
1725 player_s *handle = (player_s *)player;
1726 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
1727 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1728 return PLAYER_ERROR_INVALID_STATE;
1731 int ret = mm_player_is_supported_custom_effect_type(handle->mm_handle, MM_AUDIO_EFFECT_CUSTOM_EQ);
1732 if (ret != MM_ERROR_NONE)
1736 return PLAYER_ERROR_NONE;
1739 int legacy_player_set_subtitle_path(player_h player, const char *path)
1741 PLAYER_INSTANCE_CHECK(player);
1742 player_s *handle = (player_s *)player;
1744 if ((path == NULL) && (handle->state != PLAYER_STATE_IDLE))
1745 return PLAYER_ERROR_INVALID_PARAMETER;
1747 int ret = mm_player_set_external_subtitle_path(handle->mm_handle, path);
1748 if (ret != MM_ERROR_NONE)
1749 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1751 return PLAYER_ERROR_NONE;
1754 int legacy_player_set_subtitle_position_offset(player_h player, int millisecond)
1756 PLAYER_INSTANCE_CHECK(player);
1757 /* PLAYER_CHECK_CONDITION(millisecond>=0 ,PLAYER_ERROR_INVALID_PARAMETER ,"PLAYER_ERROR_INVALID_PARAMETER" ); */
1758 player_s *handle = (player_s *)player;
1759 if (!__player_state_validate(handle, PLAYER_STATE_PLAYING)) {
1760 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1761 return PLAYER_ERROR_INVALID_STATE;
1764 int ret = mm_player_adjust_subtitle_position(handle->mm_handle, MM_PLAYER_POS_FORMAT_TIME, millisecond);
1765 if (ret != MM_ERROR_NONE)
1766 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1768 return PLAYER_ERROR_NONE;
1771 int legacy_player_set_progressive_download_path(player_h player, const char *path)
1773 PLAYER_INSTANCE_CHECK(player);
1774 PLAYER_NULL_ARG_CHECK(path);
1776 player_s *handle = (player_s *)player;
1777 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
1779 int ret = mm_player_set_attribute(handle->mm_handle, NULL, MM_PLAYER_PD_MODE, MM_PLAYER_PD_MODE_URI, "pd_location", path, strlen(path), (char *)NULL);
1780 if (ret != MM_ERROR_NONE) {
1781 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1783 handle->is_progressive_download = 1;
1784 return PLAYER_ERROR_NONE;
1788 int legacy_player_get_progressive_download_status(player_h player, unsigned long *current, unsigned long *total_size)
1791 PLAYER_INSTANCE_CHECK(player);
1792 PLAYER_NULL_ARG_CHECK(current);
1793 PLAYER_NULL_ARG_CHECK(total_size);
1794 player_s *handle = (player_s *)player;
1795 if (handle->state != PLAYER_STATE_PLAYING && handle->state != PLAYER_STATE_PAUSED) {
1796 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1797 return PLAYER_ERROR_INVALID_STATE;
1801 int ret = mm_player_get_pd_status(handle->mm_handle, &_current, &_total);
1802 if (ret != MM_ERROR_NONE) {
1803 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1805 *current = _current;
1806 *total_size = _total;
1807 return PLAYER_ERROR_NONE;
1811 int legacy_player_capture_video(player_h player, player_video_captured_cb callback, void *user_data)
1813 PLAYER_INSTANCE_CHECK(player);
1814 PLAYER_NULL_ARG_CHECK(callback);
1816 player_s *handle = (player_s *)player;
1817 if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_CAPTURE]) {
1818 LOGE("[%s] PLAYER_ERROR_VIDEO_CAPTURE_FAILED (0x%08x) : capturing... we can't do any more ", __FUNCTION__, PLAYER_ERROR_VIDEO_CAPTURE_FAILED);
1819 return PLAYER_ERROR_VIDEO_CAPTURE_FAILED;
1821 LOGI("[%s] Event type : %d ", __FUNCTION__, MUSE_PLAYER_EVENT_TYPE_CAPTURE);
1822 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_CAPTURE] = callback;
1823 handle->user_data[MUSE_PLAYER_EVENT_TYPE_CAPTURE] = user_data;
1826 if (handle->state >= PLAYER_STATE_READY) {
1827 int ret = mm_player_do_video_capture(handle->mm_handle);
1828 if (ret == MM_ERROR_PLAYER_NO_OP) {
1829 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_CAPTURE] = NULL;
1830 handle->user_data[MUSE_PLAYER_EVENT_TYPE_CAPTURE] = NULL;
1831 LOGE("[%s] PLAYER_ERROR_INVALID_OPERATION (0x%08x) : video display must be set : %d", __FUNCTION__, PLAYER_ERROR_INVALID_OPERATION, handle->display_type);
1832 return PLAYER_ERROR_INVALID_OPERATION;
1834 if (ret != MM_ERROR_NONE) {
1835 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_CAPTURE] = NULL;
1836 handle->user_data[MUSE_PLAYER_EVENT_TYPE_CAPTURE] = NULL;
1837 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1839 return PLAYER_ERROR_NONE;
1841 LOGE("[%s] PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1842 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_CAPTURE] = NULL;
1843 handle->user_data[MUSE_PLAYER_EVENT_TYPE_CAPTURE] = NULL;
1844 return PLAYER_ERROR_INVALID_STATE;
1848 int legacy_player_set_streaming_cookie(player_h player, const char *cookie, int size)
1850 PLAYER_INSTANCE_CHECK(player);
1851 PLAYER_NULL_ARG_CHECK(cookie);
1852 PLAYER_CHECK_CONDITION(size >= 0, PLAYER_ERROR_INVALID_PARAMETER, "PLAYER_ERROR_INVALID_PARAMETER");
1853 player_s *handle = (player_s *)player;
1854 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
1856 int ret = mm_player_set_attribute(handle->mm_handle, NULL, MM_PLAYER_STREAMING_COOKIE, cookie, size, (char *)NULL);
1857 if (ret != MM_ERROR_NONE)
1858 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1860 return PLAYER_ERROR_NONE;
1863 int legacy_player_set_streaming_user_agent(player_h player, const char *user_agent, int size)
1865 PLAYER_INSTANCE_CHECK(player);
1866 PLAYER_NULL_ARG_CHECK(user_agent);
1867 PLAYER_CHECK_CONDITION(size >= 0, PLAYER_ERROR_INVALID_PARAMETER, "PLAYER_ERROR_INVALID_PARAMETER");
1868 player_s *handle = (player_s *)player;
1869 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
1871 int ret = mm_player_set_attribute(handle->mm_handle, NULL, MM_PLAYER_STREAMING_USER_AGENT, user_agent, size, (char *)NULL);
1872 if (ret != MM_ERROR_NONE)
1873 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1875 return PLAYER_ERROR_NONE;
1878 int legacy_player_get_streaming_download_progress(player_h player, int *start, int *current)
1880 PLAYER_INSTANCE_CHECK(player);
1881 PLAYER_NULL_ARG_CHECK(start);
1882 PLAYER_NULL_ARG_CHECK(current);
1883 player_s *handle = (player_s *)player;
1884 if (handle->state != PLAYER_STATE_PLAYING && handle->state != PLAYER_STATE_PAUSED) {
1885 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1886 return PLAYER_ERROR_INVALID_STATE;
1888 unsigned long _current = 0;
1889 unsigned long _start = 0;
1890 int ret = mm_player_get_buffer_position(handle->mm_handle, MM_PLAYER_POS_FORMAT_PERCENT, &_start, &_current);
1891 if (ret != MM_ERROR_NONE) {
1892 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1894 *start = (int)_start;
1895 *current = (int)_current;
1896 return PLAYER_ERROR_NONE;
1900 int legacy_player_set_completed_cb(player_h player, player_completed_cb callback, void *user_data)
1902 return __set_callback(MUSE_PLAYER_EVENT_TYPE_COMPLETE, player, callback, user_data);
1905 int legacy_player_unset_completed_cb(player_h player)
1907 return __unset_callback(MUSE_PLAYER_EVENT_TYPE_COMPLETE, player);
1910 #ifdef TIZEN_FEATURE_EVAS_RENDERER
1911 int legacy_player_set_retrieve_buffer_cb(player_h player, player_retrieve_buffer_cb callback, void *user_data)
1913 return __set_callback(MUSE_PLAYER_EVENT_TYPE_RETURN_BUFFER, player, callback, user_data);
1916 int legacy_player_unset_retrieve_buffer_cb(player_h player)
1918 return __unset_callback(MUSE_PLAYER_EVENT_TYPE_RETURN_BUFFER, player);
1922 int legacy_player_set_interrupted_cb(player_h player, player_interrupted_cb callback, void *user_data)
1924 return __set_callback(MUSE_PLAYER_EVENT_TYPE_INTERRUPT, player, callback, user_data);
1927 int legacy_player_unset_interrupted_cb(player_h player)
1929 return __unset_callback(MUSE_PLAYER_EVENT_TYPE_INTERRUPT, player);
1932 int legacy_player_set_error_cb(player_h player, player_error_cb callback, void *user_data)
1934 return __set_callback(MUSE_PLAYER_EVENT_TYPE_ERROR, player, callback, user_data);
1937 int legacy_player_unset_error_cb(player_h player)
1939 return __unset_callback(MUSE_PLAYER_EVENT_TYPE_ERROR, player);
1942 int legacy_player_set_buffering_cb(player_h player, player_buffering_cb callback, void *user_data)
1944 return __set_callback(MUSE_PLAYER_EVENT_TYPE_BUFFERING, player, callback, user_data);
1947 int legacy_player_unset_buffering_cb(player_h player)
1949 return __unset_callback(MUSE_PLAYER_EVENT_TYPE_BUFFERING, player);
1952 int legacy_player_set_subtitle_updated_cb(player_h player, player_subtitle_updated_cb callback, void *user_data)
1954 return __set_callback(MUSE_PLAYER_EVENT_TYPE_SUBTITLE, player, callback, user_data);
1957 int legacy_player_unset_subtitle_updated_cb(player_h player)
1959 return __unset_callback(MUSE_PLAYER_EVENT_TYPE_SUBTITLE, player);
1962 int legacy_player_set_progressive_download_message_cb(player_h player, player_pd_message_cb callback, void *user_data)
1964 PLAYER_INSTANCE_CHECK(player);
1965 PLAYER_NULL_ARG_CHECK(callback);
1967 player_s *handle = (player_s *)player;
1969 if (handle->state != PLAYER_STATE_IDLE && handle->state != PLAYER_STATE_READY) {
1970 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
1971 return PLAYER_ERROR_INVALID_STATE;
1974 int ret = mm_player_set_pd_message_callback(handle->mm_handle, __pd_message_callback, (void *)handle);
1975 if (ret != MM_ERROR_NONE)
1976 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1978 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PD] = callback;
1979 handle->user_data[MUSE_PLAYER_EVENT_TYPE_PD] = user_data;
1980 LOGI("[%s] Event type : %d ", __FUNCTION__, MUSE_PLAYER_EVENT_TYPE_PD);
1981 return PLAYER_ERROR_NONE;
1984 int legacy_player_unset_progressive_download_message_cb(player_h player)
1986 PLAYER_INSTANCE_CHECK(player);
1987 player_s *handle = (player_s *)player;
1989 LEGACY_PLAYER_USER_CB_LOCK(handle, MUSE_PLAYER_EVENT_TYPE_PD);
1990 handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PD] = NULL;
1991 handle->user_data[MUSE_PLAYER_EVENT_TYPE_PD] = NULL;
1992 LEGACY_PLAYER_USER_CB_UNLOCK(handle, MUSE_PLAYER_EVENT_TYPE_PD);
1993 LOGI("[%s] Event type : %d ", __FUNCTION__, MUSE_PLAYER_EVENT_TYPE_PD);
1995 int ret = mm_player_set_pd_message_callback(handle->mm_handle, NULL, NULL);
1996 if (ret != MM_ERROR_NONE)
1997 return __player_convert_error_code(ret, (char *)__FUNCTION__);
1999 return PLAYER_ERROR_NONE;
2002 int legacy_player_release_video_stream_bo(player_h player, void* bo)
2004 PLAYER_INSTANCE_CHECK(player);
2005 player_s *handle = (player_s *)player;
2007 LOGD("ENTER %p %p", player, bo);
2009 mm_player_release_video_stream_bo(handle->mm_handle, bo);
2013 return PLAYER_ERROR_NONE;
2016 int legacy_player_set_media_packet_video_frame_decoded_cb(player_h player, legacy_player_media_packet_video_decoded_cb callback, void *user_data)
2018 PLAYER_INSTANCE_CHECK(player);
2019 PLAYER_NULL_ARG_CHECK(callback);
2020 player_s *handle = (player_s *)player;
2021 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
2023 int ret = mm_player_set_video_stream_callback(handle->mm_handle, (mm_player_video_stream_callback)callback, user_data);
2024 if (ret != MM_ERROR_NONE)
2025 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2027 return PLAYER_ERROR_NONE;
2030 static bool __video_stream_changed_callback(void *user_data)
2032 player_s *handle = (player_s *)user_data;
2033 muse_player_event_e event_type = MUSE_PLAYER_EVENT_TYPE_VIDEO_STREAM_CHANGED;
2035 LOGE("[%s] event type %d", __FUNCTION__, event_type);
2037 if (handle->user_cb[event_type]) {
2038 int width = 0, height = 0, fps = 0, bit_rate = 0;
2039 int ret = mm_player_get_attribute(handle->mm_handle, NULL,
2040 MM_PLAYER_VIDEO_WIDTH, &width,
2041 MM_PLAYER_VIDEO_HEIGHT, &height,
2042 "content_video_fps", &fps,
2043 "content_video_bitrate", &bit_rate, (char *)NULL);
2045 if (ret != MM_ERROR_NONE) {
2046 LOGE("[%s] get attr is failed", __FUNCTION__);
2050 ((player_video_stream_changed_cb)handle->user_cb[event_type])(width, height, fps, bit_rate, handle->user_data[event_type]);
2052 LOGE("[%s] video stream changed cb was not set.", __FUNCTION__);
2059 int legacy_player_set_video_stream_changed_cb(player_h player, player_video_stream_changed_cb callback, void *user_data)
2062 PLAYER_INSTANCE_CHECK(player);
2063 PLAYER_NULL_ARG_CHECK(callback);
2064 player_s *handle = (player_s *)player;
2065 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
2067 ret = mm_player_set_video_stream_changed_callback(handle->mm_handle, (mm_player_stream_changed_callback)__video_stream_changed_callback, (void *)handle);
2069 if (ret != MM_ERROR_NONE)
2070 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2072 return __set_callback(MUSE_PLAYER_EVENT_TYPE_VIDEO_STREAM_CHANGED, player, callback, user_data);
2075 int legacy_player_unset_video_stream_changed_cb(player_h player)
2077 PLAYER_INSTANCE_CHECK(player);
2079 __unset_callback(MUSE_PLAYER_EVENT_TYPE_VIDEO_STREAM_CHANGED, player);
2081 return PLAYER_ERROR_NONE;
2084 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)
2086 player_s *handle = (player_s *)user_data;
2087 muse_player_event_e event_type;
2089 if (type == PLAYER_STREAM_TYPE_AUDIO)
2090 event_type = MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_AUDIO_BUFFER_STATUS;
2091 else if (type == PLAYER_STREAM_TYPE_VIDEO)
2092 event_type = MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_VIDEO_BUFFER_STATUS;
2096 LOGE("[%s] event type %d", __FUNCTION__, event_type);
2098 if (handle->user_cb[event_type]) {
2099 ((player_media_stream_buffer_status_cb)handle->user_cb[event_type])(status, handle->user_data[event_type]);
2101 LOGE("[%s][type:%d] buffer status cb was not set.", __FUNCTION__, type);
2108 static bool __media_stream_seek_data_callback(player_stream_type_e type, unsigned long long offset, void *user_data)
2110 player_s *handle = (player_s *)user_data;
2111 muse_player_event_e event_type;
2113 if (type == PLAYER_STREAM_TYPE_AUDIO)
2114 event_type = MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_AUDIO_SEEK;
2115 else if (type == PLAYER_STREAM_TYPE_VIDEO)
2116 event_type = MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_VIDEO_SEEK;
2120 LOGE("[%s] event type %d", __FUNCTION__, event_type);
2122 if (handle->user_cb[event_type]) {
2123 ((player_media_stream_seek_cb)handle->user_cb[event_type])(offset, handle->user_data[event_type]);
2125 LOGE("[%s][type:%d] seek cb was not set.", __FUNCTION__, type);
2132 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)
2135 PLAYER_INSTANCE_CHECK(player);
2136 PLAYER_NULL_ARG_CHECK(callback);
2137 player_s *handle = (player_s *)player;
2138 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
2140 /* the type can be expaned with default and text. */
2141 if ((type != PLAYER_STREAM_TYPE_VIDEO) && (type != PLAYER_STREAM_TYPE_AUDIO)) {
2142 LOGE("[%s] PLAYER_ERROR_INVALID_PARAMETER(type : %d)", __FUNCTION__, type);
2143 return PLAYER_ERROR_INVALID_PARAMETER;
2146 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);
2148 if (ret != MM_ERROR_NONE)
2149 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2151 if (type == PLAYER_STREAM_TYPE_VIDEO)
2152 return __set_callback(MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_VIDEO_BUFFER_STATUS, player, callback, user_data);
2154 return __set_callback(MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_AUDIO_BUFFER_STATUS, player, callback, user_data);
2157 int legacy_player_unset_media_stream_buffer_status_cb(player_h player, player_stream_type_e type)
2159 PLAYER_INSTANCE_CHECK(player);
2161 if (type == PLAYER_STREAM_TYPE_VIDEO)
2162 __unset_callback(MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_VIDEO_BUFFER_STATUS, player);
2163 else if (type == PLAYER_STREAM_TYPE_AUDIO)
2164 __unset_callback(MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_AUDIO_BUFFER_STATUS, player);
2166 return PLAYER_ERROR_INVALID_PARAMETER;
2168 return PLAYER_ERROR_NONE;
2171 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)
2174 PLAYER_INSTANCE_CHECK(player);
2175 PLAYER_NULL_ARG_CHECK(callback);
2176 player_s *handle = (player_s *)player;
2177 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
2179 /* the type can be expaned with default and text. */
2180 if ((type != PLAYER_STREAM_TYPE_VIDEO) && (type != PLAYER_STREAM_TYPE_AUDIO)) {
2181 LOGE("[%s] PLAYER_ERROR_INVALID_PARAMETER(type : %d)", __FUNCTION__, type);
2182 return PLAYER_ERROR_INVALID_PARAMETER;
2185 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);
2187 if (ret != MM_ERROR_NONE)
2188 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2190 if (type == PLAYER_STREAM_TYPE_VIDEO)
2191 return __set_callback(MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_VIDEO_SEEK, player, callback, user_data);
2193 return __set_callback(MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_AUDIO_SEEK, player, callback, user_data);
2196 int legacy_player_unset_media_stream_seek_cb(player_h player, player_stream_type_e type)
2198 PLAYER_INSTANCE_CHECK(player);
2200 if (type == PLAYER_STREAM_TYPE_VIDEO)
2201 __unset_callback(MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_VIDEO_SEEK, player);
2202 else if (type == PLAYER_STREAM_TYPE_AUDIO)
2203 __unset_callback(MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_AUDIO_SEEK, player);
2205 return PLAYER_ERROR_INVALID_PARAMETER;
2207 return PLAYER_ERROR_NONE;
2210 int legacy_player_push_media_stream(player_h player, media_packet_h packet)
2212 PLAYER_INSTANCE_CHECK(player);
2213 player_s *handle = (player_s *)player;
2215 PLAYER_CHECK_CONDITION(handle->error_code == PLAYER_ERROR_NONE, PLAYER_ERROR_NOT_SUPPORTED_FILE, "can't support this format");
2217 int ret = mm_player_submit_packet(handle->mm_handle, packet);
2219 if (ret != MM_ERROR_NONE)
2220 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2222 return PLAYER_ERROR_NONE;
2225 int legacy_player_set_media_stream_info(player_h player, player_stream_type_e type, media_format_h format)
2228 PLAYER_INSTANCE_CHECK(player);
2229 player_s *handle = (player_s *)player;
2230 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
2232 handle->is_media_stream = TRUE;
2234 if (type == PLAYER_STREAM_TYPE_VIDEO)
2235 ret = mm_player_set_video_info(handle->mm_handle, format);
2236 else if (type == PLAYER_STREAM_TYPE_AUDIO)
2237 ret = mm_player_set_audio_info(handle->mm_handle, format);
2239 return PLAYER_ERROR_INVALID_PARAMETER;
2241 if (ret != MM_ERROR_NONE)
2242 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2244 return PLAYER_ERROR_NONE;
2246 return PLAYER_ERROR_NONE;
2249 int legacy_player_set_media_stream_buffer_max_size(player_h player, player_stream_type_e type, unsigned long long max_size)
2252 PLAYER_INSTANCE_CHECK(player);
2253 player_s *handle = (player_s *)player;
2254 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2255 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
2256 return PLAYER_ERROR_INVALID_STATE;
2259 ret = mm_player_set_media_stream_buffer_max_size(handle->mm_handle, type, max_size);
2261 if (ret != MM_ERROR_NONE)
2262 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2264 return PLAYER_ERROR_NONE;
2267 int legacy_player_get_media_stream_buffer_max_size(player_h player, player_stream_type_e type, unsigned long long *max_size)
2269 PLAYER_INSTANCE_CHECK(player);
2270 PLAYER_NULL_ARG_CHECK(max_size);
2271 player_s *handle = (player_s *)player;
2273 unsigned long long _max_size;
2274 int ret = mm_player_get_media_stream_buffer_max_size(handle->mm_handle, type, &_max_size);
2275 if (ret != MM_ERROR_NONE) {
2276 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2278 *max_size = _max_size;
2279 return PLAYER_ERROR_NONE;
2283 int legacy_player_set_media_stream_buffer_min_threshold(player_h player, player_stream_type_e type, unsigned int percent)
2286 PLAYER_INSTANCE_CHECK(player);
2287 player_s *handle = (player_s *)player;
2288 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2289 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
2290 return PLAYER_ERROR_INVALID_STATE;
2293 ret = mm_player_set_media_stream_buffer_min_percent(handle->mm_handle, type, percent);
2295 if (ret != MM_ERROR_NONE)
2296 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2298 return PLAYER_ERROR_NONE;
2301 int legacy_player_get_media_stream_buffer_min_threshold(player_h player, player_stream_type_e type, unsigned int *percent)
2303 PLAYER_INSTANCE_CHECK(player);
2304 PLAYER_NULL_ARG_CHECK(percent);
2305 player_s *handle = (player_s *)player;
2307 unsigned int _value;
2308 int ret = mm_player_get_media_stream_buffer_min_percent(handle->mm_handle, type, &_value);
2309 if (ret != MM_ERROR_NONE) {
2310 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2313 return PLAYER_ERROR_NONE;
2317 int legacy_player_get_track_count(player_h player, player_stream_type_e type, int *count)
2319 PLAYER_INSTANCE_CHECK(player);
2320 PLAYER_NULL_ARG_CHECK(count);
2321 player_s *handle = (player_s *)player;
2323 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
2324 LOGE("[%s] PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
2325 return PLAYER_ERROR_INVALID_STATE;
2328 MMPlayerTrackType track_type = 0;
2330 case PLAYER_STREAM_TYPE_AUDIO:
2331 track_type = MM_PLAYER_TRACK_TYPE_AUDIO;
2333 case PLAYER_STREAM_TYPE_TEXT:
2334 track_type = MM_PLAYER_TRACK_TYPE_TEXT;
2337 LOGE("invalid stream type %d", type);
2338 return PLAYER_ERROR_INVALID_PARAMETER;
2341 int ret = mm_player_get_track_count(handle->mm_handle, track_type, count);
2342 if (ret != MM_ERROR_NONE)
2343 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2345 return PLAYER_ERROR_NONE;
2348 int legacy_player_get_current_track(player_h player, player_stream_type_e type, int *index)
2350 PLAYER_INSTANCE_CHECK(player);
2351 PLAYER_NULL_ARG_CHECK(index);
2352 player_s *handle = (player_s *)player;
2354 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
2355 LOGE("[%s] PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
2356 return PLAYER_ERROR_INVALID_STATE;
2359 MMPlayerTrackType track_type = 0;
2361 case PLAYER_STREAM_TYPE_AUDIO:
2362 track_type = MM_PLAYER_TRACK_TYPE_AUDIO;
2364 case PLAYER_STREAM_TYPE_TEXT:
2365 track_type = MM_PLAYER_TRACK_TYPE_TEXT;
2368 LOGE("invalid stream type %d", type);
2369 return PLAYER_ERROR_INVALID_PARAMETER;
2372 int ret = mm_player_get_current_track(handle->mm_handle, track_type, index);
2373 if (ret != MM_ERROR_NONE)
2374 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2376 return PLAYER_ERROR_NONE;
2379 int legacy_player_select_track(player_h player, player_stream_type_e type, int index)
2381 PLAYER_INSTANCE_CHECK(player);
2382 PLAYER_CHECK_CONDITION(index >= 0, PLAYER_ERROR_INVALID_PARAMETER, "PLAYER_ERROR_INVALID_PARAMETER");
2383 player_s *handle = (player_s *)player;
2385 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
2386 LOGE("[%s] PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
2387 return PLAYER_ERROR_INVALID_STATE;
2390 MMPlayerTrackType track_type = 0;
2392 case PLAYER_STREAM_TYPE_AUDIO:
2393 track_type = MM_PLAYER_TRACK_TYPE_AUDIO;
2395 case PLAYER_STREAM_TYPE_TEXT:
2396 track_type = MM_PLAYER_TRACK_TYPE_TEXT;
2399 LOGE("invalid stream type %d", type);
2400 return PLAYER_ERROR_INVALID_PARAMETER;
2403 int ret = mm_player_select_track(handle->mm_handle, track_type, index);
2404 if (ret != MM_ERROR_NONE)
2405 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2407 return PLAYER_ERROR_NONE;
2410 int legacy_player_get_track_language_code(player_h player, player_stream_type_e type, int index, char **code, int *len)
2412 PLAYER_INSTANCE_CHECK(player);
2413 PLAYER_NULL_ARG_CHECK(code);
2414 PLAYER_NULL_ARG_CHECK(len);
2415 player_s *handle = (player_s *)player;
2416 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
2417 LOGE("[%s] PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
2418 return PLAYER_ERROR_INVALID_STATE;
2421 char *language_code = NULL;
2422 MMPlayerTrackType track_type = 0;
2424 case PLAYER_STREAM_TYPE_AUDIO:
2425 track_type = MM_PLAYER_TRACK_TYPE_AUDIO;
2427 case PLAYER_STREAM_TYPE_VIDEO:
2428 track_type = MM_PLAYER_TRACK_TYPE_VIDEO;
2430 case PLAYER_STREAM_TYPE_TEXT:
2431 track_type = MM_PLAYER_TRACK_TYPE_TEXT;
2434 LOGE("invalid stream type %d", type);
2435 return PLAYER_ERROR_INVALID_PARAMETER;
2438 int ret = mm_player_get_track_language_code(handle->mm_handle, track_type, index, &language_code);
2439 if (ret != MM_ERROR_NONE) {
2440 if (language_code != NULL)
2441 free(language_code);
2443 language_code = NULL;
2444 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2448 if (language_code != NULL && strncmp(language_code, "und", 3)) {
2450 *code = strndup(language_code, code_len);
2453 *code = strndup("und", code_len);
2458 free(language_code);
2460 language_code = NULL;
2461 return PLAYER_ERROR_NONE;
2465 int legacy_player_set_video_roi_area(player_h player, double scale_x,
2466 double scale_y, double scale_width, double scale_heights)
2468 PLAYER_INSTANCE_CHECK(player);
2469 player_s *handle = (player_s *)player;
2474 ret = mm_player_set_video_roi_area(handle->mm_handle, scale_x, scale_y, scale_width, scale_heights);
2475 if (ret != PLAYER_ERROR_NONE)
2476 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2478 return PLAYER_ERROR_NONE;
2481 int legacy_player_get_video_roi_area(player_h player, double *scale_x,
2482 double *scale_y, double *scale_width, double *scale_height)
2484 PLAYER_INSTANCE_CHECK(player);
2485 PLAYER_NULL_ARG_CHECK(scale_x);
2486 PLAYER_NULL_ARG_CHECK(scale_y);
2487 PLAYER_NULL_ARG_CHECK(scale_width);
2488 PLAYER_NULL_ARG_CHECK(scale_height);
2489 player_s *handle = (player_s *)player;
2494 ret = mm_player_get_video_roi_area(handle->mm_handle, scale_x, scale_y, scale_width, scale_height);
2495 if (ret != PLAYER_ERROR_NONE)
2496 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2498 return PLAYER_ERROR_NONE;
2501 int legacy_player_set_roi_area(player_h player, int x, int y, int w, int h)
2503 PLAYER_INSTANCE_CHECK(player);
2504 player_s *handle = (player_s *)player;
2510 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);
2511 if (ret != MM_ERROR_NONE)
2512 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2514 return PLAYER_ERROR_NONE;
2517 int legacy_player_set_display(player_h player, player_display_type_e type, unsigned int wl_surface_id)
2519 PLAYER_INSTANCE_CHECK(player);
2520 player_s *handle = (player_s *)player;
2521 void *set_handle = NULL;
2522 MMDisplaySurfaceType mmType = __player_convert_display_type(type);
2526 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2527 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
2528 return PLAYER_ERROR_INVALID_STATE;
2531 if (type == PLAYER_DISPLAY_TYPE_NONE) {
2533 handle->display_handle = 0;
2534 handle->display_type = type;
2537 /* get handle from overlay or evas surface */
2538 temp = handle->display_handle;
2539 if (type == PLAYER_DISPLAY_TYPE_OVERLAY) {
2540 LOGI("Wayland overlay surface type");
2541 LOGI("wl_surface_id %d", wl_surface_id);
2542 handle->display_handle = (void *)(uintptr_t)wl_surface_id;
2543 set_handle = &(handle->display_handle);
2544 #ifdef TIZEN_FEATURE_EVAS_RENDERER
2545 } else if (type == PLAYER_DISPLAY_TYPE_EVAS) {
2546 LOGI("Evas surface type");
2547 set_handle = &(handle->display_handle);
2550 LOGE("invalid surface type");
2551 return PLAYER_ERROR_INVALID_PARAMETER;
2555 /* set display handle */
2556 if (handle->display_type == PLAYER_DISPLAY_TYPE_NONE || type == handle->display_type) {
2557 /* first time or same type */
2558 LOGW("first time or same type");
2559 ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_surface_type", mmType, "display_overlay", set_handle, sizeof(wl_surface_id), NULL);
2561 if (ret != MM_ERROR_NONE) {
2562 handle->display_handle = temp;
2563 LOGE("[%s] Failed to display surface change :%d", __FUNCTION__, ret);
2565 if (type != PLAYER_DISPLAY_TYPE_NONE) {
2566 handle->display_type = type;
2567 LOGI("[%s] video display has been changed- type :%d, addr : 0x%x", __FUNCTION__, handle->display_type, handle->display_handle);
2569 LOGI("NULL surface");
2573 /* changing surface case */
2574 ret = mm_player_change_videosink(handle->mm_handle, mmType, set_handle);
2575 if (ret != MM_ERROR_NONE) {
2576 handle->display_handle = temp;
2577 if (ret == MM_ERROR_NOT_SUPPORT_API) {
2578 LOGE("[%s] change video sink is not available.", __FUNCTION__);
2579 ret = PLAYER_ERROR_NONE;
2581 LOGE("[%s] Failed to display surface change :%d", __FUNCTION__, ret);
2584 handle->display_type = type;
2585 LOGI("[%s] video display has been changed- type :%d, addr : 0x%x", __FUNCTION__, handle->display_type, handle->display_handle);
2589 if (ret != MM_ERROR_NONE) {
2590 handle->display_type = PLAYER_DISPLAY_TYPE_NONE;
2591 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2593 return PLAYER_ERROR_NONE;
2597 int legacy_player_set_sound_stream_info_for_mused(player_h player, char *stream_type, int stream_index)
2599 PLAYER_INSTANCE_CHECK(player);
2600 player_s *handle = (player_s *)player;
2603 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
2604 if (stream_type == NULL || stream_index < 0) {
2605 LOGE("invalid parameter %p %d", stream_type, stream_index);
2606 return PLAYER_ERROR_INVALID_PARAMETER;
2609 ret = mm_player_set_sound_stream_info(handle->mm_handle, stream_type, stream_index);
2611 if (ret != MM_ERROR_NONE)
2612 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2614 return PLAYER_ERROR_NONE;
2617 int legacy_player_get_timeout_for_muse(player_h player, int *timeout)
2619 PLAYER_INSTANCE_CHECK(player);
2620 player_s *handle = (player_s *)player;
2623 ret = mm_player_get_timeout(handle->mm_handle, timeout);
2624 if (ret != MM_ERROR_NONE)
2625 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2627 return PLAYER_ERROR_NONE;
2630 int legacy_player_get_num_of_video_out_buffers(player_h player, int *num, int *extra_num)
2632 PLAYER_INSTANCE_CHECK(player);
2633 PLAYER_NULL_ARG_CHECK(num);
2634 PLAYER_NULL_ARG_CHECK(extra_num);
2635 player_s *handle = (player_s *)player;
2637 int ret = mm_player_get_num_of_video_out_buffers(handle->mm_handle, num, extra_num);
2638 if (ret != MM_ERROR_NONE)
2639 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2641 return PLAYER_ERROR_NONE;
2644 int legacy_player_set_file_buffering_path(player_h player, const char *file_path)
2646 PLAYER_INSTANCE_CHECK(player);
2647 PLAYER_NULL_ARG_CHECK(file_path);
2648 player_s *handle = (player_s *)player;
2649 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
2651 int ret = mm_player_set_file_buffering_path(handle->mm_handle, file_path);
2653 if (ret != MM_ERROR_NONE)
2654 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2656 return PLAYER_ERROR_NONE;
2659 int legacy_player_manage_external_storage_state(player_h player, int id, int state)
2661 int ret = PLAYER_ERROR_NONE;
2662 PLAYER_INSTANCE_CHECK(player);
2663 player_s *handle = (player_s *)player;
2665 ret = mm_player_manage_external_storage_state(handle->mm_handle, id, state);
2667 if (ret != MM_ERROR_NONE)
2668 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2670 return PLAYER_ERROR_NONE;
2673 int legacy_player_get_adaptive_variant_info(player_h player, int *num, char **var_info)
2675 int ret = PLAYER_ERROR_NONE;
2676 PLAYER_INSTANCE_CHECK(player);
2677 PLAYER_NULL_ARG_CHECK(num);
2678 PLAYER_NULL_ARG_CHECK(var_info);
2679 player_s *handle = (player_s *)player;
2681 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
2682 LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
2683 return PLAYER_ERROR_INVALID_STATE;
2686 ret = mm_player_get_adaptive_variant_info(handle->mm_handle, num, var_info);
2688 if (ret != MM_ERROR_NONE)
2689 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2691 return PLAYER_ERROR_NONE;
2694 int legacy_player_set_max_adaptive_variant_limit(player_h player, int bandwidth, int width, int height)
2697 PLAYER_INSTANCE_CHECK(player);
2698 player_s *handle = (player_s *)player;
2700 ret = mm_player_set_max_adaptive_variant_limit(handle->mm_handle, bandwidth, width, height);
2702 if (ret != MM_ERROR_NONE)
2703 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2705 return PLAYER_ERROR_NONE;
2708 int legacy_player_get_max_adaptive_variant_limit(player_h player, int *bandwidth, int *width, int *height)
2710 PLAYER_INSTANCE_CHECK(player);
2711 PLAYER_NULL_ARG_CHECK(bandwidth);
2712 PLAYER_NULL_ARG_CHECK(width);
2713 PLAYER_NULL_ARG_CHECK(height);
2714 player_s *handle = (player_s *)player;
2716 int ret = mm_player_get_max_adaptive_variant_limit(handle->mm_handle, bandwidth, width, height);
2718 if (ret != MM_ERROR_NONE)
2719 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2721 return PLAYER_ERROR_NONE;
2724 int legacy_player_set_audio_only(player_h player, bool audio_only)
2726 PLAYER_INSTANCE_CHECK(player);
2727 player_s *handle = (player_s *)player;
2729 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
2730 LOGE("[%s] PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
2731 return PLAYER_ERROR_INVALID_STATE;
2734 int ret = mm_player_set_audio_only(handle->mm_handle, audio_only);
2735 if (ret != MM_ERROR_NONE)
2736 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2738 return PLAYER_ERROR_NONE;
2741 int legacy_player_is_audio_only(player_h player, bool *paudio_only)
2743 PLAYER_INSTANCE_CHECK(player);
2744 PLAYER_NULL_ARG_CHECK(paudio_only);
2745 player_s *handle = (player_s *)player;
2746 bool audio_only = false;
2748 int ret = mm_player_get_audio_only(handle->mm_handle, &audio_only);
2749 if (ret != MM_ERROR_NONE) {
2750 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2752 *paudio_only = audio_only;
2753 return PLAYER_ERROR_NONE;
2757 int legacy_player_set_streaming_buffering_time(player_h player, int buffer_ms, int rebuffer_ms)
2759 PLAYER_INSTANCE_CHECK(player);
2760 player_s *handle = (player_s *)player;
2761 int ret = MM_ERROR_NONE;
2762 PLAYER_STATE_CHECK(handle, PLAYER_STATE_IDLE);
2764 ret = mm_player_set_streaming_buffering_time(handle->mm_handle, buffer_ms, rebuffer_ms);
2765 if (ret != MM_ERROR_NONE)
2766 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2768 return PLAYER_ERROR_NONE;
2771 int legacy_player_get_streaming_buffering_time(player_h player, int *buffer_ms, int *rebuffer_ms)
2773 PLAYER_INSTANCE_CHECK(player);
2774 PLAYER_NULL_ARG_CHECK(buffer_ms);
2775 PLAYER_NULL_ARG_CHECK(rebuffer_ms);
2777 player_s *handle = (player_s *)player;
2778 int ret = MM_ERROR_NONE;
2780 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2781 LOGE("[%s] PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
2782 return PLAYER_ERROR_INVALID_STATE;
2785 ret = mm_player_get_streaming_buffering_time(handle->mm_handle, buffer_ms, rebuffer_ms);
2786 if (ret != MM_ERROR_NONE) {
2787 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2789 return PLAYER_ERROR_NONE;
2793 int legacy_player_360_is_content_spherical(player_h player, bool *is_spherical)
2795 PLAYER_INSTANCE_CHECK(player);
2796 PLAYER_NULL_ARG_CHECK(is_spherical);
2798 player_s *handle = (player_s *)player;
2800 if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
2801 LOGE("PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", PLAYER_ERROR_INVALID_STATE, handle->state);
2802 return PLAYER_ERROR_INVALID_STATE;
2805 int ret = mm_player_360_is_content_spherical(handle->mm_handle, is_spherical);
2806 if (ret != MM_ERROR_NONE) {
2807 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2809 return PLAYER_ERROR_NONE;
2813 int legacy_player_360_set_enabled(player_h player, bool enabled)
2815 PLAYER_INSTANCE_CHECK(player);
2816 player_s *handle = (player_s *)player;
2818 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2819 LOGE("PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", PLAYER_ERROR_INVALID_STATE, handle->state);
2820 return PLAYER_ERROR_INVALID_STATE;
2823 int ret = mm_player_360_set_enabled(handle->mm_handle, enabled);
2824 if (ret != MM_ERROR_NONE)
2825 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2827 return PLAYER_ERROR_NONE;
2830 int legacy_player_360_is_enabled(player_h player, bool *enabled)
2832 PLAYER_INSTANCE_CHECK(player);
2833 PLAYER_NULL_ARG_CHECK(enabled);
2835 player_s *handle = (player_s *)player;
2837 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2838 LOGE("PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", PLAYER_ERROR_INVALID_STATE, handle->state);
2839 return PLAYER_ERROR_INVALID_STATE;
2842 int ret = mm_player_360_is_enabled(handle->mm_handle, enabled);
2843 if (ret != MM_ERROR_NONE) {
2844 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2846 return PLAYER_ERROR_NONE;
2850 int legacy_player_360_set_direction_of_view(player_h player, float yaw, float pitch)
2852 PLAYER_INSTANCE_CHECK(player);
2853 player_s *handle = (player_s *)player;
2854 int ret = MM_ERROR_NONE;
2856 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2857 LOGE("PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", PLAYER_ERROR_INVALID_STATE, handle->state);
2858 return PLAYER_ERROR_INVALID_STATE;
2861 ret = mm_player_360_set_direction_of_view(handle->mm_handle, yaw, pitch);
2862 if (ret != MM_ERROR_NONE)
2863 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2865 return PLAYER_ERROR_NONE;
2868 int legacy_player_360_get_direction_of_view(player_h player, float *yaw, float *pitch)
2870 PLAYER_INSTANCE_CHECK(player);
2871 PLAYER_NULL_ARG_CHECK(yaw);
2872 PLAYER_NULL_ARG_CHECK(pitch);
2874 player_s *handle = (player_s *)player;
2875 int ret = MM_ERROR_NONE;
2877 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2878 LOGE("PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", PLAYER_ERROR_INVALID_STATE, handle->state);
2879 return PLAYER_ERROR_INVALID_STATE;
2882 ret = mm_player_360_get_direction_of_view(handle->mm_handle, yaw, pitch);
2883 if (ret != MM_ERROR_NONE) {
2884 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2886 return PLAYER_ERROR_NONE;
2890 int legacy_player_360_set_zoom(player_h player, float level)
2892 PLAYER_INSTANCE_CHECK(player);
2893 player_s *handle = (player_s *)player;
2895 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2896 LOGE("PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", PLAYER_ERROR_INVALID_STATE, handle->state);
2897 return PLAYER_ERROR_INVALID_STATE;
2900 int ret = mm_player_360_set_zoom(handle->mm_handle, level);
2901 if (ret != MM_ERROR_NONE)
2902 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2904 return PLAYER_ERROR_NONE;
2907 int legacy_player_360_get_zoom(player_h player, float *level)
2909 PLAYER_INSTANCE_CHECK(player);
2910 player_s *handle = (player_s *)player;
2912 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2913 LOGE("PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", PLAYER_ERROR_INVALID_STATE, handle->state);
2914 return PLAYER_ERROR_INVALID_STATE;
2917 int ret = mm_player_360_get_zoom(handle->mm_handle, level);
2918 if (ret != MM_ERROR_NONE) {
2919 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2921 return PLAYER_ERROR_NONE;
2925 int legacy_player_360_set_field_of_view(player_h player, int horizontal_degrees, int vertical_degrees)
2927 PLAYER_INSTANCE_CHECK(player);
2928 player_s *handle = (player_s *)player;
2929 int ret = MM_ERROR_NONE;
2931 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2932 LOGE("PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", PLAYER_ERROR_INVALID_STATE, handle->state);
2933 return PLAYER_ERROR_INVALID_STATE;
2936 ret = mm_player_360_set_field_of_view(handle->mm_handle, horizontal_degrees, vertical_degrees);
2937 if (ret != MM_ERROR_NONE)
2938 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2940 return PLAYER_ERROR_NONE;
2943 int legacy_player_360_get_field_of_view(player_h player, int *horizontal_degrees, int *vertical_degrees)
2945 PLAYER_INSTANCE_CHECK(player);
2946 PLAYER_NULL_ARG_CHECK(horizontal_degrees);
2947 PLAYER_NULL_ARG_CHECK(vertical_degrees);
2949 player_s *handle = (player_s *)player;
2950 int ret = MM_ERROR_NONE;
2952 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2953 LOGE("PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", PLAYER_ERROR_INVALID_STATE, handle->state);
2954 return PLAYER_ERROR_INVALID_STATE;
2957 ret = mm_player_360_get_field_of_view(handle->mm_handle, horizontal_degrees, vertical_degrees);
2958 if (ret != MM_ERROR_NONE) {
2959 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2961 return PLAYER_ERROR_NONE;
2965 int legacy_player_set_replaygain_enabled(player_h player, bool enabled)
2967 PLAYER_INSTANCE_CHECK(player);
2969 player_s *handle = (player_s *)player;
2970 int ret = MM_ERROR_NONE;
2972 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2973 LOGE("PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", PLAYER_ERROR_INVALID_STATE, handle->state);
2974 return PLAYER_ERROR_INVALID_STATE;
2977 ret = mm_player_set_replaygain_enabled(handle->mm_handle, enabled);
2978 if (ret != MM_ERROR_NONE)
2979 return __player_convert_error_code(ret, (char *)__FUNCTION__);
2981 return PLAYER_ERROR_NONE;
2984 int legacy_player_is_replaygain_enabled(player_h player, bool *enabled)
2986 PLAYER_INSTANCE_CHECK(player);
2987 PLAYER_NULL_ARG_CHECK(enabled);
2989 player_s *handle = (player_s *)player;
2990 int ret = MM_ERROR_NONE;
2993 if (!__player_state_validate(handle, PLAYER_STATE_IDLE)) {
2994 LOGE("PLAYER_ERROR_INVALID_STATE (0x%08x) : current state - %d", PLAYER_ERROR_INVALID_STATE, handle->state);
2995 return PLAYER_ERROR_INVALID_STATE;
2998 ret = mm_player_is_replaygain_enabled(handle->mm_handle, &_enable);
2999 if (ret != MM_ERROR_NONE) {
3000 return __player_convert_error_code(ret, (char *)__FUNCTION__);
3003 return PLAYER_ERROR_NONE;