android ANativeWindow surface显示

news2024/9/8 23:37:44

前言

最近做车机camera 倒车影像问题,需要通过c++调用camera,并显示在android ui界面之上。

最终效果图

在这里插入图片描述

代码实现

Android.bp

cc_binary {
    name: "stest",
    vendor: true,
    srcs: ["main.cpp"],

    shared_libs: [
        "libcutils",
        "libbase",
        "liblog",
        "libgui_vendor",
        "libutils",
        "libhidlbase",
        "libhidltransport",
        "libhwbinder",
        "libbinder",
        "libui",
        //"vendor.qti.hardware.meig.camera@1.0"
    ],
    include_dirs: ["frameworks/native/include"],
    cflags: [
        "-Wall",
        "-Wno-unused-parameter",
        "-Werror",
        "-Wno-multichar",
    ],
}


main.cpp

#define LOG_TAG "stest"

#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <cutils/log.h>
#include <fcntl.h>
#include <android-base/logging.h>
#include <android-base/properties.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/epoll.h>
#include <cutils/uevent.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>

//#include <time.h>
//#include <dlfcn.h>
#include <gui/ISurfaceComposer.h>
#include <gui/Surface.h>
#include <gui/SurfaceComposerClient.h>
#include <android/native_window.h>
#include <ui/DisplayInfo.h>
#include <ui/Rect.h>
#include <binder/IPCThreadState.h>
#include <binder/ProcessState.h>
#include <binder/IServiceManager.h>
#include <cutils/memory.h>
using namespace android;
int main(int argc, char *argv[]) {
    ALOGE("wjc main start");
    int i=0;
    int x=0;
    int y=0;

    android::ProcessState::self()->startThreadPool();

    sp<SurfaceComposerClient> client = new SurfaceComposerClient();
    ALOGE("wjc main create Surface");
    sp<SurfaceControl> surfaceControl = client->createSurface(String8("resize"),
            600, 600, PIXEL_FORMAT_RGB_565, 0);
    ALOGE("wjc main create Surface end");
    sp<Surface> surface = surfaceControl->getSurface();
    ALOGE("wjc main Transaction start");

    android::SurfaceComposerClient::Transaction{}
            .setSize(surfaceControl, 400, 400)
            .setLayer(surfaceControl, 0x40000000)
            .setPosition(surfaceControl, 400,80)
            //.setAlpha(surfaceControl, 0.5f)
            .setCornerRadius(surfaceControl, 10.0f)
            .show(surfaceControl)
            .apply();

    ALOGE("wjc main Transaction end");
    ANativeWindow_Buffer outBuffer;
    sp<ANativeWindow> anw = surfaceControl->getSurface();
    while(true){
        surface->lock(&outBuffer, NULL);
        ssize_t bpr = outBuffer.stride * bytesPerPixel(outBuffer.format);
        android::SurfaceComposerClient::Transaction{}
                .setSize(surfaceControl, 400, 400)
                .setLayer(surfaceControl, 0x40000000)
                .setPosition(surfaceControl, x%1920,y%400)
                .setAlpha(surfaceControl, 0.5f)
                .show(surfaceControl)
                .apply();
        if(i%3 == 0){
            android_memset16((uint16_t*)outBuffer.bits, 0xF800, bpr*outBuffer.height);
        } else if (i%3 == 1){

            android_memset16((uint16_t*)outBuffer.bits, 0x07E0, bpr*outBuffer.height);
        } else if (i%3 == 2){
            android_memset16((uint16_t*)outBuffer.bits, 0x001F , bpr*outBuffer.height);
        }
        surface->unlockAndPost();
        //sleep(1);
        usleep(10);
        i++;
        x++;
        y++;
    }
    ALOGE("wjc main end");
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/454596.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android入门基础教程

第1章 Android Studio运行第一个程序 1.1 Android Studio下载&#xff1a; 1.1.1 Android开发者官网&#xff1a; https://developer.android.google.cn ​ 1.1.2 下载Android Studio开发者工具&#xff1a; 进入Android开发者官网&#xff1b;找到Android Studio工具下载页…

【LeetCode刷题笔记】反转链表、移除链表元素、两两交换链表中的节点、删除链表的倒数第N个结点

&#x1f4dd;个人主页&#xff1a;爱吃炫迈 &#x1f48c;系列专栏&#xff1a;数据结构与算法 &#x1f9d1;‍&#x1f4bb;座右铭&#xff1a;道阻且长&#xff0c;行则将至&#x1f497; 文章目录 反转链表移除链表元素两两交换链表中的节点删除链表的倒数第 N 个结点&…

脉搏波信号去噪方法

一、引言 脉搏波信号是血管中血液流动产生的振动信号&#xff0c;反映了血管的弹性特性和血流动力学信息。由于其丰富的生理信息&#xff0c;脉搏波信号在诊断和监测心血管疾病、神经系统疾病等方面具有重要意义。然而&#xff0c;原始脉搏波信号往往受到生理干扰、环境噪声等…

人工智能在心电信号的心律失常应用

心律失常是一种常见的心脏疾病&#xff0c;它会导致心脏跳动不规律&#xff0c;严重的甚至会引发心脏骤停。传统的心律失常诊断方法是通过心电图对心律失常进行分析&#xff0c;但是这种方法需要医生具备专业的知识和经验&#xff0c;而且容易出现误诊。而人工智能技术可以对心…

倾斜摄影三维模型OSGB格式转换3DTILES的关键技术浅析

倾斜摄影三维模型OSGB格式转换3DTILES的关键技术浅析 将三维模型从OSGB格式转换为3DTILES格式需要掌握以下关键技术&#xff1a; 1、数据结构转换&#xff1a;OSGB格式和3DTILES格式采用了不同的数据结构&#xff0c;因此需要进行数据结构转换。OSGB格式采用了分层划分数据结构…

D3.js(3) path/折线图

一、概念 path 元素是用来绘制各种形状&#xff08;例如线条、曲线、弧形、圆弧等&#xff09;的元素。path 元素的 d 属性用来定义绘制的路径。具体来说&#xff0c;d 属性是一个字符串&#xff0c;包含一系列的命令和参数&#xff0c;用来描述路径的形状。 1.1 d属性 Mmov…

Linux子进程信号处理机制

Linux中子进程的信号处理与父进程的联系有以下三条&#xff1a; fork后子进程会继承父进程绑定的信号处理函数&#xff08;很好解释&#xff0c;子进程会拷贝父进程的代码&#xff0c;包括信号处理函数&#xff09;如果子进程调用exec族函数&#xff0c;子进程代码段被新的程序…

Qt 项目Mingw编译器转换为VS编译器时的错误及解决办法

错误 在mingw生成的项目&#xff0c;转换为VS编译器时通常会报些以下错误&#xff08;C4819警告&#xff0c;C2001错误&#xff0c;C2143错误&#xff09; 原因及解决方式 这一般是由于字符编码引起的&#xff0c;在源代码文件中包含了中文字符导致的。Qt Creator 生成的代码文…

算法的时间复杂度和空间复杂度分析

文章目录 实验目的实验内容实验过程运行结果复杂度分析 实验目的 通过本次实验&#xff0c;了解算法复杂度的分析方法&#xff0c;掌握递归算法时间复杂度的递推计算过程。 实验内容 二路归并排序的算法设计和复杂度分析。 实验过程 1.算法设计 归并排序&#xff1a;是指将…

活动回顾|多模态 AI 开发者的线下聚会@深圳站(内含福利)

回顾来了&#xff01; 4 月 22 日&#xff0c;由 Jina AI 和 OpenMMLab 联合主办的 「多模态 AI 」Office Hours 深圳站圆满结束&#xff0c;迎来了将近 60 位开发者的热情参与&#xff01;现场不仅有别开生面的「开发者集市」供大家打卡赢取好礼&#xff0c;更有四场干货满满的…

传统机器学习(六)集成算法(1)—随机森林算法及案例详解

传统机器学习(六)集成算法(1)—随机森林算法及案例详解 1、概述 集成学习&#xff08;Ensemble Learning&#xff09;就是通过某种策略将多个模型集成起来&#xff0c;通过群体决策来提高决策准确率。 集成学习首要的问题是选择什么样的学习器以及如何集成多个基学习器&…

杂谈 看唯工具论的问题 与 瑞典马工的一些言论 如何辩证看

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到2群&#xff08;共…

华为OD机试真题(Java),根据员工出勤信息,判断本次是否能获得出勤奖(100%通过+复盘思路)

一、题目描述 公司用一个字符串来标识员工的出勤信息 absent&#xff1a;缺勤late&#xff1a;迟到leaveearly&#xff1a;早退present&#xff1a;正常上班 现需根据员工出勤信息,判断本次是否能获得出勤奖&#xff0c;能获得出勤奖的条件如下&#xff1a; 缺勤不超过1次没…

闲聊之π和e到底是个啥

π和e 1. 圆周率π 耳熟能详的π&#xff0c;到底是什么&#xff0c;怎么来的&#xff1f; 圆周率π&#xff0c;圆的周长C2πr&#xff0c;其中r是圆的半径 1.1 刘徽割圆术 如图中所示&#xff0c;作出圆内的正十二边形&#xff0c;正二十四边形&#xff0c;…&#xff0c;用…

倾斜摄影三维模型OSGB格式 到OBJ 格式转换几个软件操作方法

倾斜摄影三维模型OSGB格式 到OBJ 格式转换几个软件操作方法 倾斜摄影三维模型是一种重要的三维地理信息数据&#xff0c;通常以OSGB格式保存。但在不同的三维软件中使用时&#xff0c;需要将其转换为更通用的OBJ格式。本文将介绍在技术上如何将OSGB格式的倾斜摄影三维模型转换为…

手机投屏到电脑的实用工具

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 背景说明 最近在项目开发工作中需要将手机屏幕投影到PC端&#xff0c;并通过PC端操作手机。为了满足该项开发需求&#xff0c;在项目小组中采用了Vysor作为工具。 Vysor介…

手写axios源码系列四:interceptor拦截器

文章目录 一、拦截器 interceptor1、创建 InterceptorManager.js 文件2、Axios 中实例化 InterceptorManager 类3、总结 在本系列的第一篇章节 手写axios源码系列一&#xff1a;axios核心知识点 中已经介绍过一些拦截器的基础知识&#xff0c;可知拦截器分为&#xff1a; 请求…

24从零开始学Java之如何正确地使用一维数组

作者&#xff1a;孙玉昌&#xff0c;昵称【一一哥】&#xff0c;另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 在之前的文章中&#xff0c;壹哥给大家讲解了java里的顺序结构、分支结构、循环结构等内容&#xff0…

diffusion扩散模型之hello world

以mnist图像生成样本为例&#xff0c;详细解释diffusion的每个步骤和过程 扩散模型包括两个过程&#xff1a;前向过程&#xff08;forward process&#xff09;和反向过程&#xff08;reverse process&#xff09;&#xff0c;其中前向过程又称为扩散过程&#xff08;diffusio…

Taro React组件开发(9) —— RuiCountDown 倒计时

1. 需求实现 根据传入的格式,返回倒计时的文本字段;时间格式需要自定义,需要返回对应时间的值;对毫秒级的时间进行渲染;自定义时间的样式;手动控制倒计时的开始、暂停和重置。2. 需求实现 查找网上类似组件 uView CountDown 倒计时;由于 uView CountDown 倒计时 是使用 …