diff --git a/src/drivers/Qt/AviRecord.cpp b/src/drivers/Qt/AviRecord.cpp index b0737761..d8944ae4 100644 --- a/src/drivers/Qt/AviRecord.cpp +++ b/src/drivers/Qt/AviRecord.cpp @@ -588,7 +588,7 @@ int aviRecordAddFrame( void ) while ( i < numPixels ) { - rawVideoBuf[ head ] = nes_shm->pixbuf[i]; i++; + rawVideoBuf[ head ] = nes_shm->avibuf[i]; i++; head = (head + 1) % vbufSize; } @@ -677,12 +677,11 @@ void FCEUD_AviStop(void) return; } //************************************************************************************** -void FCEUI_AviVideoUpdate(const unsigned char* buffer) -{ // This is not used by Qt Emulator, avi recording pulls from the post processed video buffer - // instead of emulation core video buffer. This allows for the video scaler effects - // and higher resolution to be seen in recording. - return; -} +// // This function is implemented in sdl-video.cpp +//void FCEUI_AviVideoUpdate(const unsigned char* buffer) +//{ +// return; +//} //************************************************************************************** int aviGetSelVideoFormat(void) { diff --git a/src/drivers/Qt/ConsoleWindow.cpp b/src/drivers/Qt/ConsoleWindow.cpp index 7450fa24..84812035 100644 --- a/src/drivers/Qt/ConsoleWindow.cpp +++ b/src/drivers/Qt/ConsoleWindow.cpp @@ -1799,6 +1799,26 @@ void consoleWin_t::createMainMenu(void) connect(act, SIGNAL(triggered(bool)), this, SLOT(aviAudioEnableChange(bool)) ); aviMenu->addAction(act); + aviMenu->addSeparator(); + + // Movie -> Avi Recording -> Enable HUD Recording + aviHudAct = new QAction(tr("Enable &HUD Recording"), this); + aviHudAct->setCheckable(true); + aviHudAct->setChecked( FCEUI_AviEnableHUDrecording() ); + aviHudAct->setStatusTip(tr("Enable HUD Recording")); + connect(aviHudAct, SIGNAL(triggered(bool)), this, SLOT(setAviHudEnable(bool)) ); + + aviMenu->addAction(aviHudAct); + + // Movie -> Avi Recording -> Enable Message Recording + aviMsgAct = new QAction(tr("Enable &Msg Recording"), this); + aviMsgAct->setCheckable(true); + aviMsgAct->setChecked( !FCEUI_AviDisableMovieMessages() ); + aviMsgAct->setStatusTip(tr("Enable Msg Recording")); + connect(aviMsgAct, SIGNAL(triggered(bool)), this, SLOT(setAviMsgEnable(bool)) ); + + aviMenu->addAction(aviMsgAct); + // Movie -> WAV Recording subMenu = movieMenu->addMenu( tr("&WAV Recording") ); @@ -3701,6 +3721,20 @@ void consoleWin_t::aviAudioEnableChange(bool checked) return; } +void consoleWin_t::setAviHudEnable(bool checked) +{ + FCEUI_SetAviEnableHUDrecording( checked ); + + g_config->setOption("SDL.RecordHUD", checked ); +} + +void consoleWin_t::setAviMsgEnable(bool checked) +{ + FCEUI_SetAviDisableMovieMessages( !checked ); + + g_config->setOption("SDL.MovieMsg", checked ); +} + void consoleWin_t::aviVideoFormatChanged(int idx) { aviSetSelVideoFormat(idx); diff --git a/src/drivers/Qt/ConsoleWindow.h b/src/drivers/Qt/ConsoleWindow.h index 26376db9..6228a1f1 100644 --- a/src/drivers/Qt/ConsoleWindow.h +++ b/src/drivers/Qt/ConsoleWindow.h @@ -243,6 +243,8 @@ class consoleWin_t : public QMainWindow QAction *recWavAct; QAction *recAsWavAct; QAction *stopWavAct; + QAction *aviHudAct; + QAction *aviMsgAct; QTimer *gameTimer; @@ -417,6 +419,8 @@ class consoleWin_t : public QMainWindow void aviRecordStop(void); void aviAudioEnableChange(bool); void aviVideoFormatChanged(int idx); + void setAviHudEnable(bool); + void setAviMsgEnable(bool); void wavRecordStart(void); void wavRecordAsStart(void); void wavRecordStop(void); diff --git a/src/drivers/Qt/config.cpp b/src/drivers/Qt/config.cpp index 93e4d25a..61fc3c21 100644 --- a/src/drivers/Qt/config.cpp +++ b/src/drivers/Qt/config.cpp @@ -587,8 +587,8 @@ InitConfig() // pause movie playback at frame x config->addOption("pauseframe", "SDL.PauseFrame", 0); - config->addOption("recordhud", "SDL.RecordHUD", 1); - config->addOption("moviemsg", "SDL.MovieMsg", 1); + config->addOption("recordhud", "SDL.RecordHUD", 0); + config->addOption("moviemsg", "SDL.MovieMsg", 0); #ifdef _USE_X264 config->addOption("SDL.AviVideoFormat", AVI_X264); diff --git a/src/drivers/Qt/fceuWrapper.cpp b/src/drivers/Qt/fceuWrapper.cpp index 9b7cf16a..4c3cd2ce 100644 --- a/src/drivers/Qt/fceuWrapper.cpp +++ b/src/drivers/Qt/fceuWrapper.cpp @@ -756,7 +756,7 @@ int fceuWrapperInit( int argc, char *argv[] ) // check to see if recording HUD to AVI is enabled int rh; g_config->getOption("SDL.RecordHUD", &rh); - if( rh == 0) + if( rh ) FCEUI_SetAviEnableHUDrecording(true); else FCEUI_SetAviEnableHUDrecording(false); diff --git a/src/drivers/Qt/nes_shm.h b/src/drivers/Qt/nes_shm.h index e2b466df..96e8118c 100644 --- a/src/drivers/Qt/nes_shm.h +++ b/src/drivers/Qt/nes_shm.h @@ -35,10 +35,12 @@ struct nes_shm_t char blitUpdated; uint32_t pixbuf[1048576]; // 1024 x 1024 + uint32_t avibuf[1048576]; // 1024 x 1024 void clear_pixbuf(void) { memset( pixbuf, 0, sizeof(pixbuf) ); + memset( avibuf, 0, sizeof(avibuf) ); } struct sndBuf_t diff --git a/src/drivers/Qt/sdl-video.cpp b/src/drivers/Qt/sdl-video.cpp index 116810b2..00c321c9 100644 --- a/src/drivers/Qt/sdl-video.cpp +++ b/src/drivers/Qt/sdl-video.cpp @@ -428,13 +428,10 @@ static void WriteTestPattern(void) } } } -/** - * Pushes the given buffer of bits to the screen. - */ -void -BlitScreen(uint8 *XBuf) + +static void +doBlitScreen(uint8_t *XBuf, uint8_t *dest) { - uint8 *dest; int w, h, pitch, bw, ixScale, iyScale; // refresh the palette if required @@ -447,7 +444,7 @@ BlitScreen(uint8 *XBuf) // XXX soules - not entirely sure why this is being done yet XBuf += s_srendline * 256; - dest = (uint8*)nes_shm->pixbuf; + //dest = (uint8*)nes_shm->pixbuf; ixScale = nes_shm->video.xscale; iyScale = nes_shm->video.yscale; @@ -486,11 +483,28 @@ BlitScreen(uint8 *XBuf) { Blit8ToHigh(XBuf + NOFFSET, dest, bw, s_tlines, pitch, ixScale, iyScale); } +} +/** + * Pushes the given buffer of bits to the screen. + */ +void +BlitScreen(uint8 *XBuf) +{ + doBlitScreen(XBuf, (uint8_t*)nes_shm->pixbuf); + nes_shm->blit_count++; nes_shm->blitUpdated = 1; +} + +void FCEUI_AviVideoUpdate(const unsigned char* buffer) +{ // This is not used by Qt Emulator, avi recording pulls from the post processed video buffer + // instead of emulation core video buffer. This allows for the video scaler effects + // and higher resolution to be seen in recording. + doBlitScreen( (uint8_t*)buffer, (uint8_t*)nes_shm->avibuf); aviRecordAddFrame(); + return; } /**