Genlock improvements & bug fixes

pull/45/head
IanSB 2019-03-11 15:53:08 +00:00
rodzic a7ee6fc323
commit e93500e83a
2 zmienionych plików z 14 dodań i 10 usunięć

Wyświetl plik

@ -133,7 +133,7 @@ static param_t features[] = {
{ F_MUX, "Input Mux", 0, 1, 1 }, { F_MUX, "Input Mux", 0, 1, 1 },
{ F_VSYNC, "VSync Indicator", 0, 1, 1 }, { F_VSYNC, "VSync Indicator", 0, 1, 1 },
{ F_VLOCKMODE, "VLock Mode", 0, 5, 1 }, { F_VLOCKMODE, "VLock Mode", 0, 5, 1 },
{ F_VLOCKLINE, "VLock Line", 5, 265, 1 }, { F_VLOCKLINE, "VLock Line", 0, 265, 1 },
#ifdef MULTI_BUFFER #ifdef MULTI_BUFFER
{ F_NBUFFERS, "Num Buffers", 0, 3, 1 }, { F_NBUFFERS, "Num Buffers", 0, 3, 1 },
#endif #endif

Wyświetl plik

@ -79,12 +79,12 @@ static int elk = 0;
static int debug = 0; static int debug = 0;
static int m7disable = 0; static int m7disable = 0;
static int scanlines = 0; static int scanlines = 0;
static int deinterlace = 0; static int deinterlace = 6;
static int vsync = 0; static int vsync = 0;
static int vlockmode = 0; static int vlockmode = 3;
static int vlockline = 5; static int vlockline = 5;
#ifdef MULTI_BUFFER #ifdef MULTI_BUFFER
static int nbuffers = 2; static int nbuffers = 0;
#endif #endif
static int current_vlockmode = -1; static int current_vlockmode = -1;
@ -550,8 +550,8 @@ int recalculate_hdmi_clock_line_locked_update() {
resync_count = 0; resync_count = 0;
recalculate_hdmi_clock_once(vlockmode); recalculate_hdmi_clock_once(vlockmode);
} else { } else {
signed int difference = vsync_line - vlockline; signed int difference = vsync_line - ((capinfo->height >> capinfo->heightx2) - vlockline);
if (abs(difference) > capinfo->height/4) { if (abs(difference) > (capinfo->height >> capinfo->heightx2)/2) {
difference = -difference; difference = -difference;
} }
if (genlocked == 1 && abs(difference) > 2) { if (genlocked == 1 && abs(difference) > 2) {
@ -1232,10 +1232,10 @@ int get_vlockmode() {
void set_vlockline(int val) { void set_vlockline(int val) {
genlocked = 0; genlocked = 0;
vlockline = val; vlockline = val;
if (vlockline > capinfo->height/4) { if (vlockline > (capinfo->height >> capinfo->heightx2)/2) {
default_vsync_line = 1; default_vsync_line = 0;
} else { } else {
default_vsync_line = capinfo->height/2; default_vsync_line = (capinfo->height >> capinfo->heightx2);
} }
} }
@ -1384,7 +1384,11 @@ void rgb_to_hdmi_main() {
flags |= deinterlace << OFFSET_INTERLACE; flags |= deinterlace << OFFSET_INTERLACE;
#ifdef MULTI_BUFFER #ifdef MULTI_BUFFER
flags |= nbuffers << OFFSET_NBUFFERS; if (!mode7 && osd_active() && (nbuffers == 0)) {
flags |= (nbuffers + 1) << OFFSET_NBUFFERS;
} else {
flags |= nbuffers << OFFSET_NBUFFERS;
}
#endif #endif
capinfo->ncapture = ncapture; capinfo->ncapture = ncapture;