mirror of
https://github.com/marqs85/ossc
synced 2025-04-09 22:56:34 +03:00
add passthru mode option
This commit is contained in:
parent
88026cafa2
commit
46a4f4450f
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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) } } },
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user