首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

C++ Android 本地 Activity 初探

C++ Android 本地 Activity 初探 简介 我会带你完成一个简单 Android 本地 Activity。我将介绍一下基本设置,尽力将进一步学习所需工具提供给你。...最后我们通过 target_link_libraries 告诉 CMake,helloworld-c 要依赖 native_app_glue、native_app_glue 被命名为 log-lib...如此可以在我们 C++ 工程中引用本地应用逻辑。...这里你可以对不同 Android 架构平台做很多处理,但对最近版本 Android 来说,添加 EGL GLESv3 到你目标是一个不错操作。...:github.com/googlesampl… CMake 是我在 Android 上使用 C++ 时首选构建系统,可以在这里找到参考页面:cmake.org/ 如果你刚开始学 CMake,或者你

1.3K30

Android NDK开发完全剖析

之前两篇文章主要介绍了音视频SDK中线程设计消息队列,其实那些想从Android转向音视频开发同学来说,NDK方面的知识是不得不提“前置条件”,因为音视频开发主要是C/C++开发,也许有些同学会反驳...里面放着includelib文件夹,分别表示Android平台下头文件库文件,我们编译任何文件都可能会引用到这个文件架下面的库。这个链接是不能少。...CMake用于使用简单平台编译器独立配置文件来控制软件编译过程,生成可在您选择编译器环境中使用本机 makefile 工作区。...JNI是全称是Java native interface,是Android提供JavaNative代码(CC++)交互联系方式。...在原生方法返回后,即使对象本身继续存在,该引用也无效。 这适用于 jobject 所有子类,包括 jclass、jstring jarray。就和我们所说局部变量有点像。

1.7K10

Android NDK开发基础

CMakeC++运行时默认值为c++_static,CMake独立工具默认启用C++异常,默认启用 RTTI。...CMake使用工具来执行编译、链接等任务,不同语言需要使用不同工具; NDK工具文件位于 NDK目录中 {NDK_root}/build/cmake/android.toolchain.cmake...项目 如果项目中包含多个CMake项目,可以使用一个 CMakeLists.txt 文件作为顶级 CMake 构建脚本,添加其他 CMake 项目作为此构建脚本依赖项。...log) 下面主要列举一些常用NDK native api: c库: 等标准 C11 库头文件;无需显示链接; c++库:提供 C++17 支持; log:...4.1 JavaVM JNIEnv JNI 定义了两个关键数据结构“JavaVM”“JNIEnv”,两者本质上都是指向函数二级指针。

1.8K21

OpenGL ES 共享上下文实现多线程渲染

共享上下文实现多线程渲染 EGL 概念回顾 EGL 是 OpenGL ES 本地窗口系统(Native Window System)之间通信接口,它主要作用: 与设备原生窗口系统通信; 查询绘图表面的可用类型配置...egl、opengles 设备之间关系 图片中: Display (EGLDisplay) 是实际显示设备抽象; Surface(EGLSurface)是用来存储图像内存区域 FrameBuffer...ES 绘图一些状态信息; 在 Android 平台上开发 OpenGL ES 应用时,类 GLSurfaceView 已经为我们提供了 Display , Surface , Context 管理...当然我们也可以自己实现 EGL 封装,本文就是在 Native EGL 进行封装,不借助于 GLSurfaceView ,实现图片后台渲染,利用 GPU 完成对图像高效处理。...多线程渲染 类比 Android Java 层 Looper 类,我们在 C++ 实现 Looper 用于创建新线程管理线程中消息。

3.3K30

Android 基于OpenGl ES渲染yuv视频(十二)

“Y”表示明亮度,“U”“V”则是色度、浓度相对我们都比较熟悉编码格式RGB,RGB诉求于人眼色彩感应,YUV则着重于视觉对于亮度敏感程度。...native-lib GLESv2 EGL android...EGL是渲染API(如OpenGL, OpenGL ES, OpenVG)本地窗口系统之间接口。EGL可以理解为OpenGl ES ES设备之间桥梁,EGL是为OpenGl提供绘制表面的。...//sampler变量,使用函数glUniform1iglUniform1iv进行设置 glUniform1i(glGetUniformLocation(program, "yTexture...//yuv视频宽高 int width = 640; int height = 360; //通过 glBindTexture 函数将纹理目标以texts[0]为ID纹理对象绑定后,纹理目标所进行操作都反映到该纹理对象上

2K60

OpenGL ES 共享上下文实现多线程渲染

[OpenGL ES 共享上下文实现多线程渲染] EGL 概念回顾 EGL 是 OpenGL ES 本地窗口系统(Native Window System)之间通信接口,它主要作用: 与设备原生窗口系统通信...[egl、opengles 设备之间关系] 图片中: Display(EGLDisplay) 是实际显示设备抽象; Surface(EGLSurface)是用来存储图像内存区域 FrameBuffer...ES 绘图一些状态信息; 在 Android 平台上开发 OpenGL ES 应用时,类 GLSurfaceView 已经为我们提供了 Display , Surface , Context 管理...当然我们也可以自己实现 EGL 封装,本文就是在 Native EGL 进行封装,不借助于 GLSurfaceView ,实现图片后台渲染,利用 GPU 完成对图像高效处理。...多线程渲染 类比 Android Java 层 Looper 类,我们在 C++ 实现 Looper 用于创建新线程管理线程中消息。

5.3K101

音视频开发之旅(37) -FFmpeg + OpenGLES 边解码边播放视频(一)

, -0.5806, 0.0 ) *yuv; 1.2 OpenGL ES基础知识 我们在第二个系列中已经OpenGLES基本流程GLSL语法以及绘制各种图形、矩阵变换等进行过学习实践。...当然可以,音频OpenGL ES提供了Javanative支持,我们完全可以在native层进行渲染,只不过nativew层没有类似GLSuerfaceView即封装好EGL环境,这样就需要我们自己创建...JNI错误。...; 四、资料 音视频学习 (八) 掌握视频基础知识使用 OpenGL ES 2.0 渲染 YUV 数据 YUV RGB 转换算法 Android平台上基于OpenGl渲染yuv视频 Android...解决遇到解码渲染不同步导致跳帧、渲染时出现绿屏 花屏、渲染画面时颠倒等问题 感谢你阅读 篇外话: 原计划时接下来几篇是Native层渲染、音视频同步、编码、倍速播放、rtmp推拉流等。

1.2K00

Android硬件加速(二)-RenderThread与OpenGL GPU渲染

(不同GPU厂商实现不同,Android源码自带是软件实现,只具有参考意义)(Fence机制辅助GPU CPU同步) 第四阶段:swapBuffers,通知SurfaceFlinger图层合成 第五阶段...线程是一个单例,同一个进程只有一个RenderThread,RenderProxy 通过mRenderThread引用该单例,将来需要提交任务时候,直接通过该引用向RenderThreadQueue...Surface引用,同时swap时候,是能通知consumer EGLSurface surface = cnx->egl.eglCreateWindowSurface(...return EGL_TRUE; } 上面的nativeWindow其实就是Surface: int Surface::dequeueBuffer(android_native_buffer_t** buffer...转换成标准OpenGL命令,isssue给GPU Render线程通过swapbuffer通知GPU(待研究),同时完成向SurfaceFlinger画布数据提交 作者:看书小蜗牛 Android

8.8K51

FFmpeg + OpenGLES 实现视频解码播放视频滤镜

视频解码播放视频滤镜 1 OpenGL ES 渲染解码帧 经过上面几节介绍,我们音视频解码过程已经比较熟悉了。本文要用 OpenGL 实现视频渲染,这里再回顾下视频解码流程: ?...由于本文是面向初学者快速上手 FFmpeg 开发,我们直接利用 Android GLSurfaceView 类创建 OpenGL 渲染环境,GLSurfaceView 类已经封装了 EGL 创建渲染上下文操作...,启动了一个独立渲染线程,完全符合我们渲染视频解码帧需求。...GLSurfaceView 类 Renderer 接口对应渲染三个关键函数,我们通过 JNI 延伸到 Native 层: @Override public void onSurfaceCreated...渲染效果 2 添加视频滤镜 这里又回到了 OpenGL ES 开发领域,这一块感兴趣同学可以参考这篇Android OpenGL ES 从入门到精通系统性学习教程。

2.7K10

Android 开机动画源码分析

SystemServermain函数首先调用init1来启动本地服务,init1函数通过JNI调用C语言中system_init()函数来实现服务启动。...模板类,BinderService类instantiate()函数就是构造对应类型服务对象,注册到ServiceManager进程中。...return UNKNOWN_ERROR; } return NO_ERROR; } 该函数就是创建一个线程,运行现在执行函数_threadLoop int Thread::_threadLoop...bootanimation.zip组成,压缩包里面包含数张png格式图片,还有一个desc.txt文本文档,开机时按desc.txt里面的指令,屏幕上会按文件名称顺序连续播放一张张图片,就像播放原始胶带影片一样...folder1folder2文件夹内包含是两个动画系列图片,图片为PNG格式。

56330

Android 音视频开发打怪升级:OpenGL渲染视频画面篇】四、深入了解OpenGL之EGL

// 配置数组,主要是配置RAGA位数深度位数 // 两个为一,前面是key,后面是value // 数组必须以EGL14.EGL_NONE结尾 val...配置上下文getConfig: 根据选择EGL版本,配置版本标志 初始化配置列表,配置渲染rgba位数深度位数,两个为一,前面一个为类型,后面为值,并且必须以EGL14.EGL_NONE作为结尾...Android 指定标志EGL_RECORDABLE_ANDROID 告诉EGL它创建surface必须视频编解码器兼容。...注:当页面重新回到前台时,会重新创建surface,这时只要重新创建EGLSurface,绑定上下文EGLSurface,就可以继续渲染画面,无需开启新渲染线程。...四、参考文章 OpenGL 之 EGL 使用实践 从源码角度剖析Android系统EGLGL线程

2.2K20

一文搞懂 OpenGL 多重采样抗锯齿,再也不怕面试被问到了

即使三角形覆盖了部分屏幕像素,但是采样点没被覆盖,就不会生成片段。 由于屏幕像素总量限制,有些边上像素能被渲染出来,而有些则不会。结果就是我们渲染出基本图形非光滑边缘产生了上图锯齿边。...多重采样抗锯齿原理 多重采样抗锯齿通过在渲染过程中图像进行额外抽样来解决这个问题。...多重采样抗锯齿实现 通过 EGL 设置多重采样 我们知道 EGL 创建 OpenGL 渲染上下文,会调用一系列 egl 函数,例如 eglGetDisplay() ,eglInitialize()...EGL_SAMPLES, 4, //设置每个片段采样点数 EGL_NONE }; 然后就是正常流程,创建渲染表面 EGLContext。...C++ int maxSamples = 0; glGetIntegerv(GL_MAX_SAMPLES, &maxSamples); Android 平台可以直接通过 GLSurfaceView 中内置函数

33710

OpenCV3 安卓应用编程:1~6 全

您可能想知道cmake_android_arm.sh构建脚本在做什么。 实际上,它只是创建一个构建目录运行 CMake 命令以使用 OpenCV 特定配置填充该目录。...支持库提供向后兼容性,因此即使用户设备运行是旧版操作系统,应用也可以使用 Android 许多新功能。 注意 请记住,工作空间还必须包含 OpenCV 库项目。...我们这种方法实现将特征检测器,描述符提取器描述符匹配器应用于源图像灰度版本。 然后,我们调用帮助程序函数,该函数查找被跟踪目标的四个角(如果有),绘制四边形轮廓。...每当我们从 Java 端进行 JNI 函数调用时,都会隐式传递这两个参数。 我们newSelf函数作用是创建一个 C++ 对象,并为 Java 端提供该对象引用。...函数名称,返回类型参数类型必须与SecondSightJNI.cpp中函数名称匹配。 (否则,我们将在运行时出现错误。)

5.2K10

详解Android studio ndk配置cmake开发native C

Android 2.2 以后版本NDK支持已经非常好了。最近把一个纯Candroid项目,从eclipse ADT迁移到Android studio上。...####### # 这个是设置了编译C参数,这里使用C99开启三级优化 # 类似的设置还有CMAKE_CPP_FLAGS就是设置编译C++参数 # 更多参数就要根据需要看文档了 set(...################ # 这个函数是用来编译库,主要是so文件a文件。...android EGL GLESv2 log z ) 那么编译出来库文件在为什么位置呢,如下: ? 系统生成apk时候,会自动安装进去。...需要注意是,在子目录CMakeLists.txt中内置变量CMAKE_SOURCE_DIR是父目录值,而不是当前文件目录。另外,可以看到我们编译出了两个so文件,链接它们。

2.2K51
领券