Apply Viewer options and more functions
[apps/core/preloaded/message-app.git] / viewer / smil-player / src / msg-smil-player.c
1 /*
2  * Copyright 2012  Samsung Electronics Co., Ltd
3  *
4  * Licensed under the Flora License, Version 1.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
7  *
8  *    http://www.tizenopensource.org/license
9  *
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.
15  */
16
17 /*==================================================================================================
18  *                                                                      INCLUDE HEADERS
19  *==================================================================================================*/
20 #include "msg-smil-types.h"
21 #include "msg-smil-player.h"
22 #include "msg-smil-util.h"
23
24 /*================================================================================================
25  *                                                              FUNCTION IMPLEMENTATIONS
26  *================================================================================================*/
27 MSG_SMIL_ERROR_E _msg_smil_create_smil_player(msg_struct_t msg_info_t, void *callBack, void *userData, void **instance)
28 {
29         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
30         MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, msg_info_t == NULL, MSG_ERR_SMIL_NULL_MESSAGE);
31         MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, callBack == NULL, MSG_ERR_SMIL_INVALID_PARAMETER);
32         MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, userData == NULL, MSG_ERR_SMIL_INVALID_PARAMETER);
33         MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, instance == NULL, MSG_ERR_SMIL_INVALID_PARAMETER);
34         MSG_SMIL_ERROR_E err = MSG_ERR_SMIL_UNKNOWN;
35         SMIL_HANDLER_S *smilPlayerHndle = NULL;
36
37         /*Allocate memory for smilPlayerHandler*/
38         smilPlayerHndle = (SMIL_HANDLER_S *)calloc(1, sizeof(SMIL_HANDLER_S));
39         if (smilPlayerHndle == NULL) {
40                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
41                 *instance = NULL;
42                 return MSG_ERR_SMIL_INVALID_STORAGE;
43         }
44
45         /*Create Content Manager Handler*/
46         err = _msg_smil_create_content_mgr(msg_info_t, &smilPlayerHndle->smilContMgrHndle);
47         if (err != MSG_SMIL_SUCCESS) {
48                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_create_content_mgr is failed");
49                 if (smilPlayerHndle) {
50                         free(smilPlayerHndle);
51                         smilPlayerHndle = NULL;
52                 }
53                 *instance = NULL;
54                 return err;
55         }
56
57         /*Create Event Manager Handler*/
58         err = _msg_smil_create_event_mgr(callBack, userData, &smilPlayerHndle->smilEvntMgrHndle);
59         if (err != MSG_SMIL_SUCCESS) {
60                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_create_event_mgr is failed");
61                 _msg_smil_destroy_content_mgr(smilPlayerHndle->smilContMgrHndle);
62                 smilPlayerHndle->smilContMgrHndle = NULL;
63
64                 if (smilPlayerHndle) {
65                         free(smilPlayerHndle);
66                         smilPlayerHndle = NULL;
67                 }
68                 *instance = NULL;
69                 return err;
70         }
71         smilPlayerHndle->smilEvntMgrHndle->smilhandle = smilPlayerHndle;
72
73         /*Create & Initialize Reder handle*/
74         err = _msg_smil_create_render(&smilPlayerHndle->smilRenderer);
75         if (err != MSG_SMIL_SUCCESS) {
76                 _msg_smil_destroy_content_mgr(smilPlayerHndle->smilContMgrHndle);
77                 smilPlayerHndle->smilContMgrHndle = NULL;
78
79                 _msg_smil_destroy_event_mgr(smilPlayerHndle->smilEvntMgrHndle);
80                 smilPlayerHndle->smilEvntMgrHndle = NULL;
81
82                 if (smilPlayerHndle) {
83                         free(smilPlayerHndle);
84                         smilPlayerHndle = NULL;
85                 }
86                 *instance = NULL;
87                 return err;
88         }
89         _msg_smil_init_render(smilPlayerHndle->smilRenderer);
90         smilPlayerHndle->smilRenderer->msg_info_t = msg_info_t;
91         smilPlayerHndle->smilRenderer->smilhandle = smilPlayerHndle;
92
93         *instance = (void *)smilPlayerHndle;
94
95         MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
96         return MSG_SMIL_SUCCESS;
97 }
98
99
100 void _msg_smil_destroy_smil_player(void *smilhandle)
101 {
102         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
103         SMIL_HANDLER_S *smilPlayerHndle = (SMIL_HANDLER_S *)smilhandle;
104         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, smilPlayerHndle == NULL);
105
106         _msg_smil_destroy_content_mgr(smilPlayerHndle->smilContMgrHndle);
107         smilPlayerHndle->smilContMgrHndle = NULL;
108
109         _msg_smil_destroy_event_mgr(smilPlayerHndle->smilEvntMgrHndle);
110         smilPlayerHndle->smilEvntMgrHndle = NULL;
111
112         _msg_smil_destroy_render(smilPlayerHndle->smilRenderer);
113         smilPlayerHndle->smilRenderer = NULL;
114
115         free(smilPlayerHndle);
116
117         MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
118 }
119
120
121 SMIL_CONTENT_MGR_HANDLE_S *_msg_smil_get_content_mgr(void *hSmilHandle)
122 {
123         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
124         MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, hSmilHandle == NULL, PLAYER_STATUS_NONE);
125         SMIL_HANDLER_S *smilPlayerHndle = (SMIL_HANDLER_S *)hSmilHandle;
126
127         return smilPlayerHndle->smilContMgrHndle;
128 }
129
130
131 SMIL_EVENT_MGR_HANDLE_S *_msg_smil_get_event_mgr(void *hSmilHandle)
132 {
133         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
134         MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, hSmilHandle == NULL, NULL);
135         SMIL_HANDLER_S *smilPlayerHndle = (SMIL_HANDLER_S *)hSmilHandle;
136
137         return smilPlayerHndle->smilEvntMgrHndle;
138 }
139
140
141 SMIL_RENDERER_DATA_S *_msg_smil_get_renderder(void *hSmilHandle)
142 {
143         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
144         MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, hSmilHandle == NULL, NULL);
145         SMIL_HANDLER_S *smilPlayerHndle = (SMIL_HANDLER_S *)hSmilHandle;
146
147         return smilPlayerHndle->smilRenderer;
148 }
149
150
151 int _msg_smil_get_current_slide_idx(void *hSmilHandle)
152 {
153         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
154         MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, hSmilHandle == NULL, MSG_MMS_SLIDE_INVALID);
155         SMIL_HANDLER_S *smilPlayerHndle = (SMIL_HANDLER_S *)hSmilHandle;
156
157         return _msg_smil_cont_mgr_get_cur_slide_idx(smilPlayerHndle->smilContMgrHndle);
158 }
159
160
161 SMIL_PLAYER_STATUS_E _msg_smil_get_current_slide_status(void *hSmilHandle)
162 {
163         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
164         MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, hSmilHandle == NULL, PLAYER_STATUS_NONE);
165         SMIL_HANDLER_S *smilPlayerHndle = (SMIL_HANDLER_S *)hSmilHandle;
166
167         return _msg_smil_cont_mgr_get_cur_slide_status(smilPlayerHndle->smilContMgrHndle);
168 }
169
170
171 SMIL_SLIDE_INFO_S *_msg_smil_get_current_slide_info(void *hSmilHandle)
172 {
173         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
174         MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, hSmilHandle == NULL, PLAYER_STATUS_NONE);
175         SMIL_HANDLER_S *smilPlayerHndle = (SMIL_HANDLER_S *)hSmilHandle;
176
177         return _msg_smil_cont_mgr_get_cur_slide(smilPlayerHndle->smilContMgrHndle);
178 }
179
180
181 MSG_SMIL_ERROR_E _msg_smil_player_on_slide_event_handler(void **hSmilHandle, SMIL_PLAYER_EVENT_E playerEvent)
182 {
183         MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, playerEvent == PLAYER_EVENT_NONE, MSG_ERR_SMIL_EVENT_NONE);
184         SMIL_HANDLER_S *smilPlayerHndle = (SMIL_HANDLER_S *)(*hSmilHandle);
185         MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilPlayerHndle == NULL, MSG_ERR_SMIL_NULL_MESSAGE);
186         int slideIdx = 0;
187         int mediaType = MMS_SMIL_MEDIA_INVALID;
188         MSG_SMIL_ERROR_E err = MSG_ERR_SMIL_UNKNOWN;
189         SMIL_TIMER_CALLBACK_DATA_S *slideTimerCbData = _msg_smil_event_mgr_get_timer_cb_data(smilPlayerHndle->smilEvntMgrHndle);
190         SMIL_SLIDE_EVENT_PARAM_S *curSlideParam = _msg_smil_event_mgr_get_slide_event_param_data(smilPlayerHndle->smilEvntMgrHndle);
191
192         MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, slideTimerCbData == NULL, MSG_ERR_SMIL_NULL_MESSAGE);
193         MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, curSlideParam == NULL, MSG_ERR_SMIL_NULL_MESSAGE);
194         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "playerEvent = %d", playerEvent);
195
196         if (_msg_smil_event_mgr_is_slide_active(smilPlayerHndle->smilEvntMgrHndle)) {
197                 SMIL_SLIDE_INFO_S *curSlide = _msg_smil_cont_mgr_get_cur_slide(smilPlayerHndle->smilContMgrHndle);
198                 if (curSlide->pageInfo) {
199                         // if page has audio or video, image and text is not needed to checked.
200                         if (curSlide->pageInfo->hasAudio )
201                                 mediaType = MMS_SMIL_MEDIA_AUDIO;
202                         else if (curSlide->pageInfo->hasVideo)
203                                 mediaType = MMS_SMIL_MEDIA_VIDEO;
204                         else if (curSlide->pageInfo->hasImage)
205                                 mediaType = MMS_SMIL_MEDIA_IMG;
206                         else if (curSlide->pageInfo->hasText)
207                                 mediaType = MMS_SMIL_MEDIA_TEXT;
208                 }
209                 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "mediaType = %d", mediaType);
210         }
211
212         /* PREV/NEXT EVENT skip condition*/
213         if (playerEvent == PLAYER_EVENT_PREV_SLIDE) {
214                 if (_msg_smil_event_mgr_is_slide_active(smilPlayerHndle->smilEvntMgrHndle)) {
215                         int current_slide = _msg_smil_cont_mgr_get_cur_slide_idx(smilPlayerHndle->smilContMgrHndle);
216                         int total_page_count = _msg_smil_cont_mgr_get_total_slide_count(smilPlayerHndle->smilContMgrHndle);
217                         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "current_slide = %d, total_page_count = %d", current_slide, total_page_count);
218
219                         /*if first page or multipart.mixed message, then return err*/
220                         if (current_slide == 0 || total_page_count == 0) {
221                                 return MSG_ERR_SMIL_INVALID_SLIDE;
222                         }
223                 }
224         } else if (playerEvent == PLAYER_EVENT_NEXT_SLIDE) {
225                 if (_msg_smil_event_mgr_is_slide_active(smilPlayerHndle->smilEvntMgrHndle)) {
226                         MSG_BOOL isLastSlide = curSlideParam->isLastSlide;
227                         int total_page_count = _msg_smil_cont_mgr_get_total_slide_count(smilPlayerHndle->smilContMgrHndle);
228                         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "isLastSlide = %d, total_page_count = %d", isLastSlide, total_page_count);
229
230                         /*if last page or multipart.mixed message, then return err*/
231                         if (isLastSlide || total_page_count == 0) {
232                                 return MSG_ERR_SMIL_INVALID_SLIDE;
233                         }
234                 }
235         }
236
237         switch (playerEvent) {
238         case PLAYER_EVENT_ROTATE_WINDOW:
239                 _msg_smil_render_rotate_video_window(smilPlayerHndle->smilRenderer);
240                 err = MSG_SMIL_SUCCESS;
241                 break;
242         case PLAYER_EVENT_PLAY:
243                 _msg_smil_event_mgr_set_video_endofstream(smilPlayerHndle->smilEvntMgrHndle, FALSE);
244                 if (slideTimerCbData->timerHandle) {
245                         err = _msg_smil_event_mgr_stop_slide(smilPlayerHndle->smilEvntMgrHndle);
246                         if (err != MSG_SMIL_SUCCESS) {
247                                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_stop_slide is failed: PLAYER_EVENT_PLAY_SLIDE");
248                                 return err;
249                         }
250
251                         _msg_smil_render_stop_playing_file(smilPlayerHndle->smilRenderer);
252                 }
253
254                 _msg_smil_event_mgr_set_current_slide(smilPlayerHndle->smilEvntMgrHndle, NULL);
255                 _msg_smil_event_mgr_set_page_action_type(smilPlayerHndle->smilEvntMgrHndle, PAGE_EVENT_PLAY);
256                 err = _msg_smil_event_mgr_play_slide(smilPlayerHndle->smilEvntMgrHndle, slideIdx);
257                 if (err != MSG_SMIL_SUCCESS) {
258                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_play_slide is failed: PLAYER_EVENT_PLAY");
259                         return err;
260                 }
261                 break;
262         case PLAYER_EVENT_PREVIEW_PLAY:
263                 _msg_smil_event_mgr_set_video_endofstream(smilPlayerHndle->smilEvntMgrHndle, FALSE);
264                 if (slideTimerCbData->timerHandle) {
265                         err = _msg_smil_event_mgr_stop_slide(smilPlayerHndle->smilEvntMgrHndle);
266                         if (err != MSG_SMIL_SUCCESS) {
267                                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_stop_slide is failed: PLAYER_EVENT_PLAY_SLIDE");
268                                 return err;
269                         }
270
271                         _msg_smil_render_stop_playing_file(smilPlayerHndle->smilRenderer);
272                 }
273
274                 _msg_smil_cont_mgr_delete_help_page(smilPlayerHndle->smilRenderer->msg_info_t, smilPlayerHndle->smilContMgrHndle);      //delete help page
275                 _msg_smil_event_mgr_set_current_slide(smilPlayerHndle->smilEvntMgrHndle, NULL);
276                 _msg_smil_event_mgr_set_page_action_type(smilPlayerHndle->smilEvntMgrHndle, PAGE_EVENT_PLAY);
277                 err = _msg_smil_event_mgr_play_slide(smilPlayerHndle->smilEvntMgrHndle, slideIdx);
278                 if (err != MSG_SMIL_SUCCESS) {
279                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_play_slide is failed: PLAYER_EVENT_PREVIEW_PLAY");
280                         return err;
281                 }
282                 break;
283         case PLAYER_EVENT_PAUSE:
284                 err = _msg_smil_event_mgr_pause_slide(smilPlayerHndle->smilEvntMgrHndle);
285                 if (err != MSG_SMIL_SUCCESS) {
286                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_pause_slide is failed: PLAYER_EVENT_PAUSE");
287                         if (slideTimerCbData->timerHandle == NULL) {
288                                 int pageIdx = _msg_smil_cont_mgr_get_cur_slide_idx(smilPlayerHndle->smilContMgrHndle);
289                                 _msg_smil_event_mgr_resume_slide(smilPlayerHndle->smilEvntMgrHndle, pageIdx);
290                         }
291
292                         return err;
293                 }
294
295                 if (_msg_smil_render_pause(smilPlayerHndle->smilRenderer, mediaType) == FALSE) {
296                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_render_pause is failed: PLAYER_EVENT_PAUSE");
297                         int pageIdx = _msg_smil_cont_mgr_get_cur_slide_idx(smilPlayerHndle->smilContMgrHndle);
298                         _msg_smil_event_mgr_resume_slide(smilPlayerHndle->smilEvntMgrHndle, pageIdx);
299
300                         return MSG_ERR_SMIL_PAUSE_SLIDE_RENDER_FAILURE;
301                 }
302                 break;
303         case PLAYER_EVENT_STOP:
304                 /*reset event media info*/
305                 _msg_smil_event_mgr_set_is_video_media(smilPlayerHndle->smilEvntMgrHndle, FALSE);
306                 _msg_smil_event_mgr_set_unsupported_content(smilPlayerHndle->smilEvntMgrHndle, FALSE);
307                 _msg_smil_event_mgr_set_invalid_video_ro(smilPlayerHndle->smilEvntMgrHndle, FALSE);
308                 _msg_smil_event_mgr_set_video_endofstream(smilPlayerHndle->smilEvntMgrHndle, FALSE);
309                 _msg_smil_event_mgr_set_last_slide(smilPlayerHndle->smilEvntMgrHndle, FALSE);
310
311                 err = _msg_smil_event_mgr_stop_slide(smilPlayerHndle->smilEvntMgrHndle);
312                 if (err != MSG_SMIL_SUCCESS) {
313                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_stop_slide is failed: PLAYER_EVENT_STOP");
314                         return err;
315                 }
316                 _msg_smil_render_stop_playing_file(smilPlayerHndle->smilRenderer);
317                 break;
318         case PLAYER_EVENT_RESUME:
319                 err = _msg_smil_event_mgr_resume_slide(smilPlayerHndle->smilEvntMgrHndle, _msg_smil_cont_mgr_get_cur_slide_idx(smilPlayerHndle->smilContMgrHndle));
320                 if (err != MSG_SMIL_SUCCESS) {
321                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_resume_slide is failed; PLAYER_EVENT_RESUME");
322                         return err;
323                 }
324
325                 if (_msg_smil_render_resume(smilPlayerHndle->smilRenderer, mediaType) == FALSE) {
326                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_render_resume is failed: PLAYER_EVENT_RESUME");
327                         return MSG_ERR_SMIL_RESUME_SLIDE_RENDER_FAILURE;
328                 }
329                 break;
330         case PLAYER_EVENT_NEXT_SLIDE:
331                 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PLAYER_EVENT_NEXT_SLIDE");
332                 err = _msg_smil_event_mgr_stop_slide(smilPlayerHndle->smilEvntMgrHndle);
333                 if (err != MSG_SMIL_SUCCESS) {
334                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_stop_slide is failed: PLAYER_EVENT_NEXT_SLIDE");
335                         return err;
336                 }
337                 _msg_smil_render_stop_playing_file(smilPlayerHndle->smilRenderer);
338
339                 _msg_smil_event_mgr_set_is_video_media(smilPlayerHndle->smilEvntMgrHndle, FALSE);
340                 _msg_smil_event_mgr_set_unsupported_content(smilPlayerHndle->smilEvntMgrHndle, FALSE);
341                 _msg_smil_event_mgr_set_invalid_video_ro(smilPlayerHndle->smilEvntMgrHndle, FALSE);
342                 _msg_smil_event_mgr_set_video_endofstream(smilPlayerHndle->smilEvntMgrHndle, FALSE);
343                 _msg_smil_event_mgr_set_page_action_type(smilPlayerHndle->smilEvntMgrHndle, PAGE_EVENT_MOVE_TO_NEXT);
344
345                 /*Incrementing the slide index in order to move to the next slide*/
346                 slideIdx = _msg_smil_cont_mgr_get_cur_slide_idx(smilPlayerHndle->smilContMgrHndle);
347                 slideIdx += MSG_MMS_SMIL_SLIDEIDX_INCREMENT;
348                 _msg_smil_cont_mgr_set_cur_slide_idx(smilPlayerHndle->smilContMgrHndle, slideIdx);
349
350                 err = _msg_smil_event_mgr_play_slide(smilPlayerHndle->smilEvntMgrHndle, slideIdx);
351                 if (err != MSG_SMIL_SUCCESS) {
352                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_play_slide is failed : PLAYER_EVENT_NEXT_SLIDE");
353                         slideIdx -= MSG_MMS_SMIL_SLIDEIDX_INCREMENT;
354                         _msg_smil_cont_mgr_set_cur_slide_idx(smilPlayerHndle->smilContMgrHndle, slideIdx);
355                         return err;
356                 }
357                 break;
358         case PLAYER_EVENT_PREV_SLIDE:
359                 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PLAYER_EVENT_PREV_SLIDE");
360                 err = _msg_smil_event_mgr_stop_slide(smilPlayerHndle->smilEvntMgrHndle);
361                 if (err != MSG_SMIL_SUCCESS) {
362                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_stop_slide is failed : PLAYER_EVENT_PREV_SLIDE");
363                         return err;
364                 }
365                 _msg_smil_render_stop_playing_file(smilPlayerHndle->smilRenderer);
366
367                 _msg_smil_event_mgr_set_is_video_media(smilPlayerHndle->smilEvntMgrHndle, FALSE);
368                 _msg_smil_event_mgr_set_unsupported_content(smilPlayerHndle->smilEvntMgrHndle, FALSE);
369                 _msg_smil_event_mgr_set_invalid_video_ro(smilPlayerHndle->smilEvntMgrHndle, FALSE);
370                 _msg_smil_event_mgr_set_video_endofstream(smilPlayerHndle->smilEvntMgrHndle, FALSE);
371                 _msg_smil_event_mgr_set_page_action_type(smilPlayerHndle->smilEvntMgrHndle, PAGE_EVENT_MOVE_TO_PREV);
372
373                 /*Decrement the Slide Index for fetching the appropriate slide content.*/
374                 slideIdx = _msg_smil_cont_mgr_get_cur_slide_idx(smilPlayerHndle->smilContMgrHndle);
375                 slideIdx -= MSG_MMS_SMIL_SLIDEIDX_DECREMENT;
376                 _msg_smil_cont_mgr_set_cur_slide_idx(smilPlayerHndle->smilContMgrHndle, slideIdx);
377
378                 err = _msg_smil_event_mgr_play_slide(smilPlayerHndle->smilEvntMgrHndle, slideIdx);
379                 if (err != MSG_SMIL_SUCCESS) {
380                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_play_slide is failed : PLAYER_EVENT_PREV_SLIDE");
381                         slideIdx += MSG_MMS_SMIL_SLIDEIDX_DECREMENT;
382                         _msg_smil_cont_mgr_set_cur_slide_idx(smilPlayerHndle->smilContMgrHndle, slideIdx);
383                         return err;
384                 }
385                 break;
386         case PLAYER_EVENT_DESTROY_SCREEN:
387                 _msg_smil_event_mgr_set_render_event(smilPlayerHndle->smilEvntMgrHndle, SMIL_RENDER_EVENT_DESTROY_SCREEN);
388                 err = _msg_smil_render_on_slide_render_handler(smilPlayerHndle->smilRenderer, curSlideParam);
389                 if (err != MSG_SMIL_SUCCESS)
390                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_render_on_slide_render_handler failed err = %d", err);
391                 break;
392         case PLAYER_EVENT_MUTE:
393                 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PLAYER_EVENT_MUTE");
394                 _msg_smil_render_set_mute(smilPlayerHndle->smilRenderer, TRUE);
395                 err = MSG_SMIL_SUCCESS;
396                 break;
397         default:
398                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "In default");
399                 err = MSG_ERR_SMIL_UNKNOWN;
400                 break;
401         }
402
403         if (err != MSG_SMIL_SUCCESS) {
404                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_player_on_slide_event_handler is failed %d", err);
405                 return err;
406         }
407         MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
408         return MSG_SMIL_SUCCESS;
409 }
410
411
412 MSG_BOOL _msg_smil_create_smil_player_layout(void *hSmilHandle, void *layout)
413 {
414         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
415         MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, hSmilHandle == NULL, FALSE);
416         MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, layout == NULL, FALSE);
417         SMIL_HANDLER_S *smilPlayerHndle = (SMIL_HANDLER_S *)hSmilHandle;
418
419         return _msg_smil_render_create_layout(smilPlayerHndle->smilRenderer, (Evas_Object *)layout);
420 }
421
422
423 MSG_BOOL _msg_smil_set_smil_player_layout_size(void *hSmilHandle, SMIL_POSITION_S *left_top, SMIL_POSITION_S *right_bottom)
424 {
425         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
426         MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, hSmilHandle == NULL, FALSE);
427         SMIL_HANDLER_S *smilPlayerHndle = (SMIL_HANDLER_S *)hSmilHandle;
428
429         return _msg_smil_render_set_layout_size(smilPlayerHndle->smilRenderer, left_top, right_bottom);
430 }
431
432 MSG_BOOL _msg_smil_set_smil_player_help_page_cb(void *hSmilHandle, void *callBack, void *userData)
433 {
434         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
435         MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, hSmilHandle == NULL, FALSE);
436         MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, callBack == NULL, FALSE);
437         SMIL_HANDLER_S *smilPlayerHndle = (SMIL_HANDLER_S *)hSmilHandle;
438
439         return _msg_smil_render_set_help_page_cb(smilPlayerHndle->smilRenderer, callBack, userData);
440 }
441
442 MSG_BOOL _msg_smil_get_slide_time(void *hSmilHandle, int slideIdx, MSG_BOOL bExcludeHp, double *slideTime)
443 {
444         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
445         MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, hSmilHandle == NULL, PLAYER_STATUS_NONE);
446         SMIL_HANDLER_S *smilPlayerHndle = (SMIL_HANDLER_S *)hSmilHandle;
447
448         return _msg_smil_cont_mgr_get_slide_time(smilPlayerHndle->smilContMgrHndle, slideIdx, bExcludeHp, slideTime);
449 }