diff --git a/ossc.qsf b/ossc.qsf index 5a049cb..ab1ea37 100644 --- a/ossc.qsf +++ b/ossc.qsf @@ -41,7 +41,7 @@ set_global_assignment -name DEVICE EP4CE15E22C8 set_global_assignment -name TOP_LEVEL_ENTITY ossc set_global_assignment -name ORIGINAL_QUARTUS_VERSION 13.1 set_global_assignment -name PROJECT_CREATION_TIME_DATE "17:27:03 MAY 17, 2014" -set_global_assignment -name LAST_QUARTUS_VERSION "17.1.1 Lite Edition" +set_global_assignment -name LAST_QUARTUS_VERSION "17.1.0 Lite Edition" set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0 set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85 @@ -222,10 +222,12 @@ set_global_assignment -name ROUTER_EFFORT_MULTIPLIER 2.0 set_global_assignment -name CYCLONEII_OPTIMIZATION_TECHNIQUE SPEED set_global_assignment -name ENABLE_SIGNALTAP OFF set_global_assignment -name USE_SIGNALTAP_FILE output_files/ossc_la.stp +set_global_assignment -name PHYSICAL_SYNTHESIS_MAP_LOGIC_TO_MEMORY_FOR_AREA ON set_global_assignment -name FITTER_EFFORT "AUTO FIT" set_global_assignment -name SEED 5 +set_global_assignment -name AUTO_RAM_TO_LCELL_CONVERSION ON @@ -243,5 +245,4 @@ set_global_assignment -name QIP_FILE rtl/pll_2x.qip set_global_assignment -name QIP_FILE rtl/pll_3x.qip set_global_assignment -name CDF_FILE output_files/Chain1.cdf set_global_assignment -name SIGNALTAP_FILE output_files/ossc_la.stp -set_global_assignment -name QIP_FILE ip/lpm_mult_4_sl/lpm_mult_4_sl.qip set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top \ No newline at end of file diff --git a/rtl/scanconverter.v b/rtl/scanconverter.v index bf04ad9..57d776c 100644 --- a/rtl/scanconverter.v +++ b/rtl/scanconverter.v @@ -42,8 +42,9 @@ `define SCANLINES_V 2'h2 `define SCANLINES_ALT 2'h3 -`define SCANLINES_CONTRAST_LOW 2'h1 -`define SCANLINES_CONTRAST_HIGH 2'h2 +`define SCANLINES_HYBR_CONTR_LOW 2'h1 +`define SCANLINES_HYBR_CONTR_MED 2'h2 +`define SCANLINES_HYBR_CONTR_HIGH 2'h3 `define VSYNCGEN_LEN 6 `define VSYNCGEN_GENMID_BIT 0 @@ -100,18 +101,17 @@ wire linebuf_rdclock; wire [7:0] R_act, G_act, B_act; wire [7:0] R_lbuf, G_lbuf, B_lbuf; reg [7:0] R_in_L, G_in_L, B_in_L, R_in_LL, G_in_LL, B_in_LL, R_1x, G_1x, B_1x; -reg [7:0] R_pp3, G_pp3, B_pp3, R_pp4, G_pp4, B_pp4, R_pp5, G_pp5, B_pp5, R_pp6, G_pp6, B_pp6, R_pp7, G_pp7, B_pp7; +reg [7:0] R_pp3, G_pp3, B_pp3, R_pp4, G_pp4, B_pp4, R_pp5, G_pp5, B_pp5, R_pp6, G_pp6, B_pp6, R_pp7, G_pp7, B_pp7, R_pp8, G_pp8, B_pp8, R_pp9, G_pp9, B_pp9; reg [7:0] R_prev_pp2, G_prev_pp2, B_prev_pp2, R_prev_pp3, G_prev_pp3, B_prev_pp3, R_prev_pp4, G_prev_pp4, B_prev_pp4; reg signed [14:0] R_diff_pp3, G_diff_pp3, B_diff_pp3, R_diff_pp4, G_diff_pp4, B_diff_pp4; -reg [7:0] R_sl_contrast_pp4, G_sl_contrast_pp4, B_sl_contrast_pp4, R_scanline_str_pp5, G_scanline_str_pp5, B_scanline_str_pp5; //H+V syncs + data enable signals®isters wire HSYNC_act, VSYNC_act, DE_act; reg HSYNC_in_L, VSYNC_in_L; -reg HSYNC_1x, HSYNC_2x, HSYNC_3x, HSYNC_4x, HSYNC_5x, HSYNC_pp1, HSYNC_pp2, HSYNC_pp3, HSYNC_pp4, HSYNC_pp5, HSYNC_pp6, HSYNC_pp7; -reg VSYNC_1x, VSYNC_2x, VSYNC_3x, VSYNC_4x, VSYNC_5x, VSYNC_pp1, VSYNC_pp2, VSYNC_pp3, VSYNC_pp4, VSYNC_pp5, VSYNC_pp6, VSYNC_pp7; -reg DE_1x, DE_2x, DE_3x, DE_4x, DE_5x, DE_pp1, DE_pp2, DE_pp3, DE_pp4, DE_pp5, DE_pp6, DE_pp7, DE_3x_prev4x; +reg HSYNC_1x, HSYNC_2x, HSYNC_3x, HSYNC_4x, HSYNC_5x, HSYNC_pp1, HSYNC_pp2, HSYNC_pp3, HSYNC_pp4, HSYNC_pp5, HSYNC_pp6, HSYNC_pp7, HSYNC_pp8, HSYNC_pp9; +reg VSYNC_1x, VSYNC_2x, VSYNC_3x, VSYNC_4x, VSYNC_5x, VSYNC_pp1, VSYNC_pp2, VSYNC_pp3, VSYNC_pp4, VSYNC_pp5, VSYNC_pp6, VSYNC_pp7, VSYNC_pp8, VSYNC_pp9; +reg DE_1x, DE_2x, DE_3x, DE_4x, DE_5x, DE_pp1, DE_pp2, DE_pp3, DE_pp4, DE_pp5, DE_pp6, DE_pp7, DE_pp8, DE_pp9, DE_3x_prev4x; //registers indicating line/frame change and field type reg FID_cur, FID_prev, FID_1x; @@ -127,14 +127,14 @@ reg [10:0] vcnt_tvp, vcnt_1x, vcnt_2x, vcnt_3x, vcnt_4x, vcnt_5x; //max. 2 //other counters wire [2:0] line_id_act, col_id_act; -reg [2:0] line_id_pp1, line_id_pp2, line_id_pp3, line_id_pp4, line_id_pp5, col_id_pp1, col_id_pp2, col_id_pp3, col_id_pp4, col_id_pp5; +reg [2:0] line_id_pp1, line_id_pp2, line_id_pp3, line_id_pp4, line_id_pp5, line_id_pp6, line_id_pp7, col_id_pp1, col_id_pp2, col_id_pp3, col_id_pp4, col_id_pp5, col_id_pp6, col_id_pp7; reg [11:0] hmax[0:1]; reg line_idx; reg [1:0] line_out_idx_2x, line_out_idx_3x, line_out_idx_4x; reg [2:0] line_out_idx_5x; reg [23:0] warn_h_unstable, warn_pll_lock_lost, warn_pll_lock_lost_3x; -reg border_enable_pp1, border_enable_pp2, border_enable_pp3, border_enable_pp4, border_enable_pp5, border_enable_pp6, border_enable_pp7; -reg lt_box_enable_pp1, lt_box_enable_pp2, lt_box_enable_pp3, lt_box_enable_pp4, lt_box_enable_pp5, lt_box_enable_pp6, lt_box_enable_pp7; +reg border_enable_pp1, border_enable_pp2, border_enable_pp3, border_enable_pp4, border_enable_pp5, border_enable_pp6, border_enable_pp7, border_enable_pp8, border_enable_pp9; +reg lt_box_enable_pp1, lt_box_enable_pp2, lt_box_enable_pp3, lt_box_enable_pp4, lt_box_enable_pp5, lt_box_enable_pp6, lt_box_enable_pp7, lt_box_enable_pp8, lt_box_enable_pp9; wire rlpf_trigger_act; reg rlpf_trigger_pp1; @@ -167,10 +167,9 @@ reg [2:0] H_OPT_SAMPLE_SEL; reg [9:0] H_L5BORDER; reg [3:0] X_MASK_BR; reg X_SCANLINESTR_METHOD; -reg [7:0] X_SCANLINESTR_SUB; -reg [3:0] X_SCANLINESTR_MULT; +reg [1:0] X_SCANLINESTR_HYBR_CONTR; +reg [7:0] X_SCANLINESTR; reg [5:0] X_REV_LPF_STR; -reg [1:0] H_SL_CONTRAST; reg X_REV_LPF_ENABLE; @@ -184,71 +183,38 @@ assign pclk_1x = PCLK_in; assign PCLK_out = pclk_act; assign pclk_lock = {pclk_2x_lock, pclk_3x_lock}; -//Scanline contrast. Bright pixels decrease scanline strength. -function [7:0] apply_scanline_strength; - input [7:0] str; - input [7:0] data; - input [1:0] contrast; - - begin - if (contrast) - apply_scanline_strength = (str > data) ? (str - data) : 8'h00; - else - apply_scanline_strength = str; - end - endfunction //Scanline generation -<<<<<<< HEAD +reg [7:0] R_sl_hybrid_ref, G_sl_hybrid_ref, B_sl_hybrid_ref; +reg [7:0] R_sl_str, G_sl_str, B_sl_str; + wire [7:0] R_sl_mult, G_sl_mult, B_sl_mult; + lpm_mult_4_sl R_sl_mult_u ( .clock(pclk_act), - .dataa(R_pp5), - .datab(X_SCANLINESTR_MULT), + .dataa(R_pp7), + .datab(~R_sl_str[7:4]), .result(R_sl_mult) ); lpm_mult_4_sl G_sl_mult_u ( .clock(pclk_act), - .dataa(G_pp5), - .datab(X_SCANLINESTR_MULT), + .dataa(G_pp7), + .datab(~G_sl_str[7:4]), .result(G_sl_mult) ); lpm_mult_4_sl B_sl_mult_u ( .clock(pclk_act), - .dataa(B_pp5), - .datab(X_SCANLINESTR_MULT), + .dataa(B_pp7), + .datab(~B_sl_str[7:4]), .result(B_sl_mult) ); -reg [7:0] R_sl_sub, G_sl_sub, B_sl_sub; +reg [7:0] R_sl_lin, G_sl_lin, B_sl_lin; reg draw_sl; -======= -function [7:0] apply_scanlines; - input [1:0] mode; - input [7:0] data; - input [7:0] str; - input [4:0] mask; - input [2:0] line_id; - input [2:0] col_id; - input fid; - - begin - if ((mode == `SCANLINES_H) && (mask & (5'h1< str) ? (data-str) : 8'h00; - else if ((mode == `SCANLINES_V) && (5'h0 == col_id)) - apply_scanlines = (data > str) ? (data-str) : 8'h00; - else if ((mode == `SCANLINES_ALT) && (mask & (5'h1<<(line_id^fid)))) - apply_scanlines = (data > str) ? (data-str) : 8'h00; - else - apply_scanlines = data; - end - endfunction ->>>>>>> 990bc1563eef0a5650dabcc5633d3aeb562abc38 - //LT box / border generation function [7:0] apply_mask; input lt_active; @@ -544,10 +510,6 @@ begin R_diff_pp4 <= (R_diff_pp3 * X_REV_LPF_STR); G_diff_pp4 <= (G_diff_pp3 * X_REV_LPF_STR); B_diff_pp4 <= (B_diff_pp3 * X_REV_LPF_STR); - // Scanline contrast Low (62%) and High (87%) setting. - R_sl_contrast_pp4 <= (H_SL_CONTRAST == `SCANLINES_CONTRAST_HIGH) ? (R_pp3 - (R_pp3 >> 3)) : ((R_pp3 >> 1) + (R_pp3 >> 3)); - G_sl_contrast_pp4 <= (H_SL_CONTRAST == `SCANLINES_CONTRAST_HIGH) ? (G_pp3 - (G_pp3 >> 3)) : ((G_pp3 >> 1) + (G_pp3 >> 3)); - B_sl_contrast_pp4 <= (H_SL_CONTRAST == `SCANLINES_CONTRAST_HIGH) ? (B_pp3 - (B_pp3 >> 3)) : ((B_pp3 >> 1) + (B_pp3 >> 3)); R_pp5 <= apply_reverse_lpf(X_REV_LPF_ENABLE, R_pp4, R_prev_pp4, R_diff_pp4); G_pp5 <= apply_reverse_lpf(X_REV_LPF_ENABLE, G_pp4, G_prev_pp4, G_diff_pp4); @@ -559,47 +521,77 @@ begin col_id_pp5 <= col_id_pp4; border_enable_pp5 <= border_enable_pp4; lt_box_enable_pp5 <= lt_box_enable_pp4; - R_scanline_str_pp5 <= apply_scanline_strength(X_SCANLINESTR, R_sl_contrast_pp4, H_SL_CONTRAST); - G_scanline_str_pp5 <= apply_scanline_strength(X_SCANLINESTR, G_sl_contrast_pp4, H_SL_CONTRAST); - B_scanline_str_pp5 <= apply_scanline_strength(X_SCANLINESTR, B_sl_contrast_pp4, H_SL_CONTRAST); -<<<<<<< HEAD R_pp6 <= R_pp5; G_pp6 <= G_pp5; B_pp6 <= B_pp5; - // R_sl_mult, G_sl_mult and B_sl_mult are registered output of IP blocks (line 182-203) - R_sl_sub <= (R_pp5 > X_SCANLINESTR_SUB) ? (R_pp5-X_SCANLINESTR_SUB) : 8'h00; - G_sl_sub <= (G_pp5 > X_SCANLINESTR_SUB) ? (G_pp5-X_SCANLINESTR_SUB) : 8'h00; - B_sl_sub <= (B_pp5 > X_SCANLINESTR_SUB) ? (B_pp5-X_SCANLINESTR_SUB) : 8'h00; - draw_sl <= |{(V_SCANLINEMODE == `SCANLINES_H) && (V_SCANLINEID & (5'h1<>>>>>> 990bc1563eef0a5650dabcc5633d3aeb562abc38 + // modify scanline strength for linear method step 1 + R_sl_hybrid_ref <= (X_SCANLINESTR_HYBR_CONTR == `SCANLINES_HYBR_CONTR_HIGH) ? (R_pp5 - (R_pp5 >> 3)) : + (X_SCANLINESTR_HYBR_CONTR == `SCANLINES_HYBR_CONTR_MED) ? ((R_pp5 >> 1) + (R_pp5 >> 3)) : + (X_SCANLINESTR_HYBR_CONTR == `SCANLINES_HYBR_CONTR_LOW) ? (R_pp5 >> 1) : + 8'h0; + G_sl_hybrid_ref <= (X_SCANLINESTR_HYBR_CONTR == `SCANLINES_HYBR_CONTR_HIGH) ? (G_pp5 - (G_pp5 >> 3)) : + (X_SCANLINESTR_HYBR_CONTR == `SCANLINES_HYBR_CONTR_MED) ? ((G_pp5 >> 1) + (G_pp5 >> 3)) : + (X_SCANLINESTR_HYBR_CONTR == `SCANLINES_HYBR_CONTR_LOW) ? (G_pp5 >> 1) : + 8'h0; + B_sl_hybrid_ref <= (X_SCANLINESTR_HYBR_CONTR == `SCANLINES_HYBR_CONTR_HIGH) ? (B_pp5 - (B_pp5 >> 3)) : + (X_SCANLINESTR_HYBR_CONTR == `SCANLINES_HYBR_CONTR_MED) ? ((B_pp5 >> 1) + (B_pp5 >> 3)) : + (X_SCANLINESTR_HYBR_CONTR == `SCANLINES_HYBR_CONTR_LOW) ? (B_pp5 >> 1) : + 8'h0; HSYNC_pp6 <= HSYNC_pp5; VSYNC_pp6 <= VSYNC_pp5; DE_pp6 <= DE_pp5; + line_id_pp6 <= line_id_pp5; + col_id_pp6 <= col_id_pp5; border_enable_pp6 <= border_enable_pp5; lt_box_enable_pp6 <= lt_box_enable_pp5; - R_pp7 <= draw_sl ? (X_SCANLINESTR_METHOD ? R_sl_sub : R_sl_mult) : R_pp6; - G_pp7 <= draw_sl ? (X_SCANLINESTR_METHOD ? G_sl_sub : G_sl_mult) : G_pp6; - B_pp7 <= draw_sl ? (X_SCANLINESTR_METHOD ? B_sl_sub : B_sl_mult) : B_pp6; + R_pp7 <= R_pp6; + G_pp7 <= G_pp6; + B_pp7 <= B_pp6; + // modify scanline strength for linear method step 2 + R_sl_str <= (X_SCANLINESTR > R_sl_hybrid_ref) ? X_SCANLINESTR - R_sl_hybrid_ref : 8'h0; + G_sl_str <= (X_SCANLINESTR > G_sl_hybrid_ref) ? X_SCANLINESTR - G_sl_hybrid_ref : 8'h0; + B_sl_str <= (X_SCANLINESTR > B_sl_hybrid_ref) ? X_SCANLINESTR - B_sl_hybrid_ref : 8'h0; HSYNC_pp7 <= HSYNC_pp6; VSYNC_pp7 <= VSYNC_pp6; DE_pp7 <= DE_pp6; + line_id_pp7 <= line_id_pp6; + col_id_pp7 <= col_id_pp6; border_enable_pp7 <= border_enable_pp6; lt_box_enable_pp7 <= lt_box_enable_pp6; - R_out <= apply_mask(lt_active, lt_box_enable_pp7, border_enable_pp7, R_pp7, X_MASK_BR); - G_out <= apply_mask(lt_active, lt_box_enable_pp7, border_enable_pp7, G_pp7, X_MASK_BR); - B_out <= apply_mask(lt_active, lt_box_enable_pp7, border_enable_pp7, B_pp7, X_MASK_BR); - HSYNC_out <= HSYNC_pp7; - VSYNC_out <= VSYNC_pp7; - DE_out <= DE_pp7; + R_pp8 <= R_pp7; + G_pp8 <= G_pp7; + B_pp8 <= B_pp7; + // R_sl_mult, G_sl_mult and B_sl_mult are registered output of IP blocks (line 191-213) + R_sl_lin <= (R_pp7 > R_sl_str) ? (R_pp7-R_sl_str) : 8'h00; + G_sl_lin <= (G_pp7 > G_sl_str) ? (G_pp7-G_sl_str) : 8'h00; + B_sl_lin <= (B_pp7 > B_sl_str) ? (B_pp7-B_sl_str) : 8'h00; + draw_sl <= |{(V_SCANLINEMODE == `SCANLINES_H) && (V_SCANLINEID & (5'h1<>>>>>> 990bc1563eef0a5650dabcc5633d3aeb562abc38 - - X_SCANLINESTR_METHOD <= extra_info[4]; - X_SCANLINESTR_SUB <= ((extra_info[3:0]+8'h01)<<4)-1'b1; - X_SCANLINESTR_MULT <= ~extra_info[3:0]; + X_SCANLINESTR_METHOD <= extra_info[6]; + X_SCANLINESTR_HYBR_CONTR <= extra_info[5:4]; + X_SCANLINESTR <= ((extra_info[3:0]+8'h01)<<4)-1'b1; end R_in_L <= R_in; diff --git a/software/sys_controller/ossc/av_controller.c b/software/sys_controller/ossc/av_controller.c index d13cc5e..19d548e 100644 --- a/software/sys_controller/ossc/av_controller.c +++ b/software/sys_controller/ossc/av_controller.c @@ -301,6 +301,7 @@ status_t get_status(tvp_input_t input, video_format format) if ((tc.sl_mode != cm.cc.sl_mode) || (tc.sl_type != cm.cc.sl_type) || + (tc.sl_hybr_contr != cm.cc.sl_hybr_contr) || (tc.sl_method != cm.cc.sl_method) || (tc.sl_str != cm.cc.sl_str) || (tc.sl_id != cm.cc.sl_id) || @@ -308,8 +309,7 @@ status_t get_status(tvp_input_t input, video_format format) (tc.v_mask != cm.cc.v_mask) || (tc.mask_br != cm.cc.mask_br) || (tc.ar_256col != cm.cc.ar_256col) || - (tc.reverse_lpf != cm.cc.reverse_lpf) || - (tc.sl_contrast != cm.cc.sl_contrast)) + (tc.reverse_lpf != cm.cc.reverse_lpf)) status = (status < INFO_CHANGE) ? INFO_CHANGE : status; if (tc.sampler_phase != cm.cc.sampler_phase) { @@ -367,13 +367,8 @@ status_t get_status(tvp_input_t input, video_format format) // v_info: [31:29] [28:27] [26] [25:20] [19:17] [16:11] [10:0] // | V_MULTMODE[2:0] | V_SCANLINEMODE[1:0] | V_SCANLINEID | V_MASK[5:0] | V_SYNCLEN[2:0] | V_BACKPORCH[5:0] | V_ACTIVE[10:0] | // -<<<<<<< HEAD -// extra: [31:14] [13:9] [8:5] [4] [3:0] -// | | X_REV_LPF_STR | H_MASK_BR[3:0] | H_SCANLINESTR_TYPE | H_SCANLINESTR[3:0] | -======= -// extra: [31:15] [14:13] [12:8] [7:4] [3:0] -// | | H_SL_CONTRAST | X_REV_LPF_STR | H_MASK_BR[3:0] | H_SCANLINESTR[3:0] | ->>>>>>> 990bc1563eef0a5650dabcc5633d3aeb562abc38 +// extra: [31:16] [15:11] [10:7] [6] [5:4] [3:0] +// | | X_REV_LPF_STR | H_MASK_BR[3:0] | H_SCANLINE_METHOD | H_SL_HYBRID_CONTRAST | H_SCANLINESTR[3:0] | // void set_videoinfo() { @@ -468,17 +463,11 @@ void set_videoinfo() (video_modes[cm.id].v_synclen<<17) | (v_backporch<<11) | v_active); -<<<<<<< HEAD - IOWR_ALTERA_AVALON_PIO_DATA(PIO_6_BASE, (cm.cc.reverse_lpf<<9) | - (cm.cc.mask_br<<5) | - (cm.cc.sl_method << 4) | + IOWR_ALTERA_AVALON_PIO_DATA(PIO_6_BASE, (cm.cc.reverse_lpf<<11) | + (cm.cc.mask_br<<7) | + (cm.cc.sl_method << 6) | + (cm.cc.sl_hybr_contr << 4) | cm.cc.sl_str); -======= - IOWR_ALTERA_AVALON_PIO_DATA(PIO_6_BASE, (cm.cc.sl_contrast<<13) | - (cm.cc.reverse_lpf<<8) | - (cm.cc.mask_br<<4) | - cm.cc.sl_str); ->>>>>>> 990bc1563eef0a5650dabcc5633d3aeb562abc38 } // Configure TVP7002 and scan converter logic based on the video mode diff --git a/software/sys_controller/ossc/avconfig.h b/software/sys_controller/ossc/avconfig.h index f9f4989..5d042ed 100644 --- a/software/sys_controller/ossc/avconfig.h +++ b/software/sys_controller/ossc/avconfig.h @@ -45,6 +45,7 @@ typedef struct { alt_u8 sl_mode; alt_u8 sl_type; + alt_u8 sl_hybr_contr; alt_u8 sl_method; alt_u8 sl_str; alt_u8 sl_id; @@ -80,7 +81,6 @@ typedef struct { alt_u8 full_tx_setup; alt_u8 vga_ilace_fix; alt_u8 reverse_lpf; - alt_u8 sl_contrast; #ifdef ENABLE_AUDIO alt_u8 audio_dw_sampl; alt_u8 audio_swap_lr; diff --git a/software/sys_controller/ossc/menu.c b/software/sys_controller/ossc/menu.c index 513dc9b..0f436eb 100644 --- a/software/sys_controller/ossc/menu.c +++ b/software/sys_controller/ossc/menu.c @@ -60,12 +60,12 @@ static const char *pm_1080i_desc[] = { LNG("Passthru","パススルー"), "Li static const char *ar_256col_desc[] = { "4:3", "8:7" }; static const char *tx_mode_desc[] = { "HDMI", "DVI" }; static const char *sl_mode_desc[] = { LNG("Off","オフ"), LNG("Auto","オート"), LNG("Manual","カスタム") }; -static const char *sl_method_desc[] = { LNG("Multiplication","Multiplication"), LNG("Subtraction","Subtraction") }; +static const char *sl_hybr_contr_desc[] = { LNG("Off","オフ"), LNG("Low","Low"), LNG("Medium","Medium"), LNG("High","High") }; +static const char *sl_method_desc[] = { LNG("Multiplication","Multiplication"), LNG("Linear","Linear") }; static const char *sl_type_desc[] = { LNG("Horizontal","ヨコ"), LNG("Vertical","タテ"), LNG("Alternating","コウゴ") }; static const char *sl_id_desc[] = { LNG("Top","ウエ"), LNG("Bottom","シタ") }; static const char *audio_dw_sampl_desc[] = { LNG("Off (fs = 96kHz)","オフ (fs = 96kHz)"), "2x (fs = 48kHz)" }; static const char *lt_desc[] = { "Top-left", "Center", "Bottom-right" }; -static const char *sl_contrast_desc[] = { LNG("Off","オフ"), "Low", "High" }; static void sampler_phase_disp(alt_u8 v) { sniprintf(menu_row2, LCD_ROW_LEN+1, LNG("%d deg","%d ド"), (v*1125)/100); } static void sync_vth_disp(alt_u8 v) { sniprintf(menu_row2, LCD_ROW_LEN+1, "%d mV", (v*1127)/100); } @@ -141,10 +141,10 @@ MENU(menu_output, P99_PROTECT({ \ MENU(menu_postproc, P99_PROTECT({ \ { LNG("Scanlines","スキャンライン"), OPT_AVCONFIG_SELECTION, { .sel = { &tc.sl_mode, OPT_WRAP, SETTING_ITEM(sl_mode_desc) } } }, { LNG("Scanline str.","スキャンラインツヨサ"), OPT_AVCONFIG_NUMVALUE, { .num = { &tc.sl_str, OPT_NOWRAP, 0, SCANLINESTR_MAX, sl_str_disp } } }, + { LNG("Sl. hybrid contr","Sl. hybrid contr"), OPT_AVCONFIG_SELECTION, { .sel = { &tc.sl_hybr_contr, OPT_NOWRAP, SETTING_ITEM(sl_hybr_contr_desc) } } }, { LNG("Scanline method","Scanline method"), OPT_AVCONFIG_SELECTION, { .sel = { &tc.sl_method, OPT_WRAP, SETTING_ITEM(sl_method_desc) } } }, { LNG("Scanline type","スキャンラインルイ"), OPT_AVCONFIG_SELECTION, { .sel = { &tc.sl_type, OPT_WRAP, SETTING_ITEM(sl_type_desc) } } }, { LNG("Scanline alignm.","スキャンラインポジション"), OPT_AVCONFIG_SELECTION, { .sel = { &tc.sl_id, OPT_WRAP, SETTING_ITEM(sl_id_desc) } } }, - { "ScanlineContrast", OPT_AVCONFIG_SELECTION, { .sel = { &tc.sl_contrast, OPT_WRAP, SETTING_ITEM(sl_contrast_desc) } } }, { LNG("Horizontal mask","スイヘイマスク"), OPT_AVCONFIG_NUMVALUE, { .num = { &tc.h_mask, OPT_NOWRAP, 0, HV_MASK_MAX, pixels_disp } } }, { LNG("Vertical mask","スイチョクマスク"), OPT_AVCONFIG_NUMVALUE, { .num = { &tc.v_mask, OPT_NOWRAP, 0, HV_MASK_MAX, pixels_disp } } }, { LNG("Mask brightness","マスクアカルサ"), OPT_AVCONFIG_NUMVALUE, { .num = { &tc.mask_br, OPT_NOWRAP, 0, HV_MASK_MAX_BR, value_disp } } },