mirror of
https://github.com/marqs85/ossc
synced 2025-12-15 21:46:07 +03:00
add Line2x pillarbox option
This commit is contained in:
parent
32af38e252
commit
8c0a0c181d
@ -153,7 +153,7 @@ set_interface_property osd_if CMSIS_SVD_VARIABLES ""
|
||||
set_interface_property osd_if SVD_ADDRESS_GROUP ""
|
||||
|
||||
add_interface_port osd_if vclk vclk Input 1
|
||||
add_interface_port osd_if xpos xpos Input 11
|
||||
add_interface_port osd_if xpos xpos Input 12
|
||||
add_interface_port osd_if ypos ypos Input 11
|
||||
add_interface_port osd_if osd_enable osd_enable Output 1
|
||||
add_interface_port osd_if osd_color osd_color Output 3
|
||||
|
||||
@ -32,7 +32,7 @@ module osd_generator_top (
|
||||
output avalon_s_waitrequest_n,
|
||||
// OSD interface
|
||||
input vclk,
|
||||
input [10:0] xpos,
|
||||
input [11:0] xpos,
|
||||
input [10:0] ypos,
|
||||
output reg osd_enable,
|
||||
output reg [2:0] osd_color
|
||||
@ -56,7 +56,7 @@ localparam OSD_ROW_COLOR_REGNUM = 8'hf3;
|
||||
reg [31:0] osd_config;
|
||||
reg [31:0] config_reg[OSD_ROW_LSEC_ENABLE_REGNUM:OSD_ROW_COLOR_REGNUM] /* synthesis ramstyle = "logic" */;
|
||||
|
||||
reg [10:0] xpos_osd_area_scaled, xpos_text_scaled;
|
||||
reg [11:0] xpos_osd_area_scaled, xpos_text_scaled;
|
||||
reg [10:0] ypos_osd_area_scaled, ypos_text_scaled;
|
||||
reg [7:0] x_ptr[2:5], y_ptr[2:5] /* synthesis ramstyle = "logic" */;
|
||||
reg osd_text_act_lsec_x_hit, osd_text_act_lsec_en, osd_text_act_rsec_x_hit, osd_text_act_rsec_en, osd_text_act_y_hit;
|
||||
@ -76,7 +76,7 @@ wire [1:0] y_size = osd_config[14:13];
|
||||
wire [2:0] border_color = osd_config[17:15];
|
||||
wire [2:0] highlight_color = osd_config[20:18];
|
||||
|
||||
wire [10:0] xpos_scaled_w = (xpos >> x_size)-({3'h0, x_offset} << 3);
|
||||
wire [11:0] xpos_scaled_w = (xpos >> x_size)-({3'h0, x_offset} << 3);
|
||||
wire [10:0] ypos_scaled_w = (ypos >> y_size)-({3'h0, y_offset} << 3);
|
||||
wire [7:0] rom_rdaddr;
|
||||
wire [0:7] char_data[7:0];
|
||||
|
||||
@ -140,7 +140,7 @@ wire lcd_bl_timeout;
|
||||
wire [2:0] osd_color;
|
||||
wire osd_enable_pre;
|
||||
wire osd_enable = osd_enable_pre & ~lt_active;
|
||||
wire [10:0] xpos_sc;
|
||||
wire [11:0] xpos_sc;
|
||||
wire [10:0] ypos_sc;
|
||||
wire [3:0] x_ctr_shmask, y_ctr_shmask;
|
||||
wire [10:0] shmask_data;
|
||||
|
||||
@ -930,7 +930,9 @@ void print_vm_stats() {
|
||||
sniprintf((char*)osd->osd_array.data[++row][0], OSD_CHAR_COLS, "Profile:");
|
||||
sniprintf((char*)osd->osd_array.data[row][1], OSD_CHAR_COLS, "%u: %s", profile_sel, (target_profile_name[0] == 0) ? "<empty>" : target_profile_name);
|
||||
sniprintf((char*)osd->osd_array.data[++row][0], OSD_CHAR_COLS, "FW:");
|
||||
sniprintf((char*)osd->osd_array.data[row][1], OSD_CHAR_COLS, "%u.%.2u" FW_SUFFIX " @ " __DATE__, FW_VER_MAJOR, FW_VER_MINOR);
|
||||
sniprintf((char*)osd->osd_array.data[row][1], OSD_CHAR_COLS, "%u.%.2u" FW_SUFFIX, FW_VER_MAJOR, FW_VER_MINOR);
|
||||
sniprintf((char*)osd->osd_array.data[++row][0], OSD_CHAR_COLS, "FW date:");
|
||||
sniprintf((char*)osd->osd_array.data[row][1], OSD_CHAR_COLS, __DATE__);
|
||||
|
||||
osd->osd_config.status_refresh = 1;
|
||||
osd->osd_row_color.mask = 0;
|
||||
|
||||
@ -106,6 +106,7 @@ typedef struct {
|
||||
alt_u8 adc_pll_bw;
|
||||
alt_u8 fpga_pll_bw;
|
||||
alt_u8 panasonic_hack;
|
||||
alt_u8 o480p_pbox;
|
||||
|
||||
/* Postprocessing settings */
|
||||
alt_u8 sl_mode;
|
||||
|
||||
@ -28,14 +28,14 @@
|
||||
#define DEF_PHASE 0x10
|
||||
|
||||
#define H_TOTAL_MIN 300
|
||||
#define H_TOTAL_MAX 2800
|
||||
#define H_TOTAL_MAX 3200
|
||||
#define H_TOTAL_ADJ_MAX 19
|
||||
#define H_SYNCLEN_MIN 10
|
||||
#define H_SYNCLEN_MAX 255
|
||||
#define H_BPORCH_MIN 0
|
||||
#define H_BPORCH_MAX 511
|
||||
#define H_ACTIVE_MIN 200
|
||||
#define H_ACTIVE_MAX 2560
|
||||
#define H_ACTIVE_MAX 3000
|
||||
#define H_ACTIVE_SMP_MAX 2048
|
||||
#define V_SYNCLEN_MIN 1
|
||||
#define V_SYNCLEN_MAX 15
|
||||
|
||||
@ -156,7 +156,7 @@ MENU(menu_cust_sl, P99_PROTECT({ \
|
||||
}))
|
||||
|
||||
|
||||
MENU(menu_vinputproc, P99_PROTECT({ \
|
||||
MENU(menu_vinput_opt, P99_PROTECT({ \
|
||||
{ LNG("Video LPF","ビデオ LPF"), OPT_AVCONFIG_SELECTION, { .sel = { &tc.video_lpf, OPT_WRAP, SETTING_ITEM(video_lpf_desc) } } },
|
||||
{ LNG("Reverse LPF","ギャクLPF"), OPT_AVCONFIG_NUMVALUE, { .num = { &tc.reverse_lpf, OPT_NOWRAP, 0, REVERSE_LPF_MAX, value_disp } } },
|
||||
{ LNG("YPbPr in ColSpa","イロクウカンニYPbPr"), OPT_AVCONFIG_SELECTION, { .sel = { &tc.ypbpr_cs, OPT_WRAP, SETTING_ITEM(ypbpr_cs_desc) } } },
|
||||
@ -175,13 +175,6 @@ MENU(menu_vinputproc, P99_PROTECT({ \
|
||||
{ "<Custom Lc-set>", OPT_CUSTOMMENU, { .cstm = { &cstm_lc_palette_set_load } } },
|
||||
}))
|
||||
|
||||
MENU(menu_sampling, P99_PROTECT({ \
|
||||
{ LNG("480p in sampler","サンプラーデ480p"), OPT_AVCONFIG_SELECTION, { .sel = { &tc.s480p_mode, OPT_WRAP, SETTING_ITEM(s480p_mode_desc) } } },
|
||||
{ LNG("400p in sampler","サンプラーデ400p"), OPT_AVCONFIG_SELECTION, { .sel = { &tc.s400p_mode, OPT_WRAP, SETTING_ITEM(s400p_mode_desc) } } },
|
||||
{ LNG("Allow upsample2x","アップサンプル2xキョヨウ"), OPT_AVCONFIG_SELECTION, { .sel = { &tc.upsample2x, OPT_WRAP, SETTING_ITEM(off_on_desc) } } },
|
||||
{ LNG("<Adv. timing >","<カクシュタイミング>"), OPT_SUBMENU, { .sub = { &menu_advtiming, &vm_arg_info, vm_select } } },
|
||||
}))
|
||||
|
||||
MENU(menu_sync, P99_PROTECT({ \
|
||||
{ LNG("Analog sync LPF","アナログドウキ LPF"), OPT_AVCONFIG_SELECTION, { .sel = { &tc.sync_lpf, OPT_WRAP, SETTING_ITEM(sync_lpf_desc) } } },
|
||||
{ "Analog STC LPF", OPT_AVCONFIG_SELECTION, { .sel = { &tc.stc_lpf, OPT_WRAP, SETTING_ITEM(stc_lpf_desc) } } },
|
||||
@ -194,7 +187,7 @@ MENU(menu_sync, P99_PROTECT({ \
|
||||
{ "FPGA PLL BW", OPT_AVCONFIG_SELECTION, { .sel = { &tc.fpga_pll_bw, OPT_WRAP, SETTING_ITEM(fpga_pll_bw_desc) } } },
|
||||
}))
|
||||
|
||||
MENU(menu_output, P99_PROTECT({ \
|
||||
MENU(menu_lm, P99_PROTECT({ \
|
||||
{ LNG("240p/288p proc","240p/288pショリ"), OPT_AVCONFIG_SELECTION, { .sel = { &tc.pm_240p, OPT_WRAP, SETTING_ITEM(pm_240p_desc) } } },
|
||||
{ LNG("384p/400p proc","384p/400pショリ"), OPT_AVCONFIG_SELECTION, { .sel = { &tc.pm_384p, OPT_WRAP, SETTING_ITEM(pm_384p_desc) } } },
|
||||
{ LNG("480i/576i proc","480i/576iショリ"), OPT_AVCONFIG_SELECTION, { .sel = { &tc.pm_480i, OPT_WRAP, SETTING_ITEM(pm_480i_desc) } } },
|
||||
@ -208,10 +201,18 @@ MENU(menu_output, P99_PROTECT({ \
|
||||
{ LNG("Line6x mode","Line6xモード"), OPT_AVCONFIG_SELECTION, { .sel = { &tc.l6_mode, OPT_WRAP, SETTING_ITEM(l2l4l5l6_mode_desc) } } },
|
||||
{ LNG("Line5x format","Line5xケイシキ"), OPT_AVCONFIG_SELECTION, { .sel = { &tc.l5_fmt, OPT_WRAP, SETTING_ITEM(l5_fmt_desc) } } },
|
||||
{ LNG("256x240 aspect","256x240アスペクト"), OPT_AVCONFIG_SELECTION, { .sel = { &tc.ar_256col, OPT_WRAP, SETTING_ITEM(ar_256col_desc) } } },
|
||||
{ LNG("480p in sampler","サンプラーデ480p"), OPT_AVCONFIG_SELECTION, { .sel = { &tc.s480p_mode, OPT_WRAP, SETTING_ITEM(s480p_mode_desc) } } },
|
||||
{ LNG("400p in sampler","サンプラーデ400p"), OPT_AVCONFIG_SELECTION, { .sel = { &tc.s400p_mode, OPT_WRAP, SETTING_ITEM(s400p_mode_desc) } } },
|
||||
{ LNG("Allow upsample2x","アップサンプル2xキョヨウ"), OPT_AVCONFIG_SELECTION, { .sel = { &tc.upsample2x, OPT_WRAP, SETTING_ITEM(off_on_desc) } } },
|
||||
{ LNG("<Adv. timing >","<カクシュタイミング>"), OPT_SUBMENU, { .sub = { &menu_advtiming, &vm_arg_info, vm_select } } },
|
||||
}))
|
||||
|
||||
MENU(menu_output, P99_PROTECT({ \
|
||||
{ LNG("TX mode","TXモード"), OPT_AVCONFIG_SELECTION, { .sel = { &tc.tx_mode, OPT_WRAP, SETTING_ITEM(tx_mode_desc) } } },
|
||||
{ "HDMI ITC", OPT_AVCONFIG_SELECTION, { .sel = { &tc.hdmi_itc, OPT_WRAP, SETTING_ITEM(off_on_desc) } } },
|
||||
{ "HDMI HDR flag", OPT_AVCONFIG_SELECTION, { .sel = { &tc.hdmi_hdr, OPT_WRAP, SETTING_ITEM(off_on_desc) } } },
|
||||
{ "HDMI VRR flag", OPT_AVCONFIG_SELECTION, { .sel = { &tc.hdmi_vrr, OPT_WRAP, SETTING_ITEM(off_on_desc) } } },
|
||||
{ "480p/576p pbox", OPT_AVCONFIG_SELECTION, { .sel = { &tc.o480p_pbox, OPT_WRAP, SETTING_ITEM(off_on_desc) } } },
|
||||
}))
|
||||
|
||||
MENU(menu_scanlines, P99_PROTECT({ \
|
||||
@ -277,9 +278,9 @@ MENU(menu_settings, P99_PROTECT({ \
|
||||
|
||||
|
||||
MENU(menu_main, P99_PROTECT({ \
|
||||
{ LNG("Video in proc >","タイオウエイゾウ >"), OPT_SUBMENU, { .sub = { &menu_vinputproc, NULL, NULL } } },
|
||||
{ LNG("Sampling opt. >","サンプリングオプション>"), OPT_SUBMENU, { .sub = { &menu_sampling, NULL, NULL } } },
|
||||
{ LNG("Video in opt. >","タイオウエイゾウ >"), OPT_SUBMENU, { .sub = { &menu_vinput_opt, NULL, NULL } } },
|
||||
{ LNG("Sync opt. >","ドウキオプション >"), OPT_SUBMENU, { .sub = { &menu_sync, NULL, NULL } } },
|
||||
{ "Line mult opt. >", OPT_SUBMENU, { .sub = { &menu_lm, NULL, NULL } } },
|
||||
{ LNG("Output opt. >","シュツリョクオプション >"), OPT_SUBMENU, { .sub = { &menu_output, NULL, NULL } } },
|
||||
{ LNG("Scanline opt. >","スキャンラインオプション >"), OPT_SUBMENU, { .sub = { &menu_scanlines, NULL, NULL } } },
|
||||
{ LNG("Post-proc. >","アトショリ >"), OPT_SUBMENU, { .sub = { &menu_postproc, NULL, NULL } } },
|
||||
|
||||
@ -139,6 +139,7 @@ const ude_item_map ude_profile_items[] = {
|
||||
UDE_ITEM(64, 120, tc.link_av),
|
||||
// 65 reserved
|
||||
UDE_ITEM(66, 120, tc.panasonic_hack),
|
||||
UDE_ITEM(67, 120, tc.o480p_pbox),
|
||||
};
|
||||
|
||||
int write_userdata(uint8_t entry) {
|
||||
|
||||
@ -133,7 +133,7 @@ uint32_t calculate_pclk(uint32_t src_clk_hz, mode_data_t *vm_out, vm_proc_config
|
||||
|
||||
int get_pure_lm_mode(avconfig_t *cc, mode_data_t *vm_in, mode_data_t *vm_out, vm_proc_config_t *vm_conf)
|
||||
{
|
||||
int i, diff_lines, diff_v_hz_x100, mindiff_id=0, mindiff_lines=1000, mindiff_v_hz_x100=10000;
|
||||
int i, diff_lines, diff_v_hz_x100, mindiff_id=0, mindiff_lines=1000, mindiff_v_hz_x100=10000, x_rpt_decr=0;
|
||||
mode_data_t *mode_preset;
|
||||
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)),
|
||||
@ -267,7 +267,10 @@ 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))) {
|
||||
if ((cc->pt_mode == 0) && (cc->o480p_pbox) && ((mode_preset->group >= GROUP_480P) && (mode_preset->group <= GROUP_576P))) {
|
||||
vm_conf->x_rpt = vm_conf->h_skip = 3;
|
||||
x_rpt_decr += 1;
|
||||
} else 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)) {
|
||||
@ -291,6 +294,10 @@ int get_pure_lm_mode(avconfig_t *cc, mode_data_t *vm_in, mode_data_t *vm_out, vm
|
||||
vmode_hv_mult(vm_out, VM_OUT_XMULT, VM_OUT_YMULT);
|
||||
}
|
||||
} else {
|
||||
if (cc->o480p_pbox) {
|
||||
vm_conf->x_rpt = vm_conf->h_skip = 3;
|
||||
x_rpt_decr += 1;
|
||||
}
|
||||
vmode_hv_mult(vm_out, VM_OUT_XMULT, VM_OUT_YMULT);
|
||||
}
|
||||
break;
|
||||
@ -338,6 +345,14 @@ int get_pure_lm_mode(avconfig_t *cc, mode_data_t *vm_in, mode_data_t *vm_out, vm
|
||||
case MODE_L2_512_COL:
|
||||
case MODE_L2_384_COL:
|
||||
case MODE_L2_320_COL:
|
||||
if (cc->o480p_pbox) {
|
||||
vm_conf->x_rpt = vm_conf->h_skip = 3;
|
||||
x_rpt_decr += 1;
|
||||
} else {
|
||||
vm_conf->x_rpt = vm_conf->h_skip = 1;
|
||||
}
|
||||
vmode_hv_mult(vm_out, VM_OUT_XMULT, VM_OUT_YMULT);
|
||||
break;
|
||||
case MODE_L3_512_COL:
|
||||
case MODE_L4_512_COL:
|
||||
case MODE_L6_512_COL:
|
||||
@ -345,6 +360,14 @@ int get_pure_lm_mode(avconfig_t *cc, mode_data_t *vm_in, mode_data_t *vm_out, vm
|
||||
vmode_hv_mult(vm_out, VM_OUT_XMULT, VM_OUT_YMULT);
|
||||
break;
|
||||
case MODE_L2_256_COL:
|
||||
if (cc->o480p_pbox) {
|
||||
vm_conf->x_rpt = vm_conf->h_skip = 7;
|
||||
x_rpt_decr += 2;
|
||||
} else {
|
||||
vm_conf->x_rpt = vm_conf->h_skip = 2;
|
||||
}
|
||||
vmode_hv_mult(vm_out, VM_OUT_XMULT, VM_OUT_YMULT);
|
||||
break;
|
||||
case MODE_L3_384_COL:
|
||||
case MODE_L4_384_COL:
|
||||
case MODE_L5_512_COL:
|
||||
@ -391,7 +414,9 @@ int get_pure_lm_mode(avconfig_t *cc, mode_data_t *vm_in, mode_data_t *vm_out, vm
|
||||
vm_conf->x_rpt = cc->ar_256col ? 2 : 3;
|
||||
|
||||
if (mindiff_lm & (MODE_L3_320_COL|MODE_L2_240x360|MODE_L3_240x360))
|
||||
vm_conf->x_rpt--;
|
||||
x_rpt_decr += 1;
|
||||
|
||||
vm_conf->x_rpt -= x_rpt_decr;
|
||||
|
||||
if (mindiff_lm == MODE_L2_240x360) {
|
||||
vm_out->timings.h_active += 80;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user