diff --git a/avidemux/common/ADM_commonUI/myOwnMenu.h b/avidemux/common/ADM_commonUI/myOwnMenu.h index acfdba9e6b..0811718f72 100644 --- a/avidemux/common/ADM_commonUI/myOwnMenu.h +++ b/avidemux/common/ADM_commonUI/myOwnMenu.h @@ -155,7 +155,8 @@ static const MenuEntry _myMenuGo[] = { {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Backward 4 seconds"), NULL,ACT_Back4Seconds, MKICON(backward4s), "Ctrl+Shift+Left",0}, {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Forward 4 seconds"), NULL,ACT_Forward4Seconds, MKICON(forward4s), "Ctrl+Shift+Right",0}, {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Backward one minute"), NULL,ACT_Back1Mn, MKICON(backward1mn), NULL,0}, - {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Forward one minute"), NULL,ACT_Forward1Mn, MKICON(forward1mn), NULL,0} + {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Forward one minute"), NULL,ACT_Forward1Mn, MKICON(forward1mn), NULL,0}, + {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Fast Forward"), NULL,ACT_FastForward, MKICON(fastforward), "Alt+Right",0} }; std::vector myMenuGo(_myMenuGo, _myMenuGo + sizeof(_myMenuGo) / sizeof(_myMenuGo[0])); diff --git a/avidemux/common/gtkgui.h b/avidemux/common/gtkgui.h index 33dc0ece07..fdb7fc01e5 100644 --- a/avidemux/common/gtkgui.h +++ b/avidemux/common/gtkgui.h @@ -24,6 +24,7 @@ bool GUI_NextFrame(void); bool GUI_PrevFrame(void); bool GUI_NextKeyFrame(void); bool GUI_PreviousKeyFrame(void); +bool GUI_FastForward(void); bool GUI_GoToTime(uint64_t time); uint8_t GUI_close(void); diff --git a/avidemux/common/gui_action.names b/avidemux/common/gui_action.names index 428ae884be..bb19901535 100644 --- a/avidemux/common/gui_action.names +++ b/avidemux/common/gui_action.names @@ -55,6 +55,7 @@ ACT(FineScale) ACT(Refresh) ACT(SeekBackward) ACT(SeekForward) +ACT(FastForward) ACT(NAVIGATE_END) //ACT(JumpToTime) diff --git a/avidemux/common/gui_navigate.cpp b/avidemux/common/gui_navigate.cpp index be06cd9945..f89816b661 100644 --- a/avidemux/common/gui_navigate.cpp +++ b/avidemux/common/gui_navigate.cpp @@ -265,6 +265,9 @@ static int ignore_change=0; case ACT_NextKFrame: GUI_NextKeyFrame(); break; + case ACT_FastForward: + GUI_FastForward(); + break; case ACT_PrevCutPoint: GUI_PrevCutPoint(); break; @@ -387,6 +390,40 @@ bool GUI_NextKeyFrame(void) return true; } +/** + \fn GUI_FastForward + \brief next N frame +*/ +bool GUI_FastForward(void) +{ + if (playing) + return false; + if (!avifileinfo) + return false; + + uint64_t pts=admPreview::getCurrentPts(); + admPreview::deferDisplay(true); + bool nextError=false; + for (int i=0; i<999; i++) + { + if(!admPreview::nextPicture()) + { + nextError = (i==0); + break; + } + if (admPreview::getCurrentPts() < pts) break; + if (admPreview::getCurrentPts() >= (pts+200000LL)) break; + + } + admPreview::deferDisplay(false); + if (nextError) + return false; + admPreview::samePicture(); + GUI_setCurrentFrameAndTime(); + UI_purge(); + return true; +} + /** \fn GUI_GoToKFrameTime \brief Go to keyframe at given exact time diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index 9ec3f419b2..b5d19495c6 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -562,6 +562,12 @@ void MainWindow::sendAction(Action a) if (((a==ACT_NextFrame)||(a==ACT_NextKFrame)) && (playing || (navigateWhilePlayingState != 0))) navigateWhilePlaying(ACT_SeekForward); else + if (a==ACT_FastForward) + { + if (actionLock==0) + emit actionSignal(a); + } + else if(a>ACT_NAVIGATE_BEGIN && amodifiers() & Qt::ControlModifier) sendAction(ACT_Back2Seconds); + else if (keyEvent->modifiers() & Qt::AltModifier) + sendAction(ACT_Back1Second); else sendAction(ACT_PreviousFrame); @@ -2074,6 +2082,8 @@ bool MainWindow::eventFilter(QObject* watched, QEvent* event) sendAction(ACT_Forward1Second); else if (keyEvent->modifiers() & Qt::ControlModifier) sendAction(ACT_Forward2Seconds); + else if (keyEvent->modifiers() & Qt::AltModifier) + sendAction(ACT_FastForward); else sendAction(ACT_NextFrame); diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc index e9fdd875c5..06e75161bb 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux.qrc @@ -80,6 +80,8 @@ pics/delete_selection@2x.png pics/hdr.png pics/hdr@2x.png + pics/fastforward.png + pics/fastforward@2x.png fonts/ADM7SEG.ttf sounds/notify.wav diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc index dab45ed232..26961980eb 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc @@ -80,6 +80,8 @@ pics/delete_selection@2x.png pics/hdr.png pics/hdr@2x.png + pics/fastforward.png + pics/fastforward@2x.png fonts/ADM7SEG.ttf sounds/notify.wav diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc index 4ad7825ae6..95d3d8dcf5 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc @@ -80,6 +80,8 @@ pics/delete_selection@2x.png pics/hdr.png pics/hdr@2x.png + pics/fastforward.png + pics/fastforward@2x.png sounds/notify.wav diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc index 24e3886177..9232c9bee4 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32_custom_font.qrc @@ -80,6 +80,8 @@ pics/delete_selection@2x.png pics/hdr.png pics/hdr@2x.png + pics/fastforward.png + pics/fastforward@2x.png fonts/ADM7SEG.ttf sounds/notify.wav diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/fastforward.png b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/fastforward.png new file mode 100644 index 0000000000..4f2cf7c6c5 Binary files /dev/null and b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/fastforward.png differ diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/fastforward@2x.png b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/fastforward@2x.png new file mode 100644 index 0000000000..d595ff6c10 Binary files /dev/null and b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/fastforward@2x.png differ diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/fastforward.svg b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/fastforward.svg new file mode 100644 index 0000000000..7e60ecc63d --- /dev/null +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/fastforward.svg @@ -0,0 +1,661 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +