2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
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
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.
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 VideoPlayerPresentationModel*
52 VideoPlayerPresentationModel::__pVideoPlayerPresentationModel = null;
54 VideoPlayerPresentationModel::VideoPlayerPresentationModel(void)
56 , __pVideoPlayerEventListener(null)
57 , __pOverlayPanel(null)
58 , __pMediaPathArrayList(null)
60 , __pFastForwardTimer(null)
61 , __pFastRewindTimer(null)
62 , __playerSeekCompleted(true)
63 , __playerLastSeekCompleted(false)
64 , __playAfterSeek(true)
67 , __currentMediaIndex(INIT_CONTENT_INDEX)
68 , __nextMediaIndex(INIT_CONTENT_INDEX)
69 , __previousMediaIndex(INIT_CONTENT_INDEX)
73 VideoPlayerPresentationModel::~VideoPlayerPresentationModel(void)
79 delete __pMediaPathArrayList;
82 VideoPlayerPresentationModel*
83 VideoPlayerPresentationModel::GetInstance(void)
85 AppLogDebug("GetInstance");
87 if (__pVideoPlayerPresentationModel == null)
92 return __pVideoPlayerPresentationModel;
96 VideoPlayerPresentationModel::Construct(void)
99 bool fileExist = false;
104 String* mediaName = null;
105 wchar_t tempChar[2] = L"";
107 VideoPlayerApp* pVideoPlayerApp = static_cast<VideoPlayerApp*>(VideoPlayerApp::GetInstance());
109 String uriData = pVideoPlayerApp->GetUriData();
110 const String* pPath = null;
111 if (uriData.IsEmpty() == true)
113 const IMap* pArguments = pVideoPlayerApp->GetAppControlArguments();
114 pPath = static_cast<const String*>(pArguments->GetValue(String(APPCONTROL_KEY_PATH)));
116 __pMediaPathArrayList = new (std::nothrow) ArrayList();
117 r = __pMediaPathArrayList->Construct();
118 TryCatch(r == E_SUCCESS, , "__pMediaPathArrayList->Construct() failed:%s", GetErrorMessage(r));
122 currentPath = *pPath;
123 loopCount = currentPath.GetLength();
125 for (int i = 0; i < loopCount; ++i)
127 currentPath.GetCharAt(i, *tempChar);
129 if (delim != tempChar)
131 tempPath += tempChar;
135 fileExist = File::IsFileExist(tempPath);
136 if (fileExist == true)
138 AppLogDebug("Path : %ls", tempPath.GetPointer());
139 __pMediaPathArrayList->Add((new (std::nothrow) String(tempPath)));
144 tempPath += tempChar;
148 AppLogDebug("Path : %ls", tempPath.GetPointer());
149 __pMediaPathArrayList->Add((new (std::nothrow) String(tempPath)));
152 mediaName = static_cast<String*>(__pMediaPathArrayList->GetAt(INIT_CONTENT_INDEX));
153 __mediaPathName = *mediaName;
155 if (__pMediaPathArrayList->GetCount() < MULTI_CONTENT_COUNT)
157 __previousMediaIndex = INIT_CONTENT_INDEX;
158 __currentMediaIndex = INIT_CONTENT_INDEX;
159 __nextMediaIndex = INIT_CONTENT_INDEX;
163 __previousMediaIndex = INIT_CONTENT_INDEX;
164 __currentMediaIndex = INIT_CONTENT_INDEX;
165 __nextMediaIndex = __currentMediaIndex + 1;
170 __mediaPathName = uriData;
178 delete __pMediaPathArrayList;
179 __pMediaPathArrayList = null;
184 VideoPlayerPresentationModel::CreateInstance(void)
186 AppLogDebug("CreateInstance");
188 __pVideoPlayerPresentationModel = new (std::nothrow) VideoPlayerPresentationModel();
189 result r = __pVideoPlayerPresentationModel->Construct();
193 delete __pVideoPlayerPresentationModel;
194 __pVideoPlayerPresentationModel = null;
200 VideoPlayerPresentationModel::DestroyInstance(void)
202 delete __pVideoPlayerPresentationModel;
203 __pVideoPlayerPresentationModel = null;
207 VideoPlayerPresentationModel::GetVideoInfoN(const String& mediaLocalPath)
210 result r = E_FAILURE;
212 const IList* pInfoList = null;
213 const VideoStreamInfo* pInfo = null;
214 MediaStreamInfo* pStreamInfo = null;
216 if (__pPlayer->GetState() == PLAYER_STATE_PLAYING)
218 pStreamInfo = __pPlayer->GetCurrentMediaStreamInfoN();
219 if (pStreamInfo == null)
221 TryCatch(pStreamInfo != null, r = E_FAILURE, "__pPlayer->GetCurrentMediaStreamInfoN() is null");
224 pInfoList = pStreamInfo->GetVideoStreamInfoList();
225 if (pInfoList == null)
227 TryCatch(pInfoList != null, r = E_FAILURE, "pStreamInfo->GetVideoStreamInfoList() is null");
230 pInfo = (const VideoStreamInfo*)pInfoList->GetAt(0);
233 TryCatch(pInfo != null, r = E_FAILURE, "pInfoList->GetAt() is null");
236 rect.width = pInfo->GetWidth();
237 rect.height = pInfo->GetHeight();
239 __mediaWidth = pInfo->GetWidth();
240 __mediaHeight = pInfo->GetHeight();
246 rect.width = __mediaWidth;
247 rect.height = __mediaHeight;
255 rect.width = __mediaWidth;
256 rect.height = __mediaHeight;
262 VideoPlayerPresentationModel::ConstructPlayerInstanceWithBufferInfo(void)
264 result r = E_FAILURE;
265 BufferInfo bufferInfo;
267 r = __pOverlayPanel->GetBackgroundBufferInfo(bufferInfo);
268 TryCatch(r == E_SUCCESS, , "__pOverlayRegion->GetBackgroundBufferInfo() failed:%s", GetErrorMessage(r));
272 __pPlayer = new (std::nothrow) Player();
274 __pPlayer->Construct(*this, &bufferInfo);
276 AppLogDebug("__pPlayer [%x]", __pPlayer);
285 VideoPlayerPresentationModel::SeekTo(long msTime)
287 result r = E_FAILURE;
289 PlayerState playState = GetState();
293 case PLAYER_STATE_PLAYING:
295 case PLAYER_STATE_PAUSED:
297 r = __pPlayer->SeekTo(msTime);
298 TryCatch(r == E_SUCCESS, , "__pPlayer->SeekTo failed:%s", GetErrorMessage(r));
313 VideoPlayerPresentationModel::OnPlayerSeekCompleted(result r)
315 AppLogDebug("OnPlayerSeekCompleted");
317 __playerSeekCompleted = true;
319 if (__playerLastSeekCompleted == true)
321 if (__playAfterSeek == true)
323 result r = __pPlayer->Play();
324 TryReturnVoid(r == E_SUCCESS, "__pPlayer->Play():%s", GetErrorMessage(r));
326 CallOnPlayStateChanged(__pPlayer->GetState());
328 __pTimer->Start(PROGRESS_TIMER_DURATION);
331 __playerLastSeekCompleted = false;
336 VideoPlayerPresentationModel::SetPlayerBuffer(const BufferInfo& bufferInfo)
338 result r = E_FAILURE;
339 r = __pPlayer->SetRenderingBuffer(bufferInfo);
340 TryReturnVoid(r == E_SUCCESS, "__pPlayer->SetRenderingBuffer failed:%s", GetErrorMessage(r));
344 VideoPlayerPresentationModel::StartPlay(void)
346 result r = E_FAILURE;
348 PlayerState playState = __pPlayer->GetState();
349 AppLogDebug("StartPlay : %d", playState);
353 case PLAYER_STATE_ENDOFCLIP:
355 case PLAYER_STATE_INITIALIZED:
357 case PLAYER_STATE_CLOSED:
363 mediaPath = GetMediaPathName();
365 StringTokenizer strTok(mediaPath, delim);
367 while (strTok.HasMoreTokens())
369 strTok.GetNextToken(mediaName);
372 if (mediaPath.StartsWith(L"http://", 0) == true
373 || mediaPath.StartsWith(L"https://", 0) == true
374 || mediaPath.StartsWith(L"rtsp://", 0) == true
375 || mediaPath.StartsWith(L"rtp://", 0) == true)
378 r = mediaUri.SetUri(mediaPath);
382 r = __pPlayer->OpenUrl(mediaUri);
387 r = __pPlayer->OpenFile(mediaPath);
392 AppResource* pAppResource = Application::GetInstance()->GetAppResource();
393 String messageBoxString;
394 pAppResource->GetString(IDS_COM_POP_UNSUPPORTED_FILE_TYPE, messageBoxString);
395 MessageBox messageBox;
396 messageBox.Construct(L"", messageBoxString, MSGBOX_STYLE_OK, 3000);
398 messageBox.ShowAndWait(modalResult);
400 UiApp* pApp = UiApp::GetInstance();
405 r = __pPlayer->Play();
406 TryCatch(r == E_SUCCESS, , "__pPlayer->Play() failed:%s", GetErrorMessage(r));
408 CallOnPlayContentChanged(mediaName);
410 r = __pTimer->Start(PROGRESS_TIMER_DURATION);
411 TryCatch(r == E_SUCCESS, , "__pTimer->Start() failed:%s", GetErrorMessage(r));
416 case PLAYER_STATE_PAUSED:
418 r = __pPlayer->Play();
419 TryCatch(r == E_SUCCESS, , "__pPlayer->Play() failed:%s", GetErrorMessage(r));
421 r = __pTimer->Start(PROGRESS_TIMER_DURATION);
422 TryCatch(r == E_SUCCESS, , "__pTimer->Start() failed:%s", GetErrorMessage(r));
430 CallOnPlayStateChanged(__pPlayer->GetState());
437 VideoPlayerPresentationModel::StopPlay(void)
439 result r = E_FAILURE;
441 PlayerState playState = GetState();
442 AppLogDebug("StopPlay : %d", playState);
446 case PLAYER_STATE_PLAYING:
448 case PLAYER_STATE_PAUSED:
450 r = __pPlayer->Stop();
451 TryCatch(r == E_SUCCESS, , "__pPlayer->Stop() failed:%s", GetErrorMessage(r));
464 VideoPlayerPresentationModel::PausePlay(void)
466 result r = E_FAILURE;
467 PlayerState playState = GetState();
468 AppLogDebug("PausePlay : %d", playState);
470 if (playState == PLAYER_STATE_PLAYING)
472 r = __pPlayer->Pause();
473 TryCatch(r == E_SUCCESS, , "__pPlayer->Pause() failed:%s", GetErrorMessage(r));
477 AppLogDebug("Invalid state of player");
480 CallOnPlayStateChanged(__pPlayer->GetState());
487 VideoPlayerPresentationModel::ClosePlay(void)
489 result r = E_FAILURE;
490 PlayerState playState = GetState();
494 case PLAYER_STATE_OPENED:
496 case PLAYER_STATE_STOPPED:
498 case PLAYER_STATE_ENDOFCLIP:
500 r = __pPlayer->Close();
501 TryCatch(r == E_SUCCESS, , "__pPlayer->Close() failed:%s", GetErrorMessage(r));
514 VideoPlayerPresentationModel::GetState(void) const
516 return __pPlayer->GetState();
520 VideoPlayerPresentationModel::GetDuration(void) const
522 return __pPlayer->GetDuration();
526 VideoPlayerPresentationModel::GetPosition(void) const
528 return __pPlayer->GetPosition();
532 VideoPlayerPresentationModel::SetVideoPlayerEventListener(IVideoPlayerEventListener* pPlayerListener)
534 __pVideoPlayerEventListener = pPlayerListener;
538 VideoPlayerPresentationModel::SetOverlayPanel(OverlayPanel* pOverlay)
540 __pOverlayPanel = pOverlay;
544 VideoPlayerPresentationModel::SetRenderingBuffer(void)
546 BufferInfo bufferInfo;
548 __pOverlayPanel->GetBackgroundBufferInfo(bufferInfo);
549 __pPlayer->SetRenderingBuffer(bufferInfo);
553 VideoPlayerPresentationModel::OnPlayerOpened(result r)
555 AppLogDebug("OnPlayerOpened");
556 __pVideoPlayerEventListener->OnPlayOpened(r);
560 VideoPlayerPresentationModel::OnPlayerEndOfClip(void)
562 bool playNextContent = false;
564 AppLogDebug("OnPlayerEndOfClip");
567 __pFastForwardTimer->Cancel();
568 __pFastRewindTimer->Cancel();
570 __playerSeekCompleted = true;
572 if (__pMediaPathArrayList->GetCount() < MULTI_CONTENT_COUNT)
574 __previousMediaIndex = INIT_CONTENT_INDEX;
575 __currentMediaIndex = INIT_CONTENT_INDEX;
576 __nextMediaIndex = INIT_CONTENT_INDEX;
580 if (__currentMediaIndex == __pMediaPathArrayList->GetCount() - 1)
582 __previousMediaIndex = __currentMediaIndex;
583 __currentMediaIndex = INIT_CONTENT_INDEX;
584 __nextMediaIndex = __currentMediaIndex + 1;
588 __previousMediaIndex = __currentMediaIndex;
589 __currentMediaIndex = __nextMediaIndex;
590 __nextMediaIndex = __currentMediaIndex + 1;
594 if ((__currentMediaIndex > __previousMediaIndex)
595 && (__currentMediaIndex < __pMediaPathArrayList->GetCount()))
597 playNextContent = true;
601 playNextContent = false;
604 __pVideoPlayerEventListener->OnPlayEndOfClip(playNextContent);
608 VideoPlayerPresentationModel::OnPlayerBuffering(int percent)
610 AppLogDebug("OnPlayerBuffering");
611 __pVideoPlayerEventListener->OnPlayBuffering(percent);
615 VideoPlayerPresentationModel::OnPlayerErrorOccurred(PlayerErrorReason r)
617 AppLogDebug("OnPlayerErrorOccurred");
618 __pVideoPlayerEventListener->OnPlayErrorOccurred(r);
622 VideoPlayerPresentationModel::OnPlayerInterrupted(void)
624 AppLogDebug("OnPlayerInterrupted");
625 __pVideoPlayerEventListener->OnPlayInterrupted();
627 CallOnPlayStateChanged(__pPlayer->GetState());
631 VideoPlayerPresentationModel::OnPlayerAudioFocusChanged(void)
633 AppLog("OnPlayerAudioFocusChanged");
635 CallOnPlayStateChanged(__pPlayer->GetState());
639 VideoPlayerPresentationModel::OnPlayerReleased(void)
641 AppLogDebug("OnPlayerReleased");
642 __pVideoPlayerEventListener->OnPlayReleased();
646 VideoPlayerPresentationModel::CallOnPlayContentChanged(const String& fileName)
648 AppLogDebug("CallOnPlayContentChanged");
650 __pVideoPlayerEventListener->OnPlayContentChanged(fileName);
654 VideoPlayerPresentationModel::CallOnPlayTimeChanged(int currentProgressPos, String& currentPlayTime)
656 AppLogDebug("CallOnPlayTimeChanged");
658 __pVideoPlayerEventListener->OnPlayTimeChanged(currentProgressPos, currentPlayTime);
662 VideoPlayerPresentationModel::CallOnPlayStateChanged(PlayerState playState)
664 AppLogDebug("CallOnPlayStateChanged");
666 __pVideoPlayerEventListener->OnPlayStateChanged(playState);
670 VideoPlayerPresentationModel::InitTimer(void)
672 AppLogDebug("InitTimer");
674 __pTimer = new (std::nothrow) Timer();
675 __pTimer->Construct(*this);
677 __pFastForwardTimer = new (std::nothrow) Timer();
678 __pFastForwardTimer->Construct(*this);
680 __pFastRewindTimer = new (std::nothrow) Timer();
681 __pFastRewindTimer->Construct(*this);
685 VideoPlayerPresentationModel::DeleteTimer(void)
687 AppLogDebug("DeleteTimer");
693 __pFastForwardTimer->Cancel();
694 delete __pFastForwardTimer;
695 __pFastForwardTimer = null;
697 __pFastRewindTimer->Cancel();
698 delete __pFastRewindTimer;
699 __pFastRewindTimer = null;
703 VideoPlayerPresentationModel::OnTimerExpired(Timer& timer)
705 result r = E_FAILURE;
707 int currentProgressPos = 0;
709 String currentPlayTime;
711 if (timer.GetHashCode() == __pTimer->GetHashCode())
713 if (__pPlayer->GetState() == PLAYER_STATE_INITIALIZED || __pPlayer->GetState() == PLAYER_STATE_PLAYING)
715 dateTime.AddSeconds(__pPlayer->GetPosition() / MILLISECOND);
716 currentPlayTime.Format(20, L"%02d:%02d:%02d", dateTime.GetHour(), dateTime.GetMinute(), dateTime.GetSecond());
718 currentProgressPos = static_cast<int>(__pPlayer->GetPosition() / (__pPlayer->GetDuration() / MAX_PROGRESS_RANGE));
720 CallOnPlayTimeChanged(currentProgressPos, currentPlayTime);
722 __pTimer->Start(PROGRESS_TIMER_DURATION);
725 else if (timer.GetHashCode() == __pFastForwardTimer->GetHashCode())
727 msTime = __pPlayer->GetPosition();
729 msTime = msTime + (TWO_SEC * MILLISECOND);
731 if (msTime < __pPlayer->GetDuration())
733 if (__playerSeekCompleted == true)
736 TryReturnVoid(r == E_SUCCESS, "VideoPlayerPresentationModel::SeekTo() failed:%s", GetErrorMessage(r));
738 __playerSeekCompleted = false;
740 dateTime.AddSeconds(msTime / MILLISECOND);
741 currentPlayTime.Format(20, L"%02d:%02d:%02d", dateTime.GetHour(), dateTime.GetMinute(), dateTime.GetSecond());
743 currentProgressPos = static_cast<int>(__pPlayer->GetPosition() / (__pPlayer->GetDuration() / MAX_PROGRESS_RANGE));
745 CallOnPlayTimeChanged(currentProgressPos, currentPlayTime);
750 if (__playerSeekCompleted == true)
752 r = SeekTo(__pPlayer->GetDuration());
753 TryReturnVoid(r == E_SUCCESS, "VideoPlayerPresentationModel::SeekTo() failed:%s", GetErrorMessage(r));
754 __playerSeekCompleted = false;
756 dateTime.AddSeconds(__pPlayer->GetDuration() / MILLISECOND);
757 currentPlayTime.Format(20, L"%02d:%02d:%02d", dateTime.GetHour(), dateTime.GetMinute(), dateTime.GetSecond());
759 currentProgressPos = static_cast<int>(__pPlayer->GetPosition() / (__pPlayer->GetDuration() / MAX_PROGRESS_RANGE));
761 CallOnPlayTimeChanged(currentProgressPos, currentPlayTime);
764 __pFastForwardTimer->Start(LONGKEY_TIMER_DURATION);
766 else if (timer.GetHashCode() == __pFastRewindTimer->GetHashCode())
768 msTime = __pPlayer->GetPosition();
770 msTime = msTime - (TWO_SEC * MILLISECOND);
772 if (msTime > START_TIME)
774 if (__playerSeekCompleted == true)
777 TryReturnVoid(r == E_SUCCESS, "VideoPlayerPresentationModel::SeekTo() failed:%s", GetErrorMessage(r));
779 __playerSeekCompleted = false;
781 dateTime.AddSeconds(msTime / MILLISECOND);
782 currentPlayTime.Format(20, L"%02d:%02d:%02d", dateTime.GetHour(), dateTime.GetMinute(), dateTime.GetSecond());
784 currentProgressPos = static_cast<int>(__pPlayer->GetPosition() / (__pPlayer->GetDuration() / MAX_PROGRESS_RANGE));
786 CallOnPlayTimeChanged(currentProgressPos, currentPlayTime);
791 if (__playerSeekCompleted == true)
793 r = SeekTo(START_TIME);
794 TryReturnVoid(r == E_SUCCESS, "VideoPlayerPresentationModel::SeekTo() failed:%s", GetErrorMessage(r));
796 __playerSeekCompleted = false;
798 currentPlayTime.Format(20, L"%02d:%02d:%02d", START_TIME, START_TIME, START_TIME);
800 currentProgressPos = START_TIME;
802 CallOnPlayTimeChanged(currentProgressPos, currentPlayTime);
805 __pFastRewindTimer->Start(LONGKEY_TIMER_DURATION);
810 VideoPlayerPresentationModel::Forward(void)
812 result r = E_FAILURE;
815 int currentProgressPos = 0;
817 String currentPlayTime;
819 AppLogDebug("Forward");
821 if (__pPlayer->GetState() != PLAYER_STATE_ENDOFCLIP)
823 msTime = __pPlayer->GetPosition();
825 msTime = msTime + (TEN_SEC * MILLISECOND);
827 if (msTime < __pPlayer->GetDuration())
829 if (__playerSeekCompleted == true)
832 TryReturnVoid(r == E_SUCCESS, "SeekTo() failed:%s", GetErrorMessage(r));
834 dateTime.AddSeconds(msTime / MILLISECOND);
835 currentPlayTime.Format(20, L"%02d:%02d:%02d", dateTime.GetHour(), dateTime.GetMinute(), dateTime.GetSecond());
837 currentProgressPos = static_cast<int>(__pPlayer->GetPosition() / (__pPlayer->GetDuration() / MAX_PROGRESS_RANGE));
838 CallOnPlayTimeChanged(currentProgressPos, currentPlayTime);
840 __playerSeekCompleted = false;
845 if (__playerSeekCompleted == true)
847 r = SeekTo(__pPlayer->GetDuration());
848 TryReturnVoid(r == E_SUCCESS, "SeekTo() failed:%s", GetErrorMessage(r));
850 dateTime.AddSeconds(__pPlayer->GetDuration() / MILLISECOND);
851 currentPlayTime.Format(20, L"%02d:%02d:%02d", dateTime.GetHour(), dateTime.GetMinute(), dateTime.GetSecond());
853 currentProgressPos = static_cast<int>(__pPlayer->GetPosition() / (__pPlayer->GetDuration() / MAX_PROGRESS_RANGE));
854 CallOnPlayTimeChanged(currentProgressPos, currentPlayTime);
856 __playerSeekCompleted = false;
863 VideoPlayerPresentationModel::Rewind(void)
865 result r = E_FAILURE;
868 int currentProgressPos = 0;
870 String currentPlayTime;
872 AppLogDebug("Rewind");
874 if (__pPlayer->GetState() != PLAYER_STATE_ENDOFCLIP)
876 msTime = __pPlayer->GetPosition();
878 msTime = msTime - (TEN_SEC * MILLISECOND);
880 if (msTime < START_TIME)
882 if (__playerSeekCompleted == true)
884 r = SeekTo(START_TIME);
885 TryReturnVoid(r == E_SUCCESS, "SeekTo() failed:%s", GetErrorMessage(r));
887 currentPlayTime.Format(20, L"%02d:%02d:%02d", START_TIME, START_TIME, START_TIME);
889 currentProgressPos = static_cast<int>(__pPlayer->GetPosition() / (__pPlayer->GetDuration() / MAX_PROGRESS_RANGE));
890 CallOnPlayTimeChanged(currentProgressPos, currentPlayTime);
892 __playerSeekCompleted = false;
897 if (__playerSeekCompleted == true)
900 TryReturnVoid(r == E_SUCCESS, "SeekTo() failed:%s", GetErrorMessage(r));
902 dateTime.AddSeconds(msTime / MILLISECOND);
903 currentPlayTime.Format(20, L"%02d:%02d:%02d", dateTime.GetHour(), dateTime.GetMinute(), dateTime.GetSecond());
905 currentProgressPos = static_cast<int>(__pPlayer->GetPosition() / (__pPlayer->GetDuration() / MAX_PROGRESS_RANGE));
906 CallOnPlayTimeChanged(currentProgressPos, currentPlayTime);
908 __playerSeekCompleted = false;
915 VideoPlayerPresentationModel::FastForward(bool playAfterSeek)
917 AppLogDebug("FastForward");
919 if (__pPlayer->GetState() != PLAYER_STATE_ENDOFCLIP)
922 __playAfterSeek = playAfterSeek;
923 __pFastForwardTimer->Start(LONGKEY_TIMER_DURATION);
928 VideoPlayerPresentationModel::FastRewind(bool playAfterSeek)
930 AppLogDebug("FastRewind");
932 if (__pPlayer->GetState() != PLAYER_STATE_ENDOFCLIP)
935 __playAfterSeek = playAfterSeek;
936 __pFastRewindTimer->Start(LONGKEY_TIMER_DURATION);
941 VideoPlayerPresentationModel::StopFastForwardRewind(void)
943 AppLogDebug("StopFastForwardRewind");
945 if (__pPlayer->GetState() != PLAYER_STATE_ENDOFCLIP)
947 __pFastForwardTimer->Cancel();
948 __pFastRewindTimer->Cancel();
950 if (__playerSeekCompleted == true)
952 if (__playAfterSeek == true)
954 result r = __pPlayer->Play();
955 TryReturnVoid(r == E_SUCCESS, "__pPlayer->Play() failed:%s", GetErrorMessage(r));
957 CallOnPlayStateChanged(__pPlayer->GetState());
959 __pTimer->Start(PROGRESS_TIMER_DURATION);
964 __playerLastSeekCompleted = true;
970 VideoPlayerPresentationModel::GetMediaPathName(void) const
972 AppLogDebug("GetMediaPathName");
974 String* pMediaName = null;
976 pMediaName = static_cast<String*>(__pMediaPathArrayList->GetAt(__currentMediaIndex));
981 VideoPlayerPresentationModel::GetMediaCount(void) const
983 return __pMediaPathArrayList->GetCount();
987 VideoPlayerPresentationModel::GetCurrentMediaIndex(void) const
989 return __currentMediaIndex;
993 VideoPlayerPresentationModel::GetPreviousMediaIndex(void) const
995 return __previousMediaIndex;
999 VideoPlayerPresentationModel::InitializePlayer(void)
1001 BufferInfo bufferInfo;
1003 AppLogDebug("InitializePlayer");
1006 __pOverlayPanel->GetBackgroundBufferInfo(bufferInfo);
1008 __pPlayer = new (std::nothrow) Player();
1009 result r = __pPlayer->Construct(*this, &bufferInfo);
1011 AppLogDebug("__pPlayer [%x]", __pPlayer);