diff options
Diffstat (limited to 'plugins/encoder/sox/k3bsoxencoder.cpp')
-rw-r--r-- | plugins/encoder/sox/k3bsoxencoder.cpp | 179 |
1 files changed, 83 insertions, 96 deletions
diff --git a/plugins/encoder/sox/k3bsoxencoder.cpp b/plugins/encoder/sox/k3bsoxencoder.cpp index d91502f..1cc7c3a 100644 --- a/plugins/encoder/sox/k3bsoxencoder.cpp +++ b/plugins/encoder/sox/k3bsoxencoder.cpp @@ -34,6 +34,7 @@ #include <tqcombobox.h> #include <tqcheckbox.h> #include <tqlayout.h> +#include <tqregexp.h> #include <sys/types.h> #include <sys/wait.h> @@ -58,61 +59,47 @@ class K3bSoxProgram : public K3bExternalProgram TQFileInfo fi( path ); if( fi.isDir() ) { if( path[path.length()-1] != '/' ) - path.append("/"); + path.append("/"); path.append("sox"); } if( !TQFile::exists( path ) ) return false; - K3bExternalBin* bin = 0; - // probe version TDEProcess vp; K3bProcessOutputCollector out( &vp ); vp << path << "-h"; if( vp.start( TDEProcess::Block, TDEProcess::AllOutput ) ) { - int pos = out.output().find( "sox: SoX Version" ); - if ( pos < 0 ) - pos = out.output().find( "sox: SoX v" ); // newer sox versions - int endPos = out.output().find( "\n", pos ); - if( pos > 0 && endPos > 0 ) { - pos += 17; - bin = new K3bExternalBin( this ); - bin->path = path; - bin->version = out.output().mid( pos, endPos-pos ); - - addBin( bin ); - - return true; - } - else { - pos = out.output().find( "sox: Version" ); - endPos = out.output().find( "\n", pos ); - if( pos > 0 && endPos > 0 ) { - pos += 13; - bin = new K3bExternalBin( this ); - bin->path = path; - bin->version = out.output().mid( pos, endPos-pos ); - - addBin( bin ); - - return true; + TQRegExp versionRe ("sox: +(SoX )?(Version |v)([^\\n]+)"); + // Should match: + // * sox: Version 12.2.3 + // * sox: SoX Version 12.18.1 + // * sox: SoX v14.0.0 + // * sox: SoX v14.4.0 + int pos = versionRe.search( out.output() ); + if( pos > 0 ) { + TQString version = versionRe.cap(3); + + K3bExternalBin* bin = new K3bExternalBin( this ); + + bin->path = path; + bin->version = version; + + addBin( bin ); + + return true; } - else - return false; - } } - else - return false; + return false; } }; class K3bSoxEncoder::Private { -public: + public: Private() : process(0) { } @@ -182,21 +169,21 @@ bool K3bSoxEncoder::initEncoderInternal( const TQString& extension ) d->process->setSplitStdout(true); d->process->setRawStdin(true); - connect( d->process, TQT_SIGNAL(processExited(TDEProcess*)), - this, TQT_SLOT(slotSoxFinished(TDEProcess*)) ); - connect( d->process, TQT_SIGNAL(stderrLine(const TQString&)), - this, TQT_SLOT(slotSoxOutputLine(const TQString&)) ); - connect( d->process, TQT_SIGNAL(stdoutLine(const TQString&)), - this, TQT_SLOT(slotSoxOutputLine(const TQString&)) ); + connect( d->process, TQ_SIGNAL(processExited(TDEProcess*)), + this, TQ_SLOT(slotSoxFinished(TDEProcess*)) ); + connect( d->process, TQ_SIGNAL(stderrLine(const TQString&)), + this, TQ_SLOT(slotSoxOutputLine(const TQString&)) ); + connect( d->process, TQ_SIGNAL(stdoutLine(const TQString&)), + this, TQ_SLOT(slotSoxOutputLine(const TQString&)) ); // input settings *d->process << soxBin->path - << "-t" << "raw" // raw samples - << "-r" << "44100" // samplerate - << "-s" // signed linear - << "-w" // 16-bit words - << "-c" << "2" // stereo - << "-"; // read from stdin + << "-t" << "raw" // raw samples + << "-r" << "44100" // samplerate + << "-s" // signed linear + << "-w" // 16-bit words + << "-c" << "2" // stereo + << "-"; // read from stdin // output settings *d->process << "-t" << extension; @@ -205,28 +192,28 @@ bool K3bSoxEncoder::initEncoderInternal( const TQString& extension ) c->setGroup( "K3bSoxEncoderPlugin" ); if( c->readBoolEntry( "manual settings", false ) ) { *d->process << "-r" << TQString::number( c->readNumEntry( "samplerate", 44100 ) ) - << "-c" << TQString::number( c->readNumEntry( "channels", 2 ) ); + << "-c" << TQString::number( c->readNumEntry( "channels", 2 ) ); int size = c->readNumEntry( "data size", 16 ); *d->process << ( size == 8 ? TQString("-b") : ( size == 32 ? TQString("-l") : TQString("-w") ) ); TQString encoding = c->readEntry( "data encoding", "signed" ); if( encoding == "unsigned" ) - *d->process << "-u"; + *d->process << "-u"; else if( encoding == "u-law" ) - *d->process << "-U"; + *d->process << "-U"; else if( encoding == "A-law" ) - *d->process << "-A"; + *d->process << "-A"; else if( encoding == "ADPCM" ) - *d->process << "-a"; + *d->process << "-a"; else if( encoding == "IMA_ADPCM" ) - *d->process << "-i"; + *d->process << "-i"; else if( encoding == "GSM" ) - *d->process << "-g"; + *d->process << "-g"; else if( encoding == "Floating-point" ) - *d->process << "-f"; + *d->process << "-f"; else - *d->process << "-s"; + *d->process << "-s"; } *d->process << d->fileName; @@ -273,24 +260,24 @@ TQStringList K3bSoxEncoder::extensions() const static TQStringList s_extensions; if( s_extensions.isEmpty() ) { s_extensions << "au" - << "8svx" - << "aiff" - << "avr" - << "cdr" - << "cvs" - << "dat" - << "gsm" - << "hcom" - << "maud" - << "sf" - << "sph" - << "smp" - << "txw" - << "vms" - << "voc" - << "wav" - << "wve" - << "raw"; + << "8svx" + << "aiff" + << "avr" + << "cdr" + << "cvs" + << "dat" + << "gsm" + << "hcom" + << "maud" + << "sf" + << "sph" + << "smp" + << "txw" + << "vms" + << "voc" + << "wav" + << "wve" + << "raw"; } if( k3bcore->externalBinManager()->foundBin( "sox" ) ) @@ -348,24 +335,24 @@ TQString K3bSoxEncoder::fileTypeComment( const TQString& ext ) const long long K3bSoxEncoder::fileSize( const TQString&, const K3b::Msf& msf ) const { // for now we make a rough assumption based on the settings - TDEConfig* c = k3bcore->config(); - c->setGroup( "K3bSoxEncoderPlugin" ); - if( c->readBoolEntry( "manual settings", false ) ) { - int sr = c->readNumEntry( "samplerate", 44100 ); - int ch = c->readNumEntry( "channels", 2 ); - int wsize = c->readNumEntry( "data size", 16 ); + TDEConfig* c = k3bcore->config(); + c->setGroup( "K3bSoxEncoderPlugin" ); + if( c->readBoolEntry( "manual settings", false ) ) { + int sr = c->readNumEntry( "samplerate", 44100 ); + int ch = c->readNumEntry( "channels", 2 ); + int wsize = c->readNumEntry( "data size", 16 ); - return msf.totalFrames()*sr*ch*wsize/75; - } - else { - // fallback to raw - return msf.audioBytes(); - } + return msf.totalFrames()*sr*ch*wsize/75; + } + else { + // fallback to raw + return msf.audioBytes(); + } } K3bPluginConfigWidget* K3bSoxEncoder::createConfigWidget( TQWidget* parent, - const char* name ) const + const char* name ) const { return new K3bSoxEncoderSettingsWidget( parent, name ); } @@ -376,7 +363,7 @@ K3bSoxEncoderSettingsWidget::K3bSoxEncoderSettingsWidget( TQWidget* parent, cons : K3bPluginConfigWidget( parent, name ) { w = new base_K3bSoxEncoderConfigWidget( this ); - w->m_editSamplerate->setValidator( new TQIntValidator( TQT_TQOBJECT(w->m_editSamplerate) ) ); + w->m_editSamplerate->setValidator( new TQIntValidator( w->m_editSamplerate ) ); TQHBoxLayout* lay = new TQHBoxLayout( this ); lay->setMargin( 0 ); @@ -435,16 +422,16 @@ void K3bSoxEncoderSettingsWidget::saveConfig() c->writeEntry( "manual settings", w->m_checkManual->isChecked() ); c->writeEntry( "channels", w->m_comboChannels->currentItem() == 0 - ? 1 - : ( w->m_comboChannels->currentItem() == 2 - ? 4 - : 2 ) ); + ? 1 + : ( w->m_comboChannels->currentItem() == 2 + ? 4 + : 2 ) ); c->writeEntry( "data size", w->m_comboSize->currentItem() == 0 - ? 8 - : ( w->m_comboSize->currentItem() == 2 - ? 32 - : 16 ) ); + ? 8 + : ( w->m_comboSize->currentItem() == 2 + ? 32 + : 16 ) ); c->writeEntry( "samplerate", w->m_editSamplerate->text().toInt() ); |