[system/displayd] 添加savemode,用于分辨率自适应:

1. 当用户设置了一个高分辨率,比如4K
2. 再将盒子接入到一个低分辨率电视上,比如1080P
3. 再将盒子接回原高分辨率电视(4K),分辨率能自动变为设置里的4K。

Signed-off-by: Firefly <service@t-firefly.com>
This commit is contained in:
Firefly
2016-01-21 14:04:00 +08:00
committed by cjp
parent 590282746a
commit eb7ee5b7a7
2 changed files with 11 additions and 1 deletions

View File

@ -627,11 +627,15 @@ void DisplayManager::saveConfig(void) {
if(fd != NULL) {
for(node = main_display_list; node != NULL; node = node->next) {
memset(node->savemode, 0, MODE_LENGTH);
memcpy(node->savemode, node->mode, MODE_LENGTH);
memset(buf, 0 , BUFFER_LENGTH);
sprintf(buf, "display=%d,iface=%d,enable=%d,mode=%s\n", node->property, node->type, node->enable, node->mode);
fwrite(buf, 1, strlen(buf), fd);
}
for(node = aux_display_list; node != NULL; node = node->next) {
memset(node->savemode, 0, MODE_LENGTH);
memcpy(node->savemode, node->mode, MODE_LENGTH);
memset(buf, 0 , BUFFER_LENGTH);
sprintf(buf, "display=%d,iface=%d,enable=%d,mode=%s\n", node->property, node->type, node->enable, node->mode);
fwrite(buf, 1, strlen(buf), fd);
@ -915,6 +919,8 @@ int DisplayManager::readConfig(void) {
memset(node->mode, 0, MODE_LENGTH);
memcpy(node->mode, ptr, ptr_space - ptr);
}
memset(node->savemode, 0, MODE_LENGTH);
memcpy(node->savemode, node->mode, MODE_LENGTH);
ALOGD("[%s] display %d iface %d connect %d enable %d mode %s\n", __FUNCTION__,
node->property, node->type, node->connect, node->enable, node->mode);
}
@ -1120,7 +1126,10 @@ void DisplayManager::setHDMIEnable(int display) {
iface_enabled->enable = 0;
operateIfaceEnable(iface_enabled, DISPLAY_OPERATE_WRITE);
// iface_hdmi->enable = 1;
operateIfaceMode(iface_hdmi, DISPLAY_OPERATE_WRITE, iface_hdmi->mode);
if (strlen(iface_hdmi->savemode))
operateIfaceMode(iface_hdmi, DISPLAY_OPERATE_WRITE, iface_hdmi->savemode);
else
operateIfaceMode(iface_hdmi, DISPLAY_OPERATE_WRITE, iface_hdmi->mode);
operateIfaceEnable(iface_hdmi, DISPLAY_OPERATE_WRITE);
}
}