From 1ca9af7503bb742c1ebb3652ffd6ecb75a751e69 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Sun, 19 Jan 2020 20:17:12 +0000 Subject: [PATCH] Clear cache when calculating disc offset in MediaTek drives. --- DiscImageChef.Core/Media/Info/CompactDisc.cs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/DiscImageChef.Core/Media/Info/CompactDisc.cs b/DiscImageChef.Core/Media/Info/CompactDisc.cs index b9d5996f6..c2c481ddc 100644 --- a/DiscImageChef.Core/Media/Info/CompactDisc.cs +++ b/DiscImageChef.Core/Media/Info/CompactDisc.cs @@ -122,6 +122,21 @@ namespace DiscImageChef.Core.Media.Info if(!sense && !dev.Error) { + // Clear cache + for(int i = 0; i < 63; i++) + { + sense = dev.ReadCd(out _, out _, (uint)(wantedLba + 3 + (16 * i)), sectorSize, 16, MmcSectorTypes.AllTypes, false, + false, false, MmcHeaderCodes.None, true, false, MmcErrorField.None, + MmcSubchannel.None, dev.Timeout, out _); + + if(sense || dev.Error) + break; + } + + sense = dev.ReadCd(out cmdBuf, out _, wantedLba, sectorSize, 3, MmcSectorTypes.Cdda, false, + false, false, MmcHeaderCodes.None, true, false, MmcErrorField.None, + MmcSubchannel.None, dev.Timeout, out _); + for(int i = 0; i < cmdBuf.Length - sectorSync.Length; i++) { Array.Copy(cmdBuf, i, tmpBuf, 0, sectorSync.Length);