Allow to write multisession DVD/Blu-ray in Aaru Image Format and CDRWin.

This commit is contained in:
2020-06-16 22:29:56 +01:00
parent 69196db353
commit a04fa26c0b
3 changed files with 37 additions and 49 deletions

View File

@@ -42,17 +42,19 @@ namespace Aaru.DiscImages
{
public partial class AaruFormat
{
public OpticalImageCapabilities OpticalCapabilities => OpticalImageCapabilities.CanStoreAudioTracks |
OpticalImageCapabilities.CanStoreDataTracks |
OpticalImageCapabilities.CanStorePregaps |
OpticalImageCapabilities.CanStoreSubchannelRw |
OpticalImageCapabilities.CanStoreSessions |
OpticalImageCapabilities.CanStoreIsrc |
OpticalImageCapabilities.CanStoreCdText |
OpticalImageCapabilities.CanStoreMcn |
OpticalImageCapabilities.CanStoreRawData |
OpticalImageCapabilities.CanStoreCookedData |
OpticalImageCapabilities.CanStoreMultipleTracks;
public OpticalImageCapabilities OpticalCapabilities => OpticalImageCapabilities.CanStoreAudioTracks |
OpticalImageCapabilities.CanStoreDataTracks |
OpticalImageCapabilities.CanStorePregaps |
OpticalImageCapabilities.CanStoreSubchannelRw |
OpticalImageCapabilities.CanStoreSessions |
OpticalImageCapabilities.CanStoreIsrc |
OpticalImageCapabilities.CanStoreCdText |
OpticalImageCapabilities.CanStoreMcn |
OpticalImageCapabilities.CanStoreRawData |
OpticalImageCapabilities.CanStoreCookedData |
OpticalImageCapabilities.CanStoreMultipleTracks |
OpticalImageCapabilities.CanStoreNotCdSessions |
OpticalImageCapabilities.CanStoreNotCdTracks;
public ImageInfo Info => imageInfo;
public string Name => "Aaru Format";
public Guid Id => new Guid("49360069-1784-4A2F-B723-0C844D610B0A");

View File

@@ -1025,8 +1025,7 @@ namespace Aaru.DiscImages
if(trk.TrackSequence == 0 &&
trk.TrackStartSector == 0 &&
trk.TrackEndSector == 0)
throw new ArgumentOutOfRangeException(nameof(sectorAddress),
"Can't found track containing requested sector");
trk.TrackType = TrackType.Data; // TODO: Check intersession data type
}
// Close current block first
@@ -1239,11 +1238,7 @@ namespace Aaru.DiscImages
if(track.TrackSequence == 0 &&
track.TrackStartSector == 0 &&
track.TrackEndSector == 0)
{
ErrorMessage = $"Can't found track containing {sectorAddress}";
return false;
}
track.TrackType = TrackType.Data;
if(data.Length != 2352)
{
@@ -1672,8 +1667,10 @@ namespace Aaru.DiscImages
if(track.TrackSequence == 0 &&
track.TrackStartSector == 0 &&
track.TrackEndSector == 0)
track.TrackType = TrackType.Data; // TODO: Check intersession data type
else if(sectorAddress + length > track.TrackEndSector + 1)
{
ErrorMessage = $"Can't found track containing {sectorAddress}";
ErrorMessage = "Can't cross tracks";
return false;
}
@@ -1685,13 +1682,6 @@ namespace Aaru.DiscImages
return false;
}
if(sectorAddress + length > track.TrackEndSector + 1)
{
ErrorMessage = "Can't cross tracks";
return false;
}
sector = new byte[2352];
for(uint i = 0; i < length; i++)
@@ -3494,11 +3484,7 @@ namespace Aaru.DiscImages
if(track.TrackSequence == 0 &&
track.TrackStartSector == 0 &&
track.TrackEndSector == 0)
{
ErrorMessage = $"Can't found track containing {sectorAddress}";
return false;
}
track.TrackType = TrackType.Data;
break;
}

View File

@@ -41,16 +41,18 @@ namespace Aaru.DiscImages
{
public partial class CdrWin
{
public OpticalImageCapabilities OpticalCapabilities => OpticalImageCapabilities.CanStoreAudioTracks |
OpticalImageCapabilities.CanStoreDataTracks |
OpticalImageCapabilities.CanStorePregaps |
OpticalImageCapabilities.CanStoreSessions |
OpticalImageCapabilities.CanStoreIsrc |
OpticalImageCapabilities.CanStoreCdText |
OpticalImageCapabilities.CanStoreMcn |
OpticalImageCapabilities.CanStoreRawData |
OpticalImageCapabilities.CanStoreCookedData |
OpticalImageCapabilities.CanStoreMultipleTracks;
public OpticalImageCapabilities OpticalCapabilities => OpticalImageCapabilities.CanStoreAudioTracks |
OpticalImageCapabilities.CanStoreDataTracks |
OpticalImageCapabilities.CanStorePregaps |
OpticalImageCapabilities.CanStoreSessions |
OpticalImageCapabilities.CanStoreIsrc |
OpticalImageCapabilities.CanStoreCdText |
OpticalImageCapabilities.CanStoreMcn |
OpticalImageCapabilities.CanStoreRawData |
OpticalImageCapabilities.CanStoreCookedData |
OpticalImageCapabilities.CanStoreMultipleTracks |
OpticalImageCapabilities.CanStoreNotCdSessions |
OpticalImageCapabilities.CanStoreNotCdTracks;
public ImageInfo Info => _imageInfo;
public string Name => "CDRWin cuesheet";
public Guid Id => new Guid("664568B2-15D4-4E64-8A7A-20BDA8B8386F");
@@ -72,14 +74,12 @@ namespace Aaru.DiscImages
{
var aaruTrack = new Track
{
Indexes = cdrTrack.Indexes, TrackDescription = cdrTrack.Title,
TrackPregap = cdrTrack.Pregap,
TrackSession = cdrTrack.Session, TrackSequence = cdrTrack.Sequence,
TrackType = CdrWinTrackTypeToTrackType(cdrTrack.TrackType),
TrackFile = cdrTrack.TrackFile.DataFilter.GetFilename(),
TrackFilter = cdrTrack.TrackFile.DataFilter,
TrackFileOffset = cdrTrack.TrackFile.Offset,
TrackFileType = cdrTrack.TrackFile.FileType, TrackRawBytesPerSector = cdrTrack.Bps,
Indexes = cdrTrack.Indexes, TrackDescription = cdrTrack.Title, TrackPregap = cdrTrack.Pregap,
TrackSession = cdrTrack.Session, TrackSequence = cdrTrack.Sequence,
TrackType = CdrWinTrackTypeToTrackType(cdrTrack.TrackType),
TrackFile = cdrTrack.TrackFile.DataFilter.GetFilename(),
TrackFilter = cdrTrack.TrackFile.DataFilter, TrackFileOffset = cdrTrack.TrackFile.Offset,
TrackFileType = cdrTrack.TrackFile.FileType, TrackRawBytesPerSector = cdrTrack.Bps,
TrackBytesPerSector = CdrWinTrackTypeToCookedBytesPerSector(cdrTrack.TrackType)
};