首页
学习
活动
专区
工具
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.4K30

    Android NDK开发完全剖析

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

    1.9K10

    Android NDK开发基础

    ,CMake的C++运行时默认值为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”,两者本质上都是指向函数表的二级指针。

    2K21

    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 用于创建新线程并管理线程中的消息。

    4.1K30

    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变量,使用函数glUniform1i和glUniform1iv进行设置 glUniform1i(glGetUniformLocation(program, "yTexture...//yuv视频宽高 int width = 640; int height = 360; //通过 glBindTexture 函数将纹理目标和以texts[0]为ID的纹理对象绑定后,对纹理目标所进行的操作都反映到该纹理对象上

    2.3K60

    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 用于创建新线程并管理线程中的消息。

    6.5K101

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

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

    1.5K00

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

    (不同GPU厂商实现不同,Android源码自带的是软件实现的,只具有参考意义)(Fence机制辅助GPU CPU同步) 第四阶段:swapBuffers,并通知SurfaceFlinger图层合成 第五阶段...线程是一个单例,同一个进程只有一个RenderThread,RenderProxy 通过mRenderThread引用该单例,将来需要提交任务的时候,直接通过该引用向RenderThread的Queue...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

    10.2K51

    Android 开机动画源码分析

    SystemServer的main函数首先调用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里面的指令,屏幕上会按文件名称顺序连续的播放一张张的图片,就像播放原始的胶带影片一样...folder1和folder2文件夹内包含的是两个动画的系列图片,图片为PNG格式。

    67030

    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 从入门到精通系统性学习教程。

    3K10

    【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系统EGL及GL线程

    2.6K20

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

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

    1.1K10

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

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

    5.3K10

    【Android 音视频开发:FFmpeg音视频编解码篇】二、Android 引入FFmpeg

    但是不必担心,一是有了 CMake ,二是对于 C/C++ 的基本使用其实和 Java 差不多,本系列涉及到的,也都是对 C/C++ 的基础使用,毕竟,高级的我也不会不是吗?哈哈哈~~ 1....往上一句代码,用 external 声明了一个外部引用的方法 stringFromJNI() ,这个方法和 C/C++ 层的代码是对应的。...添加、链接 FFmpeg so 库 上面已经把 so 和 头文件 放置到对应的目录中了,但是编译器是不会把它们编译、链接、并打包到 Apk 中的,我们还需要在 CMakeLists.txt 中显性的把相关的...so 添加和链接起来。...native-lib.cpp ) # 指定编译目标库时,cmake要链接的库 target_link_libraries( # 指定目标库,native-lib

    2.6K10
    领券