Private
Public Access
Add resilient handover, live LED layout refresh and TV calibration profiles
This commit is contained in:
1 parent
4ab4fa034b
commit
e55d37772a
26 files changed
+543
-134
No files matched your search
@@ -0,0 +1,34 @@
|
||||
#ifndef HYPERDRM_LAYOUT_REFRESH_H
|
||||
#define HYPERDRM_LAYOUT_REFRESH_H
|
||||
#define LAYOUT_REFRESH_MS 5000
|
||||
static ReceiverProbe layout_probe={.fd=-1};
|
||||
static uint64_t next_layout_check,last_layout_check;
|
||||
static unsigned layout_updates,layout_probe_generation;
|
||||
static char layout_error[128];
|
||||
static void layout_refresh_reset(uint64_t due){
|
||||
probe_close(&layout_probe);layout_probe.stage=TEST_IDLE;next_layout_check=due;
|
||||
}
|
||||
static bool layout_mapping_changed(const LedBlend *next,unsigned count){
|
||||
if(count!=led_count || !led_blends)return true;
|
||||
for(unsigned i=0;i<count;i++)if(next[i].a!=led_blends[i].a || next[i].b!=led_blends[i].b || next[i].weight!=led_blends[i].weight)return true;
|
||||
return false;
|
||||
}
|
||||
static void layout_refresh_tick(PlaybackJson *json,uint64_t now,bool running){
|
||||
if(!running){layout_refresh_reset(now+LAYOUT_REFRESH_MS);return;}
|
||||
probe_tick(&layout_probe,json,now);
|
||||
if(layout_probe.stage==TEST_DONE){
|
||||
if(layout_probe_generation==calibration_generation){
|
||||
if(layout_mapping_changed(layout_probe.mapping,layout_probe.leds)){
|
||||
free(led_blends);led_blends=layout_probe.mapping;layout_probe.mapping=NULL;led_count=layout_probe.leds;layout_updates++;
|
||||
}
|
||||
last_layout_check=now;layout_error[0]=0;
|
||||
}else next_layout_check=now;
|
||||
probe_close(&layout_probe);layout_probe.stage=TEST_IDLE;
|
||||
}else if(layout_probe.stage==TEST_FAILED){
|
||||
snprintf(layout_error,sizeof(layout_error),"%s",layout_probe.error);layout_probe.stage=TEST_IDLE;
|
||||
}
|
||||
if(!probe_busy(&layout_probe) && now>=next_layout_check){
|
||||
layout_probe_generation=calibration_generation;probe_begin(&layout_probe,&target,now);next_layout_check=now+LAYOUT_REFRESH_MS;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
Reference in new issue
Block a user