summaryrefslogtreecommitdiffstats
path: root/media/player/mainfrm.h
diff options
context:
space:
mode:
Diffstat (limited to 'media/player/mainfrm.h')
-rw-r--r--media/player/mainfrm.h104
1 files changed, 83 insertions, 21 deletions
diff --git a/media/player/mainfrm.h b/media/player/mainfrm.h
index d3dd669..0ff9e46 100644
--- a/media/player/mainfrm.h
+++ b/media/player/mainfrm.h
@@ -8,16 +8,6 @@
#ifndef MEDIA_PLAYER_MAINFRM_H_
#define MEDIA_PLAYER_MAINFRM_H_
-namespace media {
-// TODO(fbarchard): Reenable this. But it affects ffmpeg filters and got
-// removed in the move to SVN, so I've commented it out for now.
-// It may also hook it to YUV.
-// Both require some pipeline changes to do it in a formal way,
-// or a short term hack to test the feature.
-// g_enablemmx is in ffmpeg_video.
-// extern bool g_enablemmx;
-}
-
const int POPUP_MENU_POSITION = 0;
const int FILE_MENU_POSITION = 0;
const int RECENT_MENU_POSITION = 6;
@@ -25,6 +15,7 @@ const int RECENT_MENU_POSITION = 6;
const wchar_t g_lpcstrMRURegKey[] = L"Software\\Google\\Video\\MediaPlayer";
const wchar_t g_lpcstrApp[] = L"MediaPlayer";
+
class CMainFrame : public CFrameWindowImpl<CMainFrame>,
public CUpdateUI<CMainFrame>,
public CMessageFilter, public CIdleHandler,
@@ -38,6 +29,7 @@ class CMainFrame : public CFrameWindowImpl<CMainFrame>,
WtlVideoWindow m_view;
wchar_t m_szFilePath[MAX_PATH];
+ bool enable_exit;
// printing support
CPrinter m_printer;
@@ -53,6 +45,7 @@ class CMainFrame : public CFrameWindowImpl<CMainFrame>,
m_printer.OpenDefaultPrinter();
m_devmode.CopyFromPrinter(m_printer);
m_szFilePath[0] = 0;
+ enable_exit = false;
}
virtual BOOL PreTranslateMessage(MSG* pMsg) {
@@ -65,6 +58,14 @@ class CMainFrame : public CFrameWindowImpl<CMainFrame>,
virtual BOOL OnIdle() {
BOOL bEnable = !m_view.bmp_.IsNull();
BOOL bMovieOpen = media::Movie::get()->IsOpen() ? true : false;
+
+ float current_position = media::Movie::get()->GetPosition();
+ float duration = media::Movie::get()->GetDuration();
+ if (enable_exit && bEnable &&
+ duration > 0.0f && current_position >= duration) {
+ OnFileExit(0, 0, 0);
+ }
+
UIEnable(ID_FILE_PRINT, bEnable);
UIEnable(ID_FILE_PRINT_PREVIEW, bEnable);
UISetCheck(ID_FILE_PRINT_PREVIEW, m_bPrintPreview);
@@ -86,16 +87,25 @@ class CMainFrame : public CFrameWindowImpl<CMainFrame>,
UIEnable(ID_VIEW_ROTATE270, true);
UIEnable(ID_VIEW_MIRROR_HORIZONTAL, true);
UIEnable(ID_VIEW_MIRROR_VERTICAL, true);
- UIEnable(ID_PLAY_PLAY_PAUSE, bMovieOpen); // if no movie open.
+ UIEnable(ID_PLAY_PLAY_PAUSE, bMovieOpen); // If no movie open.
+ UIEnable(ID_PLAY_STEP_FORWARD, bMovieOpen);
+ UIEnable(ID_PLAY_STEP_BACKWARD, bMovieOpen);
+ UIEnable(ID_PLAY_GOTO_START, bMovieOpen);
+ UIEnable(ID_PLAY_GOTO_END, bMovieOpen);
+ UIEnable(ID_PLAY_GOTO_FRAME, false); // Not working yet.
UIEnable(ID_PLAY_HALFSPEED, true);
UIEnable(ID_PLAY_NORMALSPEED, true);
UIEnable(ID_PLAY_DOUBLESPEED, true);
+ UIEnable(ID_PLAY_TRIPLESPEED, true);
+ UIEnable(ID_PLAY_QUADRUPLESPEED, true);
+ UIEnable(ID_PLAY_EIGHTSPEED, true);
+ UIEnable(ID_PLAY_SIXTEENSPEED, true);
#ifdef _OPENMP
UIEnable(ID_OPTIONS_OPENMP, true);
#else
UIEnable(ID_OPTIONS_OPENMP, false);
#endif
- UIEnable(ID_OPTIONS_MMX, false); // Not currently implemented.
+ UIEnable(ID_OPTIONS_EXIT, true); // Not currently implemented.
UIEnable(ID_OPTIONS_SWSCALER, true);
UIEnable(ID_OPTIONS_DRAW, true);
UIEnable(ID_OPTIONS_AUDIO, !bMovieOpen); // Disable while playing.
@@ -220,11 +230,16 @@ class CMainFrame : public CFrameWindowImpl<CMainFrame>,
OnViewRotate)
COMMAND_ID_HANDLER_EX(ID_VIEW_PROPERTIES, OnViewProperties)
COMMAND_ID_HANDLER_EX(ID_PLAY_PLAY_PAUSE, OnPlayPlayPause)
- COMMAND_RANGE_HANDLER_EX(ID_PLAY_HALFSPEED, ID_PLAY_DOUBLESPEED,
+ COMMAND_ID_HANDLER_EX(ID_PLAY_STEP_FORWARD, OnPlayStepForward)
+ COMMAND_ID_HANDLER_EX(ID_PLAY_STEP_BACKWARD, OnPlayStepBackward)
+ COMMAND_ID_HANDLER_EX(ID_PLAY_GOTO_START, OnPlayGotoStart)
+ COMMAND_ID_HANDLER_EX(ID_PLAY_GOTO_END, OnPlayGotoEnd)
+ COMMAND_ID_HANDLER_EX(ID_PLAY_GOTO_FRAME, OnPlayGotoFrame)
+ COMMAND_RANGE_HANDLER_EX(ID_PLAY_HALFSPEED, ID_PLAY_SIXTEENSPEED,
OnPlaySpeed)
COMMAND_ID_HANDLER_EX(ID_APP_ABOUT, OnAppAbout)
COMMAND_ID_HANDLER_EX(ID_OPTIONS_OPENMP, OnOptionsOpenMP)
- COMMAND_ID_HANDLER_EX(ID_OPTIONS_MMX, OnOptionsMMX)
+ COMMAND_ID_HANDLER_EX(ID_OPTIONS_EXIT, OnOptionsExit)
COMMAND_ID_HANDLER_EX(ID_OPTIONS_SWSCALER, OnOptionsSWScaler)
COMMAND_ID_HANDLER_EX(ID_OPTIONS_DRAW, OnOptionsDraw)
COMMAND_ID_HANDLER_EX(ID_OPTIONS_AUDIO, OnOptionsAudio)
@@ -258,11 +273,20 @@ class CMainFrame : public CFrameWindowImpl<CMainFrame>,
UPDATE_ELEMENT(ID_VIEW_MIRROR_VERTICAL, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_VIEW_PROPERTIES, UPDUI_MENUPOPUP | UPDUI_TOOLBAR)
UPDATE_ELEMENT(ID_PLAY_PLAY_PAUSE, UPDUI_MENUPOPUP | UPDUI_TOOLBAR)
+ UPDATE_ELEMENT(ID_PLAY_STEP_FORWARD, UPDUI_MENUPOPUP)
+ UPDATE_ELEMENT(ID_PLAY_STEP_BACKWARD, UPDUI_MENUPOPUP)
+ UPDATE_ELEMENT(ID_PLAY_GOTO_START, UPDUI_MENUPOPUP)
+ UPDATE_ELEMENT(ID_PLAY_GOTO_END, UPDUI_MENUPOPUP)
+ UPDATE_ELEMENT(ID_PLAY_GOTO_FRAME, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_PLAY_HALFSPEED, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_PLAY_NORMALSPEED, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_PLAY_DOUBLESPEED, UPDUI_MENUPOPUP)
+ UPDATE_ELEMENT(ID_PLAY_TRIPLESPEED, UPDUI_MENUPOPUP)
+ UPDATE_ELEMENT(ID_PLAY_QUADRUPLESPEED, UPDUI_MENUPOPUP)
+ UPDATE_ELEMENT(ID_PLAY_EIGHTSPEED, UPDUI_MENUPOPUP)
+ UPDATE_ELEMENT(ID_PLAY_SIXTEENSPEED, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_OPTIONS_OPENMP, UPDUI_MENUPOPUP)
- UPDATE_ELEMENT(ID_OPTIONS_MMX, UPDUI_MENUPOPUP)
+ UPDATE_ELEMENT(ID_OPTIONS_EXIT, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_OPTIONS_SWSCALER, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_OPTIONS_DRAW, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_OPTIONS_AUDIO, UPDUI_MENUPOPUP)
@@ -285,9 +309,13 @@ class CMainFrame : public CFrameWindowImpl<CMainFrame>,
void UpdateSpeedUICheck() {
if (media::Movie::get()) {
float play_rate = media::Movie::get()->GetPlayRate();
- UISetCheck(ID_PLAY_HALFSPEED, (play_rate == 0.5f));
- UISetCheck(ID_PLAY_NORMALSPEED, (play_rate == 1.0f));
- UISetCheck(ID_PLAY_DOUBLESPEED, (play_rate == 2.0f));
+ UISetCheck(ID_PLAY_HALFSPEED, (play_rate == 0.5f));
+ UISetCheck(ID_PLAY_NORMALSPEED, (play_rate == 1.0f));
+ UISetCheck(ID_PLAY_DOUBLESPEED, (play_rate == 2.0f));
+ UISetCheck(ID_PLAY_TRIPLESPEED, (play_rate == 3.0f));
+ UISetCheck(ID_PLAY_QUADRUPLESPEED, (play_rate == 4.0f));
+ UISetCheck(ID_PLAY_EIGHTSPEED, (play_rate == 8.0f));
+ UISetCheck(ID_PLAY_SIXTEENSPEED, (play_rate == 16.0f));
}
}
@@ -349,6 +377,7 @@ class CMainFrame : public CFrameWindowImpl<CMainFrame>,
UISetCheck(ID_VIEW_STATUS_BAR, 1);
UISetCheck(ID_VIEW_ROTATE0, 1);
UISetCheck(ID_OPTIONS_OPENMP, 0);
+ UISetCheck(ID_OPTIONS_EXIT, 0);
UISetCheck(ID_OPTIONS_DRAW, 1);
UISetCheck(ID_OPTIONS_AUDIO, 1);
UpdateSizeUICheck();
@@ -611,11 +640,38 @@ class CMainFrame : public CFrameWindowImpl<CMainFrame>,
media::Movie::get()->SetPause(paused);
}
+ void OnPlayStepForward(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/) {
+ float current_position = media::Movie::get()->GetPosition();
+ media::Movie::get()->SetPosition(current_position + 10.0f);
+ }
+
+ void OnPlayStepBackward(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/) {
+ float current_position = media::Movie::get()->GetPosition();
+ media::Movie::get()->SetPosition(current_position - 10.0f);
+ }
+
+ void OnPlayGotoStart(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/) {
+ media::Movie::get()->SetPosition(0.0);
+ }
+
+ void OnPlayGotoEnd(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/) {
+ float current_position = media::Movie::get()->GetDuration();
+ media::Movie::get()->SetPosition(current_position - 30.0f);
+ }
+
void SetPlayRate(int play_speed) {
if (play_speed == 0) {
media::Movie::get()->Play(0.5f);
} else if (play_speed == 2) {
media::Movie::get()->Play(2.0f);
+ } else if (play_speed == 3) {
+ media::Movie::get()->Play(3.0f);
+ } else if (play_speed == 4) {
+ media::Movie::get()->Play(4.0f);
+ } else if (play_speed == 5) {
+ media::Movie::get()->Play(8.0f);
+ } else if (play_speed == 6) {
+ media::Movie::get()->Play(16.0f);
} else {
media::Movie::get()->Play(1.0f);
}
@@ -637,10 +693,10 @@ class CMainFrame : public CFrameWindowImpl<CMainFrame>,
UpdateLayout();
}
- void OnOptionsMMX(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/) {
+ void OnOptionsExit(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/) {
// TODO(fbarchard): Implement when pipeline exposes properties.
- // media::g_enablemmx = !media::g_enablemmx;
- // UISetCheck(ID_OPTIONS_MMX, media::g_enablemmx);
+ enable_exit = !enable_exit;
+ UISetCheck(ID_OPTIONS_EXIT, enable_exit);
UpdateLayout();
}
@@ -676,6 +732,12 @@ class CMainFrame : public CFrameWindowImpl<CMainFrame>,
CSimpleDialog<IDD_ABOUTBOX> dlg;
dlg.DoModal();
}
+
+
+ void OnPlayGotoFrame(UINT /*uNotifyCode*/, int /*nID*/, CWindow /*wnd*/) {
+ CSeek seek;
+ seek.DoModal();
+ }
};
#endif // MEDIA_PLAYER_MAINFRM_H_