80752838cb9ab4cd9c02b5c2f910529380e0eadf
[platform/core/multimedia/libmm-player.git] / src / mm_player.c
1 /*
2  * libmm-player
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Contact: JongHyuk Choi <jhchoi.choi@samsung.com>, YeJin Cho <cho.yejin@samsung.com>, YoungHwan An <younghwan_.an@samsung.com>
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  */
21
22 #include <gst/gst.h>
23 #include <string.h>
24
25 #include <mm_types.h>
26 #include <mm_message.h>
27
28 #include "mm_player.h"
29 #include "mm_player_priv.h"
30 #include "mm_player_attrs.h"
31 #include "mm_player_utils.h"
32 #include "mm_player_ini.h"
33 #include "mm_debug.h"
34 #include "mm_player_capture.h"
35
36 int mm_player_create(MMHandleType *player)
37 {
38         int result = MM_ERROR_NONE;
39         mm_player_t* new_player = NULL;
40
41         debug_log("\n");
42
43         return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
44
45         if (!g_thread_supported ())
46                 g_thread_init (NULL);
47
48         MMTA_INIT();
49
50         __ta__("mm_player_ini_load",
51         result = mm_player_ini_load();
52         )
53         if(result != MM_ERROR_NONE)
54                 return result;
55
56         __ta__("mm_player_audio_effect_ini_load",
57         result = mm_player_audio_effect_ini_load();
58         )
59         if(result != MM_ERROR_NONE)
60                 return result;
61
62         /* alloc player structure */
63         new_player = g_malloc(sizeof(mm_player_t));
64         if ( ! new_player )
65         {
66                 debug_critical("Cannot allocate memory for player\n");
67                 goto ERROR;
68         }
69         memset(new_player, 0, sizeof(mm_player_t));
70
71         /* create player lock */
72         new_player->cmd_lock = g_mutex_new();
73
74         if ( ! new_player->cmd_lock )
75         {
76                 debug_critical("failed to create player lock\n");
77                 goto ERROR;
78         }
79
80         /* create msg callback lock */
81         new_player->msg_cb_lock = g_mutex_new();
82
83         if ( ! new_player->msg_cb_lock )
84         {
85                 debug_critical("failed to create msg cb lock\n");
86                 goto ERROR;
87         }
88         __ta__("[KPI] create media player service",
89         result = _mmplayer_create_player((MMHandleType)new_player);
90         )
91
92         if(result != MM_ERROR_NONE)
93                 goto ERROR;
94
95         *player = (MMHandleType)new_player;
96
97         return result;
98
99 ERROR:
100
101         if ( new_player )
102         {
103                 if (new_player->cmd_lock)
104                 {
105                         g_mutex_free(new_player->cmd_lock);
106                         new_player->cmd_lock = NULL;
107                 }
108
109                 _mmplayer_destroy( (MMHandleType)new_player );
110                 MMPLAYER_FREEIF( new_player );
111         }
112
113         *player = (MMHandleType)0;
114         return MM_ERROR_PLAYER_NO_FREE_SPACE; // are you sure?
115 }
116
117 int  mm_player_destroy(MMHandleType player)
118 {
119         int result = MM_ERROR_NONE;
120
121         debug_log("\n");
122
123         return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
124
125         MMPLAYER_CMD_LOCK( player );
126
127         __ta__("[KPI] destroy media player service",
128         result = _mmplayer_destroy(player);
129         )
130
131         MMPLAYER_CMD_UNLOCK( player );
132
133         if (((mm_player_t*)player)->cmd_lock)
134         {
135                 g_mutex_free(((mm_player_t*)player)->cmd_lock);
136                 ((mm_player_t*)player)->cmd_lock = NULL;
137         }
138
139         memset( (mm_player_t*)player, 0x00, sizeof(mm_player_t) );
140
141         /* free player */
142         g_free( (void*)player );
143
144         MMTA_ACUM_ITEM_SHOW_RESULT_TO(MMTA_SHOW_FILE);
145
146         MMTA_RELEASE();
147
148         return result;
149 }
150
151 int mm_player_realize(MMHandleType player)
152 {
153         int result = MM_ERROR_NONE;
154
155         debug_log("\n");
156
157         return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
158
159         MMPLAYER_CMD_LOCK( player );
160
161         __ta__("[KPI] initialize media player service",
162         result = _mmplayer_realize(player);
163         )
164
165         MMPLAYER_CMD_UNLOCK( player );
166
167         return result;
168 }
169
170 int mm_player_unrealize(MMHandleType player)
171 {
172         int result = MM_ERROR_NONE;
173
174         debug_log("\n");
175
176         return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
177
178         MMPLAYER_CMD_LOCK( player );
179
180         __ta__("[KPI] cleanup media player service",
181         result = _mmplayer_unrealize(player);
182         )
183
184         MMPLAYER_CMD_UNLOCK( player );
185
186         return result;
187 }
188
189 int mm_player_set_message_callback(MMHandleType player, MMMessageCallback callback, void *user_param)
190 {
191         int result = MM_ERROR_NONE;
192
193         debug_log("\n");
194
195         return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
196
197         MMPLAYER_CMD_LOCK( player );
198
199         result = _mmplayer_set_message_callback(player, callback, user_param);
200
201         MMPLAYER_CMD_UNLOCK( player );
202
203         return result;
204 }
205
206 int mm_player_set_pd_message_callback(MMHandleType player, MMMessageCallback callback, void *user_param)
207 {
208         int result = MM_ERROR_NONE;
209
210         debug_log("\n");
211
212         return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
213
214         result = _mm_player_set_pd_downloader_message_cb(player, callback, user_param);
215
216         return result;
217 }
218
219 int mm_player_set_audio_stream_callback(MMHandleType player, mm_player_audio_stream_callback callback, void *user_param)
220 {
221         int result = MM_ERROR_NONE;
222
223         debug_log("\n");
224
225         return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
226
227         MMPLAYER_CMD_LOCK( player );
228
229         result = _mmplayer_set_audiostream_cb(player, callback, user_param);
230
231         MMPLAYER_CMD_UNLOCK( player );
232
233         return result;
234 }
235
236 int mm_player_set_audio_buffer_callback(MMHandleType player, mm_player_audio_stream_callback callback, void *user_param)
237 {
238         int result = MM_ERROR_NONE;
239
240         debug_log("\n");
241
242         return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
243
244         MMPLAYER_CMD_LOCK( player );
245
246         result = _mmplayer_set_audiobuffer_cb(player, callback, user_param);
247
248         MMPLAYER_CMD_UNLOCK( player );
249
250         return result;
251 }
252
253 int mm_player_set_video_stream_callback(MMHandleType player, mm_player_video_stream_callback callback, void *user_param)
254 {
255         int result = MM_ERROR_NONE;
256
257         debug_log("\n");
258
259         return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
260
261         MMPLAYER_CMD_LOCK( player );
262
263         result = _mmplayer_set_videostream_cb(player, callback, user_param);
264
265         MMPLAYER_CMD_UNLOCK( player );
266
267         return result;
268 }
269
270 int mm_player_set_video_frame_render_error_callback(MMHandleType player, mm_player_video_frame_render_error_callback callback, void *user_param)
271 {
272         int result = MM_ERROR_NONE;
273
274         debug_log("\n");
275
276         return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
277
278         MMPLAYER_CMD_LOCK( player );
279
280         result = _mmplayer_set_videoframe_render_error_cb(player, callback, user_param);
281
282         MMPLAYER_CMD_UNLOCK( player );
283
284         return result;
285 }
286
287 int mm_player_do_video_capture(MMHandleType player)
288 {
289         int result = MM_ERROR_NONE;
290
291         debug_log("\n");
292
293         return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
294
295         MMPLAYER_CMD_LOCK( player );
296
297         result = _mmplayer_do_video_capture(player);
298
299         MMPLAYER_CMD_UNLOCK( player );
300
301         return result;
302 }
303
304 int mm_player_set_buffer_need_data_callback(MMHandleType player, mm_player_buffer_need_data_callback callback, void * user_param)
305 {
306         int result = MM_ERROR_NONE;
307
308         debug_log("\n");
309
310         return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
311
312         MMPLAYER_CMD_LOCK( player );
313
314         result = _mmplayer_set_buffer_need_data_cb(player, callback, user_param);
315
316         MMPLAYER_CMD_UNLOCK( player );
317
318         return result;
319 }
320
321 int mm_player_set_buffer_enough_data_callback(MMHandleType player, mm_player_buffer_enough_data_callback callback, void * user_param)
322 {
323         int result = MM_ERROR_NONE;
324
325         debug_log("\n");
326
327         return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
328
329         MMPLAYER_CMD_LOCK( player );
330
331         result = _mmplayer_set_buffer_enough_data_cb(player, callback, user_param);
332
333         MMPLAYER_CMD_UNLOCK( player );
334
335         return result;
336 }
337
338
339 int mm_player_set_buffer_seek_data_callback(MMHandleType player, mm_player_buffer_seek_data_callback callback, void * user_param)
340 {
341         int result = MM_ERROR_NONE;
342
343         debug_log("\n");
344
345         return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
346
347         MMPLAYER_CMD_LOCK( player );
348
349         result = _mmplayer_set_buffer_seek_data_cb(player, callback, user_param);
350
351         MMPLAYER_CMD_UNLOCK( player );
352
353         return result;
354 }
355
356 int mm_player_set_volume(MMHandleType player, MMPlayerVolumeType *volume)
357 {
358         int result = MM_ERROR_NONE;
359
360         debug_log("\n");
361
362         return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
363         return_val_if_fail(volume, MM_ERROR_INVALID_ARGUMENT);
364
365         MMPLAYER_CMD_LOCK( player );
366
367         result = _mmplayer_set_volume(player, *volume);
368
369         MMPLAYER_CMD_UNLOCK( player );
370
371         return result;
372 }
373
374 int mm_player_get_volume(MMHandleType player, MMPlayerVolumeType *volume)
375 {
376         int result = MM_ERROR_NONE;
377
378         debug_log("\n");
379
380         return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
381         return_val_if_fail(volume, MM_ERROR_INVALID_ARGUMENT);
382
383         MMPLAYER_CMD_LOCK( player );
384
385         result = _mmplayer_get_volume(player, volume);
386
387         MMPLAYER_CMD_UNLOCK( player );
388
389         return result;
390 }
391
392 int mm_player_set_mute(MMHandleType player, int mute)
393 {
394         int result = MM_ERROR_NONE;
395
396         debug_log("\n");
397
398         return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
399
400         MMPLAYER_CMD_LOCK( player );
401
402         result = _mmplayer_set_mute(player, mute);
403
404         MMPLAYER_CMD_UNLOCK( player );
405
406         return result;
407 }
408
409 int mm_player_get_mute(MMHandleType player, int *mute)
410 {
411         int result = MM_ERROR_NONE;
412
413         debug_log("\n");
414
415         return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
416         return_val_if_fail(mute, MM_ERROR_INVALID_ARGUMENT);
417
418         MMPLAYER_CMD_LOCK( player );
419
420         result = _mmplayer_get_mute(player, mute);
421
422         MMPLAYER_CMD_UNLOCK( player );
423
424         return result;
425 }
426
427 int mm_player_get_state(MMHandleType player, MMPlayerStateType *state)
428 {
429         int result = MM_ERROR_NONE;
430
431         debug_log("\n");
432
433         return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
434         return_val_if_fail(state, MM_ERROR_COMMON_INVALID_ARGUMENT);
435
436         *state = MM_PLAYER_STATE_NULL;
437
438         result = _mmplayer_get_state(player, (int*)state);
439
440         return result;
441 }
442
443 /* NOTE : Not supported */
444 int mm_player_change_videosink(MMHandleType player, MMDisplaySurfaceType display_surface_type, void *display_overlay)
445 {
446         int result = MM_ERROR_NONE;
447
448         debug_log("\n");
449
450         return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
451
452         return MM_ERROR_NOT_SUPPORT_API;
453 }
454
455 int mm_player_push_buffer(MMHandleType player, unsigned char *buf, int size)
456 {
457         int result = MM_ERROR_NONE;
458
459         debug_log("\n");
460
461         return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
462
463         //MMPLAYER_CMD_LOCK( player );
464
465         //MMTA_ACUM_ITEM_BEGIN("[KPI] start media player service", false);
466         result = _mmplayer_push_buffer(player, buf, size);
467
468         //MMPLAYER_CMD_UNLOCK( player );
469
470         return result;
471 }
472
473 int mm_player_start(MMHandleType player)
474 {
475         int result = MM_ERROR_NONE;
476
477         debug_log("\n");
478
479         return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
480
481         MMPLAYER_CMD_LOCK( player );
482
483         MMTA_ACUM_ITEM_BEGIN("[KPI] start media player service", false);
484         result = _mmplayer_start(player);
485
486         MMPLAYER_CMD_UNLOCK( player );
487
488         return result;
489 }
490
491 int  mm_player_stop(MMHandleType player)
492 {
493         int result = MM_ERROR_NONE;
494
495         debug_log("\n");
496
497         return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
498
499         MMPLAYER_CMD_LOCK( player );
500
501         __ta__("[KPI] stop media player service",
502         result = _mmplayer_stop(player);
503         )
504
505         MMPLAYER_CMD_UNLOCK( player );
506
507         return result;
508 }
509
510 int mm_player_pause(MMHandleType player)
511 {
512         int result = MM_ERROR_NONE;
513
514         debug_log("\n");
515
516         return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
517
518         MMPLAYER_CMD_LOCK( player );
519
520         __ta__("[KPI] pause media player service",
521         result = _mmplayer_pause(player);
522         )
523
524         MMPLAYER_CMD_UNLOCK( player );
525
526         return result;
527 }
528
529 int mm_player_resume(MMHandleType player)
530 {
531         int result = MM_ERROR_NONE;
532
533         debug_log("\n");
534
535         return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
536
537         MMPLAYER_CMD_LOCK( player );
538
539         __ta__("[KPI] resume media player service",
540         result = _mmplayer_resume(player);
541         )
542
543         MMPLAYER_CMD_UNLOCK( player );
544
545         return result;
546 }
547
548 int mm_player_activate_section_repeat(MMHandleType player, int start_pos, int end_pos)
549 {
550         int result = MM_ERROR_NONE;
551
552         return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
553
554         MMPLAYER_CMD_LOCK( player );
555
556         result = _mmplayer_activate_section_repeat(player, start_pos, end_pos);
557
558         MMPLAYER_CMD_UNLOCK( player );
559
560         return result;
561 }
562
563 int mm_player_deactivate_section_repeat(MMHandleType player)
564 {
565         int result = MM_ERROR_NONE;
566
567         return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
568
569         MMPLAYER_CMD_LOCK( player );
570
571         result = _mmplayer_deactivate_section_repeat(player);
572
573         MMPLAYER_CMD_UNLOCK( player );
574
575         return result;
576 }
577
578 int mm_player_set_play_speed(MMHandleType player, float rate)
579 {
580         int result = MM_ERROR_NONE;
581
582         return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
583
584         MMPLAYER_CMD_LOCK( player );
585
586         result = _mmplayer_set_playspeed(player, rate);
587
588         MMPLAYER_CMD_UNLOCK( player );
589
590         return result;
591 }
592
593 int mm_player_set_position(MMHandleType player, MMPlayerPosFormatType format, int pos)
594 {
595         int result = MM_ERROR_NONE;
596
597         debug_log("\n");
598
599         return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
600
601         if (format >= MM_PLAYER_POS_FORMAT_NUM)
602         {
603                 debug_error("wrong format\n");
604                 return MM_ERROR_COMMON_INVALID_ARGUMENT;
605         }
606
607         MMPLAYER_CMD_LOCK( player );
608
609         result = _mmplayer_set_position(player, format, pos);
610
611         MMPLAYER_CMD_UNLOCK( player );
612
613         return result;
614 }
615
616 int mm_player_get_position(MMHandleType player, MMPlayerPosFormatType format, int *pos)
617 {
618         int result = MM_ERROR_NONE;
619
620         debug_log("\n");
621
622         return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
623         return_val_if_fail(pos, MM_ERROR_COMMON_INVALID_ARGUMENT);
624
625         if (format >= MM_PLAYER_POS_FORMAT_NUM)
626         {
627                 debug_error("wrong format\n");
628                 return MM_ERROR_COMMON_INVALID_ARGUMENT;
629         }
630
631         MMPLAYER_CMD_LOCK( player );
632
633         result = _mmplayer_get_position(player, (int)format, (unsigned long*)pos);
634
635         MMPLAYER_CMD_UNLOCK( player );
636
637         return result;
638 }
639
640 int mm_player_get_buffer_position(MMHandleType player, MMPlayerPosFormatType format, int  *start_pos, int  *stop_pos)
641 {
642         int result = MM_ERROR_NONE;
643
644         debug_log("\n");
645
646         return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
647         return_val_if_fail(start_pos && stop_pos, MM_ERROR_COMMON_INVALID_ARGUMENT);
648
649         MMPLAYER_CMD_LOCK( player );
650
651         result = _mmplayer_get_buffer_position(player, (int)format, (unsigned long*)start_pos, (unsigned long*)stop_pos );
652
653         MMPLAYER_CMD_UNLOCK( player );
654
655         return result;
656 }
657
658 int mm_player_adjust_subtitle_position(MMHandleType player, MMPlayerPosFormatType format, int pos)
659 {
660         int result = MM_ERROR_NONE;
661
662         debug_log("\n");
663
664         return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
665
666         if (format >= MM_PLAYER_POS_FORMAT_NUM)
667         {
668                 debug_error("wrong format\n");
669                 return MM_ERROR_COMMON_INVALID_ARGUMENT;
670         }
671
672         MMPLAYER_CMD_LOCK( player );
673
674         result = _mmplayer_adjust_subtitle_postion(player, format, pos);
675
676         MMPLAYER_CMD_UNLOCK( player );
677
678         return result;
679 }
680
681 int mm_player_set_subtitle_silent(MMHandleType player, int silent)
682 {
683         int result = MM_ERROR_NONE;
684
685         debug_log("\n");
686
687         return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
688
689         MMPLAYER_CMD_LOCK( player );
690
691         result = _mmplayer_set_subtitle_silent(player, silent);
692
693         MMPLAYER_CMD_UNLOCK( player );
694
695         return result;
696 }
697
698 int mm_player_get_subtitle_silent(MMHandleType player, int* silent)
699 {
700         int result = MM_ERROR_NONE;
701
702         debug_log("\n");
703
704         return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
705
706         MMPLAYER_CMD_LOCK( player );
707
708         result = _mmplayer_get_subtitle_silent(player, silent);
709
710         MMPLAYER_CMD_UNLOCK( player );
711
712         return result;
713 }
714
715 int mm_player_set_attribute(MMHandleType player,  char **err_attr_name, const char *first_attribute_name, ...)
716 {
717         int result = MM_ERROR_NONE;
718         va_list var_args;
719
720         debug_log("\n");
721
722         return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
723         return_val_if_fail(first_attribute_name, MM_ERROR_COMMON_INVALID_ARGUMENT);
724
725         va_start (var_args, first_attribute_name);
726         result = _mmplayer_set_attribute(player, err_attr_name, first_attribute_name, var_args);
727         va_end (var_args);
728
729         return result;
730 }
731
732 int mm_player_get_attribute(MMHandleType player,  char **err_attr_name, const char *first_attribute_name, ...)
733 {
734         int result = MM_ERROR_NONE;
735         va_list var_args;
736
737         debug_log("\n");
738
739         return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
740         return_val_if_fail(first_attribute_name, MM_ERROR_COMMON_INVALID_ARGUMENT);
741
742         va_start (var_args, first_attribute_name);
743         result = _mmplayer_get_attribute(player, err_attr_name, first_attribute_name, var_args);
744         va_end (var_args);
745
746         return result;
747 }
748
749 int mm_player_get_attribute_info(MMHandleType player,  const char *attribute_name, MMPlayerAttrsInfo *info)
750 {
751         int result = MM_ERROR_NONE;
752         debug_log("\n");
753
754         return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
755         return_val_if_fail(attribute_name, MM_ERROR_COMMON_INVALID_ARGUMENT);
756         return_val_if_fail(info, MM_ERROR_COMMON_INVALID_ARGUMENT);
757
758         result = _mmplayer_get_attributes_info((MMHandleType)player, attribute_name, info);
759
760         return result;
761 }
762
763 int mm_player_get_pd_status(MMHandleType player, guint64 *current_pos, guint64 *total_size)
764 {
765         int result = MM_ERROR_NONE;
766
767         debug_log("\n");
768
769         return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
770         return_val_if_fail(current_pos, MM_ERROR_COMMON_INVALID_ARGUMENT);
771         return_val_if_fail(total_size, MM_ERROR_COMMON_INVALID_ARGUMENT);
772
773         result = _mmplayer_get_pd_downloader_status(player, current_pos, total_size);
774
775         return result;
776 }
777
778 int mm_player_get_track_count(MMHandleType player, MMPlayerTrackType track_type, int *count)
779 {
780         int result = MM_ERROR_NONE;
781
782         debug_log("\n");
783
784         return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
785         return_val_if_fail(count, MM_ERROR_COMMON_INVALID_ARGUMENT);
786
787         result = _mmplayer_get_track_count(player, track_type, count);
788
789         return result;
790
791 }
792
793 int mm_player_ignore_session(MMHandleType player)
794 {
795         int result = MM_ERROR_NONE;
796
797         debug_log("\n");
798
799         return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
800
801         result = _mmplayer_asm_ignore_session(player);
802
803         return result;
804 }