Skip to content

Commit dbfaf02

Browse files
author
marqs
committed
minor fixes
* downscaling latency bump fix * enforce vm_table reloading upon profile read
1 parent 60f1418 commit dbfaf02

File tree

4 files changed

+20
-8
lines changed

4 files changed

+20
-8
lines changed

software/sys_controller/av_controller.c

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -448,7 +448,6 @@ void update_sc_config(mode_data_t *vm_in, mode_data_t *vm_out, vm_proc_config_t
448448
hv_in_config3.v_synclen = vm_in->timings.v_synclen;
449449
hv_in_config2.v_backporch = vm_in->timings.v_backporch;
450450
hv_in_config2.interlaced = vm_in->timings.interlaced;
451-
hv_in_config3.v_startline = vm_in->timings.v_synclen+vm_in->timings.v_backporch+12;
452451
hv_in_config2.h_skip = vm_conf->h_skip;
453452
hv_in_config2.h_sample_sel = vm_conf->h_sample_sel;
454453

@@ -534,6 +533,15 @@ void update_sc_config(mode_data_t *vm_in, mode_data_t *vm_out, vm_proc_config_t
534533
sl_config3.sl_c_overlay = 0;
535534
}
536535

536+
h_blank = vm_out->timings.h_total-vm_conf->x_size;
537+
v_blank = (vm_out->timings.v_total>>vm_out->timings.interlaced)-vm_conf->y_size;
538+
h_frontporch = h_blank-vm_conf->x_offset-vm_out->timings.h_backporch-vm_out->timings.h_synclen;
539+
v_frontporch = v_blank-vm_conf->y_offset-vm_out->timings.v_backporch-vm_out->timings.v_synclen;
540+
541+
// VIP frame reader swaps buffers at the end of read frame while writer apparently does it just before frame to be written (?)
542+
// SOF needs to be offset accordingly to minimize FB latency
543+
hv_in_config3.v_startline = vm_in->timings.v_synclen+vm_in->timings.v_backporch+20+((v_frontporch*100*vm_in->timings.v_total)/(100*vm_out->timings.v_total));
544+
537545
sc->hv_in_config = hv_in_config;
538546
sc->hv_in_config2 = hv_in_config2;
539547
sc->hv_in_config3 = hv_in_config3;
@@ -645,11 +653,6 @@ void update_sc_config(mode_data_t *vm_in, mode_data_t *vm_out, vm_proc_config_t
645653
//vip_fb->locked = vm_conf->framelock; // causes cvo fifo underflows
646654
vip_fb->locked = 0;
647655

648-
h_blank = vm_out->timings.h_total-vm_conf->x_size;
649-
v_blank = (vm_out->timings.v_total>>vm_out->timings.interlaced)-vm_conf->y_size;
650-
h_frontporch = h_blank-vm_conf->x_offset-vm_out->timings.h_backporch-vm_out->timings.h_synclen;
651-
v_frontporch = v_blank-vm_conf->y_offset-vm_out->timings.v_backporch-vm_out->timings.v_synclen;
652-
653656
if ((vip_cvo->h_active != vm_conf->x_size) ||
654657
(vip_cvo->v_active != vm_conf->y_size) ||
655658
(vip_cvo->h_synclen != vm_out->timings.h_synclen) ||

software/sys_controller/src/menu.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1002,7 +1002,7 @@ void cstm_profile_load(menucode_id code, int setup_disp) {
10021002
row_mask[0] |= (1<<(i+2));
10031003
}
10041004

1005-
sniprintf((char*)osd->osd_array.data[i+3][0], OSD_CHAR_COLS, "< Prev Next >");
1005+
sniprintf((char*)osd->osd_array.data[i+3][0], OSD_CHAR_COLS, "< Prev Next >");
10061006
row_mask[0] |= (3<<(i+2));
10071007

10081008
osd->osd_sec_enable[0].mask = row_mask[0];

software/sys_controller/src/userdata.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ extern mode_data_t video_modes_plm[];
4343
extern mode_data_t video_modes[];
4444
extern smp_preset_t smp_presets[];
4545
extern sync_timings_t hdmi_timings[NUM_VIDEO_GROUPS];
46+
extern uint8_t update_cur_vm;
4647

4748
char target_profile_name[USERDATA_NAME_LEN+1], cur_profile_name[USERDATA_NAME_LEN+1];
4849

@@ -290,6 +291,9 @@ int read_userdata(uint8_t entry, int dry_run) {
290291
bytes_read += item_hdr.data_size;
291292
}
292293

294+
if (hdr.type == UDE_PROFILE)
295+
update_cur_vm = 1;
296+
293297
strlcpy(cur_profile_name, target_profile_name, USERDATA_NAME_LEN+1);
294298
printf("%lu bytes read from userdata entry %u\n", bytes_read, entry);
295299

@@ -452,6 +456,9 @@ int read_userdata_sd(uint8_t entry, int dry_run) {
452456
f_lseek(&p_file, bytes_read_tot);
453457
}
454458

459+
if (hdr.type == UDE_PROFILE)
460+
update_cur_vm = 1;
461+
455462
strlcpy(cur_profile_name, target_profile_name, USERDATA_NAME_LEN+1);
456463
printf("%u bytes read from userdata entry %u\n", bytes_read_tot, entry);
457464

software/sys_controller/src/video_modes.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1070,8 +1070,10 @@ int get_pure_lm_mode(avconfig_t *cc, mode_data_t *vm_in, mode_data_t *vm_out, vm
10701070
else if (mindiff_lm & (MODE_L3_256_COL|MODE_L6_256_COL))
10711071
vm_conf->x_rpt = cc->ar_256col ? 2 : 3;
10721072

1073-
if (mindiff_lm & (MODE_L3_320_COL|MODE_L2_240x360|MODE_L3_240x360))
1073+
if (mindiff_lm & (MODE_L3_320_COL|MODE_L2_240x360))
10741074
vm_conf->x_rpt--;
1075+
else if (mindiff_lm & MODE_L3_240x360)
1076+
vm_conf->x_rpt -= 2;
10751077

10761078
if (mindiff_lm == MODE_L2_240x360) {
10771079
vm_out->timings.h_active += 80;

0 commit comments

Comments
 (0)