@@ -553,13 +553,13 @@ ITCM_CODE void sndUpdateStream(void) {
553553}
554554
555555ITCM_CODE static u32 getFrameOffset (const int num) {
556- static int previousNum = 0 ;
557- static u32 offset = 0 ;
558-
559556 if (isDSiMode ()) {
560557 return frameOffsets[num];
561558 }
562559
560+ static int previousNum = 0 ;
561+ static u32 offset = 0 ;
562+
563563 if (rvidHeaderCheck.ver < 3 ) {
564564 return 0x200 + ((0x200 *rvidVRes) * num);
565565 }
@@ -574,6 +574,25 @@ ITCM_CODE static u32 getFrameOffset(const int num) {
574574 return offset;
575575}
576576
577+ ITCM_CODE static u32 getCompressedFrameSize (const int num) {
578+ if (isDSiMode ()) {
579+ return rvidOver256Colors ? compressedFrameSizes32[num] : compressedFrameSizes16[num];
580+ }
581+
582+ static int previousNum = 0 ;
583+ static u32 size = 0 ;
584+
585+ if (size > 0 && previousNum == num) {
586+ return size;
587+ }
588+
589+ previousNum = num;
590+ const int byteCount = rvidOver256Colors ? 4 : 2 ;
591+ fseek (rvid[0 ], rvidCompressedFrameSizeTableOffset + (byteCount * num), SEEK_SET);
592+ fread (&size, byteCount, 1 , rvid[0 ]);
593+ return size;
594+ }
595+
577596ITCM_CODE static void loadFramePal (const int num, const u32 frameOffset, const int rvidPart) {
578597 if (rvidOver256Colors) return ;
579598
@@ -623,6 +642,7 @@ ITCM_CODE void loadFrame(const int num) {
623642 for (int b = 0 ; b < 2 ; b++) {
624643 const int pos = (num*2 )+b;
625644 const u32 frameOffset = getFrameOffset (loadedSingleFrames);
645+ const u32 size = rvidCompressed ? getCompressedFrameSize (loadedSingleFrames) : 0 ;
626646 const int rvidPart = (rvidHeaderCheck.ver >= 4 ) ? (frameOffset % 4 ) : 0 ;
627647 const u32 frameOffsetSeek = frameOffset - rvidPart;
628648 fseek (rvid[rvidPart], frameOffsetSeek, SEEK_SET);
@@ -638,8 +658,6 @@ ITCM_CODE void loadFrame(const int num) {
638658 const u8 * src = frameBuffer+(previousNum[1 ]*(rvidHRes*rvidVRes));
639659 tonccpy (dst, src, rvidHRes*rvidVRes);
640660 } else {
641- const int loadedFramesPos = (loadedFrames*2 )+b;
642- const u32 size = rvidOver256Colors ? compressedFrameSizes32[loadedFramesPos] : compressedFrameSizes16[loadedFramesPos];
643661 if (size == (unsigned )rvidHRes*rvidVRes) {
644662 fread (dst, 1 , rvidHRes*rvidVRes, rvid[rvidPart]);
645663 } else {
@@ -690,6 +708,7 @@ ITCM_CODE void loadFrame(const int num) {
690708 }
691709 } else {
692710 const u32 frameOffset = getFrameOffset (loadedFrames);
711+ const u32 size = rvidCompressed ? getCompressedFrameSize (loadedFrames) : 0 ;
693712 const int rvidPart = (rvidHeaderCheck.ver >= 4 ) ? (frameOffset % 4 ) : 0 ;
694713 const u32 frameOffsetSeek = frameOffset - rvidPart;
695714 fseek (rvid[rvidPart], frameOffsetSeek, SEEK_SET);
@@ -706,7 +725,6 @@ ITCM_CODE void loadFrame(const int num) {
706725 tonccpy (dst, src, rvidHRes*rvidVRes);
707726 } else {
708727 if (rvidCompressed) {
709- const u32 size = rvidOver256Colors ? compressedFrameSizes32[loadedFrames] : compressedFrameSizes16[loadedFrames];
710728 if (size == (unsigned )rvidHRes*rvidVRes) {
711729 fread (dst, 1 , rvidHRes*rvidVRes, rvid[rvidPart]);
712730 } else {
@@ -922,18 +940,19 @@ int playRvid(const char* filename) {
922940 // }
923941 }
924942 }
925- }
926943
927- if (rvidCompressed) {
928- fseek (rvid[0 ], rvidCompressedFrameSizeTableOffset, SEEK_SET);
929- if (rvidOver256Colors) {
930- compressedFrameSizes32 = new u32 [rvidFrames];
931- fread (compressedFrameSizes32, 4 , rvidFrames, rvid[0 ]);
932- } else {
933- compressedFrameSizes16 = new u16 [rvidFrames];
934- fread (compressedFrameSizes16, 2 , rvidFrames, rvid[0 ]);
944+ if (rvidCompressed) {
945+ fseek (rvid[0 ], rvidCompressedFrameSizeTableOffset, SEEK_SET);
946+ if (rvidOver256Colors) {
947+ compressedFrameSizes32 = new u32 [rvidFrames];
948+ fread (compressedFrameSizes32, 4 , rvidFrames, rvid[0 ]);
949+ } else {
950+ compressedFrameSizes16 = new u16 [rvidFrames];
951+ fread (compressedFrameSizes16, 2 , rvidFrames, rvid[0 ]);
952+ }
935953 }
936954 }
955+
937956 rvidPreviousOffset = 0 ;
938957 rvidCurrentOffset = 0 ;
939958 // fseek(rvid[0], frameOffsets[0], SEEK_SET);
0 commit comments