add passthru mode option

This commit is contained in:
marqs 2024-05-25 11:16:16 +03:00
parent 88026cafa2
commit 46a4f4450f
4 changed files with 22 additions and 3 deletions

View File

@ -89,6 +89,7 @@ typedef struct {
alt_u8 pm_480i;
alt_u8 pm_480p;
alt_u8 pm_1080i;
alt_u8 pt_mode;
alt_u8 l2_mode;
alt_u8 l3_mode;
alt_u8 l4_mode;

View File

@ -24,10 +24,10 @@
#include "sysconfig.h"
#define FW_VER_MAJOR 1
#define FW_VER_MINOR 9
#define FW_VER_MINOR 10
#define PROFILE_VER_MAJOR 1
#define PROFILE_VER_MINOR 6
#define PROFILE_VER_MINOR 10
#define INITCFG_VER_MAJOR 1
#define INITCFG_VER_MINOR 0

View File

@ -55,6 +55,7 @@ static const char *s480p_mode_desc[] = { LNG("Auto","オート"), "DTV 480p", "V
static const char *s400p_mode_desc[] = { "VGA 640x400@70", "VGA 720x400@70" };
static const char *sync_lpf_desc[] = { LNG("2.5MHz (max)","2.5MHz (サイダイ)"), LNG("10MHz (med)","10MHz (チュウイ)"), LNG("33MHz (min)","33MHz (サイショウ)"), LNG("Off","オフ") };
static const char *stc_lpf_desc[] = { "4.8MHz (HDTV/PC)", "0.5MHz (SDTV)", "1.7MHz (EDTV)" };
static const char *pt_mode_desc[] = {"Normal", "High samplerate", LNG("512x240 optim.","512x240 サイテキカ."), LNG("384x240 optim.","384x240 サイテキカ."), LNG("320x240 optim.","320x240 サイテキカ."), LNG("256x240 optim.","256x240 サイテキカ.") };
static const char *l3_mode_desc[] = { LNG("Generic 16:9","ジェネリック 16:9"), LNG("Generic 4:3","ジェネリック 4:3"), LNG("512x240 optim.","512x240 サイテキカ."), LNG("384x240 optim.","384x240 サイテキカ."), LNG("320x240 optim.","320x240 サイテキカ."), LNG("256x240 optim.","256x240 サイテキカ.") };
static const char *l2l4l5l6_mode_desc[] = { LNG("Generic 4:3","ジェネリック 4:3"), LNG("512x240 optim.","512x240 サイテキカ."), LNG("384x240 optim.","384x240 サイテキカ."), LNG("320x240 optim.","320x240 サイテキカ."), LNG("256x240 optim.","256x240 サイテキカ.") };
static const char *l5_fmt_desc[] = { "1920x1080", "1600x1200", "1920x1200" };
@ -178,6 +179,7 @@ MENU(menu_output, P99_PROTECT({ \
{ LNG("480i/576i proc","480i/576iショリ"), OPT_AVCONFIG_SELECTION, { .sel = { &tc.pm_480i, OPT_WRAP, SETTING_ITEM(pm_480i_desc) } } },
{ LNG("480p/576p proc","480p/576pショリ"), OPT_AVCONFIG_SELECTION, { .sel = { &tc.pm_480p, OPT_WRAP, SETTING_ITEM(pm_480p_desc) } } },
{ LNG("960i/1080i proc","960i/1080iショリ"), OPT_AVCONFIG_SELECTION, { .sel = { &tc.pm_1080i, OPT_WRAP, SETTING_ITEM(pm_1080i_desc) } } },
{ "Passthru mode", OPT_AVCONFIG_SELECTION, { .sel = { &tc.pt_mode, OPT_WRAP, SETTING_ITEM(pt_mode_desc) } } },
{ LNG("Line2x mode","Line2xモード"), OPT_AVCONFIG_SELECTION, { .sel = { &tc.l2_mode, OPT_WRAP, SETTING_ITEM(l2l4l5l6_mode_desc) } } },
{ LNG("Line3x mode","Line3xモード"), OPT_AVCONFIG_SELECTION, { .sel = { &tc.l3_mode, OPT_WRAP, SETTING_ITEM(l3_mode_desc) } } },
{ LNG("Line4x mode","Line4xモード"), OPT_AVCONFIG_SELECTION, { .sel = { &tc.l4_mode, OPT_WRAP, SETTING_ITEM(l2l4l5l6_mode_desc) } } },

View File

@ -135,7 +135,12 @@ int get_pure_lm_mode(avconfig_t *cc, mode_data_t *vm_in, mode_data_t *vm_out, vm
{
int i, diff_lines, diff_v_hz_x100, mindiff_id=0, mindiff_lines=1000, mindiff_v_hz_x100=10000;
mode_data_t *mode_preset;
mode_flags valid_lm[] = { MODE_PT, (MODE_L2 | (MODE_L2<<cc->l2_mode)), (MODE_L3_GEN_16_9<<cc->l3_mode), (MODE_L4_GEN_4_3<<cc->l4_mode), (MODE_L5_GEN_4_3<<cc->l5_mode), (MODE_L6_GEN_4_3<<cc->l6_mode) };
mode_flags valid_lm[] = { (MODE_PT | (cc->pt_mode ? (MODE_L5_GEN_4_3<<(cc->pt_mode-1)) : 0)),
(MODE_L2 | (MODE_L2<<cc->l2_mode)),
(MODE_L3_GEN_16_9<<cc->l3_mode),
(MODE_L4_GEN_4_3<<cc->l4_mode),
(MODE_L5_GEN_4_3<<cc->l5_mode),
(MODE_L6_GEN_4_3<<cc->l6_mode) };
mode_flags target_lm, mindiff_lm;
uint8_t pt_only = 0;
uint8_t upsample2x = cc->upsample2x;
@ -243,6 +248,10 @@ int get_pure_lm_mode(avconfig_t *cc, mode_data_t *vm_in, mode_data_t *vm_out, vm
mindiff_lm &= mode_preset->flags; //ensure L2 mode uniqueness
// Set passthru flag for all passthru mode options
if (*group_ptr[mode_preset->group] == 0)
mindiff_lm = MODE_PT;
if (mindiff_lm >= MODE_L6_GEN_4_3)
vm_conf->y_rpt = 5;
else if (mindiff_lm >= MODE_L5_GEN_4_3)
@ -258,6 +267,13 @@ int get_pure_lm_mode(avconfig_t *cc, mode_data_t *vm_in, mode_data_t *vm_out, vm
case MODE_PT:
vm_out->vic = vm_in->vic;
if ((cc->pt_mode == 1) && ((mode_preset->group >= GROUP_384P) && (mode_preset->group <= GROUP_576P))) {
vmode_hv_mult(vm_in, 2, 1);
vmode_hv_mult(vm_out, 2, 1);
} else if ((cc->pt_mode >= 2) && (mode_preset->group >= GROUP_240P) && (mode_preset->group <= GROUP_288P)) {
vm_conf->x_rpt = vm_conf->h_skip = cc->pt_mode;
}
// multiply horizontal resolution if necessary to fulfill min. 25MHz TMDS clock requirement. Tweak infoframe pixel repetition indicator later to make sink treat it as original resolution.
while ((((vm_out->timings.v_hz_x100*vm_out->timings.v_total)/100)*vm_out->timings.h_total*(vm_conf->h_skip+1))>>vm_out->timings.interlaced < 25000000UL) {
vm_conf->x_rpt = vm_conf->h_skip = 2*(vm_conf->h_skip+1)-1;