From 8b4a6df93ebfd2caa339588665cbb07037760056 Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 29 Aug 2022 17:58:42 +0200 Subject: [PATCH 1/4] [GUI/navigation] fast forward --- avidemux/common/ADM_commonUI/myOwnMenu.h | 3 +- avidemux/common/gtkgui.h | 1 + avidemux/common/gui_action.names | 1 + avidemux/common/gui_navigate.cpp | 29 + .../qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 2 + .../ADM_userInterfaces/ADM_gui/avidemux.qrc | 2 + .../ADM_gui/avidemux_osx.qrc | 2 + .../ADM_gui/avidemux_win32.qrc | 2 + .../ADM_gui/avidemux_win32_custom_font.qrc | 2 + .../ADM_gui/pics/fastforward.png | Bin 0 -> 1637 bytes .../ADM_gui/pics/fastforward@2x.png | Bin 0 -> 3966 bytes .../ADM_gui/pics/svg/fastforward.svg | 661 ++++++++++++++++++ 12 files changed, 704 insertions(+), 1 deletion(-) create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/fastforward.png create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/fastforward@2x.png create mode 100644 avidemux/qt4/ADM_userInterfaces/ADM_gui/pics/svg/fastforward.svg 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 5167392324..49f7906294 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; @@ -383,6 +386,32 @@ 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; + + admPreview::deferDisplay(true); + int i=0; + for (; i<10; i++) + { + if(!admPreview::nextPicture()) break; + } + admPreview::deferDisplay(false); + if (i==0) + 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 1903137007..a961908d1a 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -2066,6 +2066,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 997ebc685f..bcbdc268f9 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 diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_osx.qrc index eb48cfb407..d0a46d0be6 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 diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc index 6491e4ccb4..edfc0e235f 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/avidemux_win32.qrc @@ -80,5 +80,7 @@ pics/delete_selection@2x.png pics/hdr.png pics/hdr@2x.png + pics/fastforward.png + pics/fastforward@2x.png 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 ac7b416aac..d0ee225f88 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 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 0000000000000000000000000000000000000000..4f2cf7c6c5bade53bd1ffe31b122cf73a061da48 GIT binary patch literal 1637 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 + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 86c4cf7b167c9f8808d7efe175c6da28cb727482 Mon Sep 17 00:00:00 2001 From: adam Date: Tue, 30 Aug 2022 02:31:46 +0200 Subject: [PATCH 2/4] [GUI] improve fast forward stop behaviour --- avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index a961908d1a..6b4c5cf573 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 && a Date: Tue, 30 Aug 2022 16:48:47 +0200 Subject: [PATCH 3/4] [gui_navigate] make GUI_FastForward time based (FPS independent speedup) --- avidemux/common/gui_navigate.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/avidemux/common/gui_navigate.cpp b/avidemux/common/gui_navigate.cpp index 49f7906294..a25f339780 100644 --- a/avidemux/common/gui_navigate.cpp +++ b/avidemux/common/gui_navigate.cpp @@ -397,14 +397,22 @@ bool GUI_FastForward(void) if (!avifileinfo) return false; + uint64_t pts=admPreview::getCurrentPts(); admPreview::deferDisplay(true); - int i=0; - for (; i<10; i++) + bool nextError=false; + for (int i=0; i<999; i++) { - if(!admPreview::nextPicture()) break; + if(!admPreview::nextPicture()) + { + nextError = (i==0); + break; + } + if (admPreview::getCurrentPts() < pts) break; + if (admPreview::getCurrentPts() >= (pts+200000LL)) break; + } admPreview::deferDisplay(false); - if (i==0) + if (nextError) return false; admPreview::samePicture(); GUI_setCurrentFrameAndTime(); From 248c8bbdf874eac9bd654e254940ee88f4ab640b Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 30 Aug 2022 16:51:22 +0200 Subject: [PATCH 4/4] [GUI] ALT+Left is a hotkey alias for Backward 1 sec this is a convencience counterpart for Fast forward (ALT+Right) --- avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp index 6b4c5cf573..fc7a09e032 100644 --- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp +++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp @@ -2061,6 +2061,8 @@ bool MainWindow::eventFilter(QObject* watched, QEvent* event) sendAction(ACT_Back1Second); else if (keyEvent->modifiers() & Qt::ControlModifier) sendAction(ACT_Back2Seconds); + else if (keyEvent->modifiers() & Qt::AltModifier) + sendAction(ACT_Back1Second); else sendAction(ACT_PreviousFrame);