Android14窗口管理自适应投屏分辨率
环境
console:/ # cat /proc/version
Linux version 6.1.57 (机密信息) (Android (10087095, +pgo, +bolt, +lto, -mlgo, based on r487747c) clang version 17.0.2 (https://android.googlesource.com/toolchain/llvm-project d9f89f4d16663d5012e5c09495f3b30ece3d2362), LLD 17.0.2) #22 SMP PREEMPT Mon Feb 24 09:56:40 UTC 2025
auto_wm.c
$ cat auto_wm.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> /*persist.panel.width=800persist.panel.height=480persist.panel.density=178*/ struct panel {int width;int height;int density; };static int get_remote_panel_info(struct panel *info) {int ret = -1;FILE *fp = NULL;char buf[64] = {0};if((fp = fopen("/mnt/vendor/qcache/display_config.txt", "r")) != NULL){do{fgets(buf, sizeof(buf), fp);if(sscanf(buf, (char *)"persist.panel.width=%d", &info->width) != 1)break;fgets(buf, sizeof(buf), fp);if(sscanf(buf, (char *)"persist.panel.height=%d", &info->height) != 1)break;fgets(buf, sizeof(buf), fp);if(sscanf(buf, (char *)"persist.panel.density=%d", &info->density) != 1)break;ret = 0;}while(0);fclose(fp);}return ret; }static int get_local_panel_info(struct panel *info) {int ret = -1;FILE *fp = NULL;if((fp = popen("wm size", "r")) != NULL){if(fscanf(fp, (char *)"Physical size: %dx%d", &info->width, &info->height) == 2)ret = 0;pclose(fp);}if(ret != -1){if((fp = popen("wm density", "r")) != NULL){if(fscanf(fp, "Physical density: %d", &info->density) != 1)ret = -1;}else{ret = -1;}pclose(fp);}return ret; }static int get_override_panel_info(struct panel *info) {int ret = -1;FILE *fp = NULL;char buf[64] = {0};if((fp = popen("wm size", "r")) != NULL){fgets(buf, sizeof(buf), fp);if(fscanf(fp, (char *)"Override size: %dx%d", &info->width, &info->height) == 2)ret = 0;pclose(fp);}if((fp = popen("wm density", "r")) != NULL){fgets(buf, sizeof(buf), fp);if(fscanf(fp, "Override density: %d", &info->density) != 1)ret = -1;}else{ret = -1;}pclose(fp);return ret; }int main(int argc, char *argv[]) {int ret = -1;struct panel panel_remote = {0};struct panel panel_local = {0};struct panel panel_override = {0};char buf[64] = {0};while(1){ret = get_remote_panel_info(&panel_remote);ret |= get_local_panel_info(&panel_local);get_override_panel_info(&panel_override);printf("remote:%d,%d,%d\n", panel_remote.width, panel_remote.height, panel_remote.density);printf("local:%d,%d,%d\n", panel_local.width, panel_local.height, panel_local.density);printf("override:%d,%d,%d\n", panel_override.width, panel_override.height, panel_override.density);if(ret != 0){sleep(1);continue;}if(((panel_remote.width == panel_local.width) || (panel_remote.width == panel_override.width))&& ((panel_remote.height == panel_local.height) || (panel_remote.height == panel_override.height))&& ((panel_remote.density == panel_local.density) || (panel_remote.density == panel_override.density))){printf("#### ok\n");break;}/*setprop persist.vendor.framebuffer.main 1920x720p30setprop persist.vendor.framebuffer.aux 1920x720p30setprop persist.vendor.resolution.main 1920x720p30setprop persist.vendor.resolution.aux 1920x720p30wm size 1920x720wm density 160*/snprintf(buf, sizeof(buf), (char *)"setprop persist.vendor.framebuffer.main %dx%dp30", panel_remote.width, panel_remote.height);system(buf);snprintf(buf, sizeof(buf), (char *)"setprop persist.vendor.framebuffer.aux %dx%dp30", panel_remote.width, panel_remote.height);system(buf);snprintf(buf, sizeof(buf), (char *)"setprop persist.vendor.resolution.main %dx%dp30", panel_remote.width, panel_remote.height);system(buf);snprintf(buf, sizeof(buf), (char *)"setprop persist.vendor.resolution.aux %dx%dp30", panel_remote.width, panel_remote.height);system(buf);snprintf(buf, sizeof(buf), (char *)"wm size %dx%d", panel_remote.width, panel_remote.height);system(buf);snprintf(buf, sizeof(buf), (char *)"wm density %d", panel_remote.density);system(buf);} }
<完>
相关文章:
Android14窗口管理自适应投屏分辨率
环境 console:/ # cat /proc/version Linux version 6.1.57 (机密信息) (Android (10087095, pgo, bolt, lto, -mlgo, based on r487747c) clang version 17.0.2 (https://android.googlesource.com/toolchain/llvm-project d9f89f4d16663d5012e5c09495f3b30ece3d2362), LLD 17…...
Shot Studio for macOS 发布 1.0.2
Shot Studio 是一个 macOS 的 app,专门为开发者设计,主要用于各大 app 应用商店的预览图设计。 提供了非常多的模板,也预设了很多尺寸。可以直接一键使用 在 1.0.2 这个版本中新增了: 文本渐变 图层:边框、颜色、圆…...
《深度学习实战》第4集:Transformer 架构与自然语言处理(NLP)
《深度学习实战》第4集:Transformer 架构与自然语言处理(NLP) 在自然语言处理(NLP)领域,Transformer 架构的出现彻底改变了传统的序列建模方法。它不仅成为现代 NLP 的核心,还推动了诸如 BERT、…...
Starrocks入门(二)
1、背景:考虑到Starrocks入门这篇文章,安装的是3.0.1版本的SR,参考:Starrocks入门-CSDN博客 但是官网的文档,没有对应3.0.x版本的资料,却有3.2或者3.3或者3.4或者3.1或者2.5版本的资料,不要用较…...
银河麒麟高级服务器操作系统在线调整/pro/{PID}/limits文件中nofile的软限制和硬限制参数值操作方法
银河麒麟高级服务器操作系统在线调整/pro/{PID}/limits文件中nofile的软限制和硬限制参数值操作方法 一 系统环境二 使用场景三 操作步骤 一 系统环境 [rootlocalhost ~]# nkvers ############## Kylin Linux Version ################# Release: Kylin Linux Advanced Server…...
html css js网页制作成品——HTML+CSS甜品店网页设计(5页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
Open WebUI项目源码学习记录(从0开始基于纯CPU环境部署一个网页Chat服务)
感谢您点开这篇文章:D,鼠鼠我是一个代码小白,下文是学习开源项目Open WebUI过程中的一点笔记记录,希望能帮助到你~ 本人菜鸟,持续成长,能力不足有疏漏的地方欢迎一起探讨指正,比心心~…...
【Python 入门基础】—— 人工智能“超级引擎”,AI界的“瑞士军刀”,
欢迎来到ZyyOvO的博客✨,一个关于探索技术的角落,记录学习的点滴📖,分享实用的技巧🛠️,偶尔还有一些奇思妙想💡 本文由ZyyOvO原创✍️,感谢支持❤️!请尊重原创…...
蓝桥杯练习代码
一、最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。 示例 1: 输入:strs ["flower","flow","flight"] 输出:"fl"示例…...
Imagination通过最新的D系列GPU IP将效率提升至新高度
Imagination DXTP GPU IP在加速移动设备和其他电力受限设备上的图形和计算工作负载时,能够延长电池续航时间。 英国伦敦 – 2025年2月25日 – 今日,Imagination Technologies(“Imagination”)宣布推出其最新的GPU IP——Imagina…...
C高级——shell(3)
一、shell的选择结构 1.回顾:C语言的选择结构:if , if else if ,if else,switch (switch的执行速度最快) 2.shell的选择结构: 单分支if 双分支 if else 多分支if elif case..in 1.1 shell的选择结构的格式 --------C语言的格式--…...
【C语言】第八期——指针、二维数组与字符串
目录 1 初始指针 2 获取变量的地址 3 定义指针变量、取地址、取值 3.1 定义指针变量 3.2 取地址、取值 4 对指针变量进行读写操作 5 指针变量作为函数参数 6 数组与指针 6.1 指针元素指向数组 6.2 指针加减运算(了解) 6.2.1 指针加减具体数字…...
docker 运行claude 的computer use
需要注意的是:这里claude操纵的是docker的虚拟服务器,不能访问本地url,需要进行端口转发 export ANTHROPIC_API_KEY%your_api_key% docker run \-e ANTHROPIC_API_KEY$ANTHROPIC_API_KEY \-v $HOME/.anthropic:/home/computeruse/.anthropi…...
JAVA面试_进阶部分_23种设计模式总结
1. 单例模式:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这 个实例。 (1)懒汉式 public class Singleton { /* 持有私有静态实例,防止被引用,此处赋值为null,目的是实现延迟加载…...
边缘计算收益低的三大指标
边缘计算收益低的三大指标主要包括以下方面: 1. 资源贡献不足: 边缘计算的收益通常基于所提供的带宽、存储和计算资源来计算。如果设备的网络带宽有限、在线时间短或提供的存储容量较小,可能无法满足平台设定的最低贡献标准,从而导…...
Linux网络之传输层协议(UDP,TCP协议)
目录 重新认识端口号 端口号划分 netstat pidof UDP协议 UDP的特点 面向数据报 UDP的缓冲区 全双工和半双工 TCP协议 TCP的特点 TCP报头分析 源端口,目标端口,数据偏移(报文首部长度) 序号 确认号 窗口 6个标志位 ACK SYN …...
傅里叶分析
傅里叶分析之掐死教程(完整版)更新于2014.06.06 要让读者在不看任何数学公式的情况下理解傅里叶分析。 傅里叶分析不仅仅是一个数学工具,更是一种可以彻底颠覆一个人以前世界观的思维模式。但不幸的是,傅里叶分析的公式看起来太复…...
【前端基础】Day 3 CSS-2
目录 1. Emmet语法 1.1 快速生成HTML结构语法 1.2 快速生成CSS样式语法 2. CSS的复合选择器 2.1 后代选择器 2.2 子选择器 2.3 并集选择器 2.4 伪类选择器 2.4.1 链接伪类选择器 2.4.2 focus伪类选择器 2.5 复合选择器总结 3. CSS的元素显示模式 3.1 什么是元素显示…...
NAT 技术:网络中的 “地址魔术师”
目录 一、性能瓶颈:NAT 的 “阿喀琉斯之踵” (一)数据包处理延迟 (二)高并发下的性能损耗 二、应用兼容性:NAT 带来的 “适配难题” (一)端到端通信的困境 (二&…...
Ollama下载安装+本地部署DeepSeek+UI可视化+搭建个人知识库——详解!(Windows版本)
目录 1️⃣下载和安装Ollama 1. 🥇官网下载安装包 2. 🥈安装Ollama 3.🥉配置Ollama环境变量 4、🎉验证Ollama 2️⃣本地部署DeepSeek 1. 选择模型并下载 2. 验证和使用DeepSeek 3️⃣使用可视化工具 1. Chrome插件-Page …...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
