From kde-commits Tue Sep 27 02:38:29 2016 From: Leslie Zhai Date: Tue, 27 Sep 2016 02:38:29 +0000 To: kde-commits Subject: [k3b/multisession] /: Update multisession implementation as Thomas suggested Message-Id: X-MARC-Message: https://marc.info/?l=kde-commits&m=147494391810140 Git commit b189d1c39b52d5b646a089863eb8f44d3eeaa333 by Leslie Zhai. Committed on 27/09/2016 at 02:30. Pushed by lesliezhai into branch 'multisession'. Update multisession implementation as Thomas suggested Summary: - emit error infoMessage for checking nextSessionStart in setupMultiSession= Parameters - nextTrack for bdr_plus_pow - lastSessionStart for bdr_plus_pow I am on vacation from Sep, 27 to Oct, 9 in small village, so I can *NOT* quick response. CCBUG: 367639 M +4 -0 libk3b/projects/datacd/k3bdatamultisessionparameterjob.cpp M +13 -4 libk3bdevice/k3bdevice.cpp http://commits.kde.org/k3b/b189d1c39b52d5b646a089863eb8f44d3eeaa333 diff --git a/libk3b/projects/datacd/k3bdatamultisessionparameterjob.cpp b/l= ibk3b/projects/datacd/k3bdatamultisessionparameterjob.cpp index 4c3f080..daf229d 100644 --- a/libk3b/projects/datacd/k3bdatamultisessionparameterjob.cpp +++ b/libk3b/projects/datacd/k3bdatamultisessionparameterjob.cpp @@ -278,6 +278,10 @@ bool K3b::DataMultiSessionParameterJob::setupMultiSess= ionParameters() } = d->previousSessionStart =3D lastSessionStart; + if (nextSessionStart =3D=3D 0) { + emit infoMessage(i18n("Medium is not of multi-session type and doe= s not contain ISO 9660. Cannot emulate multi-session on it."), MessageError= ); + return false; + } d->nextSessionStart =3D nextSessionStart; = return true; diff --git a/libk3bdevice/k3bdevice.cpp b/libk3bdevice/k3bdevice.cpp index f51c8ea..2cec00a 100644 --- a/libk3bdevice/k3bdevice.cpp +++ b/libk3bdevice/k3bdevice.cpp @@ -3580,7 +3580,11 @@ bool K3b::Device::Device::getNextWritableAdress( uns= igned int& lastSessionStart, // if( !(inf->border & 0x2) ) { // the incomplete track number is the first track in the l= ast session (the empty session) - int nextTrack =3D inf->first_track_l|inf->first_track_m<<8; + int nextTrack; + if (m =3D=3D MEDIA_BD_R_SRM_POW) + nextTrack =3D inf->last_track_l | inf->last_track_m <<= 8; + else + nextTrack =3D inf->first_track_l | inf->first_track_m= << 8; = UByteArray trackData; = @@ -3591,10 +3595,15 @@ bool K3b::Device::Device::getNextWritableAdress( un= signed int& lastSessionStart, else nextWritableAdress =3D from4Byte( &trackData[8] ); = - // Read start address of the first track in the last s= ession - if( readTocPmaAtip( trackData, 0x1, false, 0x0 ) ) { - lastSessionStart =3D from4Byte( &trackData[8] ); + if (m =3D=3D MEDIA_BD_R_SRM_POW) { + lastSessionStart =3D 0; success =3D true; + } else { + // Read start address of the first track in the la= st session + if (readTocPmaAtip(trackData, 0x1, false, 0x0)) { + lastSessionStart =3D from4Byte(&trackData[8]); + success =3D true; + } } } }