rework gpu busy timing
[pcsx_rearmed.git] / libpcsxcore / cdriso.c
index 8cd9ab5..1233ba3 100644 (file)
 #include <process.h>
 #include <windows.h>
 #define strcasecmp _stricmp
-#else
+#elif P_HAVE_PTHREAD
 #include <pthread.h>
 #include <sys/time.h>
 #include <unistd.h>
 #endif
 
-#ifndef _WIN32
 // to enable the USE_READ_THREAD code, fix:
 // - https://github.com/notaz/pcsx_rearmed/issues/257
 // - ISOgetBufferSub to not race with async code
-//#define USE_READ_THREAD
-#endif
+#define USE_READ_THREAD 0 //P_HAVE_PTHREAD
 
 #ifdef USE_LIBRETRO_VFS
 #include <streams/file_stream_transforms.h>
@@ -124,7 +122,7 @@ struct trackinfo {
        char start[3];          // MSF-format
        char length[3];         // MSF-format
        FILE *handle;           // for multi-track images CDDA
-       unsigned int start_offset; // byte offset from start of above file
+       unsigned int start_offset; // byte offset from start of above file (chd: sector offset)
 };
 
 #define MAXTRACKS 100 /* How many tracks can a CD hold? */
@@ -1079,7 +1077,7 @@ static int opensbifile(const char *isoname) {
        return LoadSBI(sbiname, s);
 }
 
-#ifndef USE_READ_THREAD
+#if !USE_READ_THREAD
 static void readThreadStop() {}
 static void readThreadStart() {}
 #else
@@ -1431,7 +1429,7 @@ static int cdread_chd(FILE *f, unsigned int base, void *dest, int sector)
 {
        int hunk;
 
-       assert(base == 0);
+       sector += base;
 
        hunk = sector / chd_img->sectors_per_hunk;
        chd_img->sector_in_hunk = sector % chd_img->sectors_per_hunk;
@@ -1497,7 +1495,7 @@ static int cdread_2048(FILE *f, unsigned int base, void *dest, int sector)
        return 12*2 + ret;
 }
 
-#ifdef USE_READ_THREAD
+#if USE_READ_THREAD
 
 static int cdread_async(FILE *f, unsigned int base, void *dest, int sector) {
   boolean found = FALSE;
@@ -1555,7 +1553,7 @@ static unsigned char * CALLBACK ISOgetBuffer_chd(void) {
 }
 #endif
 
-#ifdef USE_READ_THREAD
+#if USE_READ_THREAD
 static unsigned char * CALLBACK ISOgetBuffer_async(void) {
   unsigned char *buffer;
   pthread_mutex_lock(&sectorbuffer_lock);
@@ -1563,7 +1561,6 @@ static unsigned char * CALLBACK ISOgetBuffer_async(void) {
   pthread_mutex_unlock(&sectorbuffer_lock);
   return buffer + 12;
 }
-
 #endif
 
 static unsigned char * CALLBACK ISOgetBuffer(void) {
@@ -1588,7 +1585,6 @@ static long CALLBACK ISOopen(void) {
        char alt_bin_filename[MAXPATHLEN];
        const char *bin_filename;
        char image_str[1024];
-       int is_chd = 0;
 
        if (cdHandle != NULL) {
                return 0; // it's already open
@@ -1643,7 +1639,6 @@ static long CALLBACK ISOopen(void) {
                CDR_getBuffer = ISOgetBuffer_chd;
                cdimg_read_func = cdread_chd;
                cdimg_read_sub_func = cdread_sub_chd;
-               is_chd = 1;
        }
 #endif
 
@@ -1684,14 +1679,11 @@ static long CALLBACK ISOopen(void) {
        }
 
        // guess whether it is mode1/2048
-       if (ftello(cdHandle) % 2048 == 0) {
+       if (cdimg_read_func == cdread_normal && ftello(cdHandle) % 2048 == 0) {
                unsigned int modeTest = 0;
                fseek(cdHandle, 0, SEEK_SET);
                if (!fread(&modeTest, sizeof(modeTest), 1, cdHandle)) {
-#ifndef NDEBUG
                        SysPrintf(_("File IO error in <%s:%s>.\n"), __FILE__, __func__);
-#endif
-                       return -1;
                }
                if (SWAP32(modeTest) != 0xffffff00) {
                        strcat(image_str, "[2048]");
@@ -1704,7 +1696,7 @@ static long CALLBACK ISOopen(void) {
 
        PrintTracks();
 
-       if (subChanMixed && !is_chd) {
+       if (subChanMixed && cdimg_read_func == cdread_normal) {
                cdimg_read_func = cdread_sub_mixed;
                cdimg_read_sub_func = cdread_sub_sub_mixed;
        }