Skip to content

Commit

Permalink
minor fixes
Browse files Browse the repository at this point in the history
* downscaling latency bump fix
* enforce vm_table reloading upon profile read
  • Loading branch information
marqs committed Jan 11, 2024
1 parent 60f1418 commit dbfaf02
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 8 deletions.
15 changes: 9 additions & 6 deletions software/sys_controller/av_controller.c
Expand Up @@ -448,7 +448,6 @@ void update_sc_config(mode_data_t *vm_in, mode_data_t *vm_out, vm_proc_config_t
hv_in_config3.v_synclen = vm_in->timings.v_synclen;
hv_in_config2.v_backporch = vm_in->timings.v_backporch;
hv_in_config2.interlaced = vm_in->timings.interlaced;
hv_in_config3.v_startline = vm_in->timings.v_synclen+vm_in->timings.v_backporch+12;
hv_in_config2.h_skip = vm_conf->h_skip;
hv_in_config2.h_sample_sel = vm_conf->h_sample_sel;

Expand Down Expand Up @@ -534,6 +533,15 @@ void update_sc_config(mode_data_t *vm_in, mode_data_t *vm_out, vm_proc_config_t
sl_config3.sl_c_overlay = 0;
}

h_blank = vm_out->timings.h_total-vm_conf->x_size;
v_blank = (vm_out->timings.v_total>>vm_out->timings.interlaced)-vm_conf->y_size;
h_frontporch = h_blank-vm_conf->x_offset-vm_out->timings.h_backporch-vm_out->timings.h_synclen;
v_frontporch = v_blank-vm_conf->y_offset-vm_out->timings.v_backporch-vm_out->timings.v_synclen;

// VIP frame reader swaps buffers at the end of read frame while writer apparently does it just before frame to be written (?)
// SOF needs to be offset accordingly to minimize FB latency
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));

sc->hv_in_config = hv_in_config;
sc->hv_in_config2 = hv_in_config2;
sc->hv_in_config3 = hv_in_config3;
Expand Down Expand Up @@ -645,11 +653,6 @@ void update_sc_config(mode_data_t *vm_in, mode_data_t *vm_out, vm_proc_config_t
//vip_fb->locked = vm_conf->framelock; // causes cvo fifo underflows
vip_fb->locked = 0;

h_blank = vm_out->timings.h_total-vm_conf->x_size;
v_blank = (vm_out->timings.v_total>>vm_out->timings.interlaced)-vm_conf->y_size;
h_frontporch = h_blank-vm_conf->x_offset-vm_out->timings.h_backporch-vm_out->timings.h_synclen;
v_frontporch = v_blank-vm_conf->y_offset-vm_out->timings.v_backporch-vm_out->timings.v_synclen;

if ((vip_cvo->h_active != vm_conf->x_size) ||
(vip_cvo->v_active != vm_conf->y_size) ||
(vip_cvo->h_synclen != vm_out->timings.h_synclen) ||
Expand Down
2 changes: 1 addition & 1 deletion software/sys_controller/src/menu.c
Expand Up @@ -1002,7 +1002,7 @@ void cstm_profile_load(menucode_id code, int setup_disp) {
row_mask[0] |= (1<<(i+2));
}

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

osd->osd_sec_enable[0].mask = row_mask[0];
Expand Down
7 changes: 7 additions & 0 deletions software/sys_controller/src/userdata.c
Expand Up @@ -43,6 +43,7 @@ extern mode_data_t video_modes_plm[];
extern mode_data_t video_modes[];
extern smp_preset_t smp_presets[];
extern sync_timings_t hdmi_timings[NUM_VIDEO_GROUPS];
extern uint8_t update_cur_vm;

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

Expand Down Expand Up @@ -290,6 +291,9 @@ int read_userdata(uint8_t entry, int dry_run) {
bytes_read += item_hdr.data_size;
}

if (hdr.type == UDE_PROFILE)
update_cur_vm = 1;

strlcpy(cur_profile_name, target_profile_name, USERDATA_NAME_LEN+1);
printf("%lu bytes read from userdata entry %u\n", bytes_read, entry);

Expand Down Expand Up @@ -452,6 +456,9 @@ int read_userdata_sd(uint8_t entry, int dry_run) {
f_lseek(&p_file, bytes_read_tot);
}

if (hdr.type == UDE_PROFILE)
update_cur_vm = 1;

strlcpy(cur_profile_name, target_profile_name, USERDATA_NAME_LEN+1);
printf("%u bytes read from userdata entry %u\n", bytes_read_tot, entry);

Expand Down
4 changes: 3 additions & 1 deletion software/sys_controller/src/video_modes.c
Expand Up @@ -1070,8 +1070,10 @@ int get_pure_lm_mode(avconfig_t *cc, mode_data_t *vm_in, mode_data_t *vm_out, vm
else if (mindiff_lm & (MODE_L3_256_COL|MODE_L6_256_COL))
vm_conf->x_rpt = cc->ar_256col ? 2 : 3;

if (mindiff_lm & (MODE_L3_320_COL|MODE_L2_240x360|MODE_L3_240x360))
if (mindiff_lm & (MODE_L3_320_COL|MODE_L2_240x360))
vm_conf->x_rpt--;
else if (mindiff_lm & MODE_L3_240x360)
vm_conf->x_rpt -= 2;

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

0 comments on commit dbfaf02

Please sign in to comment.