apply FSL license
[apps/core/preloaded/video-player.git] / src / mp-video-view-ctrl.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 <unistd.h>
19 #include <fcntl.h>
20 #include <sys/stat.h>
21
22 #include <appcore-efl.h>
23 #include <syspopup_caller.h>
24
25 #include "mp-util.h"
26 #include "mp-video-log.h"
27 #include "mp-video-view-ctrl.h"
28 #include "mp-video-type-define.h"
29 #include "mp-util-media-service.h"
30 #include "mp-video-display-view.h"
31 #include "mp-video-string-define.h"
32 #include "mp-video-streaming-view.h"
33
34 #define MULTIMEDIA_KEY_LONG_PRESS_INTERVAL                      4.0
35 #define DETAIL_POPUP_STR_LEN_MAX                                        20
36
37 static Evas_Object *pMainLayout = NULL;
38 static Evas_Object *pBackGround = NULL;
39 static Evas_Object *pNaviFrame = NULL;
40
41 static Ecore_Event_Handler *pHWKeyEventDownHandler = NULL;
42 static Ecore_Event_Handler *pHWKeyEventUpHandler = NULL;
43
44 static bool bIsKeyCancle = FALSE;
45
46 /*
47  * Callback function.
48  */
49 static void MpVideoViewCtrlInfoVideoPopupCb(void *pUserData, Evas_Object *pObject, void *pEventInfo)
50 {
51         if (!pUserData) {
52                 VideoLogInfo("[ERR]");
53                 return;
54         }
55
56         VideoLogInfo("");
57
58         MpUtilDeletePopupHandle();
59 }
60
61 static void MpVideoViewCtrlInfoCb(void *pUserData, Evas_Object *pObject,
62                                   void *pEventInfo)
63 {
64         VideoLogInfo("");
65
66         if (!pUserData) {
67                 VideoLogInfo("[ERR]");
68                 return;
69         }
70
71         VideoAppData *pAppData = (VideoAppData *)pUserData;
72
73         pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlPause(pAppData);
74
75         if (pAppData->nCurPlayerType == MP_VIDEO_PLAYER) {
76                 MpUtilDetailPopup(pAppData, dgettext(MP_SYS_STRING, MP_COM_BODY_DETAILS), MpVideoViewCtrlInfoVideoPopupCb);             
77         }
78 }
79
80 static Eina_Bool MpVideoViewCtrlHardkeyUpCb(void *pUserData, int nType,
81                                               void *pEvent)
82 {
83         VideoLogInfo("");
84
85         if (!pUserData) {
86                 VideoLogInfo("[ERR]");
87                 return EINA_FALSE;
88         }
89
90         Ecore_Event_Key *pKeyEvent = (Ecore_Event_Key *) pEvent;
91
92         VideoAppData *pAppData = (VideoAppData *)pUserData;
93
94         VideoLogInfo("Key down : %s", pKeyEvent->keyname);
95
96         if (bIsKeyCancle) {
97                 VideoLogInfo("KEY CANCLE.");
98                 bIsKeyCancle = FALSE;
99                 return EINA_FALSE;
100         }
101
102         if (!strcmp(pKeyEvent->keyname, END_KEY)) {
103                 VideoLogInfo("End key up");
104                 pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlExit(pAppData);
105         } else if (!strcmp(pKeyEvent->keyname, HOME_KEY)) {
106                 VideoLogInfo("Home key up");
107 //              if (pAppData->nCurPlayerType == MP_STREAMING_PLAYER) {
108 //                      VideoLogInfo("Push Home key at Streaming player Player.");
109 //                      pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlExit(pAppData);
110 //              } else if (pAppData->nCurPlayerType == MP_VIDEO_PLAYER) {
111 //                      VideoLogInfo("Push Home key at video player.");
112 //                      pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlStopByAppPause(pAppData);
113 //              }
114 //              MpUtilDeletePopupHandle();
115         } else if (!strcmp(pKeyEvent->keyname, POWER_KEY)) {
116                 VideoLogInfo("Power key up");
117                 pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlPause(pAppData);
118         } else if (!strcmp(pKeyEvent->keyname, PAUSE_KEY)) {
119                 VideoLogInfo("Pause key up");
120                 if (pAppData->nCurPlayerState == MP_PLAYER_STATE_PLAY || pAppData->nCurPlayerState == MP_PLAYER_STATE_RESUME) {
121                         pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlPause(pAppData);
122                 } else if (pAppData->nCurPlayerState == MP_PLAYER_STATE_PAUSE) {
123                         pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlResume(pAppData);
124                 }
125         } else if (!strcmp(pKeyEvent->keyname, PLAY_KEY)) {
126                 VideoLogInfo("Play key up");
127                 if (pAppData->nCurPlayerState == MP_PLAYER_STATE_PLAY || pAppData->nCurPlayerState == MP_PLAYER_STATE_RESUME) {
128                         pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlPause(pAppData);
129                 } else if (pAppData->nCurPlayerState == MP_PLAYER_STATE_PAUSE) {
130                         pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlResume(pAppData);
131                 }
132         } else if (!strcmp(pKeyEvent->keyname, STOP_KEY)) {
133                 VideoLogInfo("Stop key up");
134                 pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlPause(pAppData);
135         } else if (!strcmp(pKeyEvent->keyname, NEXT_KEY)) {
136                 VideoLogInfo("Next key up");
137                 pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlPlayNextMedia(pAppData);
138         } else if (!strcmp(pKeyEvent->keyname, PREV_KEY)) {
139                 VideoLogInfo("Prev key up");
140                 pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlPlayPreMedia(pAppData);
141         } else if (!strcmp(pKeyEvent->keyname, FORWARD_KEY)) {
142                 VideoLogInfo("Forward key up");
143         } else if (!strcmp(pKeyEvent->keyname, REWIND_KEY)) {
144                 VideoLogInfo("Rewind key up");
145         } else {
146         }
147
148         return EINA_FALSE;
149 }
150
151 static Eina_Bool MpVideoViewCtrlHardkeyDownCb(void *pUserData, int nType, void *pEvent)
152 {
153         VideoLogInfo("");
154
155         if (!pUserData) {
156                 VideoLogInfo("[ERR]");
157                 return EINA_FALSE;
158         }
159
160         Ecore_Event_Key *pKeyEvent = (Ecore_Event_Key *) pEvent;
161
162         VideoLogInfo("Key down : %s", pKeyEvent->keyname);
163
164         if (!strcmp(pKeyEvent->keyname, END_KEY)) {
165                 VideoLogInfo("Back(End) key");
166         } else if (!strcmp(pKeyEvent->keyname, HOME_KEY)) {
167                 VideoLogInfo("Home key");
168         } else if (!strcmp(pKeyEvent->keyname, POWER_KEY)) {
169                 VideoLogInfo("Power key Down");
170                 MpUtilLcdOffForPowerButton();
171         } else if (!strcmp(pKeyEvent->keyname, PAUSE_KEY)) {
172                 VideoLogInfo("Pause key down");
173         } else if (!strcmp(pKeyEvent->keyname, PLAY_KEY)) {
174                 VideoLogInfo("Play key down");
175         } else if (!strcmp(pKeyEvent->keyname, STOP_KEY)) {
176                 VideoLogInfo("Stop key down");
177         } else if (!strcmp(pKeyEvent->keyname, NEXT_KEY)) {
178                 VideoLogInfo("Next key down");
179         } else if (!strcmp(pKeyEvent->keyname, PREV_KEY)) {
180                 VideoLogInfo("Prev key down");
181         } else if (!strcmp(pKeyEvent->keyname, FORWARD_KEY)) {
182                 VideoLogInfo("Forward key down");
183         } else if (!strcmp(pKeyEvent->keyname, REWIND_KEY)) {
184                 VideoLogInfo("Rewind key down");
185         } else if (!strcmp(pKeyEvent->keyname, KEY_CANCLE)) {
186                 bIsKeyCancle = TRUE;
187         }
188
189         return EINA_FALSE;
190 }
191
192 /*
193  * Internal function.
194  */
195 Evas_Object *MpVideoViewCtrlCreateBg(Evas_Object *pWindow)
196 {
197         Evas_Object *pBg = elm_bg_add(pWindow);
198         evas_object_size_hint_weight_set(pBg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
199         elm_win_resize_object_add(pWindow, pBg);
200         evas_object_show(pBg);
201
202     return pBg;
203 }
204
205 static Evas_Object *MpVideoViewCtrlCreateMainLayout(Evas_Object *pParent, VideoPlayerType nPlayerType)
206 {
207         VideoLogInfo("");
208
209         if (!pParent) {
210                 VideoLogInfo("[ERR]");
211                 return NULL;
212         }
213
214         if (pMainLayout) {
215                 evas_object_del(pMainLayout);
216                 pMainLayout = NULL;
217         }
218
219         pMainLayout = elm_layout_add(pParent);
220         pBackGround = MpVideoViewCtrlCreateBg(pParent);
221
222         elm_layout_theme_set(pMainLayout, "layout", "application", "default");
223
224         evas_object_size_hint_weight_set(pMainLayout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
225
226         elm_win_resize_object_add(pParent, pMainLayout);
227
228         elm_object_style_set(pBackGround, "transparent");
229
230         evas_object_show(pMainLayout);
231
232         return pMainLayout;
233 }
234
235 static Evas_Object *MpVideoViewCtrlCreateNaviFrame(Evas_Object *pParent, MpLaunchingAppType nLaunchingApp)
236 {
237         VideoLogInfo("");
238
239         if (!pParent) {
240                 VideoLogInfo("[ERR]");
241                 return NULL;
242         }
243
244         if (pNaviFrame) {
245                 evas_object_del(pNaviFrame);
246                 pNaviFrame = NULL;
247         }
248
249         pNaviFrame = elm_naviframe_add(pParent);
250
251         elm_object_part_content_set(pParent, "elm.swallow.content", pNaviFrame);
252
253         elm_naviframe_prev_btn_auto_pushed_set(pNaviFrame, EINA_FALSE);
254
255         evas_object_show(pNaviFrame);
256
257         return pNaviFrame;
258 }
259
260 void MpVideoViewCtrlDestroyControlBar(VideoPlayerType nCurPlayerType)
261 {
262         VideoLogInfo("");
263 }
264
265 void MpVideoViewCtrlInitVideoViews(VideoAppData *pAppData, MpLaunchingAppType nLaunchingApp, int nVideoViewSortType)
266 {
267         VideoLogInfo("");
268
269         if (pAppData->nCurPlayerType == MP_VIDEO_PLAYER) {
270
271                 switch (nLaunchingApp) {
272                 case MP_LAUNCH_APP_DEFAULT:
273                 case MP_LAUNCH_APP_IMAGE_VIEWER:
274                 case MP_LAUNCH_APP_SIMPLE_VIEW:
275                         break;
276
277                 case MP_LAUNCH_APP_GALLERY:
278                         if (pAppData->nVideoListType == MP_VIDEO_LIST_TYPE_FOLDER) {
279                                 MpUtilMediaSvcGetVideoFileListFromFolder(pAppData->szMediaUri, nVideoViewSortType);
280                         } else if (pAppData->nVideoListType == MP_VIDEO_LIST_TYPE_ALL_FOLDER_GALLERY) {
281                                 MpUtilMediaSvcGetVideoFileListFromAllFolderOfGallery(nVideoViewSortType);
282                         } else if (pAppData->nVideoListType == MP_VIDEO_LIST_TYPE_TAG_GALLERY) {
283                                 MpUtilMediaSvcGetVideoFileListByTagName(pAppData->szTagNameForVideoList);
284                         } else if (pAppData->nVideoListType == MP_VIDEO_LIST_TYPE_FAVORITE) {
285                                 MpUtilMediaSvcGetVideoFileListFromFavorite(nVideoViewSortType);
286                         } else {
287                                 break;
288                         }
289
290                         MpUtilMediaSvcGetPreNextVideoUrl(pAppData->szMediaUri, pAppData->szPreMediaUri, pAppData->szNextMediaUri);
291                         break;
292
293                 case MP_LAUNCH_APP_MAX:
294                 default:
295                         break;
296                 }
297
298                 MpVideoDisplayViewPush((void *)pNaviFrame, (void *)MpVideoViewCtrlInfoCb, nLaunchingApp, (void *)pAppData);
299         } else if (pAppData->nCurPlayerType == MP_STREAMING_PLAYER) {
300                 MpVideoStreamingViewPush((void *)pNaviFrame, (void *)MpVideoViewCtrlInfoCb, (void *)pAppData);
301         }
302 }
303
304 void MpVideoViewCtrlShowNaviFrame(void)
305 {
306         VideoLogInfo("");
307
308         if (pNaviFrame) {
309                 evas_object_show(pNaviFrame);
310         }
311 }
312
313 void MpVideoViewCtrlHideNaviFrame(void)
314 {
315         VideoLogInfo("");
316
317         if (pNaviFrame) {
318                 evas_object_hide(pNaviFrame);
319         }
320 }
321
322 /*
323  * External function.
324  */
325 bool MpVideoViewCtrlInit(VideoAppData *pAppData)
326 {
327         VideoLogInfo("");
328
329         if (!pAppData) {
330                 VideoLogInfo("[ERR]");
331                 return FALSE;
332         }
333
334         if (pHWKeyEventDownHandler) {
335                 ecore_event_handler_del(pHWKeyEventDownHandler);
336                 pHWKeyEventDownHandler = NULL;
337         }
338
339         if (pHWKeyEventUpHandler) {
340                 ecore_event_handler_del(pHWKeyEventUpHandler);
341                 pHWKeyEventUpHandler = NULL;
342         }
343
344         pHWKeyEventDownHandler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, (void *)MpVideoViewCtrlHardkeyDownCb, (void *)pAppData);
345         pHWKeyEventUpHandler = ecore_event_handler_add(ECORE_EVENT_KEY_UP, (void *)MpVideoViewCtrlHardkeyUpCb, (void *)pAppData);
346         elm_win_indicator_mode_set(pAppData->pMainWindow, ELM_WIN_INDICATOR_SHOW);
347         evas_object_color_set(pAppData->pMainWindow, 0, 0, 0, 0);
348         //elm_win_alpha_set(pAppData->pMainWindow, EINA_TRUE);
349         //elm_win_transparent_set(pAppData->pMainWindow, EINA_TRUE);
350         evas_object_move(pAppData->pMainWindow, 0, 0);
351
352         MpVideoViewCtrlCreateMainLayout(pAppData->pMainWindow, pAppData->nCurPlayerType);
353         MpVideoViewCtrlCreateNaviFrame(pMainLayout, pAppData->nLaunchingAppType);
354
355         MpVideoViewCtrlInitVideoViews(pAppData, pAppData->nLaunchingAppType, pAppData->nVideoSortType);
356
357         return TRUE;
358 }
359
360 void MpVideoViewCtrlDestroy(void *pUserData)
361 {
362         VideoLogInfo("");
363
364         if (!pUserData) {
365                 VideoLogInfo("[ERR]");
366                 return;
367         }
368
369         VideoAppData *pAppData = (VideoAppData *)pUserData;
370
371         appcore_unset_rotation_cb();
372
373         if (pAppData->nCurPlayerType == MP_VIDEO_PLAYER) {
374                 MpVideoDisplayViewDestroy(pUserData);
375         } else if (pAppData->nCurPlayerType == MP_STREAMING_PLAYER) {
376                 MpVideoStreamingViewDestroy(pUserData);
377         }
378
379         if (pHWKeyEventDownHandler) {
380                 ecore_event_handler_del(pHWKeyEventDownHandler);
381                 pHWKeyEventDownHandler = NULL;
382         }
383
384         if (pHWKeyEventUpHandler) {
385                 ecore_event_handler_del(pHWKeyEventUpHandler);
386                 pHWKeyEventUpHandler = NULL;
387         }
388
389         if (pMainLayout) {
390                 evas_object_del(pMainLayout);
391                 pMainLayout = NULL;
392         }
393
394         if (pNaviFrame) {
395                 evas_object_del(pNaviFrame);
396                 pNaviFrame = NULL;
397         }
398
399         if (pBackGround) {
400                 evas_object_del(pBackGround);
401                 pBackGround = NULL;
402         }
403
404         bIsKeyCancle = FALSE;
405 }
406
407 void MpVideoViewCtrlInitAfterBeginOfStream(void *pUserData)
408 {
409         VideoLogInfo("");
410
411         if (!pUserData) {
412                 VideoLogInfo("[ERR]");
413                 return;
414         }
415
416         VideoAppData *pAppData = (VideoAppData *)pUserData;
417
418         if (pAppData->nCurPlayerType == MP_VIDEO_PLAYER) {
419                 MpVideoDisplayViewInitAfterBeginOfStream(pUserData);
420         } else if (pAppData->nCurPlayerType == MP_STREAMING_PLAYER) {
421                 MpVideoStreamingViewInitAfterBeginOfStream(pUserData);
422         }
423 }
424
425 void MpVideoViewCtrlPause(void *pUserData)
426 {
427         VideoLogInfo("");
428
429         if (!pUserData) {
430                 VideoLogInfo("[ERR]");
431                 return;
432         }
433
434         VideoAppData *pAppData = (VideoAppData *)pUserData;
435
436         if (pAppData->nCurPlayerType == MP_VIDEO_PLAYER) {
437                 MpVideoDisplayViewUpdatePauseKey();
438         } else if (pAppData->nCurPlayerType == MP_STREAMING_PLAYER) {
439                 MpVideoStreamingViewUpdatePauseKey();
440         }
441 }
442
443 void MpVideoViewCtrlResume(void *pUserData)
444 {
445         VideoLogInfo("");
446
447         if (!pUserData) {
448                 VideoLogInfo("[ERR]");
449                 return;
450         }
451
452         VideoAppData *pAppData = (VideoAppData *)pUserData;
453
454         if (pAppData->nCurPlayerType == MP_VIDEO_PLAYER) {
455                 MpVideoDisplayViewUpdateResumeKey();
456         } else if (pAppData->nCurPlayerType == MP_STREAMING_PLAYER) {
457                 MpVideoStreamingViewUpdateResumeKey();
458         }
459 }
460
461 void MpVideoViewShowLayout(void *pUserData)
462 {
463         VideoLogInfo("");
464
465         if (!pUserData) {
466                 VideoLogInfo("[ERR]");
467                 return;
468         }
469
470         VideoAppData *pAppData = (VideoAppData *)pUserData;
471
472         elm_win_indicator_mode_set(pAppData->pMainWindow, ELM_WIN_INDICATOR_SHOW);
473         MpVideoViewCtrlShowNaviFrame();
474
475         if (pAppData->nCurPlayerType == MP_VIDEO_PLAYER) {
476                 MpVideoDisplayViewActivate();
477                 MpVideoDisplayViewShowControlPanel(pUserData);
478         } else if (pAppData->nCurPlayerType == MP_STREAMING_PLAYER) {
479                 MpVideoStreamingViewShowControlPanel(pUserData);
480         }
481 }
482
483 void MpVideoViewHideLayout(void *pUserData)
484 {
485         VideoLogInfo("");
486
487         if (!pUserData) {
488                 VideoLogInfo("[ERR]");
489                 return;
490         }
491
492         VideoAppData *pAppData = (VideoAppData *)pUserData;
493
494         elm_win_indicator_mode_set(pAppData->pMainWindow, ELM_WIN_INDICATOR_HIDE);
495         MpVideoViewCtrlHideNaviFrame();
496
497         if (pAppData->nCurPlayerType == MP_VIDEO_PLAYER) {
498                 MpVideoDisplayViewHideControlPanel(pUserData);
499         } else if (pAppData->nCurPlayerType == MP_STREAMING_PLAYER) {
500                 MpVideoStreamingViewHideControlPanel(pUserData);
501         }
502 }
503
504 void MpVideoViewSetBufferingRateForStreamingView(int nSetBufferingRate,
505                                                  void *pUserData)
506 {
507         VideoLogInfo("");
508
509         if (!pUserData) {
510                 VideoLogInfo("[ERR]");
511                 return;
512         }
513
514         VideoAppData *pAppData = (VideoAppData *)pUserData;
515
516         if (pAppData->nCurPlayerType == MP_STREAMING_PLAYER) {
517                 if(MpUtilCheckRTSPType(pAppData->szMediaUri)) {
518                         if(nSetBufferingRate == 0) {
519                                 MpVideoStreamingViewSetBufferingRate(-1);
520                         }
521                         else {
522                                 MpVideoStreamingViewSetBufferingRate(nSetBufferingRate);
523                         }
524                 }
525                 else {
526                         if (nSetBufferingRate >= 0) {
527                                 MpVideoStreamingViewSetBufferingRate(nSetBufferingRate);
528                         }
529                 }
530         }
531 }
532
533 void MpVideoViewHideSoundpath(void *pUserData)
534 {
535         VideoLogInfo("");
536
537         if (!pUserData) {
538                 VideoLogInfo("[ERR]");
539                 return;
540         }
541
542         VideoAppData *pAppData = (VideoAppData *)pUserData;
543
544         if (pAppData->nCurPlayerType == MP_VIDEO_PLAYER) {
545                 MpVideoDisplayViewHideSoundpath();
546         }
547 }
548
549 void MpVideoViewCtrlChangeTitle(void *pUserData)
550 {
551         VideoLogInfo("");
552         if (!pUserData) {
553                 VideoLogInfo("[ERR]");
554                 return;
555         }
556
557         VideoAppData *pAppData = (VideoAppData *)pUserData;
558
559         if (pAppData->nCurPlayerType == MP_VIDEO_PLAYER) {
560                 MpVideoDisplayViewChangeNaviFrameTitle(pUserData);
561         }
562 }
563
564 void MpVideoViewCtrlUpdateSubtitle(double nDuration,
565                 char* szSubtitleString)
566 {
567         VideoLogInfo("");
568
569         if (!szSubtitleString) {
570                 VideoLogInfo("No Exist szSubtitleString pointer.");
571                 return;
572         }
573
574         if (nDuration <= 0 ) {
575                 VideoLogInfo("Duration time 0.");
576                 return;
577         }
578
579         MpVideoDisplayViewUpdateSubtitle(nDuration, szSubtitleString);
580 }
581
582 bool MpVideoViewCtrlIsTopView(void *pUserData)
583 {
584         if (!pUserData) {
585                 VideoLogInfo("[ERR]");
586                 return FALSE;
587         }
588
589         VideoLogInfo("");
590
591         VideoAppData *pAppData = (VideoAppData *)pUserData;
592
593         bool bIstopView = FALSE;
594
595         if (pAppData->nCurPlayerType == MP_VIDEO_PLAYER) {
596                 VideoLogInfo("VIDEO PLAYER");
597                 if (!MpVideoDisplayViewIsTopView()) {
598                         VideoLogInfo("");
599                         return FALSE;
600                 }
601
602                 return TRUE;
603         } else if (pAppData->nCurPlayerType == MP_STREAMING_PLAYER) {
604                 VideoLogInfo("STREAMING PLAYER");
605                 bIstopView = MpVideoStreamingViewIsTopView();
606         }
607
608         return bIstopView;
609 }
610
611 void MpVideoViewCtrlShowNocontentImage(void)
612 {
613         VideoLogInfo("");
614
615         MpVideoDisplayViewShowNocontentImage();
616 }
617
618 void MpVideoViewCtrlHideNocontentImage(void)
619 {
620         VideoLogInfo("");
621
622         MpVideoDisplayViewHideNocontentImage();
623 }
624
625 void MpVideoViewCtrlResetProgressBar(void *pUserData)
626 {
627         MpVideoDisplayViewResetProgressBar(pUserData);
628 }