mirror of
https://github.com/aaru-dps/Aaru.Server.git
synced 2025-12-16 19:24:27 +00:00
* DiscImageChef.Metadata/DiskType.cs:
* DiscImageChef.Metadata/DiscImageChef.Metadata.csproj: Added method to convert DiskType to disk type and subtype strings. * DiscImageChef.DiscImages/CDRWin.cs: Added extra track information. Corrected ReadLong for CD+G, subchannel should never come along main channel on reading. * DiscImageChef.DiscImages/ImagePlugin.cs: Added extra track information. Added audio media type. * DiscImageChef.DiscImages/Nero.cs: Added extra track information. * DiscImageChef.DiscImages/ZZZRawImage.cs: Added support for ReadLong and a single track and session for optical discs. * DiscImageChef.Filesystems/FFS.cs: * DiscImageChef.Filesystems/BFS.cs: * DiscImageChef.Filesystems/ODS.cs: * DiscImageChef.Filesystems/SysV.cs: * DiscImageChef.Filesystems/extFS.cs: * DiscImageChef.Filesystems/ProDOS.cs: * DiscImageChef.Filesystems/ext2FS.cs: * DiscImageChef.Filesystems/LisaFS.cs: * DiscImageChef.Filesystems/MinixFS.cs: * DiscImageChef.Filesystems/UNIXBFS.cs: * DiscImageChef.Filesystems/AppleMFS.cs: * DiscImageChef.Filesystems/PCEngine.cs: * DiscImageChef.Filesystems/AppleHFS.cs: * DiscImageChef.Filesystems/AmigaDOS.cs: * DiscImageChef.Filesystems/AppleHFSPlus.cs: Completed XML information. * DiscImageChef.Filesystems/ISO9660.cs: Corrected fail in Sega CD IP.BIN decoding. Corrected IP.BIN date decoding. Trim spaces at end of Volume Descriptor string fields. Completed XML information. * DiscImageChef/Commands/Checksum.cs: Checking memory usage on each step makes checksum calculation abismally slower. Removed. * DiscImageChef/Main.cs: * DiscImageChef/Options.cs: * DiscImageChef/DiscImageChef.csproj: * DiscImageChef/Commands/CreateSidecar.cs: Added method for creating CICM Metadata XML sidecar.
This commit is contained in:
@@ -1799,8 +1799,8 @@ namespace DiscImageChef.ImagePlugins
|
||||
case CDRWinTrackTypeCDG:
|
||||
{
|
||||
sector_offset = 0;
|
||||
sector_size = 2448;
|
||||
sector_skip = 0;
|
||||
sector_size = 2352;
|
||||
sector_skip = 96;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
@@ -1907,6 +1907,19 @@ namespace DiscImageChef.ImagePlugins
|
||||
_track.TrackSession = cdr_track.session;
|
||||
_track.TrackSequence = cdr_track.sequence;
|
||||
_track.TrackType = CDRWinTrackTypeToTrackType(cdr_track.tracktype);
|
||||
_track.TrackFile = cdr_track.trackfile.datafile;
|
||||
_track.TrackFileOffset = cdr_track.trackfile.offset;
|
||||
_track.TrackFileType = cdr_track.trackfile.filetype;
|
||||
_track.TrackRawBytesPerSector = cdr_track.bps;
|
||||
_track.TrackBytesPerSector = CDRWinTrackTypeToCookedBytesPerSector(cdr_track.tracktype);
|
||||
if (cdr_track.bps == 2448)
|
||||
{
|
||||
_track.TrackSubchannelFile = cdr_track.trackfile.datafile;
|
||||
_track.TrackSubchannelOffset = cdr_track.trackfile.offset;
|
||||
_track.TrackSubchannelType = TrackSubchannelType.RawInterleaved;
|
||||
}
|
||||
else
|
||||
_track.TrackSubchannelType = TrackSubchannelType.None;
|
||||
|
||||
tracks.Add(_track);
|
||||
previousStartSector = _track.TrackEndSector + 1;
|
||||
@@ -1943,6 +1956,19 @@ namespace DiscImageChef.ImagePlugins
|
||||
_track.TrackSession = cdr_track.session;
|
||||
_track.TrackSequence = cdr_track.sequence;
|
||||
_track.TrackType = CDRWinTrackTypeToTrackType(cdr_track.tracktype);
|
||||
_track.TrackFile = cdr_track.trackfile.datafile;
|
||||
_track.TrackFileOffset = cdr_track.trackfile.offset;
|
||||
_track.TrackFileType = cdr_track.trackfile.filetype;
|
||||
_track.TrackRawBytesPerSector = cdr_track.bps;
|
||||
_track.TrackBytesPerSector = CDRWinTrackTypeToCookedBytesPerSector(cdr_track.tracktype);
|
||||
if (cdr_track.bps == 2448)
|
||||
{
|
||||
_track.TrackSubchannelFile = cdr_track.trackfile.datafile;
|
||||
_track.TrackSubchannelOffset = cdr_track.trackfile.offset;
|
||||
_track.TrackSubchannelType = TrackSubchannelType.RawInterleaved;
|
||||
}
|
||||
else
|
||||
_track.TrackSubchannelType = TrackSubchannelType.None;
|
||||
|
||||
tracks.Add(_track);
|
||||
}
|
||||
@@ -2078,6 +2104,30 @@ namespace DiscImageChef.ImagePlugins
|
||||
}
|
||||
}
|
||||
|
||||
static UInt16 CDRWinTrackTypeToCookedBytesPerSector(string trackType)
|
||||
{
|
||||
switch (trackType)
|
||||
{
|
||||
case CDRWinTrackTypeMode1:
|
||||
case CDRWinTrackTypeMode2Form1:
|
||||
case CDRWinTrackTypeMode1Raw:
|
||||
return 2048;
|
||||
case CDRWinTrackTypeMode2Form2:
|
||||
return 2324;
|
||||
case CDRWinTrackTypeMode2Formless:
|
||||
case CDRWinTrackTypeCDI:
|
||||
case CDRWinTrackTypeMode2Raw:
|
||||
case CDRWinTrackTypeCDIRaw:
|
||||
return 2336;
|
||||
case CDRWinTrackTypeAudio:
|
||||
return 2352;
|
||||
case CDRWinTrackTypeCDG:
|
||||
return 2448;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static TrackType CDRWinTrackTypeToTrackType(string trackType)
|
||||
{
|
||||
switch (trackType)
|
||||
|
||||
@@ -1,3 +1,21 @@
|
||||
2015-12-06 Natalia Portillo <claunia@claunia.com>
|
||||
|
||||
* CDRWin.cs:
|
||||
Added extra track information.
|
||||
Corrected ReadLong for CD+G, subchannel should never come
|
||||
along main channel on reading.
|
||||
|
||||
* ImagePlugin.cs:
|
||||
Added extra track information.
|
||||
Added audio media type.
|
||||
|
||||
* Nero.cs:
|
||||
Added extra track information.
|
||||
|
||||
* ZZZRawImage.cs:
|
||||
Added support for ReadLong and a single track and session
|
||||
for optical discs.
|
||||
|
||||
2015-12-05 Natalia Portillo <claunia@claunia.com>
|
||||
|
||||
* VHD.cs:
|
||||
|
||||
@@ -467,6 +467,23 @@ namespace DiscImageChef.ImagePlugins
|
||||
public string TrackDescription;
|
||||
/// <summary>Indexes, 00 to 99 and sector offset</summary>
|
||||
public Dictionary<int, UInt64> Indexes;
|
||||
public string TrackFile;
|
||||
public ulong TrackFileOffset;
|
||||
public string TrackFileType;
|
||||
public int TrackBytesPerSector;
|
||||
public int TrackRawBytesPerSector;
|
||||
public string TrackSubchannelFile;
|
||||
public ulong TrackSubchannelOffset;
|
||||
public TrackSubchannelType TrackSubchannelType;
|
||||
}
|
||||
|
||||
public enum TrackSubchannelType
|
||||
{
|
||||
None,
|
||||
Packed,
|
||||
Raw,
|
||||
PackedInterleaved,
|
||||
RawInterleaved
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -626,7 +643,8 @@ namespace DiscImageChef.ImagePlugins
|
||||
{
|
||||
OpticalDisc,
|
||||
BlockMedia,
|
||||
LinearMedia
|
||||
LinearMedia,
|
||||
AudioMedia
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -1533,6 +1533,55 @@ namespace DiscImageChef.ImagePlugins
|
||||
_track.TrackStartSector = _neroTrack.StartLBA;
|
||||
_track.TrackType = NeroTrackModeToTrackType((DAOMode)_neroTrack.Mode);
|
||||
imageTracks.Add(_track);
|
||||
_track.TrackFile = _imagePath;
|
||||
_track.TrackFileOffset = _neroTrack.Offset;
|
||||
_track.TrackFileType = "BINARY";
|
||||
_track.TrackSubchannelType = TrackSubchannelType.None;
|
||||
switch((DAOMode)_neroTrack.Mode)
|
||||
{
|
||||
case DAOMode.Audio:
|
||||
_track.TrackBytesPerSector = 2352;
|
||||
_track.TrackRawBytesPerSector = 2352;
|
||||
break;
|
||||
case DAOMode.AudioSub:
|
||||
_track.TrackBytesPerSector = 2352;
|
||||
_track.TrackRawBytesPerSector = 2448;
|
||||
_track.TrackSubchannelType = TrackSubchannelType.RawInterleaved;
|
||||
break;
|
||||
case DAOMode.Data:
|
||||
case DAOMode.DataM2F1:
|
||||
_track.TrackBytesPerSector = 2048;
|
||||
_track.TrackRawBytesPerSector = 2048;
|
||||
break;
|
||||
case DAOMode.DataM2F2:
|
||||
_track.TrackBytesPerSector = 2336;
|
||||
_track.TrackRawBytesPerSector = 2336;
|
||||
break;
|
||||
case DAOMode.DataM2Raw:
|
||||
_track.TrackBytesPerSector = 2352;
|
||||
_track.TrackRawBytesPerSector = 2352;
|
||||
break;
|
||||
case DAOMode.DataM2RawSub:
|
||||
_track.TrackBytesPerSector = 2352;
|
||||
_track.TrackRawBytesPerSector = 2448;
|
||||
_track.TrackSubchannelType = TrackSubchannelType.RawInterleaved;
|
||||
break;
|
||||
case DAOMode.DataRaw:
|
||||
_track.TrackBytesPerSector = 2048;
|
||||
_track.TrackRawBytesPerSector = 2352;
|
||||
break;
|
||||
case DAOMode.DataRawSub:
|
||||
_track.TrackBytesPerSector = 2048;
|
||||
_track.TrackRawBytesPerSector = 2448;
|
||||
_track.TrackSubchannelType = TrackSubchannelType.RawInterleaved;
|
||||
break;
|
||||
}
|
||||
|
||||
if(_track.TrackSubchannelType == TrackSubchannelType.RawInterleaved)
|
||||
{
|
||||
_track.TrackSubchannelFile = _imagePath;
|
||||
_track.TrackSubchannelOffset = _neroTrack.Offset;
|
||||
}
|
||||
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t\t _track.TrackDescription = {0}", _track.TrackDescription);
|
||||
DicConsole.DebugWriteLine("Nero plugin", "\t\t _track.TrackEndSector = {0}", _track.TrackEndSector);
|
||||
|
||||
@@ -398,6 +398,154 @@ namespace DiscImageChef.ImagePlugins
|
||||
return null;
|
||||
}
|
||||
|
||||
public override List<Track> GetTracks()
|
||||
{
|
||||
if (ImageInfo.xmlMediaType == XmlMediaType.OpticalDisc)
|
||||
{
|
||||
Track trk = new Track();
|
||||
trk.TrackBytesPerSector = (int)ImageInfo.sectorSize;
|
||||
trk.TrackEndSector = ImageInfo.sectors - 1;
|
||||
trk.TrackFile = rawImagePath;
|
||||
trk.TrackFileOffset = 0;
|
||||
trk.TrackFileType = "BINARY";
|
||||
trk.TrackRawBytesPerSector = (int)ImageInfo.sectorSize;
|
||||
trk.TrackSequence = 1;
|
||||
trk.TrackStartSector = 0;
|
||||
trk.TrackSubchannelType = TrackSubchannelType.None;
|
||||
trk.TrackType = TrackType.Data;
|
||||
trk.TrackSession = 1;
|
||||
List<Track> lst = new List<Track>();
|
||||
lst.Add(trk);
|
||||
return lst;
|
||||
}
|
||||
|
||||
throw new FeatureUnsupportedImageException("Feature not supported by image format");
|
||||
}
|
||||
|
||||
public override List<Track> GetSessionTracks(Session session)
|
||||
{
|
||||
if (ImageInfo.xmlMediaType == XmlMediaType.OpticalDisc)
|
||||
{
|
||||
if (session.SessionSequence != 1)
|
||||
throw new ArgumentOutOfRangeException("session", "Only a single session is supported");
|
||||
|
||||
Track trk = new Track();
|
||||
trk.TrackBytesPerSector = (int)ImageInfo.sectorSize;
|
||||
trk.TrackEndSector = ImageInfo.sectors - 1;
|
||||
trk.TrackFile = rawImagePath;
|
||||
trk.TrackFileOffset = 0;
|
||||
trk.TrackFileType = "BINARY";
|
||||
trk.TrackRawBytesPerSector = (int)ImageInfo.sectorSize;
|
||||
trk.TrackSequence = 1;
|
||||
trk.TrackStartSector = 0;
|
||||
trk.TrackSubchannelType = TrackSubchannelType.None;
|
||||
trk.TrackType = TrackType.Data;
|
||||
trk.TrackSession = 1;
|
||||
List<Track> lst = new List<Track>();
|
||||
lst.Add(trk);
|
||||
return lst;
|
||||
}
|
||||
|
||||
throw new FeatureUnsupportedImageException("Feature not supported by image format");
|
||||
}
|
||||
|
||||
public override List<Track> GetSessionTracks(UInt16 session)
|
||||
{
|
||||
if (ImageInfo.xmlMediaType == XmlMediaType.OpticalDisc)
|
||||
{
|
||||
if (session != 1)
|
||||
throw new ArgumentOutOfRangeException("session", "Only a single session is supported");
|
||||
|
||||
Track trk = new Track();
|
||||
trk.TrackBytesPerSector = (int)ImageInfo.sectorSize;
|
||||
trk.TrackEndSector = ImageInfo.sectors - 1;
|
||||
trk.TrackFile = rawImagePath;
|
||||
trk.TrackFileOffset = 0;
|
||||
trk.TrackFileType = "BINARY";
|
||||
trk.TrackRawBytesPerSector = (int)ImageInfo.sectorSize;
|
||||
trk.TrackSequence = 1;
|
||||
trk.TrackStartSector = 0;
|
||||
trk.TrackSubchannelType = TrackSubchannelType.None;
|
||||
trk.TrackType = TrackType.Data;
|
||||
trk.TrackSession = 1;
|
||||
List<Track> lst = new List<Track>();
|
||||
lst.Add(trk);
|
||||
return lst;
|
||||
}
|
||||
|
||||
throw new FeatureUnsupportedImageException("Feature not supported by image format");
|
||||
}
|
||||
|
||||
public override List<Session> GetSessions()
|
||||
{
|
||||
if (ImageInfo.xmlMediaType == XmlMediaType.OpticalDisc)
|
||||
{
|
||||
Session sess = new Session();
|
||||
sess.EndSector = ImageInfo.sectors - 1;
|
||||
sess.EndTrack = 1;
|
||||
sess.SessionSequence = 1;
|
||||
sess.StartSector = 0;
|
||||
sess.StartTrack = 1;
|
||||
List<Session> lst = new List<Session>();
|
||||
lst.Add(sess);
|
||||
return lst;
|
||||
}
|
||||
|
||||
throw new FeatureUnsupportedImageException("Feature not supported by image format");
|
||||
}
|
||||
|
||||
public override byte[] ReadSector(UInt64 sectorAddress, UInt32 track)
|
||||
{
|
||||
if (ImageInfo.xmlMediaType == XmlMediaType.OpticalDisc)
|
||||
{
|
||||
if (track != 1)
|
||||
throw new ArgumentOutOfRangeException("track", "Only a single session is supported");
|
||||
|
||||
return ReadSector(sectorAddress);
|
||||
}
|
||||
|
||||
throw new FeatureUnsupportedImageException("Feature not supported by image format");
|
||||
}
|
||||
|
||||
public override byte[] ReadSectors(UInt64 sectorAddress, UInt32 length, UInt32 track)
|
||||
{
|
||||
if (ImageInfo.xmlMediaType == XmlMediaType.OpticalDisc)
|
||||
{
|
||||
if (track != 1)
|
||||
throw new ArgumentOutOfRangeException("track", "Only a single session is supported");
|
||||
|
||||
return ReadSectors(sectorAddress, length);
|
||||
}
|
||||
|
||||
throw new FeatureUnsupportedImageException("Feature not supported by image format");
|
||||
}
|
||||
|
||||
public override byte[] ReadSectorLong(UInt64 sectorAddress, UInt32 track)
|
||||
{
|
||||
if (ImageInfo.xmlMediaType == XmlMediaType.OpticalDisc)
|
||||
{
|
||||
if (track != 1)
|
||||
throw new ArgumentOutOfRangeException("track", "Only a single session is supported");
|
||||
|
||||
return ReadSector(sectorAddress);
|
||||
}
|
||||
|
||||
throw new FeatureUnsupportedImageException("Feature not supported by image format");
|
||||
}
|
||||
|
||||
public override byte[] ReadSectorsLong(UInt64 sectorAddress, UInt32 length, UInt32 track)
|
||||
{
|
||||
if (ImageInfo.xmlMediaType == XmlMediaType.OpticalDisc)
|
||||
{
|
||||
if (track != 1)
|
||||
throw new ArgumentOutOfRangeException("track", "Only a single session is supported");
|
||||
|
||||
return ReadSectors(sectorAddress, length);
|
||||
}
|
||||
|
||||
throw new FeatureUnsupportedImageException("Feature not supported by image format");
|
||||
}
|
||||
|
||||
#region Private methods
|
||||
|
||||
DiskType CalculateDiskType()
|
||||
@@ -645,56 +793,16 @@ namespace DiscImageChef.ImagePlugins
|
||||
throw new FeatureUnsupportedImageException("Feature not supported by image format");
|
||||
}
|
||||
|
||||
public override List<Track> GetTracks()
|
||||
{
|
||||
throw new FeatureUnsupportedImageException("Feature not supported by image format");
|
||||
}
|
||||
|
||||
public override List<Track> GetSessionTracks(Session session)
|
||||
{
|
||||
throw new FeatureUnsupportedImageException("Feature not supported by image format");
|
||||
}
|
||||
|
||||
public override List<Track> GetSessionTracks(UInt16 session)
|
||||
{
|
||||
throw new FeatureUnsupportedImageException("Feature not supported by image format");
|
||||
}
|
||||
|
||||
public override List<Session> GetSessions()
|
||||
{
|
||||
throw new FeatureUnsupportedImageException("Feature not supported by image format");
|
||||
}
|
||||
|
||||
public override byte[] ReadSector(UInt64 sectorAddress, UInt32 track)
|
||||
{
|
||||
throw new FeatureUnsupportedImageException("Feature not supported by image format");
|
||||
}
|
||||
|
||||
public override byte[] ReadSectorTag(UInt64 sectorAddress, UInt32 track, SectorTagType tag)
|
||||
{
|
||||
throw new FeatureUnsupportedImageException("Feature not supported by image format");
|
||||
}
|
||||
|
||||
public override byte[] ReadSectors(UInt64 sectorAddress, UInt32 length, UInt32 track)
|
||||
{
|
||||
throw new FeatureUnsupportedImageException("Feature not supported by image format");
|
||||
}
|
||||
|
||||
public override byte[] ReadSectorsTag(UInt64 sectorAddress, UInt32 length, UInt32 track, SectorTagType tag)
|
||||
{
|
||||
throw new FeatureUnsupportedImageException("Feature not supported by image format");
|
||||
}
|
||||
|
||||
public override byte[] ReadSectorLong(UInt64 sectorAddress, UInt32 track)
|
||||
{
|
||||
throw new FeatureUnsupportedImageException("Feature not supported by image format");
|
||||
}
|
||||
|
||||
public override byte[] ReadSectorsLong(UInt64 sectorAddress, UInt32 length, UInt32 track)
|
||||
{
|
||||
throw new FeatureUnsupportedImageException("Feature not supported by image format");
|
||||
}
|
||||
|
||||
#endregion Unsupported features
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user