Skip to content

Commit

Permalink
Refactor vsync indicator, scanlines, scanline level, output colour & …
Browse files Browse the repository at this point in the history
…output invert
  • Loading branch information
IanSB committed Feb 25, 2023
1 parent aef52cb commit 3e2ca4c
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 96 deletions.
10 changes: 5 additions & 5 deletions src/geometry.c
Expand Up @@ -467,7 +467,7 @@ void geometry_get_fb_params(capture_info_t *capinfo) {
if ((capinfo->detected_sync_type & SYNC_BIT_INTERLACED) && capinfo->video_type != VIDEO_PROGRESSIVE) {
capinfo->sizex2 |= SIZEX2_DOUBLE_HEIGHT;
} else {
if (get_scanlines() && !(menu_active() || osd_active())) {
if (get_parameter(F_SCANLINES) && !(menu_active() || osd_active())) {
if ((capinfo->sizex2 & SIZEX2_DOUBLE_HEIGHT) == 0) {
capinfo->sizex2 |= SIZEX2_BASIC_SCANLINES; //flag basic scanlines
}
Expand Down Expand Up @@ -534,7 +534,7 @@ void geometry_get_fb_params(capture_info_t *capinfo) {
capinfo->border = get_border();
} else {
capinfo->border = get_border();
if (get_invert() == INVERT_Y) {
if (get_parameter(F_OUTPUT_INVERT) == INVERT_Y) {
capinfo->border ^= 0x12;
}
}
Expand All @@ -543,10 +543,10 @@ void geometry_get_fb_params(capture_info_t *capinfo) {
}

capinfo->ntscphase = get_adjusted_ntscphase() | (get_ntsccolour() << NTSC_ARTIFACT_SHIFT);
if (get_invert() == INVERT_Y) {
if (get_parameter(F_OUTPUT_INVERT) == INVERT_Y) {
capinfo->ntscphase |= NTSC_Y_INVERT;
}
if (get_invert() == INVERT_RGB) {
if (get_parameter(F_OUTPUT_INVERT) == INVERT_RGB) {
capinfo->ntscphase |= NTSC_RGB_INVERT;
}
if (get_hdmi_standby()) {
Expand Down Expand Up @@ -878,7 +878,7 @@ void geometry_get_fb_params(capture_info_t *capinfo) {
caphscale >>= 1;
}
} else {
if (osd_active() || get_scanlines()) {
if (osd_active() || get_parameter(F_SCANLINES)) {
if (double_width) {
caphscale >>= 1;
}
Expand Down
49 changes: 19 additions & 30 deletions src/osd.c
Expand Up @@ -1161,19 +1161,14 @@ static int get_feature(int num) {
return Pgamma;
case F_TIMING_SET:
return get_timingset();



case F_SCANLINES:
return get_scanlines();
case F_SCANLINE_LEVEL:
return get_scanlines_intensity();
case F_OUTPUT_COLOUR:
return get_colour();
case F_OUTPUT_INVERT:
return get_invert();
case F_VSYNC_INDICATOR:
return get_vsync();



case F_GENLOCK_MODE:
case F_GENLOCK_LINE:
case F_GENLOCK_SPEED:
Expand Down Expand Up @@ -1334,27 +1329,10 @@ static void set_feature(int num, int value) {
case F_TIMING_SET:
set_timingset(value);
break;
case F_SCANLINES:
set_scanlines(value);
break;
case F_SCANLINE_LEVEL:
set_scanlines_intensity(value);
break;
case F_OUTPUT_COLOUR:
set_colour(value);
osd_update_palette();
break;
case F_OUTPUT_INVERT:
set_invert(value);
osd_update_palette();
break;
case F_VSYNC_INDICATOR:
set_vsync(value);
features[F_GENLOCK_MODE].max = (value == 0) ? (NUM_HDMI - 5) : (NUM_HDMI - 1);
break;



case F_SCANLINES:
case F_SCANLINE_LEVEL:
case F_GENLOCK_MODE:
case F_GENLOCK_LINE:
case F_GENLOCK_SPEED:
Expand All @@ -1365,6 +1343,17 @@ static void set_feature(int num, int value) {
case F_INTEGER_ASPECT:
set_parameter(num, value);
break;


case F_OUTPUT_COLOUR:
case F_OUTPUT_INVERT:
set_parameter(num, value);
osd_update_palette();
break;
case F_VSYNC_INDICATOR:
set_parameter(num, value);
features[F_GENLOCK_MODE].max = (value == 0) ? (NUM_HDMI - 5) : (NUM_HDMI - 1);
break;
case F_DEBUG:
set_parameter(num, value);
osd_update_palette();
Expand Down Expand Up @@ -5063,9 +5052,9 @@ int osd_key(int key) {
clear_menu_bits();
osd_set(0, ATTR_DOUBLE_SIZE, "Enable Genlock");
// Record the starting value of vsync
last_vsync = get_vsync();
last_vsync = get_parameter(F_VSYNC_INDICATOR);
// Enable vsync
set_vsync(1);
set_parameter(F_VSYNC_INDICATOR, 1);
// Do the actual clock calibration
if (!is_genlocked()) {
action_calibrate_clocks();
Expand Down Expand Up @@ -5204,7 +5193,7 @@ int osd_key(int key) {

case CLOCK_CAL1:
// Restore the original setting of vsync
set_vsync(last_vsync);
set_parameter(F_VSYNC_INDICATOR, last_vsync);
osd_clear();
// back to CLOCK_IDLE
osd_state = IDLE;
Expand Down
72 changes: 21 additions & 51 deletions src/rgb_to_hdmi.c
Expand Up @@ -224,15 +224,10 @@ static int ntscphase = 0;
static int ntsctype = 0;
static int ntscfringe = 0;
static int ffosd = 0;
static int scanlines = 0;
static int scanlines_intensity = 0;
static int colour = 0;
static int invert = 0;
static int fontsize = 0;
static int m7deinterlace = 6;
static int deinterlace = 0;
static int ntsccolour = 0;
static int vsync = 0;
static int lines_per_2_vsyncs = 0;
static int lines_per_vsync = 0;
static int one_line_time_ns = 0;
Expand Down Expand Up @@ -1984,7 +1979,7 @@ int extra_flags() {
if (parameters[F_AUTO_SWITCH] != AUTOSWITCH_MODE7) {
extra |= BIT_NO_H_SCROLL;
}
if (!scanlines || ((capinfo->sizex2 & SIZEX2_DOUBLE_HEIGHT) == 0) || (capinfo->mode7) || osd_active()) {
if (!parameters[F_SCANLINES] || ((capinfo->sizex2 & SIZEX2_DOUBLE_HEIGHT) == 0) || (capinfo->mode7) || osd_active()) {
extra |= BIT_NO_SCANLINES;
}
if (osd_active()) {
Expand Down Expand Up @@ -2888,42 +2883,6 @@ int get_ffosd() {
return ffosd;
}

void set_scanlines(int on) {
scanlines = on;
clear = BIT_CLEAR;
}

int get_scanlines() {
return scanlines;
}

void set_scanlines_intensity(int value) {
scanlines_intensity = value;
}

int get_scanlines_intensity() {
if ((geometry_get_value(FB_SIZEX2) & 1) == 0) {
return 0; // returns 0 depending on state of double height
} else {
return scanlines_intensity;
}
}

void set_colour(int val) {
colour = val;
}

int get_colour() {
return colour;
}

void set_invert(int value) {
invert =value;
}

int get_invert() {
return invert;
}

void set_fontsize(int value) {
fontsize=value;
Expand Down Expand Up @@ -2991,13 +2950,7 @@ int get_timingset(){
return timingset;
}

void set_vsync(int on) {
vsync = on;
}

int get_vsync() {
return vsync;
}

int get_core_1_available() {
return core_1_available;
Expand All @@ -3023,6 +2976,18 @@ int get_50hz_state() {
int get_parameter(int parameter) {
switch (parameter) {
//space for special case handling


case F_SCANLINE_LEVEL:
{
if ((geometry_get_value(FB_SIZEX2) & 1) == 0) {
return 0; // returns 0 depending on state of double height
} else {
return parameters[parameter];
}
}
break;

default:
return parameters[parameter];
break;
Expand All @@ -3033,6 +2998,12 @@ void set_parameter(int parameter, int value) {
switch (parameter) {
//space for special case handling

case F_SCANLINES:
{
parameters[parameter] = value;
clear = BIT_CLEAR;
}
break;

case F_GENLOCK_MODE:
case F_GENLOCK_LINE:
Expand Down Expand Up @@ -3075,7 +3046,6 @@ void set_parameter(int parameter, int value) {
}
break;


default:
parameters[parameter] = value;
break;
Expand Down Expand Up @@ -3454,7 +3424,7 @@ geometry_get_fb_params(capinfo);

int flags = extra_flags() | clear;

if (vsync) {
if (parameters[F_VSYNC_INDICATOR]) {
flags |= BIT_VSYNC;
}
if (parameters[F_DEBUG]) {
Expand Down Expand Up @@ -3537,7 +3507,7 @@ geometry_get_fb_params(capinfo);
}
}
}
capinfo->intensity = scanlines_intensity;
capinfo->intensity = parameters[F_SCANLINE_LEVEL];

log_debug("Entering rgb_to_fb, flags=%08x", flags);
result = rgb_to_fb(capinfo, flags);
Expand Down
13 changes: 3 additions & 10 deletions src/rgb_to_hdmi.h
Expand Up @@ -35,16 +35,10 @@ void set_deinterlace(int value);
int get_deinterlace();
void set_ffosd(int value);
int get_ffosd();
void set_scanlines(int on);
int get_scanlines();

void set_ntsccolour(int value);
int get_ntsccolour();
void set_scanlines_intensity(int value);
int get_scanlines_intensity();
void set_colour(int value);
int get_colour();
void set_invert(int value);
int get_invert();

void set_ntscphase(int value);
int get_ntscphase();
void set_ntsctype(int value);
Expand All @@ -58,8 +52,7 @@ void set_timingset(int value);
int get_timingset();
void set_fontsize(int value);
int get_fontsize();
void set_vsync(int on);
int get_vsync();



int get_lines_per_vsync();
Expand Down

0 comments on commit 3e2ca4c

Please sign in to comment.