diff --git a/Core/AVIDump.cpp b/Core/AVIDump.cpp index 7996fd5b88..25ab77a940 100644 --- a/Core/AVIDump.cpp +++ b/Core/AVIDump.cpp @@ -140,6 +140,14 @@ static void PreparePacket(AVPacket* pkt) av_init_packet(pkt); pkt->data = nullptr; pkt->size = 0; + if (s_stream->codec->coded_frame->pts != AV_NOPTS_VALUE) + { + pkt->pts = av_rescale_q(s_stream->codec->coded_frame->pts, + s_stream->codec->time_base, s_stream->time_base); + } + if (s_stream->codec->coded_frame->key_frame) + pkt->flags |= AV_PKT_FLAG_KEY; + pkt->stream_index = s_stream->index; } static const u8 *ConvertBufferTo888RGB(const GPUDebugBuffer &buf, u8 *&temp, u32 &w, u32 &h) { diff --git a/Windows/MainWindowMenu.cpp b/Windows/MainWindowMenu.cpp index 3a6de2fc42..d528e82a62 100644 --- a/Windows/MainWindowMenu.cpp +++ b/Windows/MainWindowMenu.cpp @@ -74,8 +74,9 @@ namespace MainWindow { MENU_FILE = 0, MENU_EMULATION = 1, MENU_DEBUG = 2, - MENU_OPTIONS = 3, - MENU_HELP = 4, + MENU_MOVIE = 3, + MENU_OPTIONS = 4, + MENU_HELP = 5, // File submenus SUBMENU_FILE_SAVESTATE_SLOT = 6, @@ -217,6 +218,7 @@ namespace MainWindow { TranslateMenu(menu, "File", MENU_FILE); TranslateMenu(menu, "Emulation", MENU_EMULATION); TranslateMenu(menu, "Debugging", MENU_DEBUG); + TranslateMenu(menu, "Movie", MENU_MOVIE); TranslateMenu(menu, "Game Settings", MENU_OPTIONS); TranslateMenu(menu, "Help", MENU_HELP); @@ -271,6 +273,10 @@ namespace MainWindow { TranslateMenuItem(menu, ID_OPTIONS_CONTROLS); TranslateMenuItem(menu, ID_OPTIONS_DISPLAY_LAYOUT); + // Movie menu + TranslateMenuItem(menu, ID_MOVIE_DUMPFRAMES); + TranslateMenuItem(menu, ID_MOVIE_USEFFV1); + // Skip display multipliers x1-x10 TranslateMenuItem(menu, ID_OPTIONS_FULLSCREEN, L"\tAlt+Return, F11"); TranslateMenuItem(menu, ID_OPTIONS_VSYNC); @@ -928,6 +934,14 @@ namespace MainWindow { g_TakeScreenshot = true; break; + case ID_MOVIE_DUMPFRAMES: + g_Config.bDumpFrames = !g_Config.bDumpFrames; + break; + + case ID_MOVIE_USEFFV1: + g_Config.bUseFFV1 = !g_Config.bUseFFV1; + break; + default: { // Handle the dynamic shader switching here. @@ -966,6 +980,8 @@ namespace MainWindow { CHECKITEM(ID_TEXTURESCALING_DEPOSTERIZE, g_Config.bTexDeposterize); CHECKITEM(ID_EMULATION_CHEATS, g_Config.bEnableCheats); CHECKITEM(ID_OPTIONS_IGNOREWINKEY, g_Config.bIgnoreWindowsKey); + CHECKITEM(ID_MOVIE_DUMPFRAMES, g_Config.bDumpFrames); + CHECKITEM(ID_MOVIE_USEFFV1, g_Config.bUseFFV1); static const int displayrotationitems[] = { ID_EMULATION_ROTATION_H, diff --git a/Windows/ppsspp.rc b/Windows/ppsspp.rc index 5135556f6f..91e8c85745 100644 --- a/Windows/ppsspp.rc +++ b/Windows/ppsspp.rc @@ -19,17 +19,17 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_DEFAULT // TEXTINCLUDE // -1 TEXTINCLUDE +1 TEXTINCLUDE BEGIN "resource.h\0" END -2 TEXTINCLUDE +2 TEXTINCLUDE BEGIN "\0" END -3 TEXTINCLUDE +3 TEXTINCLUDE BEGIN "\r\n" "\0" @@ -401,7 +401,7 @@ BEGIN MENUITEM "&5", ID_FILE_SAVESTATE_SLOT_5 END MENUITEM "Load State", ID_FILE_QUICKLOADSTATE - MENUITEM "Save State", ID_FILE_QUICKSAVESTATE + MENUITEM "Save State", ID_FILE_QUICKSAVESTATE MENUITEM "Load State File...", ID_FILE_LOADSTATEFILE MENUITEM "Save State File...", ID_FILE_SAVESTATEFILE MENUITEM SEPARATOR @@ -445,6 +445,12 @@ BEGIN MENUITEM "Memory View...", ID_DEBUG_MEMORYVIEW END + POPUP "Movie" + BEGIN + MENUITEM "Dump Frames", ID_MOVIE_DUMPFRAMES + MENUITEM "Lossless Codec (FFV1)", ID_MOVIE_USEFFV1 + END + POPUP "Options" BEGIN MENUITEM "Keep PPSSPP On Top", ID_OPTIONS_TOPMOST diff --git a/Windows/resource.h b/Windows/resource.h index 66e88a3620..4f9d9a069f 100644 --- a/Windows/resource.h +++ b/Windows/resource.h @@ -328,6 +328,8 @@ #define IDC_GEDBG_BREAKTARGET 40162 #define ID_GEDBG_COPYALL 40163 #define ID_GEDBG_WATCH 40164 +#define ID_MOVIE_DUMPFRAMES 40165 +#define ID_MOVIE_USEFFV1 40166 // Dummy option to let the buffered rendering hotkey cycle through all the options. #define ID_OPTIONS_BUFFEREDRENDERINGDUMMY 40500