2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 // Licensed under the Flora License, Version 1.1 (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://floralicense.org/license/
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.
18 * @file VpVideoPlayerPresentationModel.cpp
19 * @brief This is the implementation file for VideoPlayerPresentationModel class.
23 #include "VpAppResourceId.h"
25 #include "VpVideoPlayerApp.h"
26 #include "VpVideoPlayerPresentationModel.h"
28 using namespace Tizen::App;
29 using namespace Tizen::Base;
30 using namespace Tizen::Base::Collection;
31 using namespace Tizen::Base::Runtime;
32 using namespace Tizen::Base::Utility;
33 using namespace Tizen::Content;
34 using namespace Tizen::Graphics;
35 using namespace Tizen::Io;
36 using namespace Tizen::Media;
37 using namespace Tizen::Ui::Controls;
39 static const int PROGRESS_TIMER_DURATION = 250;
40 static const int LONGKEY_TIMER_DURATION = 200;
42 static const int MILLISECOND = 1000;
43 static const int TEN_SEC = 10;
44 static const int TWO_SEC = 2;
45 static const int START_TIME = 0;
47 static const int INIT_CONTENT_INDEX = 0;
48 static const int MULTI_CONTENT_COUNT = 2;
49 static const int MAX_PROGRESS_RANGE = 100;
51 static const int MESSAGEBOX_DISPLAY_TIMEOUT = 3000;
53 VideoPlayerPresentationModel*
54 VideoPlayerPresentationModel::__pVideoPlayerPresentationModel = null;
56 VideoPlayerPresentationModel::VideoPlayerPresentationModel(void)
58 , __pVideoPlayerEventListener(null)
59 , __pOverlayPanel(null)
60 , __pMediaPathArrayList(null)
63 , __pFastForwardTimer(null)
64 , __pFastRewindTimer(null)
65 , __pCurrentPlayContentPath(null)
66 , __playerSeekCompleted(true)
67 , __playerLastSeekCompleted(false)
68 , __stateAfterSeek(PLAYER_STATE_ERROR)
71 , __currentMediaIndex(INIT_CONTENT_INDEX)
72 , __repeatMode(REPEAT_TYPE_OFF)
73 , __pFileEventMgr(null)
77 VideoPlayerPresentationModel::~VideoPlayerPresentationModel(void)
80 if (__pPlayer != null)
87 if (__pMediaPathArrayList != null)
89 __pMediaPathArrayList->RemoveAll(true);
90 delete __pMediaPathArrayList;
91 __pMediaPathArrayList = null;
94 delete __pCurrentPlayContentPath;
95 delete __pFileEventMgr;
98 VideoPlayerPresentationModel*
99 VideoPlayerPresentationModel::GetInstance(void)
101 AppLogDebug("GetInstance");
103 if (__pVideoPlayerPresentationModel == null)
108 return __pVideoPlayerPresentationModel;
112 VideoPlayerPresentationModel::Construct(void)
114 result r = E_FAILURE;
115 __pCurrentPlayContentPath = new (std::nothrow) String(L"");
117 r = SetMediaPathArray();
125 VideoPlayerPresentationModel::CreateInstance(void)
127 AppLogDebug("CreateInstance");
129 __pVideoPlayerPresentationModel = new (std::nothrow) VideoPlayerPresentationModel();
130 result r = __pVideoPlayerPresentationModel->Construct();
134 delete __pVideoPlayerPresentationModel;
135 __pVideoPlayerPresentationModel = null;
140 VideoPlayerPresentationModel::DestroyInstance(void)
142 delete __pVideoPlayerPresentationModel;
143 __pVideoPlayerPresentationModel = null;
147 VideoPlayerPresentationModel::GetVideoInfoN(const String& mediaLocalPath)
150 result r = E_FAILURE;
152 const IList* pInfoList = null;
153 const VideoStreamInfo* pInfo = null;
154 MediaStreamInfo* pStreamInfo = null;
156 if (GetState() == PLAYER_STATE_PLAYING)
158 pStreamInfo = __pPlayer->GetCurrentMediaStreamInfoN();
159 TryCatch(pStreamInfo != null, r = E_FAILURE, "__pPlayer->GetCurrentMediaStreamInfoN() is null");
161 pInfoList = pStreamInfo->GetVideoStreamInfoList();
162 TryCatch(pInfoList != null, r = E_FAILURE, "pStreamInfo->GetVideoStreamInfoList() is null");
164 pInfo = (const VideoStreamInfo*)pInfoList->GetAt(0);
165 TryCatch(pInfo != null, r = E_FAILURE, "pInfoList->GetAt() is null");
167 rect.width = pInfo->GetWidth();
168 rect.height = pInfo->GetHeight();
170 __mediaWidth = pInfo->GetWidth();
171 __mediaHeight = pInfo->GetHeight();
177 rect.width = __mediaWidth;
178 rect.height = __mediaHeight;
186 rect.width = __mediaWidth;
187 rect.height = __mediaHeight;
193 VideoPlayerPresentationModel::ConstructPlayerInstanceWithBufferInfo(void)
195 result r = E_FAILURE;
196 BufferInfo bufferInfo;
198 r = __pOverlayPanel->GetBackgroundBufferInfo(bufferInfo);
199 TryCatch(r == E_SUCCESS,, "__pOverlayRegion->GetBackgroundBufferInfo() failed:%s", GetErrorMessage(r));
202 __pPlayer = new (std::nothrow) Player();
203 AppLogDebug("__pPlayer [%x]", __pPlayer);
205 r = __pPlayer->Construct(*this, &bufferInfo);
206 TryCatch(r == E_SUCCESS,, "__pPlayer->Construct failed:%s", GetErrorMessage(r));
217 VideoPlayerPresentationModel::SeekTo(long msTime)
219 result r = E_FAILURE;
221 PlayerState playState = GetState();
223 TryCatch(__pPlayer != null,, "__pPlayer is null");
227 case PLAYER_STATE_PLAYING:
229 case PLAYER_STATE_PAUSED:
231 r = __pPlayer->SeekTo(msTime);
232 TryCatch(r == E_SUCCESS,, "__pPlayer->SeekTo failed:%s", GetErrorMessage(r));
233 __playerSeekCompleted = false;
248 VideoPlayerPresentationModel::OnPlayerSeekCompleted(result r)
250 AppLogDebug("OnPlayerSeekCompleted");
252 __playerSeekCompleted = true;
254 if (__playerLastSeekCompleted == true)
256 if (__stateAfterSeek == PLAYER_STATE_PLAYING)
259 __stateAfterSeek = PLAYER_STATE_ERROR;
262 __playerLastSeekCompleted = false;
265 if (__stateAfterSeek == PLAYER_STATE_PAUSED)
268 __stateAfterSeek = PLAYER_STATE_ERROR;
271 __pVideoPlayerEventListener->OnPlaySeekCompleted(r);
275 VideoPlayerPresentationModel::SetPlayerBuffer(const BufferInfo& bufferInfo)
277 result r = E_FAILURE;
278 TryReturnVoid(__pPlayer != null, "__pPlayer is null");
280 r = __pPlayer->SetRenderingBuffer(bufferInfo);
281 TryReturnVoid(r == E_SUCCESS, "__pPlayer->SetRenderingBuffer failed:%s", GetErrorMessage(r));
285 VideoPlayerPresentationModel::StartPlay(void)
287 result r = E_FAILURE;
292 PlayerState playState = GetState();
293 AppLogDebug("StartPlay : %d", playState);
295 TryCatch(__pPlayer != null,, "__pPlayer is null");
299 case PLAYER_STATE_INITIALIZED:
301 case PLAYER_STATE_CLOSED:
303 mediaPath = GetMediaPathName();
304 __pCurrentPlayContentPath->Clear();
305 __pCurrentPlayContentPath->Append(mediaPath);
307 StringTokenizer strTok(mediaPath, delim);
309 while (strTok.HasMoreTokens())
311 strTok.GetNextToken(mediaName);
314 if (mediaPath.StartsWith(L"http://", 0) == true
315 || mediaPath.StartsWith(L"https://", 0) == true
316 || mediaPath.StartsWith(L"rtsp://", 0) == true
317 || mediaPath.StartsWith(L"rtp://", 0) == true)
323 r = __pPlayer->OpenFile(mediaPath);
328 AppResource* pAppResource = Application::GetInstance()->GetAppResource();
329 String messageBoxString;
330 pAppResource->GetString(IDS_COM_POP_UNSUPPORTED_FILE_TYPE, messageBoxString);
331 MessageBox messageBox;
332 messageBox.Construct(L"", messageBoxString, MSGBOX_STYLE_NONE, MESSAGEBOX_DISPLAY_TIMEOUT);
334 messageBox.ShowAndWait(modalResult);
336 UiApp* pApp = UiApp::GetInstance();
341 delete __pFileEventMgr;
342 __pFileEventMgr = new (std::nothrow) FileEventManager();
343 __pFileEventMgr->Construct(*this);
344 __pFileEventMgr->AddPath(mediaPath, FILE_EVENT_TYPE_DELETE_SELF | FILE_EVENT_TYPE_MOVE_SELF | FILE_EVENT_TYPE_ATTRIBUTE);
346 r = __pPlayer->Play();
347 TryCatch(r == E_SUCCESS,, "__pPlayer->Play() failed:%s", GetErrorMessage(r));
349 if (__pMediaPathArrayList->GetCount() >= MULTI_CONTENT_COUNT)
351 mediaName.Append(L"(");
352 mediaName.Append(__currentMediaIndex + 1);
353 mediaName.Append(L"/");
354 mediaName.Append(__pMediaPathArrayList->GetCount());
355 mediaName.Append(L")");
357 else if (__pMediaPathArrayList->GetCount() < MULTI_CONTENT_COUNT)
359 mediaName.Append(L"(");
360 mediaName.Append(L"1");
361 mediaName.Append(L"/");
362 mediaName.Append(L"1");
363 mediaName.Append(L")");
366 CallOnPlayContentChanged(mediaName);
368 r = __pTimer->Start(PROGRESS_TIMER_DURATION);
369 TryCatch(r == E_SUCCESS,, "__pTimer->Start() failed:%s", GetErrorMessage(r));
374 case PLAYER_STATE_ENDOFCLIP:
376 mediaPath = GetMediaPathName();
378 if (__pMediaPathArrayList->GetCount() < MULTI_CONTENT_COUNT)
380 r = InitializePlayer();
381 TryCatch(r == E_SUCCESS,, "InitializePlayer() failed : %s", GetErrorMessage(r));
383 r = __pPlayer->OpenFile(mediaPath);
384 TryCatch(r == E_SUCCESS,, "__pPlayer->OpenFile() failed:%s", GetErrorMessage(r));
386 r = __pPlayer->Play();
387 TryCatch(r == E_SUCCESS,, "__pPlayer->Play() failed:%s", GetErrorMessage(r));
391 __pCurrentPlayContentPath->Clear();
392 __pCurrentPlayContentPath->Append(mediaPath);
394 StringTokenizer strTok(mediaPath, delim);
396 while (strTok.HasMoreTokens())
398 strTok.GetNextToken(mediaName);
401 if (GetRepeatMode() != REPEAT_TYPE_ONE)
403 r = InitializePlayer();
404 TryCatch(r == E_SUCCESS,, "InitializePlayer() failed : %s", GetErrorMessage(r));
406 r = __pPlayer->OpenFile(mediaPath);
407 TryCatch(r == E_SUCCESS,, "__pPlayer->OpenFile() failed:%s", GetErrorMessage(r));
410 r = __pPlayer->Play();
411 TryCatch(r == E_SUCCESS,, "__pPlayer->Play() failed:%s", GetErrorMessage(r));
413 mediaName.Append(L"(");
414 mediaName.Append(__currentMediaIndex + 1);
415 mediaName.Append(L"/");
416 mediaName.Append(__pMediaPathArrayList->GetCount());
417 mediaName.Append(L")");
419 CallOnPlayContentChanged(mediaName);
422 __pTimer->Start(PROGRESS_TIMER_DURATION);
427 case PLAYER_STATE_PAUSED:
429 r = __pPlayer->Play();
430 TryCatch(r == E_SUCCESS,, "__pPlayer->Play() failed:%s", GetErrorMessage(r));
432 __pTimer->Start(PROGRESS_TIMER_DURATION);
440 CallOnPlayStateChanged(GetState());
447 VideoPlayerPresentationModel::StopPlay(void)
449 result r = E_FAILURE;
451 PlayerState playState = GetState();
452 AppLogDebug("StopPlay : %d", playState);
456 case PLAYER_STATE_PLAYING:
458 case PLAYER_STATE_PAUSED:
460 r = __pPlayer->Stop();
461 TryCatch(r == E_SUCCESS,, "__pPlayer->Stop() failed:%s", GetErrorMessage(r));
474 VideoPlayerPresentationModel::PausePlay(void)
476 result r = E_FAILURE;
477 PlayerState playState = GetState();
478 AppLogDebug("PausePlay : %d", playState);
480 if (__playerSeekCompleted == true)
482 if (playState == PLAYER_STATE_PLAYING)
484 r = __pPlayer->Pause();
485 TryCatch(r == E_SUCCESS,, "__pPlayer->Pause() failed:%s", GetErrorMessage(r));
490 __stateAfterSeek = PLAYER_STATE_PAUSED;
493 CallOnPlayStateChanged(GetState());
500 VideoPlayerPresentationModel::ClosePlay(void)
502 result r = E_FAILURE;
503 PlayerState playState = GetState();
507 case PLAYER_STATE_OPENED:
509 case PLAYER_STATE_STOPPED:
511 case PLAYER_STATE_ENDOFCLIP:
513 r = __pPlayer->Close();
514 TryCatch(r == E_SUCCESS,, "__pPlayer->Close() failed:%s", GetErrorMessage(r));
527 VideoPlayerPresentationModel::GetState(void) const
529 TryReturn(__pPlayer != null, PLAYER_STATE_ERROR, "__pPlayer is null");
531 return __pPlayer->GetState();
535 VideoPlayerPresentationModel::GetDuration(void) const
537 TryReturn(__pPlayer != null, 0, "__pPlayer is null");
539 return __pPlayer->GetDuration();
543 VideoPlayerPresentationModel::GetPosition(void) const
545 TryReturn(__pPlayer != null, 0, "__pPlayer is null");
547 return __pPlayer->GetPosition();
551 VideoPlayerPresentationModel::SetVideoPlayerEventListener(IVideoPlayerEventListener* pPlayerListener)
553 __pVideoPlayerEventListener = pPlayerListener;
557 VideoPlayerPresentationModel::SetOverlayPanel(OverlayPanel* pOverlay)
559 __pOverlayPanel = pOverlay;
563 VideoPlayerPresentationModel::SetRenderingBuffer(void)
565 BufferInfo bufferInfo;
566 result r = E_SUCCESS;
567 r = __pOverlayPanel->GetBackgroundBufferInfo(bufferInfo);
570 __pPlayer->SetRenderingBuffer(bufferInfo);
575 VideoPlayerPresentationModel::GetLaunchType(void) const
581 VideoPlayerPresentationModel::SetLaunchType()
583 VideoPlayerApp* pVideoPlayerApp = static_cast<VideoPlayerApp*>(VideoPlayerApp::GetInstance());
584 TryReturnVoid(pVideoPlayerApp != null, "pVideoPlayerApp is null");
586 const IMap* pArguments = pVideoPlayerApp->GetAppControlArguments();
588 if (pArguments != null)
590 const String* pType = static_cast<const String*>(pArguments->GetValue(String(APPCONTROL_KEY_TYPE)));
594 __launchType = *pType;
600 VideoPlayerPresentationModel::OnPlayerOpened(result r)
602 AppLogDebug("OnPlayerOpened");
603 __pVideoPlayerEventListener->OnPlayOpened(r);
607 VideoPlayerPresentationModel::OnPlayerEndOfClip(void)
609 bool playNextContent = false;
610 String* pFilePath = null;
611 result r = E_SUCCESS;
613 AppLogDebug("OnPlayerEndOfClip");
616 __pFastForwardTimer->Cancel();
617 __pFastRewindTimer->Cancel();
619 __playerLastSeekCompleted = false;
620 __playerSeekCompleted = true;
622 switch (GetRepeatMode())
624 case REPEAT_TYPE_OFF:
626 if (__pMediaPathArrayList->GetCount() < MULTI_CONTENT_COUNT)
628 __currentMediaIndex = INIT_CONTENT_INDEX;
629 playNextContent = false;
633 IEnumerator* pEnum = __pMediaPathArrayList->GetEnumeratorN();
636 for (int index = 0; index < __pMediaPathArrayList->GetCount(); index++)
638 if (__currentMediaIndex == (__pMediaPathArrayList->GetCount() - 1))
640 __currentMediaIndex = INIT_CONTENT_INDEX;
641 playNextContent = false;
644 r = pEnum->MoveNext();
648 pFilePath = static_cast<String*>(pEnum->GetCurrent());
650 if (pFilePath->Equals(*__pCurrentPlayContentPath) == false)
652 __currentMediaIndex++;
653 playNextContent = true;
663 case REPEAT_TYPE_ONE:
669 case REPEAT_TYPE_ALL:
671 if (__pMediaPathArrayList->GetCount() < MULTI_CONTENT_COUNT)
673 __currentMediaIndex = INIT_CONTENT_INDEX;
677 IEnumerator* pEnum = __pMediaPathArrayList->GetEnumeratorN();
680 for (int index = 0; index < __pMediaPathArrayList->GetCount(); index++)
682 if (__currentMediaIndex == (__pMediaPathArrayList->GetCount() - 1))
684 __currentMediaIndex = INIT_CONTENT_INDEX;
687 r = pEnum->MoveNext();
691 pFilePath = static_cast<String*>(pEnum->GetCurrent());
693 if (pFilePath->Equals(*__pCurrentPlayContentPath) == false)
695 __currentMediaIndex++;
709 __pVideoPlayerEventListener->OnPlayEndOfClip(playNextContent, __repeatMode, __pMediaPathArrayList->GetCount());
713 VideoPlayerPresentationModel::OnPlayerBuffering(int percent)
715 AppLogDebug("OnPlayerBuffering");
716 __pVideoPlayerEventListener->OnPlayBuffering(percent);
720 VideoPlayerPresentationModel::OnPlayerErrorOccurred(PlayerErrorReason r)
722 AppLogDebug("OnPlayerErrorOccurred");
725 __pVideoPlayerEventListener->OnPlayErrorOccurred(r);
729 VideoPlayerPresentationModel::OnPlayerInterrupted(void)
731 AppLogDebug("OnPlayerInterrupted");
732 __pVideoPlayerEventListener->OnPlayInterrupted();
734 CallOnPlayStateChanged(GetState());
738 VideoPlayerPresentationModel::OnPlayerAudioFocusChanged(void)
740 AppLogDebug("OnPlayerAudioFocusChanged");
742 CallOnPlayStateChanged(GetState());
746 VideoPlayerPresentationModel::OnPlayerReleased(void)
748 AppLogDebug("OnPlayerReleased");
749 __pVideoPlayerEventListener->OnPlayReleased();
753 VideoPlayerPresentationModel::CallOnPlayContentChanged(const String& fileName)
755 AppLogDebug("CallOnPlayContentChanged");
757 __pVideoPlayerEventListener->OnPlayContentChanged(fileName);
761 VideoPlayerPresentationModel::CallOnPlayTimeChanged(int currentProgressPos, String& currentPlayTime)
763 AppLogDebug("CallOnPlayTimeChanged");
765 __pVideoPlayerEventListener->OnPlayTimeChanged(currentProgressPos, currentPlayTime);
769 VideoPlayerPresentationModel::CallOnPlayStateChanged(PlayerState playState)
771 AppLogDebug("CallOnPlayStateChanged");
773 __pVideoPlayerEventListener->OnPlayStateChanged(playState);
777 VideoPlayerPresentationModel::InitTimer(void)
779 AppLogDebug("InitTimer");
781 __pTimer = new (std::nothrow) Timer();
782 __pTimer->Construct(*this);
784 __pFastForwardTimer = new (std::nothrow) Timer();
785 __pFastForwardTimer->Construct(*this);
787 __pFastRewindTimer = new (std::nothrow) Timer();
788 __pFastRewindTimer->Construct(*this);
792 VideoPlayerPresentationModel::DeleteTimer(void)
794 AppLogDebug("DeleteTimer");
800 __pFastForwardTimer->Cancel();
801 delete __pFastForwardTimer;
802 __pFastForwardTimer = null;
804 __pFastRewindTimer->Cancel();
805 delete __pFastRewindTimer;
806 __pFastRewindTimer = null;
810 VideoPlayerPresentationModel::OnTimerExpired(Timer& timer)
812 result r = E_FAILURE;
814 int currentProgressPos = 0;
816 String currentPlayTime;
817 long playerDuration = 0;
819 PlayerState playState = GetState();
821 if (timer.GetHashCode() == __pTimer->GetHashCode())
823 if (playState == PLAYER_STATE_INITIALIZED || playState == PLAYER_STATE_PLAYING)
825 playerDuration = GetDuration();
826 dateTime.AddSeconds(GetPosition() / MILLISECOND);
827 currentPlayTime.Format(20, L"%02d:%02d:%02d", dateTime.GetHour(), dateTime.GetMinute(), dateTime.GetSecond());
829 if (playerDuration != START_TIME)
831 currentProgressPos = static_cast<int>(GetPosition() / (playerDuration / MAX_PROGRESS_RANGE));
833 CallOnPlayTimeChanged(currentProgressPos, currentPlayTime);
835 __pTimer->Start(PROGRESS_TIMER_DURATION);
838 else if (timer.GetHashCode() == __pFastForwardTimer->GetHashCode())
840 msTime = GetPosition();
841 playerDuration = GetDuration();
843 msTime = msTime + (TWO_SEC * MILLISECOND);
845 if (msTime < playerDuration)
847 if (__playerSeekCompleted == true)
850 TryReturnVoid(r == E_SUCCESS, "VideoPlayerPresentationModel::SeekTo() failed:%s", GetErrorMessage(r));
852 __playerSeekCompleted = false;
854 dateTime.AddSeconds(msTime / MILLISECOND);
855 currentPlayTime.Format(20, L"%02d:%02d:%02d", dateTime.GetHour(), dateTime.GetMinute(), dateTime.GetSecond());
857 if (playerDuration != START_TIME)
859 currentProgressPos = static_cast<int>(GetPosition() / (playerDuration / MAX_PROGRESS_RANGE));
861 CallOnPlayTimeChanged(currentProgressPos, currentPlayTime);
866 if (__playerSeekCompleted == true)
868 r = SeekTo(playerDuration);
869 TryReturnVoid(r == E_SUCCESS, "VideoPlayerPresentationModel::SeekTo() failed:%s", GetErrorMessage(r));
870 __playerSeekCompleted = false;
872 dateTime.AddSeconds(playerDuration / MILLISECOND);
873 currentPlayTime.Format(20, L"%02d:%02d:%02d", dateTime.GetHour(), dateTime.GetMinute(), dateTime.GetSecond());
875 if (playerDuration != START_TIME)
877 currentProgressPos = static_cast<int>(GetPosition() / (playerDuration / MAX_PROGRESS_RANGE));
879 CallOnPlayTimeChanged(currentProgressPos, currentPlayTime);
882 __pFastForwardTimer->Start(LONGKEY_TIMER_DURATION);
884 else if (timer.GetHashCode() == __pFastRewindTimer->GetHashCode())
886 msTime = GetPosition();
887 playerDuration = GetDuration();
889 msTime = msTime - (TWO_SEC * MILLISECOND);
891 if (msTime > START_TIME)
893 if (__playerSeekCompleted == true)
896 TryReturnVoid(r == E_SUCCESS, "VideoPlayerPresentationModel::SeekTo() failed:%s", GetErrorMessage(r));
898 __playerSeekCompleted = false;
900 dateTime.AddSeconds(msTime / MILLISECOND);
901 currentPlayTime.Format(20, L"%02d:%02d:%02d", dateTime.GetHour(), dateTime.GetMinute(), dateTime.GetSecond());
903 if (playerDuration != START_TIME)
905 currentProgressPos = static_cast<int>(GetPosition() / (playerDuration / MAX_PROGRESS_RANGE));
907 CallOnPlayTimeChanged(currentProgressPos, currentPlayTime);
912 if (__playerSeekCompleted == true)
914 r = SeekTo(START_TIME);
915 TryReturnVoid(r == E_SUCCESS, "VideoPlayerPresentationModel::SeekTo() failed:%s", GetErrorMessage(r));
917 __playerSeekCompleted = false;
919 currentPlayTime.Format(20, L"%02d:%02d:%02d", START_TIME, START_TIME, START_TIME);
921 currentProgressPos = START_TIME;
923 CallOnPlayTimeChanged(currentProgressPos, currentPlayTime);
926 __pFastRewindTimer->Start(LONGKEY_TIMER_DURATION);
931 VideoPlayerPresentationModel::Forward(void)
933 result r = E_FAILURE;
936 int currentProgressPos = 0;
938 String currentPlayTime;
939 long playerDuration = 0;
941 AppLogDebug("Forward");
943 PlayerState playState = GetState();
945 if (playState != PLAYER_STATE_ENDOFCLIP)
947 playerDuration = GetDuration();
948 msTime = GetPosition();
950 if (!(msTime == START_TIME && playState == PLAYER_STATE_PLAYING))
952 msTime = msTime + (TEN_SEC * MILLISECOND);
954 if (msTime < playerDuration)
956 if (__playerSeekCompleted == true)
959 TryReturnVoid(r == E_SUCCESS, "SeekTo() failed:%s", GetErrorMessage(r));
961 dateTime.AddSeconds(msTime / MILLISECOND);
962 currentPlayTime.Format(20, L"%02d:%02d:%02d", dateTime.GetHour(), dateTime.GetMinute(), dateTime.GetSecond());
964 if (playerDuration != START_TIME)
966 currentProgressPos = static_cast<int>(GetPosition() / (playerDuration / MAX_PROGRESS_RANGE));
968 CallOnPlayTimeChanged(currentProgressPos, currentPlayTime);
970 __playerSeekCompleted = false;
971 __stateAfterSeek = playState;
976 if (__playerSeekCompleted == true)
978 r = SeekTo(playerDuration);
979 TryReturnVoid(r == E_SUCCESS, "SeekTo() failed:%s", GetErrorMessage(r));
981 dateTime.AddSeconds(playerDuration / MILLISECOND);
982 currentPlayTime.Format(20, L"%02d:%02d:%02d", dateTime.GetHour(), dateTime.GetMinute(), dateTime.GetSecond());
984 if (playerDuration != START_TIME)
986 currentProgressPos = static_cast<int>(GetPosition() / (playerDuration / MAX_PROGRESS_RANGE));
988 CallOnPlayTimeChanged(currentProgressPos, currentPlayTime);
990 __playerSeekCompleted = false;
991 __stateAfterSeek = playState;
999 VideoPlayerPresentationModel::Rewind(void)
1001 result r = E_FAILURE;
1004 int currentProgressPos = 0;
1006 String currentPlayTime;
1007 long playerDuration = 0;
1009 AppLogDebug("Rewind");
1011 PlayerState playState = GetState();
1013 if (playState != PLAYER_STATE_ENDOFCLIP)
1015 playerDuration = GetDuration();
1016 msTime = GetPosition();
1018 msTime = msTime - (TEN_SEC * MILLISECOND);
1020 if (msTime < START_TIME)
1022 if (__playerSeekCompleted == true)
1024 r = SeekTo(START_TIME);
1025 TryReturnVoid(r == E_SUCCESS, "SeekTo() failed:%s", GetErrorMessage(r));
1027 currentPlayTime.Format(20, L"%02d:%02d:%02d", START_TIME, START_TIME, START_TIME);
1029 if (playerDuration != START_TIME)
1031 currentProgressPos = static_cast<int>(GetPosition() / (playerDuration / MAX_PROGRESS_RANGE));
1033 CallOnPlayTimeChanged(currentProgressPos, currentPlayTime);
1035 __playerSeekCompleted = false;
1036 __stateAfterSeek = playState;
1041 if (__playerSeekCompleted == true)
1044 TryReturnVoid(r == E_SUCCESS, "SeekTo() failed:%s", GetErrorMessage(r));
1046 dateTime.AddSeconds(msTime / MILLISECOND);
1047 currentPlayTime.Format(20, L"%02d:%02d:%02d", dateTime.GetHour(), dateTime.GetMinute(), dateTime.GetSecond());
1049 if (playerDuration != START_TIME)
1051 currentProgressPos = static_cast<int>(GetPosition() / (playerDuration / MAX_PROGRESS_RANGE));
1053 CallOnPlayTimeChanged(currentProgressPos, currentPlayTime);
1055 __playerSeekCompleted = false;
1056 __stateAfterSeek = playState;
1063 VideoPlayerPresentationModel::FastForward(bool playAfterSeek)
1065 AppLogDebug("FastForward");
1067 if (GetState() != PLAYER_STATE_ENDOFCLIP)
1072 __stateAfterSeek = PLAYER_STATE_PLAYING;
1076 __stateAfterSeek = PLAYER_STATE_PAUSED;
1079 __pFastForwardTimer->Start(LONGKEY_TIMER_DURATION);
1084 VideoPlayerPresentationModel::FastRewind(bool playAfterSeek)
1086 AppLogDebug("FastRewind");
1088 if (GetState() != PLAYER_STATE_ENDOFCLIP)
1093 __stateAfterSeek = PLAYER_STATE_PLAYING;
1097 __stateAfterSeek = PLAYER_STATE_PAUSED;
1100 __pFastRewindTimer->Start(LONGKEY_TIMER_DURATION);
1105 VideoPlayerPresentationModel::StopFastForwardRewind(void)
1107 AppLogDebug("StopFastForwardRewind");
1109 if (GetState() != PLAYER_STATE_ENDOFCLIP)
1111 __pFastForwardTimer->Cancel();
1112 __pFastRewindTimer->Cancel();
1114 if (__playerSeekCompleted == true)
1116 if (__stateAfterSeek == PLAYER_STATE_PLAYING)
1118 result r = StartPlay();
1119 TryReturnVoid(r == E_SUCCESS, "__pPlayer->Play() failed:%s", GetErrorMessage(r));
1121 CallOnPlayStateChanged(GetState());
1123 __pTimer->Start(PROGRESS_TIMER_DURATION);
1128 __playerLastSeekCompleted = true;
1134 VideoPlayerPresentationModel::GetMediaPathName(void) const
1136 AppLogDebug("GetMediaPathName");
1138 String* pMediaName = null;
1140 pMediaName = static_cast<String*>(__pMediaPathArrayList->GetAt(__currentMediaIndex));
1145 VideoPlayerPresentationModel::SetMediaPathArray(void)
1147 AppLogDebug("SetMediaPathArray");
1149 result r = E_SUCCESS;
1151 VideoPlayerApp* pVideoPlayerApp = static_cast<VideoPlayerApp*>(VideoPlayerApp::GetInstance());
1153 String uriData = pVideoPlayerApp->GetUriData();
1155 __pMediaPathArrayList = new (std::nothrow) ArrayList();
1156 r = __pMediaPathArrayList->Construct();
1157 TryCatch(r == E_SUCCESS,, "__pMediaPathArrayList->Construct() failed:%s", GetErrorMessage(r));
1161 __pMediaPathArrayList->Add((new (std::nothrow) String(uriData)));
1165 const IMap* pArguments = pVideoPlayerApp->GetAppControlArguments();
1166 if (pArguments != null)
1168 const ArrayList* pList = static_cast<const ArrayList*>(pArguments->GetValue(String(APPCONTROL_KEY_PATH)));
1172 const String* pPath;
1173 int count = pList->GetCount();
1174 for (int i = 0; i < count; ++i)
1176 pPath = static_cast<const String*>(pList->GetAt(i));
1177 __pMediaPathArrayList->Add(new (std::nothrow) String(*pPath));
1186 if (__pMediaPathArrayList != null)
1188 __pMediaPathArrayList->RemoveAll(true);
1189 delete __pMediaPathArrayList;
1190 __pMediaPathArrayList = null;
1196 VideoPlayerPresentationModel::GetMediaCount(void) const
1198 return __pMediaPathArrayList->GetCount();
1202 VideoPlayerPresentationModel::GetCurrentMediaIndex(void) const
1204 return __currentMediaIndex;
1208 VideoPlayerPresentationModel::GetSeekCompleted(void) const
1210 return __playerSeekCompleted;
1214 VideoPlayerPresentationModel::InitializePlayer(void)
1216 BufferInfo bufferInfo;
1217 result r = E_SUCCESS;
1219 AppLogDebug("InitializePlayer");
1224 r = __pOverlayPanel->GetBackgroundBufferInfo(bufferInfo);
1225 TryCatch(r == E_SUCCESS,, "__pOverlayPanel->GetBackgroundBufferInfo failed:%s", GetErrorMessage(r));
1227 __pPlayer = new (std::nothrow) Player();
1228 AppLogDebug("__pPlayer [%x]", __pPlayer);
1230 r = __pPlayer->Construct(*this, &bufferInfo);
1231 TryCatch(r == E_SUCCESS,, "__pPlayer->Construct failed:%s", GetErrorMessage(r));
1236 if ( __pPlayer != null)
1245 VideoPlayerPresentationModel::GetRepeatMode(void) const
1247 return __repeatMode;
1251 VideoPlayerPresentationModel::SetRepeatMode(int repeatMode)
1253 __repeatMode = repeatMode;
1257 VideoPlayerPresentationModel::ChangeCurrentMediaIndex(void)
1259 AppLogDebug("ChangeCurrentMediaIndex");
1261 if (GetState() == PLAYER_STATE_ENDOFCLIP)
1263 switch (GetRepeatMode())
1265 case REPEAT_TYPE_OFF:
1267 __currentMediaIndex = INIT_CONTENT_INDEX;
1271 case REPEAT_TYPE_ONE:
1273 __currentMediaIndex = __pMediaPathArrayList->GetCount() - 1;
1277 case REPEAT_TYPE_ALL:
1279 __currentMediaIndex = INIT_CONTENT_INDEX;
1290 VideoPlayerPresentationModel::OnFileEventOccured (const unsigned long events, const Tizen::Base::String &path, const unsigned int eventId)
1292 AppLogDebug("OnFileEventOccured: %ls", path.GetPointer());
1294 if ((events & FILE_EVENT_TYPE_MOVE_SELF) == FILE_EVENT_TYPE_MOVE_SELF
1295 || (events & FILE_EVENT_TYPE_DELETE_SELF) == FILE_EVENT_TYPE_DELETE_SELF
1296 || (events & FILE_EVENT_TYPE_ATTRIBUTE) == FILE_EVENT_TYPE_ATTRIBUTE)
1298 __pFileEventMgr->RemovePath(path);
1299 UiApp* pApp = UiApp::GetInstance();