Skip to content

Commit 7b2d150

Browse files
committed
video: merging with extrems work
(cherry picked from commit a988ad6)
1 parent 4c424a1 commit 7b2d150

File tree

2 files changed

+78
-38
lines changed

2 files changed

+78
-38
lines changed

gc/ogc/video.h

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,24 @@ void VIDEO_Flush(void);
8787
*/
8888
void VIDEO_SetBlack(bool black);
8989

90+
/*!
91+
* \fn void VIDEO_Set3D(bool enable3d)
92+
* \brief control the 3D bits in video
93+
*
94+
* \param[in] Boolean to indicate to enable 3D or not
95+
*
96+
* \return none
97+
*/
98+
void VIDEO_Set3D(bool enable3d);
99+
100+
/*!
101+
* \fn u32 VIDEO_GetRetraceCount(void)
102+
* \brief Get current retrace count
103+
*
104+
* \return retracecount
105+
*/
106+
u32 VIDEO_GetRetraceCount(void);
107+
90108

91109
/*!
92110
* \fn u32 VIDEO_GetNextField(void)
@@ -116,14 +134,16 @@ u32 VIDEO_GetCurrentTvMode(void);
116134

117135

118136
/*!
119-
* \fn void VIDEO_Configure(GXRModeObj *rmode)
137+
* \fn void VIDEO_Configure(const GXRModeObj *rmode)
120138
* \brief Configure the VI with the given render mode object
121139
*
122140
* \param[in] rmode pointer to the video/render mode \ref gxrmode_obj "configuration".
123141
*
124142
* \return none
125143
*/
126-
void VIDEO_Configure(GXRModeObj *rmode);
144+
void VIDEO_Configure(const GXRModeObj *rmode);
145+
146+
void VIDEO_ConfigurePan(u16 xOrg,u16 yOrg,u16 width,u16 height);
127147

128148
u32 VIDEO_GetFrameBufferSize(GXRModeObj *rmode);
129149

libogc/video.c

Lines changed: 56 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -2365,7 +2365,7 @@ static inline u32 __VISetRegs(void)
23652365
u64 mask;
23662366

23672367
if(shdw_changeMode==1){
2368-
if(!__getCurrentFieldEvenOdd()) return 0;
2368+
if(__getCurrentHalfLine()) return 0;
23692369
}
23702370

23712371
while(shdw_changed) {
@@ -2628,7 +2628,7 @@ void VIDEO_Init(void)
26282628
_CPU_ISR_Restore(level);
26292629
}
26302630

2631-
void VIDEO_Configure(GXRModeObj *rmode)
2631+
void VIDEO_Configure(const GXRModeObj *rmode)
26322632
{
26332633
u16 dcr;
26342634
u32 nonint,vimode,level;
@@ -2826,10 +2826,27 @@ void VIDEO_SetBlack(bool black)
28262826
_CPU_ISR_Disable(level);
28272827
HorVer.black = black;
28282828
curtiming = HorVer.timing;
2829-
__setVerticalRegs(HorVer.adjustedDispPosY,HorVer.dispSizeY,curtiming->equ,curtiming->acv,curtiming->prbOdd,curtiming->prbEven,curtiming->psbOdd,curtiming->psbEven,HorVer.black);
2829+
__setVerticalRegs(HorVer.adjustedDispPosY,HorVer.adjustedDispSizeY,curtiming->equ,curtiming->acv,curtiming->prbOdd,curtiming->prbEven,curtiming->psbOdd,curtiming->psbEven,HorVer.black);
2830+
_CPU_ISR_Restore(level);
2831+
}
2832+
2833+
void VIDEO_Set3D(bool enable3d)
2834+
{
2835+
u32 level;
2836+
2837+
_CPU_ISR_Disable(level);
2838+
HorVer.threeD = enable3d;
2839+
regs[1] = (regs[1]&~0x0008)|(_SHIFTL(enable3d,3,1));
2840+
changed |= VI_REGCHANGE(1);
2841+
__setScalingRegs(HorVer.panSizeX,HorVer.dispSizeX,HorVer.threeD);
28302842
_CPU_ISR_Restore(level);
28312843
}
28322844

2845+
u32 VIDEO_GetRetraceCount(void)
2846+
{
2847+
return retraceCount;
2848+
}
2849+
28332850
u32 VIDEO_GetNextField(void)
28342851
{
28352852
u32 level,nextfield;
@@ -2866,67 +2883,61 @@ GXRModeObj *rmode = NULL;
28662883
u32 tvmode = CONF_GetVideo();
28672884
if (CONF_GetProgressiveScan() > 0 && VIDEO_HaveComponentCable()) {
28682885
switch (tvmode) {
2869-
case CONF_VIDEO_NTSC:
2870-
rmode = &TVNtsc480Prog;
2871-
break;
28722886
case CONF_VIDEO_PAL:
2873-
if (CONF_GetEuRGB60() > 0)
2874-
rmode = &TVEurgb60Hz480Prog;
2875-
else rmode = &TVPal576ProgScale;
2887+
rmode = CONF_GetEuRGB60() > 0 ? &TVEurgb60Hz480Prog : &TVPal576ProgScale;
28762888
break;
2889+
//GCVideo-DVI might misbehave with MPAL, thinking its PAL50.
2890+
//removing this case fixes that, but then we loose the specific timings/config
28772891
case CONF_VIDEO_MPAL:
28782892
rmode = &TVMpal480Prog;
28792893
break;
28802894
default:
2895+
case CONF_VIDEO_NTSC:
28812896
rmode = &TVNtsc480Prog;
2897+
break;
28822898
}
28832899
} else {
28842900
switch (tvmode) {
2885-
case CONF_VIDEO_NTSC:
2886-
rmode = &TVNtsc480IntDf;
2887-
break;
28882901
case CONF_VIDEO_PAL:
2889-
if (CONF_GetEuRGB60() > 0)
2890-
rmode = &TVEurgb60Hz480IntDf;
2891-
else rmode = &TVPal576IntDfScale;
2902+
rmode = CONF_GetEuRGB60() > 0 ? &TVEurgb60Hz480IntDf : &TVPal576IntDfScale;
28922903
break;
28932904
case CONF_VIDEO_MPAL:
2894-
rmode = &TVMpal480IntDf;
2905+
rmode = VIDEO_HaveComponentCable() > 0 ? &TVNtsc480IntDf : &TVMpal480IntDf;
28952906
break;
28962907
default:
2908+
case CONF_VIDEO_NTSC:
28972909
rmode = &TVNtsc480IntDf;
2910+
break;
28982911
}
28992912
}
29002913
#else
2901-
u32 tvmode = VIDEO_GetCurrentTvMode();
2902-
if (VIDEO_HaveComponentCable()) {
2914+
u32 tvmode = SYS_GetVideoMode();
2915+
if (SYS_GetProgressiveScan() && VIDEO_HaveComponentCable()) {
29032916
switch (tvmode) {
2904-
case VI_NTSC:
2905-
rmode = &TVNtsc480Prog;
2906-
break;
2907-
case VI_PAL:
2908-
rmode = &TVPal576ProgScale;
2917+
case SYS_VIDEO_PAL:
2918+
rmode = SYS_GetEuRGB60() ? &TVEurgb60Hz480Prog : &TVPal576ProgScale;
29092919
break;
2910-
case VI_MPAL:
2920+
//GCVideo-DVI might misbehave with MPAL, thinking its PAL50.
2921+
//removing this case fixes that, but then we loose the specific timings/config
2922+
case SYS_VIDEO_MPAL:
29112923
rmode = &TVMpal480Prog;
29122924
break;
2913-
case VI_EURGB60:
2914-
rmode = &TVEurgb60Hz480Prog;
2925+
default:
2926+
case SYS_VIDEO_NTSC:
2927+
rmode = &TVNtsc480Prog;
29152928
break;
29162929
}
29172930
} else {
29182931
switch (tvmode) {
2919-
case VI_NTSC:
2920-
rmode = &TVNtsc480IntDf;
2921-
break;
2922-
case VI_PAL:
2923-
rmode = &TVPal576IntDfScale;
2932+
case SYS_VIDEO_PAL:
2933+
rmode = SYS_GetEuRGB60() > 0 ? &TVEurgb60Hz480IntDf : &TVPal576IntDfScale;
29242934
break;
2925-
case VI_MPAL:
2926-
rmode = &TVMpal480IntDf;
2935+
case SYS_VIDEO_MPAL:
2936+
rmode = VIDEO_HaveComponentCable() > 0 ? &TVNtsc480IntDf : &TVMpal480IntDf;
29272937
break;
2928-
case VI_EURGB60:
2929-
rmode = &TVEurgb60Hz480IntDf;
2938+
default:
2939+
case SYS_VIDEO_NTSC:
2940+
rmode = &TVNtsc480IntDf;
29302941
break;
29312942
}
29322943
}
@@ -2998,7 +3009,16 @@ void VIDEO_ClearFrameBuffer(GXRModeObj *rmode,void *fb,u32 color)
29983009

29993010
u32 VIDEO_HaveComponentCable(void)
30003011
{
3001-
return (_viReg[55]&0x01);
3012+
u32 dtv,level;
3013+
_CPU_ISR_Disable(level);
3014+
3015+
dtv = (_viReg[55]&0x0001);
3016+
#if defined(HW_DOL)
3017+
dtv |= (_viReg[54]&0x0001);
3018+
#endif
3019+
3020+
_CPU_ISR_Restore(level);
3021+
return dtv;
30023022
}
30033023

30043024
u32 VIDEO_GetVideoScanMode(void)

0 commit comments

Comments
 (0)