Moved all avi config parameters/options to motion options window for Qt GUI.
This commit is contained in:
parent
819357129f
commit
3fc74aedbe
|
@ -82,6 +82,7 @@ static int abufTail = 0;
|
||||||
static int abufSize = 0;
|
static int abufSize = 0;
|
||||||
static uint32_t *rawVideoBuf = NULL;
|
static uint32_t *rawVideoBuf = NULL;
|
||||||
static int16_t *rawAudioBuf = NULL;
|
static int16_t *rawAudioBuf = NULL;
|
||||||
|
static int aviDriver = 0;
|
||||||
static int videoFormat = AVI_RGB24;
|
static int videoFormat = AVI_RGB24;
|
||||||
static int audioSampleRate = 48000;
|
static int audioSampleRate = 48000;
|
||||||
static FILE *avLogFp = NULL;
|
static FILE *avLogFp = NULL;
|
||||||
|
@ -1113,14 +1114,16 @@ static int initVideoStream( const char *codec_name, OutputStream *ost )
|
||||||
fprintf( avLogFp, "Error: Could not alloc an video encoding context\n");
|
fprintf( avLogFp, "Error: Could not alloc an video encoding context\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
/* Put sample parameters. */
|
||||||
|
c->bit_rate = 400000;
|
||||||
|
c->gop_size = 12; /* emit one intra frame every twelve frames at most */
|
||||||
|
|
||||||
loadCodecConfig( 0, codec_name, c );
|
loadCodecConfig( 0, codec_name, c );
|
||||||
|
|
||||||
ost->enc = c;
|
ost->enc = c;
|
||||||
|
|
||||||
//av_opt_show2( (void*)c, NULL, AV_OPT_FLAG_VIDEO_PARAM, 0 );
|
//av_opt_show2( (void*)c, NULL, AV_OPT_FLAG_VIDEO_PARAM, 0 );
|
||||||
|
|
||||||
/* Put sample parameters. */
|
|
||||||
c->bit_rate = 400000;
|
|
||||||
/* Resolution must be a multiple of two. */
|
/* Resolution must be a multiple of two. */
|
||||||
c->width = nes_shm->video.ncol;
|
c->width = nes_shm->video.ncol;
|
||||||
c->height = nes_shm->video.nrow;
|
c->height = nes_shm->video.nrow;
|
||||||
|
@ -1141,7 +1144,6 @@ static int initVideoStream( const char *codec_name, OutputStream *ost )
|
||||||
ost->st->time_base.den = 1000000u;
|
ost->st->time_base.den = 1000000u;
|
||||||
}
|
}
|
||||||
c->time_base = ost->st->time_base;
|
c->time_base = ost->st->time_base;
|
||||||
c->gop_size = 12; /* emit one intra frame every twelve frames at most */
|
|
||||||
//c->pix_fmt = AV_PIX_FMT_YUV420P; // Every video encoder seems to accept this
|
//c->pix_fmt = AV_PIX_FMT_YUV420P; // Every video encoder seems to accept this
|
||||||
c->pix_fmt = (AVPixelFormat)ost->pixelFormat;
|
c->pix_fmt = (AVPixelFormat)ost->pixelFormat;
|
||||||
|
|
||||||
|
@ -1946,6 +1948,25 @@ static int close(void)
|
||||||
} // End namespace LIBAV
|
} // End namespace LIBAV
|
||||||
#endif
|
#endif
|
||||||
//**************************************************************************************
|
//**************************************************************************************
|
||||||
|
int aviRecordInit(void)
|
||||||
|
{
|
||||||
|
g_config->getOption("SDL.AviDriver", &aviDriver);
|
||||||
|
g_config->getOption("SDL.AviVideoFormat", &videoFormat);
|
||||||
|
g_config->getOption("SDL.AviRecordAudio", &recordAudio);
|
||||||
|
g_config->getOption("SDL.Sound.Rate", &audioSampleRate);
|
||||||
|
|
||||||
|
// LIBAV has its own internal video format configs,
|
||||||
|
// it does not use this videoFormat symbol.
|
||||||
|
if ( videoFormat == AVI_LIBAV )
|
||||||
|
{
|
||||||
|
aviSetSelVideoFormat( AVI_RGB24 );
|
||||||
|
}
|
||||||
|
#ifdef _USE_LIBAV
|
||||||
|
LIBAV::setCodecFromConfig();
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
//**************************************************************************************
|
||||||
int aviRecordLogClose(void)
|
int aviRecordLogClose(void)
|
||||||
{
|
{
|
||||||
if ( avLogFp != NULL )
|
if ( avLogFp != NULL )
|
||||||
|
@ -2052,8 +2073,10 @@ int aviRecordOpenFile( const char *filepath )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_config->getOption("SDL.AviVideoFormat", &videoFormat);
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
if ( videoFormat == AVI_VFW )
|
if ( (aviDriver == AVI_DRIVER_LIBGWAVI) && (videoFormat == AVI_VFW) )
|
||||||
{
|
{
|
||||||
if ( VFW::chooseConfig( nes_shm->video.ncol, nes_shm->video.nrow ) )
|
if ( VFW::chooseConfig( nes_shm->video.ncol, nes_shm->video.nrow ) )
|
||||||
{
|
{
|
||||||
|
@ -2105,7 +2128,7 @@ int aviRecordOpenFile( const char *filepath )
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _USE_LIBAV
|
#ifdef _USE_LIBAV
|
||||||
if ( videoFormat == AVI_LIBAV )
|
if ( aviDriver == AVI_DRIVER_LIBAV )
|
||||||
{
|
{
|
||||||
if ( LIBAV::initMedia( fileName ) )
|
if ( LIBAV::initMedia( fileName ) )
|
||||||
{
|
{
|
||||||
|
@ -2302,6 +2325,19 @@ void FCEUD_AviStop(void)
|
||||||
// return;
|
// return;
|
||||||
//}
|
//}
|
||||||
//**************************************************************************************
|
//**************************************************************************************
|
||||||
|
int aviGetSelDriver(void)
|
||||||
|
{
|
||||||
|
return aviDriver;
|
||||||
|
}
|
||||||
|
//**************************************************************************************
|
||||||
|
void aviSetSelDriver(int idx)
|
||||||
|
{
|
||||||
|
aviDriver = idx;
|
||||||
|
//printf("AVI Driver Changed:%i\n", aviDriver );
|
||||||
|
|
||||||
|
g_config->setOption("SDL.AviDriver", aviDriver);
|
||||||
|
}
|
||||||
|
//**************************************************************************************
|
||||||
int aviGetSelVideoFormat(void)
|
int aviGetSelVideoFormat(void)
|
||||||
{
|
{
|
||||||
return videoFormat;
|
return videoFormat;
|
||||||
|
@ -2315,6 +2351,31 @@ void aviSetSelVideoFormat(int idx)
|
||||||
g_config->setOption("SDL.AviVideoFormat", videoFormat);
|
g_config->setOption("SDL.AviVideoFormat", videoFormat);
|
||||||
}
|
}
|
||||||
//**************************************************************************************
|
//**************************************************************************************
|
||||||
|
int FCEUD_AviGetDriverList( std::vector <std::string> &formatList )
|
||||||
|
{
|
||||||
|
std::string s;
|
||||||
|
|
||||||
|
for (int i=0; i<AVI_NUM_DRIVERS; i++)
|
||||||
|
{
|
||||||
|
switch ( i )
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
s.assign("Unknown");
|
||||||
|
break;
|
||||||
|
case AVI_DRIVER_LIBGWAVI:
|
||||||
|
s.assign("libgwavi");
|
||||||
|
break;
|
||||||
|
#ifdef _USE_LIBAV
|
||||||
|
case AVI_DRIVER_LIBAV:
|
||||||
|
s.assign("libav (ffmpeg)");
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
formatList.push_back(s);
|
||||||
|
}
|
||||||
|
return AVI_NUM_DRIVERS;
|
||||||
|
}
|
||||||
|
//**************************************************************************************
|
||||||
int FCEUD_AviGetFormatOpts( std::vector <std::string> &formatList )
|
int FCEUD_AviGetFormatOpts( std::vector <std::string> &formatList )
|
||||||
{
|
{
|
||||||
std::string s;
|
std::string s;
|
||||||
|
@ -2408,7 +2469,16 @@ void AviRecordDiskThread_t::run(void)
|
||||||
// Error allocating buffer.
|
// Error allocating buffer.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
#ifdef _USE_LIBAV
|
||||||
|
if ( aviDriver == AVI_DRIVER_LIBAV )
|
||||||
|
{
|
||||||
|
localVideoFormat = AVI_LIBAV;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
localVideoFormat = videoFormat;
|
localVideoFormat = videoFormat;
|
||||||
|
}
|
||||||
localRecordAudio = recordAudio;
|
localRecordAudio = recordAudio;
|
||||||
|
|
||||||
#ifdef _USE_X264
|
#ifdef _USE_X264
|
||||||
|
@ -2488,7 +2558,6 @@ void AviRecordDiskThread_t::run(void)
|
||||||
//Convert_4byte_To_I420Frame<4>(videoOut,rgb24,numPixels,width);
|
//Convert_4byte_To_I420Frame<4>(videoOut,rgb24,numPixels,width);
|
||||||
//convertRgb_32_to_24( (const unsigned char*)videoOut, rgb24,
|
//convertRgb_32_to_24( (const unsigned char*)videoOut, rgb24,
|
||||||
// width, height, numPixels, true );
|
// width, height, numPixels, true );
|
||||||
//LIBAV::encode_video_frame( rgb24 );
|
|
||||||
LIBAV::encode_video_frame( (unsigned char*)videoOut );
|
LIBAV::encode_video_frame( (unsigned char*)videoOut );
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -2609,8 +2678,8 @@ LibavOptionsPage::LibavOptionsPage(QWidget *parent)
|
||||||
videoGbox = new QGroupBox( tr("Video:") );
|
videoGbox = new QGroupBox( tr("Video:") );
|
||||||
audioGbox = new QGroupBox( tr("Audio:") );
|
audioGbox = new QGroupBox( tr("Audio:") );
|
||||||
|
|
||||||
audioGbox->setCheckable(true);
|
audioGbox->setCheckable(false);
|
||||||
audioGbox->setChecked( aviGetAudioEnable() );
|
//audioGbox->setChecked( aviGetAudioEnable() );
|
||||||
|
|
||||||
videoEncSel = new QComboBox();
|
videoEncSel = new QComboBox();
|
||||||
audioEncSel = new QComboBox();
|
audioEncSel = new QComboBox();
|
||||||
|
@ -2671,12 +2740,23 @@ LibavOptionsPage::LibavOptionsPage(QWidget *parent)
|
||||||
connect(videoConfBtn, SIGNAL(clicked(void)), this, SLOT(openVideoCodecOptions(void)));
|
connect(videoConfBtn, SIGNAL(clicked(void)), this, SLOT(openVideoCodecOptions(void)));
|
||||||
connect(audioConfBtn, SIGNAL(clicked(void)), this, SLOT(openAudioCodecOptions(void)));
|
connect(audioConfBtn, SIGNAL(clicked(void)), this, SLOT(openAudioCodecOptions(void)));
|
||||||
|
|
||||||
connect(audioGbox, SIGNAL(clicked(bool)), this, SLOT(includeAudioChanged(bool)));
|
//connect(audioGbox, SIGNAL(clicked(bool)), this, SLOT(includeAudioChanged(bool)));
|
||||||
|
|
||||||
|
updateTimer = new QTimer(this);
|
||||||
|
|
||||||
|
connect( updateTimer, &QTimer::timeout, this, &LibavOptionsPage::periodicUpdate );
|
||||||
|
|
||||||
|
updateTimer->start(200);
|
||||||
}
|
}
|
||||||
//-----------------------------------------------------
|
//-----------------------------------------------------
|
||||||
LibavOptionsPage::~LibavOptionsPage(void)
|
LibavOptionsPage::~LibavOptionsPage(void)
|
||||||
{
|
{
|
||||||
|
updateTimer->stop();
|
||||||
|
}
|
||||||
|
//-----------------------------------------------------
|
||||||
|
void LibavOptionsPage::periodicUpdate(void)
|
||||||
|
{
|
||||||
|
audioGbox->setEnabled( recordAudio );
|
||||||
}
|
}
|
||||||
//-----------------------------------------------------
|
//-----------------------------------------------------
|
||||||
void LibavOptionsPage::initPixelFormatSelect(const char *codec_name)
|
void LibavOptionsPage::initPixelFormatSelect(const char *codec_name)
|
||||||
|
@ -3908,3 +3988,224 @@ void LibavEncOptInputWin::resetDefaultsCB(void)
|
||||||
//-----------------------------------------------------
|
//-----------------------------------------------------
|
||||||
#endif
|
#endif
|
||||||
//**************************************************************************************
|
//**************************************************************************************
|
||||||
|
LibgwaviOptionsPage::LibgwaviOptionsPage(QWidget *parent)
|
||||||
|
: QWidget(parent)
|
||||||
|
{
|
||||||
|
QLabel *lbl;
|
||||||
|
QVBoxLayout *vbox, *vbox1;
|
||||||
|
//QHBoxLayout *hbox;
|
||||||
|
QGridLayout *grid;
|
||||||
|
QPushButton *videoConfBtn, *audioConfBtn;
|
||||||
|
|
||||||
|
g_config->getOption("SDL.AviRecordAudio", &recordAudio);
|
||||||
|
|
||||||
|
LIBAV::setCodecFromConfig();
|
||||||
|
|
||||||
|
vbox1 = new QVBoxLayout();
|
||||||
|
|
||||||
|
videoGbox = new QGroupBox( tr("Video:") );
|
||||||
|
audioGbox = new QGroupBox( tr("Audio:") );
|
||||||
|
|
||||||
|
audioGbox->setCheckable(false);
|
||||||
|
//audioGbox->setChecked( aviGetAudioEnable() );
|
||||||
|
|
||||||
|
videoEncSel = new QComboBox();
|
||||||
|
audioEncSel = new QComboBox();
|
||||||
|
videoPixfmt = new QComboBox();
|
||||||
|
audioSamplefmt = new QComboBox();
|
||||||
|
audioSampleRate = new QComboBox();
|
||||||
|
audioChanLayout = new QComboBox();
|
||||||
|
|
||||||
|
vbox1->addWidget( videoGbox );
|
||||||
|
vbox1->addWidget( audioGbox );
|
||||||
|
|
||||||
|
vbox = new QVBoxLayout();
|
||||||
|
videoGbox->setLayout(vbox);
|
||||||
|
|
||||||
|
grid = new QGridLayout();
|
||||||
|
vbox->addLayout(grid);
|
||||||
|
lbl = new QLabel( tr("Encoder:") );
|
||||||
|
grid->addWidget( lbl, 0, 0);
|
||||||
|
grid->addWidget( videoEncSel, 0, 1);
|
||||||
|
lbl = new QLabel( tr("Pixel Format:") );
|
||||||
|
grid->addWidget( lbl, 1, 0);
|
||||||
|
grid->addWidget( videoPixfmt, 1, 1);
|
||||||
|
videoConfBtn = new QPushButton( tr("Options...") );
|
||||||
|
grid->addWidget( videoConfBtn, 2, 1);
|
||||||
|
|
||||||
|
vbox = new QVBoxLayout();
|
||||||
|
audioGbox->setLayout(vbox);
|
||||||
|
|
||||||
|
grid = new QGridLayout();
|
||||||
|
vbox->addLayout(grid);
|
||||||
|
lbl = new QLabel( tr("Encoder:") );
|
||||||
|
grid->addWidget( lbl, 0, 0);
|
||||||
|
grid->addWidget( audioEncSel, 0, 1 );
|
||||||
|
lbl = new QLabel( tr("Sample Format:") );
|
||||||
|
grid->addWidget( lbl, 1, 0);
|
||||||
|
grid->addWidget( audioSamplefmt, 1, 1);
|
||||||
|
lbl = new QLabel( tr("Sample Rate:") );
|
||||||
|
grid->addWidget( lbl, 2, 0);
|
||||||
|
grid->addWidget( audioSampleRate, 2, 1);
|
||||||
|
lbl = new QLabel( tr("Channel Layout:") );
|
||||||
|
grid->addWidget( lbl, 3, 0);
|
||||||
|
grid->addWidget( audioChanLayout, 3, 1);
|
||||||
|
audioConfBtn = new QPushButton( tr("Options...") );
|
||||||
|
grid->addWidget( audioConfBtn, 4, 1);
|
||||||
|
|
||||||
|
initCodecLists();
|
||||||
|
|
||||||
|
setLayout(vbox1);
|
||||||
|
|
||||||
|
connect(videoEncSel, SIGNAL(currentIndexChanged(int)), this, SLOT(videoCodecChanged(int)));
|
||||||
|
connect(audioEncSel, SIGNAL(currentIndexChanged(int)), this, SLOT(audioCodecChanged(int)));
|
||||||
|
|
||||||
|
connect(videoPixfmt , SIGNAL(currentIndexChanged(int)), this, SLOT(videoPixelFormatChanged(int)));
|
||||||
|
connect(audioSamplefmt , SIGNAL(currentIndexChanged(int)), this, SLOT(audioSampleFormatChanged(int)));
|
||||||
|
connect(audioSampleRate, SIGNAL(currentIndexChanged(int)), this, SLOT(audioSampleRateChanged(int)));
|
||||||
|
connect(audioChanLayout, SIGNAL(currentIndexChanged(int)), this, SLOT(audioChannelLayoutChanged(int)));
|
||||||
|
|
||||||
|
connect(videoConfBtn, SIGNAL(clicked(void)), this, SLOT(openVideoCodecOptions(void)));
|
||||||
|
connect(audioConfBtn, SIGNAL(clicked(void)), this, SLOT(openAudioCodecOptions(void)));
|
||||||
|
|
||||||
|
updateTimer = new QTimer(this);
|
||||||
|
|
||||||
|
connect( updateTimer, &QTimer::timeout, this, &LibgwaviOptionsPage::periodicUpdate );
|
||||||
|
|
||||||
|
updateTimer->start(200);
|
||||||
|
}
|
||||||
|
//-----------------------------------------------------
|
||||||
|
LibgwaviOptionsPage::~LibgwaviOptionsPage(void)
|
||||||
|
{
|
||||||
|
updateTimer->stop();
|
||||||
|
}
|
||||||
|
//-----------------------------------------------------
|
||||||
|
void LibgwaviOptionsPage::periodicUpdate(void)
|
||||||
|
{
|
||||||
|
audioGbox->setEnabled( recordAudio );
|
||||||
|
}
|
||||||
|
//-----------------------------------------------------
|
||||||
|
void LibgwaviOptionsPage::initCodecLists(void)
|
||||||
|
{
|
||||||
|
int videoEncoder = aviGetSelVideoFormat();
|
||||||
|
|
||||||
|
videoEncSel->addItem( tr("RGB24 (Uncompressed)"), AVI_RGB24 );
|
||||||
|
videoEncSel->addItem( tr("I420 (YUV 4:2:0)") , AVI_I420 );
|
||||||
|
#ifdef _USE_X264
|
||||||
|
videoEncSel->addItem( tr("X264 (H.264)") , AVI_X264 );
|
||||||
|
#endif
|
||||||
|
#ifdef _USE_X265
|
||||||
|
videoEncSel->addItem( tr("X265 (H.265)") , AVI_X265 );
|
||||||
|
#endif
|
||||||
|
#ifdef WIN32
|
||||||
|
videoEncSel->addItem( tr("VfW (Video for Windows)"), AVI_VFW);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
for (int i=0; i<videoEncSel->count(); i++)
|
||||||
|
{
|
||||||
|
if ( videoEncoder == videoEncSel->itemData(i).toInt() )
|
||||||
|
{
|
||||||
|
videoEncSel->setCurrentIndex(i); break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
audioEncSel->addItem( tr("Raw PCM (Uncompressed)"), 0 );
|
||||||
|
|
||||||
|
int audioEncoder = audioEncSel->currentData().toInt();
|
||||||
|
|
||||||
|
initPixelFormatSelect(videoFormat);
|
||||||
|
initSampleFormatSelect(audioEncoder);
|
||||||
|
initSampleRateSelect(audioEncoder);
|
||||||
|
initChannelLayoutSelect(audioEncoder);
|
||||||
|
}
|
||||||
|
//-----------------------------------------------------
|
||||||
|
void LibgwaviOptionsPage::initPixelFormatSelect( int encoder )
|
||||||
|
{
|
||||||
|
videoPixfmt->clear();
|
||||||
|
videoPixfmt->addItem( tr("Auto"), -1 );
|
||||||
|
|
||||||
|
switch ( encoder )
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
case AVI_I420:
|
||||||
|
videoPixfmt->addItem( tr("YUV 420"), AVI_I420 );
|
||||||
|
break;
|
||||||
|
case AVI_X264:
|
||||||
|
case AVI_X265:
|
||||||
|
videoPixfmt->addItem( tr("YUV 420"), AVI_I420 );
|
||||||
|
break;
|
||||||
|
#ifdef WIN32
|
||||||
|
case AVI_VFW:
|
||||||
|
#endif
|
||||||
|
case AVI_RGB24:
|
||||||
|
videoPixfmt->addItem( tr("RGB24"), AVI_RGB24 );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//-----------------------------------------------------
|
||||||
|
void LibgwaviOptionsPage::initSampleFormatSelect( int encoder )
|
||||||
|
{
|
||||||
|
audioSamplefmt->clear();
|
||||||
|
audioSamplefmt->addItem( tr("Auto"), -1 );
|
||||||
|
audioSamplefmt->addItem( tr("S16 - Signed 16 Bit") , 0 );
|
||||||
|
}
|
||||||
|
//-----------------------------------------------------
|
||||||
|
void LibgwaviOptionsPage::initSampleRateSelect( int encoder )
|
||||||
|
{
|
||||||
|
audioSampleRate->clear();
|
||||||
|
audioSampleRate->addItem( tr("Auto"), -1 );
|
||||||
|
}
|
||||||
|
//-----------------------------------------------------
|
||||||
|
void LibgwaviOptionsPage::initChannelLayoutSelect( int encoder )
|
||||||
|
{
|
||||||
|
audioChanLayout->clear();
|
||||||
|
audioChanLayout->addItem( tr("Auto"), -1 );
|
||||||
|
audioChanLayout->addItem( tr("Mono"), 0 );
|
||||||
|
}
|
||||||
|
//-----------------------------------------------------
|
||||||
|
void LibgwaviOptionsPage::videoCodecChanged(int idx)
|
||||||
|
{
|
||||||
|
aviSetSelVideoFormat( videoEncSel->currentData().toInt() );
|
||||||
|
|
||||||
|
initPixelFormatSelect(videoFormat);
|
||||||
|
}
|
||||||
|
//-----------------------------------------------------
|
||||||
|
void LibgwaviOptionsPage::audioCodecChanged(int idx)
|
||||||
|
{
|
||||||
|
int audioEncoder = audioEncSel->currentData().toInt();
|
||||||
|
|
||||||
|
initSampleFormatSelect(audioEncoder);
|
||||||
|
initSampleRateSelect(audioEncoder);
|
||||||
|
initChannelLayoutSelect(audioEncoder);
|
||||||
|
}
|
||||||
|
//-----------------------------------------------------
|
||||||
|
void LibgwaviOptionsPage::openVideoCodecOptions(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
//-----------------------------------------------------
|
||||||
|
void LibgwaviOptionsPage::openAudioCodecOptions(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
//-----------------------------------------------------
|
||||||
|
void LibgwaviOptionsPage::videoPixelFormatChanged(int idx)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
//-----------------------------------------------------
|
||||||
|
void LibgwaviOptionsPage::audioSampleFormatChanged(int idx)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
//-----------------------------------------------------
|
||||||
|
void LibgwaviOptionsPage::audioSampleRateChanged(int idx)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
//-----------------------------------------------------
|
||||||
|
void LibgwaviOptionsPage::audioChannelLayoutChanged(int idx)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
//-----------------------------------------------------
|
||||||
|
//**************************************************************************************
|
||||||
|
|
|
@ -22,6 +22,15 @@
|
||||||
#include <QTreeWidget>
|
#include <QTreeWidget>
|
||||||
#include <QTreeWidgetItem>
|
#include <QTreeWidgetItem>
|
||||||
|
|
||||||
|
enum aviDriverList
|
||||||
|
{
|
||||||
|
#ifdef _USE_LIBAV
|
||||||
|
AVI_DRIVER_LIBAV,
|
||||||
|
#endif
|
||||||
|
AVI_DRIVER_LIBGWAVI,
|
||||||
|
AVI_NUM_DRIVERS
|
||||||
|
};
|
||||||
|
|
||||||
enum aviEncoderList
|
enum aviEncoderList
|
||||||
{
|
{
|
||||||
AVI_RGB24 = 0,
|
AVI_RGB24 = 0,
|
||||||
|
@ -41,6 +50,8 @@ enum aviEncoderList
|
||||||
AVI_NUM_ENC
|
AVI_NUM_ENC
|
||||||
};
|
};
|
||||||
|
|
||||||
|
int aviRecordInit(void);
|
||||||
|
|
||||||
int aviRecordOpenFile( const char *filepath );
|
int aviRecordOpenFile( const char *filepath );
|
||||||
|
|
||||||
int aviRecordAddFrame( void );
|
int aviRecordAddFrame( void );
|
||||||
|
@ -55,10 +66,16 @@ bool aviGetAudioEnable(void);
|
||||||
|
|
||||||
void aviSetAudioEnable(bool val);
|
void aviSetAudioEnable(bool val);
|
||||||
|
|
||||||
|
int aviGetSelDriver(void);
|
||||||
|
|
||||||
|
void aviSetSelDriver(int idx);
|
||||||
|
|
||||||
int aviGetSelVideoFormat(void);
|
int aviGetSelVideoFormat(void);
|
||||||
|
|
||||||
void aviSetSelVideoFormat(int idx);
|
void aviSetSelVideoFormat(int idx);
|
||||||
|
|
||||||
|
int FCEUD_AviGetDriverList( std::vector <std::string> &formatList );
|
||||||
|
|
||||||
int FCEUD_AviGetFormatOpts( std::vector <std::string> &formatList );
|
int FCEUD_AviGetFormatOpts( std::vector <std::string> &formatList );
|
||||||
|
|
||||||
int aviDebugOpenFile( const char *filepath );
|
int aviDebugOpenFile( const char *filepath );
|
||||||
|
@ -175,6 +192,7 @@ class LibavOptionsPage : public QWidget
|
||||||
QComboBox *audioChanLayout;
|
QComboBox *audioChanLayout;
|
||||||
QGroupBox *videoGbox;
|
QGroupBox *videoGbox;
|
||||||
QGroupBox *audioGbox;
|
QGroupBox *audioGbox;
|
||||||
|
QTimer *updateTimer;
|
||||||
|
|
||||||
void initCodecLists(void);
|
void initCodecLists(void);
|
||||||
void initPixelFormatSelect(const char *codec_name);
|
void initPixelFormatSelect(const char *codec_name);
|
||||||
|
@ -183,6 +201,7 @@ class LibavOptionsPage : public QWidget
|
||||||
void initChannelLayoutSelect(const char *codec_name);
|
void initChannelLayoutSelect(const char *codec_name);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
void periodicUpdate(void);
|
||||||
void includeAudioChanged(bool);
|
void includeAudioChanged(bool);
|
||||||
void openVideoCodecOptions(void);
|
void openVideoCodecOptions(void);
|
||||||
void openAudioCodecOptions(void);
|
void openAudioCodecOptions(void);
|
||||||
|
@ -196,4 +215,41 @@ class LibavOptionsPage : public QWidget
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
class LibgwaviOptionsPage : public QWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
LibgwaviOptionsPage(QWidget *parent = nullptr);
|
||||||
|
~LibgwaviOptionsPage(void);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
QComboBox *videoEncSel;
|
||||||
|
QComboBox *videoPixfmt;
|
||||||
|
QComboBox *audioEncSel;
|
||||||
|
QComboBox *audioSamplefmt;
|
||||||
|
QComboBox *audioSampleRate;
|
||||||
|
QComboBox *audioChanLayout;
|
||||||
|
QGroupBox *videoGbox;
|
||||||
|
QGroupBox *audioGbox;
|
||||||
|
QTimer *updateTimer;
|
||||||
|
|
||||||
|
void initCodecLists(void);
|
||||||
|
void initPixelFormatSelect(int encoder);
|
||||||
|
void initSampleFormatSelect(int encoder);
|
||||||
|
void initSampleRateSelect(int encoder);
|
||||||
|
void initChannelLayoutSelect(int encoder);
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void periodicUpdate(void);
|
||||||
|
void openVideoCodecOptions(void);
|
||||||
|
void openAudioCodecOptions(void);
|
||||||
|
void videoCodecChanged(int idx);
|
||||||
|
void audioCodecChanged(int idx);
|
||||||
|
void videoPixelFormatChanged(int idx);
|
||||||
|
void audioSampleFormatChanged(int idx);
|
||||||
|
void audioSampleRateChanged(int idx);
|
||||||
|
void audioChannelLayoutChanged(int idx);
|
||||||
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1774,60 +1774,60 @@ void consoleWin_t::createMainMenu(void)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Movie -> Avi Recording -> Video Format
|
// Movie -> Avi Recording -> Video Format
|
||||||
subMenu = aviMenu->addMenu( tr("Video Format") );
|
//subMenu = aviMenu->addMenu( tr("Video Format") );
|
||||||
|
|
||||||
{
|
//{
|
||||||
std::vector <std::string> formatList;
|
// std::vector <std::string> formatList;
|
||||||
group = new QActionGroup(this);
|
// group = new QActionGroup(this);
|
||||||
|
|
||||||
group->setExclusive(true);
|
// group->setExclusive(true);
|
||||||
|
|
||||||
FCEUD_AviGetFormatOpts( formatList );
|
// FCEUD_AviGetFormatOpts( formatList );
|
||||||
|
|
||||||
for (size_t i=0; i<formatList.size(); i++)
|
// for (size_t i=0; i<formatList.size(); i++)
|
||||||
{
|
// {
|
||||||
act = new QAction(tr( formatList[i].c_str() ), this);
|
// act = new QAction(tr( formatList[i].c_str() ), this);
|
||||||
|
|
||||||
//printf("%s\n", formatList[i].c_str() );
|
// //printf("%s\n", formatList[i].c_str() );
|
||||||
|
|
||||||
act->setCheckable(true);
|
// act->setCheckable(true);
|
||||||
group->addAction(act);
|
// group->addAction(act);
|
||||||
subMenu->addAction(act);
|
// subMenu->addAction(act);
|
||||||
|
|
||||||
act->setChecked( aviGetSelVideoFormat() == i );
|
// act->setChecked( aviGetSelVideoFormat() == i );
|
||||||
|
|
||||||
// Use Lambda Function to set callback
|
// // Use Lambda Function to set callback
|
||||||
connect( act, &QAction::triggered, [ this, i ] { aviVideoFormatChanged( i ); } );
|
// connect( act, &QAction::triggered, [ this, i ] { aviVideoFormatChanged( i ); } );
|
||||||
}
|
// }
|
||||||
|
|
||||||
}
|
//}
|
||||||
|
|
||||||
// Movie -> Avi Recording -> Include Audio
|
//// Movie -> Avi Recording -> Include Audio
|
||||||
act = new QAction(tr("Include Audio"), this);
|
//act = new QAction(tr("Include Audio"), this);
|
||||||
act->setCheckable(true);
|
//act->setCheckable(true);
|
||||||
act->setChecked( aviGetAudioEnable() );
|
//act->setChecked( aviGetAudioEnable() );
|
||||||
connect(act, SIGNAL(triggered(bool)), this, SLOT(aviAudioEnableChange(bool)) );
|
//connect(act, SIGNAL(triggered(bool)), this, SLOT(aviAudioEnableChange(bool)) );
|
||||||
aviMenu->addAction(act);
|
//aviMenu->addAction(act);
|
||||||
|
|
||||||
aviMenu->addSeparator();
|
//aviMenu->addSeparator();
|
||||||
|
|
||||||
// Movie -> Avi Recording -> Enable HUD Recording
|
//// Movie -> Avi Recording -> Enable HUD Recording
|
||||||
aviHudAct = new QAction(tr("Enable &HUD Recording"), this);
|
//aviHudAct = new QAction(tr("Enable &HUD Recording"), this);
|
||||||
aviHudAct->setCheckable(true);
|
//aviHudAct->setCheckable(true);
|
||||||
aviHudAct->setChecked( FCEUI_AviEnableHUDrecording() );
|
//aviHudAct->setChecked( FCEUI_AviEnableHUDrecording() );
|
||||||
aviHudAct->setStatusTip(tr("Enable HUD Recording"));
|
//aviHudAct->setStatusTip(tr("Enable HUD Recording"));
|
||||||
connect(aviHudAct, SIGNAL(triggered(bool)), this, SLOT(setAviHudEnable(bool)) );
|
//connect(aviHudAct, SIGNAL(triggered(bool)), this, SLOT(setAviHudEnable(bool)) );
|
||||||
|
|
||||||
aviMenu->addAction(aviHudAct);
|
//aviMenu->addAction(aviHudAct);
|
||||||
|
|
||||||
// Movie -> Avi Recording -> Enable Message Recording
|
//// Movie -> Avi Recording -> Enable Message Recording
|
||||||
aviMsgAct = new QAction(tr("Enable &Msg Recording"), this);
|
//aviMsgAct = new QAction(tr("Enable &Msg Recording"), this);
|
||||||
aviMsgAct->setCheckable(true);
|
//aviMsgAct->setCheckable(true);
|
||||||
aviMsgAct->setChecked( !FCEUI_AviDisableMovieMessages() );
|
//aviMsgAct->setChecked( !FCEUI_AviDisableMovieMessages() );
|
||||||
aviMsgAct->setStatusTip(tr("Enable Msg Recording"));
|
//aviMsgAct->setStatusTip(tr("Enable Msg Recording"));
|
||||||
connect(aviMsgAct, SIGNAL(triggered(bool)), this, SLOT(setAviMsgEnable(bool)) );
|
//connect(aviMsgAct, SIGNAL(triggered(bool)), this, SLOT(setAviMsgEnable(bool)) );
|
||||||
|
|
||||||
aviMenu->addAction(aviMsgAct);
|
//aviMenu->addAction(aviMsgAct);
|
||||||
|
|
||||||
// Movie -> WAV Recording
|
// Movie -> WAV Recording
|
||||||
subMenu = movieMenu->addMenu( tr("&WAV Recording") );
|
subMenu = movieMenu->addMenu( tr("&WAV Recording") );
|
||||||
|
|
|
@ -246,8 +246,8 @@ class consoleWin_t : public QMainWindow
|
||||||
QAction *recWavAct;
|
QAction *recWavAct;
|
||||||
QAction *recAsWavAct;
|
QAction *recAsWavAct;
|
||||||
QAction *stopWavAct;
|
QAction *stopWavAct;
|
||||||
QAction *aviHudAct;
|
//QAction *aviHudAct;
|
||||||
QAction *aviMsgAct;
|
//QAction *aviMsgAct;
|
||||||
|
|
||||||
QTimer *gameTimer;
|
QTimer *gameTimer;
|
||||||
|
|
||||||
|
|
|
@ -50,6 +50,7 @@ MovieOptionsDialog_t::MovieOptionsDialog_t(QWidget *parent)
|
||||||
QVBoxLayout *vbox1, *vbox2;
|
QVBoxLayout *vbox1, *vbox2;
|
||||||
QPushButton *closeButton;
|
QPushButton *closeButton;
|
||||||
std::vector <std::string> aviDriverList;
|
std::vector <std::string> aviDriverList;
|
||||||
|
int aviDriver;
|
||||||
|
|
||||||
setWindowTitle("Movie Options");
|
setWindowTitle("Movie Options");
|
||||||
|
|
||||||
|
@ -67,6 +68,9 @@ MovieOptionsDialog_t::MovieOptionsDialog_t(QWidget *parent)
|
||||||
putSubTitlesAvi = new QCheckBox(tr("Put Movie Subtitles in AVI"));
|
putSubTitlesAvi = new QCheckBox(tr("Put Movie Subtitles in AVI"));
|
||||||
autoBackUp = new QCheckBox(tr("Automatically Backup Movies"));
|
autoBackUp = new QCheckBox(tr("Automatically Backup Movies"));
|
||||||
loadFullStates = new QCheckBox(tr("Load Full Save-State Movies:"));
|
loadFullStates = new QCheckBox(tr("Load Full Save-State Movies:"));
|
||||||
|
aviEnableHUD = new QCheckBox(tr("AVI Enable HUD Recording"));
|
||||||
|
aviEnableMsg = new QCheckBox(tr("AVI Enable Msg Recording"));
|
||||||
|
aviEnableAudio = new QCheckBox(tr("AVI Enable Audio Recording"));
|
||||||
|
|
||||||
lbl = new QLabel(tr("Loading states in record mode will not immediately truncate movie, next frame input will. (VBA-rr and SNES9x style)"));
|
lbl = new QLabel(tr("Loading states in record mode will not immediately truncate movie, next frame input will. (VBA-rr and SNES9x style)"));
|
||||||
lbl->setWordWrap(true);
|
lbl->setWordWrap(true);
|
||||||
|
@ -79,6 +83,9 @@ MovieOptionsDialog_t::MovieOptionsDialog_t(QWidget *parent)
|
||||||
vbox1->addWidget(putSubTitlesAvi);
|
vbox1->addWidget(putSubTitlesAvi);
|
||||||
vbox1->addWidget(autoBackUp);
|
vbox1->addWidget(autoBackUp);
|
||||||
vbox1->addWidget(loadFullStates);
|
vbox1->addWidget(loadFullStates);
|
||||||
|
vbox1->addWidget(aviEnableHUD);
|
||||||
|
vbox1->addWidget(aviEnableMsg);
|
||||||
|
vbox1->addWidget(aviEnableAudio);
|
||||||
vbox1->addWidget(lbl);
|
vbox1->addWidget(lbl);
|
||||||
|
|
||||||
readOnlyReplay->setChecked(suggestReadOnlyReplay);
|
readOnlyReplay->setChecked(suggestReadOnlyReplay);
|
||||||
|
@ -89,6 +96,9 @@ MovieOptionsDialog_t::MovieOptionsDialog_t(QWidget *parent)
|
||||||
putSubTitlesAvi->setChecked(subtitlesOnAVI);
|
putSubTitlesAvi->setChecked(subtitlesOnAVI);
|
||||||
autoBackUp->setChecked(autoMovieBackup);
|
autoBackUp->setChecked(autoMovieBackup);
|
||||||
loadFullStates->setChecked(fullSaveStateLoads);
|
loadFullStates->setChecked(fullSaveStateLoads);
|
||||||
|
aviEnableHUD->setChecked(FCEUI_AviEnableHUDrecording());
|
||||||
|
aviEnableMsg->setChecked(!FCEUI_AviDisableMovieMessages());
|
||||||
|
aviEnableAudio->setChecked(aviGetAudioEnable());
|
||||||
|
|
||||||
closeButton = new QPushButton( tr("Close") );
|
closeButton = new QPushButton( tr("Close") );
|
||||||
closeButton->setIcon(style()->standardIcon(QStyle::SP_DialogCloseButton));
|
closeButton->setIcon(style()->standardIcon(QStyle::SP_DialogCloseButton));
|
||||||
|
@ -99,7 +109,7 @@ MovieOptionsDialog_t::MovieOptionsDialog_t(QWidget *parent)
|
||||||
hbox->addWidget( closeButton, 1 );
|
hbox->addWidget( closeButton, 1 );
|
||||||
vbox1->addLayout( hbox );
|
vbox1->addLayout( hbox );
|
||||||
|
|
||||||
FCEUD_AviGetFormatOpts( aviDriverList );
|
FCEUD_AviGetDriverList( aviDriverList );
|
||||||
|
|
||||||
gbox = new QGroupBox( tr("AVI Recording Options") );
|
gbox = new QGroupBox( tr("AVI Recording Options") );
|
||||||
gbox->setLayout(vbox2);
|
gbox->setLayout(vbox2);
|
||||||
|
@ -113,6 +123,8 @@ MovieOptionsDialog_t::MovieOptionsDialog_t(QWidget *parent)
|
||||||
vbox2->addLayout( hbox );
|
vbox2->addLayout( hbox );
|
||||||
vbox2->addWidget( aviPageStack );
|
vbox2->addWidget( aviPageStack );
|
||||||
|
|
||||||
|
g_config->getOption("SDL.AviDriver", &aviDriver );
|
||||||
|
|
||||||
for (size_t i=0; i<aviDriverList.size(); i++)
|
for (size_t i=0; i<aviDriverList.size(); i++)
|
||||||
{
|
{
|
||||||
aviBackend->addItem(tr(aviDriverList[i].c_str()), (unsigned int)i);
|
aviBackend->addItem(tr(aviDriverList[i].c_str()), (unsigned int)i);
|
||||||
|
@ -120,18 +132,21 @@ MovieOptionsDialog_t::MovieOptionsDialog_t(QWidget *parent)
|
||||||
switch (i)
|
switch (i)
|
||||||
{
|
{
|
||||||
#ifdef _USE_LIBAV
|
#ifdef _USE_LIBAV
|
||||||
case AVI_LIBAV:
|
case AVI_DRIVER_LIBAV:
|
||||||
{
|
{
|
||||||
aviPageStack->addWidget( new LibavOptionsPage() );
|
aviPageStack->addWidget( new LibavOptionsPage() );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
case AVI_DRIVER_LIBGWAVI:
|
||||||
|
aviPageStack->addWidget( new LibgwaviOptionsPage() );
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
aviPageStack->addWidget( new QWidget() );
|
aviPageStack->addWidget( new QWidget() );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( i == aviGetSelVideoFormat() )
|
if ( i == aviDriver )
|
||||||
{
|
{
|
||||||
aviBackend->setCurrentIndex(i);
|
aviBackend->setCurrentIndex(i);
|
||||||
aviPageStack->setCurrentIndex(i);
|
aviPageStack->setCurrentIndex(i);
|
||||||
|
@ -143,10 +158,13 @@ MovieOptionsDialog_t::MovieOptionsDialog_t(QWidget *parent)
|
||||||
connect(pauseAfterPlay, SIGNAL(stateChanged(int)), this, SLOT(pauseAfterPlayChanged(int)));
|
connect(pauseAfterPlay, SIGNAL(stateChanged(int)), this, SLOT(pauseAfterPlayChanged(int)));
|
||||||
connect(closeAfterPlay, SIGNAL(stateChanged(int)), this, SLOT(closeAfterPlayChanged(int)));
|
connect(closeAfterPlay, SIGNAL(stateChanged(int)), this, SLOT(closeAfterPlayChanged(int)));
|
||||||
connect(bindSaveStates, SIGNAL(stateChanged(int)), this, SLOT(bindSaveStatesChanged(int)));
|
connect(bindSaveStates, SIGNAL(stateChanged(int)), this, SLOT(bindSaveStatesChanged(int)));
|
||||||
connect(dpySubTitles, SIGNAL(stateChanged(int)), this, SLOT(dpySubTitlesChanged(int)));
|
connect(dpySubTitles , SIGNAL(stateChanged(int)), this, SLOT(dpySubTitlesChanged(int)));
|
||||||
connect(putSubTitlesAvi, SIGNAL(stateChanged(int)), this, SLOT(putSubTitlesAviChanged(int)));
|
connect(putSubTitlesAvi, SIGNAL(stateChanged(int)), this, SLOT(putSubTitlesAviChanged(int)));
|
||||||
connect(autoBackUp, SIGNAL(stateChanged(int)), this, SLOT(autoBackUpChanged(int)));
|
connect(autoBackUp, SIGNAL(stateChanged(int)), this, SLOT(autoBackUpChanged(int)));
|
||||||
connect(loadFullStates, SIGNAL(stateChanged(int)), this, SLOT(loadFullStatesChanged(int)));
|
connect(loadFullStates, SIGNAL(stateChanged(int)), this, SLOT(loadFullStatesChanged(int)));
|
||||||
|
connect(aviEnableHUD , SIGNAL(stateChanged(int)), this, SLOT(setAviHudEnable(int)));
|
||||||
|
connect(aviEnableMsg , SIGNAL(stateChanged(int)), this, SLOT(setAviMsgEnable(int)));
|
||||||
|
connect(aviEnableAudio, SIGNAL(stateChanged(int)), this, SLOT(setAviAudioEnable(int)));
|
||||||
|
|
||||||
connect(aviBackend, SIGNAL(currentIndexChanged(int)), this, SLOT(aviBackendChanged(int)));
|
connect(aviBackend, SIGNAL(currentIndexChanged(int)), this, SLOT(aviBackendChanged(int)));
|
||||||
|
|
||||||
|
@ -204,6 +222,31 @@ void MovieOptionsDialog_t::putSubTitlesAviChanged(int state)
|
||||||
subtitlesOnAVI = (state != Qt::Unchecked);
|
subtitlesOnAVI = (state != Qt::Unchecked);
|
||||||
}
|
}
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
void MovieOptionsDialog_t::setAviHudEnable(int state)
|
||||||
|
{
|
||||||
|
bool checked = (state != Qt::Unchecked);
|
||||||
|
|
||||||
|
FCEUI_SetAviEnableHUDrecording( checked );
|
||||||
|
|
||||||
|
g_config->setOption("SDL.RecordHUD", checked );
|
||||||
|
}
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
void MovieOptionsDialog_t::setAviMsgEnable(int state)
|
||||||
|
{
|
||||||
|
bool checked = (state != Qt::Unchecked);
|
||||||
|
|
||||||
|
FCEUI_SetAviDisableMovieMessages( !checked );
|
||||||
|
|
||||||
|
g_config->setOption("SDL.MovieMsg", checked );
|
||||||
|
}
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
void MovieOptionsDialog_t::setAviAudioEnable(int state)
|
||||||
|
{
|
||||||
|
bool checked = (state != Qt::Unchecked);
|
||||||
|
|
||||||
|
aviSetAudioEnable( checked );
|
||||||
|
}
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
void MovieOptionsDialog_t::autoBackUpChanged(int state)
|
void MovieOptionsDialog_t::autoBackUpChanged(int state)
|
||||||
{
|
{
|
||||||
autoMovieBackup = (state != Qt::Unchecked);
|
autoMovieBackup = (state != Qt::Unchecked);
|
||||||
|
@ -218,6 +261,6 @@ void MovieOptionsDialog_t::aviBackendChanged(int idx)
|
||||||
{
|
{
|
||||||
aviPageStack->setCurrentIndex(idx);
|
aviPageStack->setCurrentIndex(idx);
|
||||||
|
|
||||||
aviSetSelVideoFormat(idx);
|
aviSetSelDriver(idx);
|
||||||
}
|
}
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
|
|
@ -38,6 +38,9 @@ protected:
|
||||||
QCheckBox *putSubTitlesAvi;
|
QCheckBox *putSubTitlesAvi;
|
||||||
QCheckBox *autoBackUp;
|
QCheckBox *autoBackUp;
|
||||||
QCheckBox *loadFullStates;
|
QCheckBox *loadFullStates;
|
||||||
|
QCheckBox *aviEnableHUD;
|
||||||
|
QCheckBox *aviEnableMsg;
|
||||||
|
QCheckBox *aviEnableAudio;
|
||||||
QComboBox *aviBackend;
|
QComboBox *aviBackend;
|
||||||
QStackedWidget *aviPageStack;
|
QStackedWidget *aviPageStack;
|
||||||
|
|
||||||
|
@ -51,6 +54,9 @@ private slots:
|
||||||
void bindSaveStatesChanged(int state);
|
void bindSaveStatesChanged(int state);
|
||||||
void dpySubTitlesChanged(int state);
|
void dpySubTitlesChanged(int state);
|
||||||
void putSubTitlesAviChanged(int state);
|
void putSubTitlesAviChanged(int state);
|
||||||
|
void setAviHudEnable(int state);
|
||||||
|
void setAviMsgEnable(int state);
|
||||||
|
void setAviAudioEnable(int state);
|
||||||
void autoBackUpChanged(int state);
|
void autoBackUpChanged(int state);
|
||||||
void loadFullStatesChanged(int state);
|
void loadFullStatesChanged(int state);
|
||||||
void aviBackendChanged(int idx);
|
void aviBackendChanged(int idx);
|
||||||
|
|
|
@ -596,10 +596,14 @@ InitConfig()
|
||||||
config->addOption("moviemsg", "SDL.MovieMsg", 0);
|
config->addOption("moviemsg", "SDL.MovieMsg", 0);
|
||||||
|
|
||||||
#ifdef _USE_LIBAV
|
#ifdef _USE_LIBAV
|
||||||
config->addOption("SDL.AviVideoFormat", AVI_LIBAV);
|
config->addOption("SDL.AviDriver", AVI_DRIVER_LIBAV);
|
||||||
#elif WIN32
|
#else
|
||||||
|
config->addOption("SDL.AviDriver", AVI_DRIVER_LIBGWAVI);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(WIN32)
|
||||||
config->addOption("SDL.AviVideoFormat", AVI_VFW);
|
config->addOption("SDL.AviVideoFormat", AVI_VFW);
|
||||||
#elif _USE_X264
|
#elif defined(_USE_X264)
|
||||||
config->addOption("SDL.AviVideoFormat", AVI_X264);
|
config->addOption("SDL.AviVideoFormat", AVI_X264);
|
||||||
#else
|
#else
|
||||||
config->addOption("SDL.AviVideoFormat", AVI_RGB24);
|
config->addOption("SDL.AviVideoFormat", AVI_RGB24);
|
||||||
|
|
|
@ -907,6 +907,8 @@ int fceuWrapperInit( int argc, char *argv[] )
|
||||||
g_config->save();
|
g_config->save();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
aviRecordInit();
|
||||||
|
|
||||||
// movie playback
|
// movie playback
|
||||||
g_config->getOption("SDL.Movie", &s);
|
g_config->getOption("SDL.Movie", &s);
|
||||||
g_config->setOption("SDL.Movie", "");
|
g_config->setOption("SDL.Movie", "");
|
||||||
|
|
Loading…
Reference in New Issue