diff -ur k3b-2.0.2/libk3b/jobs/k3bdvdcopyjob.cpp k3b-2.0.2-use_growisofs_instead_of_wodim/libk3b/jobs/k3bdvdcopyjob.cpp --- k3b-2.0.2/libk3b/jobs/k3bdvdcopyjob.cpp 2011-01-15 21:47:30.000000000 +0100 +++ k3b-2.0.2-use_growisofs_instead_of_wodim/libk3b/jobs/k3bdvdcopyjob.cpp 2011-04-23 02:48:59.000000000 +0200 @@ -169,13 +169,20 @@ // first let's determine which application to use d->usedWritingApp = writingApp(); if ( d->usedWritingApp == K3b::WritingAppAuto ) { - // let's default to cdrecord for the time being + // prefer growisofs to wodim, which doesn't work all that great for DVDs + // (and doesn't support BluRay at all) + if ( k3bcore->externalBinManager()->binObject("cdrecord")->hasFeature( "wodim" ) ) + d->usedWritingApp = K3b::WritingAppGrowisofs; + // otherwise, let's default to cdrecord for the time being // FIXME: use growisofs for non-dao and non-auto mode - if ( K3b::Device::isBdMedia( d->sourceDiskInfo.mediaType() ) ) { - if ( k3bcore->externalBinManager()->binObject("cdrecord")->hasFeature( "blu-ray" ) ) + else { + if ( K3b::Device::isBdMedia( d->sourceDiskInfo.mediaType() ) ) { + if ( k3bcore->externalBinManager()->binObject("cdrecord")->hasFeature( "blu-ray" ) ) + d->usedWritingApp = K3b::WritingAppCdrecord; + else + d->usedWritingApp = K3b::WritingAppGrowisofs; + } else d->usedWritingApp = K3b::WritingAppCdrecord; - else - d->usedWritingApp = K3b::WritingAppGrowisofs; } } diff -ur k3b-2.0.2/libk3b/jobs/k3bmetawriter.cpp k3b-2.0.2-use_growisofs_instead_of_wodim/libk3b/jobs/k3bmetawriter.cpp --- k3b-2.0.2/libk3b/jobs/k3bmetawriter.cpp 2011-01-15 21:47:30.000000000 +0100 +++ k3b-2.0.2-use_growisofs_instead_of_wodim/libk3b/jobs/k3bmetawriter.cpp 2011-04-23 02:42:06.000000000 +0200 @@ -261,11 +261,13 @@ bool cdrecordOnTheFly = false; bool cdrecordCdText = false; bool cdrecordBluRay = false; + bool cdrecordWodim = false; bool growisofsBluRay = false; if( k3bcore->externalBinManager()->binObject("cdrecord") ) { cdrecordOnTheFly = k3bcore->externalBinManager()->binObject("cdrecord")->hasFeature( "audio-stdin" ); cdrecordCdText = k3bcore->externalBinManager()->binObject("cdrecord")->hasFeature( "cdtext" ); cdrecordBluRay = k3bcore->externalBinManager()->binObject("cdrecord")->hasFeature( "blu-ray" ); + cdrecordWodim = k3bcore->externalBinManager()->binObject("cdrecord")->hasFeature( "wodim" ); } if( k3bcore->externalBinManager()->binObject("growisofs") ) { growisofsBluRay = k3bcore->externalBinManager()->binObject("growisofs")->hasFeature( "blu-ray" ); @@ -316,10 +318,16 @@ d->usedWritingApp = WritingAppGrowisofs; } else if( mediaType & Device::MEDIA_DVD_ALL ) { - d->usedWritingApp = WritingAppCdrecord; + // wodim (at least on fedora) doesn't do DVDs all that well, use growisofs instead + if ( cdrecordWodim ) { + d->usedWritingApp = WritingAppGrowisofs; + } + else { + d->usedWritingApp = WritingAppCdrecord; + } } else if( mediaType & Device::MEDIA_BD_ALL ) { - if( cdrecordBluRay ) { + if( cdrecordBluRay && ! cdrecordWodim ) { d->usedWritingApp = WritingAppCdrecord; } else if( growisofsBluRay ) { diff -ur k3b-2.0.2/libk3b/projects/datacd/k3bdatajob.cpp k3b-2.0.2-use_growisofs_instead_of_wodim/libk3b/projects/datacd/k3bdatajob.cpp --- k3b-2.0.2/libk3b/projects/datacd/k3bdatajob.cpp 2011-01-15 21:47:30.000000000 +0100 +++ k3b-2.0.2-use_growisofs_instead_of_wodim/libk3b/projects/datacd/k3bdatajob.cpp 2011-04-23 02:55:48.000000000 +0200 @@ -58,7 +58,7 @@ { public: Private() - : usedWritingApp(K3b::WritingAppCdrecord), + : usedWritingApp(K3b::WritingAppAuto), verificationJob( 0 ), pipe( 0 ) { } @@ -813,8 +813,12 @@ d->usedWritingApp = writingApp(); // let's default to cdrecord for the time being (except for special cases below) + // but prefer growisofs to wodim for DVDs if ( d->usedWritingApp == K3b::WritingAppAuto ) { - d->usedWritingApp = K3b::WritingAppCdrecord; + if (k3bcore->externalBinManager()->binObject("cdrecord")->hasFeature( "wodim" )) + d->usedWritingApp = K3b::WritingAppGrowisofs; + else + d->usedWritingApp = K3b::WritingAppCdrecord; } // ------------------------------- @@ -930,7 +934,10 @@ else if ( foundMedium & K3b::Device::MEDIA_BD_ALL ) { d->usedWritingApp = writingApp(); if( d->usedWritingApp == K3b::WritingAppAuto ) { - d->usedWritingApp = K3b::WritingAppCdrecord; + if (k3bcore->externalBinManager()->binObject("cdrecord")->hasFeature( "wodim" )) + d->usedWritingApp = K3b::WritingAppGrowisofs; + else + d->usedWritingApp = K3b::WritingAppCdrecord; } if ( d->usedWritingApp == K3b::WritingAppCdrecord &&