fixed crashes when exporting as OGG and output file can't be created or OGG encoding settings are wrong
git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@1664 0778d3d1-df1d-0410-868b-ea421aaaa00d
This commit is contained in:
@@ -54,7 +54,6 @@ public:
|
||||
|
||||
protected:
|
||||
Sint32 writeData( const void * _data, Sint32 _len );
|
||||
void seekToBegin( void );
|
||||
|
||||
inline bool useVBR( void ) const
|
||||
{
|
||||
|
||||
@@ -80,7 +80,7 @@ private:
|
||||
inline Sint32 writePage( void );
|
||||
|
||||
|
||||
|
||||
bool m_ok;
|
||||
ch_cnt_t m_channels;
|
||||
sample_rate_t m_rate;
|
||||
|
||||
|
||||
@@ -80,16 +80,14 @@ audioFileDevice::~audioFileDevice()
|
||||
|
||||
Sint32 audioFileDevice::writeData( const void * _data, Sint32 _len )
|
||||
{
|
||||
return( m_outputFile.write( (const char *) _data, _len ) );
|
||||
if( m_outputFile.isOpen() )
|
||||
{
|
||||
return m_outputFile.write( (const char *) _data, _len );
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void audioFileDevice::seekToBegin( void )
|
||||
{
|
||||
m_outputFile.seek( 0 );
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@@ -53,7 +53,7 @@ audioFileOgg::audioFileOgg( const sample_rate_t _sample_rate,
|
||||
_nom_bitrate, _min_bitrate, _max_bitrate,
|
||||
_depth, _mixer )
|
||||
{
|
||||
_success_ful = startEncoding();
|
||||
m_ok = _success_ful = startEncoding();
|
||||
}
|
||||
|
||||
|
||||
@@ -105,6 +105,11 @@ bool audioFileOgg::startEncoding( void )
|
||||
}
|
||||
|
||||
m_rate = sampleRate(); // default-samplerate
|
||||
if( m_rate > 48000 )
|
||||
{
|
||||
m_rate = 48000;
|
||||
setSampleRate( 48000 );
|
||||
}
|
||||
m_serialNo = 0; // track-num?
|
||||
m_comments = &vc; // comments for ogg-file
|
||||
|
||||
@@ -247,15 +252,18 @@ void audioFileOgg::writeBuffer( const surroundSampleFrame * _ab,
|
||||
|
||||
void audioFileOgg::finishEncoding( void )
|
||||
{
|
||||
// just for flushing buffers...
|
||||
writeBuffer( NULL, 0, 0.0f );
|
||||
if( m_ok )
|
||||
{
|
||||
// just for flushing buffers...
|
||||
writeBuffer( NULL, 0, 0.0f );
|
||||
|
||||
// clean up
|
||||
ogg_stream_clear( &m_os );
|
||||
// clean up
|
||||
ogg_stream_clear( &m_os );
|
||||
|
||||
vorbis_block_clear( &m_vb );
|
||||
vorbis_dsp_clear( &m_vd );
|
||||
vorbis_info_clear( &m_vi );
|
||||
vorbis_block_clear( &m_vb );
|
||||
vorbis_dsp_clear( &m_vd );
|
||||
vorbis_info_clear( &m_vi );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -144,16 +144,23 @@ void exportProjectDialog::startBtnClicked( void )
|
||||
depthCB->currentIndex() ) );
|
||||
|
||||
m_renderer = new projectRenderer( qs, os, ft, m_fileName );
|
||||
connect( m_renderer, SIGNAL( progressChanged( int ) ),
|
||||
progressBar, SLOT( setValue( int ) ) );
|
||||
connect( m_renderer, SIGNAL( progressChanged( int ) ),
|
||||
this, SLOT( updateTitleBar( int ) ) );
|
||||
connect( m_renderer, SIGNAL( finished() ),
|
||||
this, SLOT( accept() ) );
|
||||
connect( m_renderer, SIGNAL( finished() ),
|
||||
if( m_renderer->isReady() )
|
||||
{
|
||||
connect( m_renderer, SIGNAL( progressChanged( int ) ),
|
||||
progressBar, SLOT( setValue( int ) ) );
|
||||
connect( m_renderer, SIGNAL( progressChanged( int ) ),
|
||||
this, SLOT( updateTitleBar( int ) ) );
|
||||
connect( m_renderer, SIGNAL( finished() ),
|
||||
this, SLOT( accept() ) );
|
||||
connect( m_renderer, SIGNAL( finished() ),
|
||||
engine::getMainWindow(), SLOT( resetWindowTitle() ) );
|
||||
|
||||
m_renderer->startProcessing();
|
||||
m_renderer->startProcessing();
|
||||
}
|
||||
else
|
||||
{
|
||||
accept();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user