Skip to content

Commit 46b47a0

Browse files
authored
Add VIDEO_GetVideoScanMode & fix the __ViInit loop (#144)
* fixes: make compiler not remove the while loop by adding empty asm line * video : add VIDEO_GetVideoScanMode
1 parent a7e4bcd commit 46b47a0

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

gc/ogc/video.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,14 @@ u32 VIDEO_HaveComponentCable(void);
199199

200200
GXRModeObj * VIDEO_GetPreferredMode(GXRModeObj *mode);
201201

202+
/*!
203+
* \fn u32 VIDEO_GetVideoScanMode(void)
204+
* \brief Get video scan mode. This function returns 0 when interlaced, 1 when non interlaced and 2 when progressive
205+
*
206+
* \return 0 when interlaced, 1 when non interlaced and 2 when progressive
207+
*/
208+
u32 VIDEO_GetVideoScanMode(void);
209+
202210
#ifdef __cplusplus
203211
}
204212
#endif /* __cplusplus */

libogc/video.c

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2090,7 +2090,12 @@ static void __VIInit(u32 vimode)
20902090
//reset the interface
20912091
cnt = 0;
20922092
_viReg[1] = 0x02;
2093-
while(cnt<1000) cnt++;
2093+
while(cnt<1000)
2094+
{
2095+
__asm__ __volatile__ ("" ::: "memory");
2096+
cnt++;
2097+
}
2098+
20942099
_viReg[1] = 0x00;
20952100

20962101
// now begin to setup the interface
@@ -2958,3 +2963,20 @@ u32 VIDEO_HaveComponentCable(void)
29582963
{
29592964
return (_viReg[55]&0x01);
29602965
}
2966+
2967+
u32 VIDEO_GetVideoScanMode(void)
2968+
{
2969+
u32 level;
2970+
u32 mode;
2971+
2972+
_CPU_ISR_Disable(level);
2973+
2974+
// Check Clock Select Register for progressive clock
2975+
if (_viReg[54] & 1)
2976+
mode = VI_PROGRESSIVE;
2977+
else
2978+
mode = (_viReg[1] >> 2 & 1) ? VI_NON_INTERLACE : VI_INTERLACE;
2979+
2980+
_CPU_ISR_Restore(level);
2981+
return mode;
2982+
}

0 commit comments

Comments
 (0)