+ else if (spu.CDDAPlay != spu.CDDAFeed)\r
+ {\r
+ // abuse the xa struct to store leftover cdda samples\r
+ unsigned int *p = spu.CDDAPlay;\r
+ cdda_left = spu.CDDAFeed - spu.CDDAPlay;\r
+ if (cdda_left < 0)\r
+ cdda_left = spu.CDDAEnd - spu.CDDAPlay + spu.CDDAFeed - spu.CDDAStart;\r
+ if (cdda_left > sizeof(pF->xaS.pcm) / 4)\r
+ cdda_left = sizeof(pF->xaS.pcm) / 4;\r
+ if (p + cdda_left <= spu.CDDAEnd)\r
+ memcpy(pF->xaS.pcm, p, cdda_left * 4);\r
+ else {\r
+ memcpy(pF->xaS.pcm, p, (spu.CDDAEnd - p) * 4);\r
+ memcpy((char *)pF->xaS.pcm + (spu.CDDAEnd - p) * 4, spu.CDDAStart,\r
+ (cdda_left - (spu.CDDAEnd - p)) * 4);\r
+ }\r
+ pF->xaS.nsamples = 0;\r
+ }\r
+ else\r
+ memset(&pF->xaS,0,sizeof(xa_decode_t)); // or clean xa\r