字节流动

其他

阿里二面:weak_ptr 是怎么知道 shared_ptr 被释放了?

weak_ptr顾名思义就是弱指针,它不会增加对象的引用计数,欸有重载operator*和operator->,使用时,应当通过weak_ptr的lock函数构造一个shared_ptr。作用:防止循环引用(以后博客分析)。应用:在enable_shared_from_this类中,它有一个weak_ptr
2023年3月31日
其他

阿里一面:带虚函数空类的大小

getchar();}得到结果为:1。类的实例化就是给每个实例在内存中分配一块地址。空类被实例化时,会由编译器隐含的添加一个字节。所以空类的size为1。2.虚函数class
2023年3月24日
其他

阿里一面:一道简单的 C++ 基础题

的内存结构。在C语言中,还有另外一种和结构体非常类似的语法,叫做共用体(Union),它的定义格式为:union
2023年3月23日
其他

编程语言那么多,为什么说 C++ 无可替代?

当然,专栏里最让我惊喜的还是卢誉声老师真正做到了项目实例出发,里面还包含了全套的案例代码,都是可以直接编译运行的项目代码,简直就是福利了,内容方面也是搭配了超多的流程图来讲解,清晰易懂。
2023年1月17日
其他

Android 源码中的 JNI,到底是如何使用的?

Log”);我们就以Log系统为例来学习JNI。我们先看一下Log类的内容,在android源码的\frameworks\base\core\java\android\Log.java文件中/**
2023年1月12日
其他

Android Bitmap 像素排列与 JNI 操作

图像的数值表示RGBRGB颜色模型即红绿蓝颜色模型。由模仿生物视网膜三种视锥细胞产生,之后通过三原色叠加来进行彩色图像显示。通过在黑色上不断叠加三原色来显示不同的颜色。在RGB颜色空间中,分别将RGB作为笛卡尔坐标系中XYZ坐标系产生。每一个颜色取值范围为[0,256)RGB是从颜色发光的原理来设计定的,通俗点说它的颜色混合方式就好像有红、绿、蓝三盏灯,当它们的光相互叠合的时候,色彩相混,而亮度却等于两者亮度之总和,越混合亮度越高,即加法混合。红、绿、蓝三个颜色通道每种色各分为256阶亮度,在0时“灯”最弱——是关掉的,而在255时“灯”最亮。当三色灰度数值相同时,产生不同灰度值的灰色调,即三色灰度都为0时,是最暗的黑色调;三色灰度都为255时,是最亮的白色调。对一种颜色进行编码的方法统称为颜色空间或色域。用最简单的话说,世界上任何一种颜色的“颜色空间”都可定义成一个固定的数字或变量。RGB(红、绿、蓝)只是众多颜色空间的一种。采用这种编码方法,每种颜色都可用三个变量来表示-红色绿色以及蓝色的强度。记录及显示彩色图像时,RGB是最常见的一种方案。所以每一个图像都可以由RGB组成,那么一个像素点的RGB该如何表示呢?音频里面的每一个采样(sample)均使用16个比特来表示,那么像素里面的子像素又该如何表示呢?常用的表示方式有以下几种。浮点表示:取值范围为0.0~1.0,比如,在OpenGL
2023年1月10日
其他

快手是如何玩转音视频技术的?

两门课的作者,都是来自短视频软件中的“老大哥”——快手。在这个国民级的短视频平台上,亿万用户在这里分享生活。快手的音视频技术团队由业内资深的行业专家组成,他们架起了保障用户体验的桥梁。
2023年1月4日
其他

Vulkan 和 OpenGL 的区别

Vulkan更有利于掌握图形显示的知识。来源:https://geek-docs.com/vulkan/vulkan-tutorial/vulkan-and-opengl.html
2022年12月21日
其他

堆内存和栈内存的区别

大家好,我是程序喵。这篇文章分享一个面试中经常被问到的知识点:堆内存和栈内存有什么区别?平时开发应该使用堆内存还是栈内存?要回答这个问题,我们首先需要知道什么是堆内存,什么是栈内存,它们的分配和回收有什么特点?
2022年12月9日
其他

JNI 局部引用、全局引用和弱全局引用

这篇文章比较偏理论,详细介绍了在编写本地代码时三种引用的使用场景和注意事项。可能看起来有点枯燥,但引用是在JNI中最容易出错的一个点,如果使用不当,容易使程序造成内存溢出,程序崩溃等现象。所以讲得比较细,有些地方看起来可能比较啰嗦,还请轻啪!《Android
2022年11月4日
其他

面试中经常被问到的 OpenGL ES 对象,你知道的有哪些?(校正)

是不是精简了很多?glUseProgram(m_ProgramObj);glBindVertexArray(m_VaoId);glDrawElements(GL_TRIANGLES,
2022年10月28日
其他

关于 YUV 格式的一些总结

一、YUV和YCbCr1、定义YUV,是一种颜色编码方法,常使用在各个视频处理组件中。Y表示明亮度(Luminance或Luma),也就是灰阶值,U和V表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。YCbCr,这里的Y和YUV的Y相同,而Cb和Cr则为蓝色和红色的浓度偏移量成份,也是用来表示色彩的。2、区别和联系本质上来说两者没有什么区别,YCbCr
2022年10月26日
自由知乎 自由微博
其他

【活动推荐】一年一度的音视频行业大会来了!

技术的优化与演进音频与视频两个技术专场,每年都是开发者最关注的两个专场。往年这两方面的议题都是围绕编解码标准,不同场景下软件算法的优化,以及更前沿的算法研究展开,其中还有很多演讲分享了结合
2022年9月23日
其他

使用 vendor ndk 实现 Android Camera preview

你可以认为是描述编译参数和一些配置的文件。比如指定使用c++11还是c++14编译,会引用哪些共享库,并描述关系等,还会指定编译的ABI。只有有了这些
2022年9月22日
其他

直播创新玩法下的技术进化与实践

近年来,视频直播在众多行业的应用日益广泛,直播的用户渗透率也在不断提升,随之诞生了多种直播玩法和场景,直播形态不断丰富和演进。与此同时,用户对直播体验的需求也越来越高,给直播技术带来了更多的挑战。视频直播如何应对复杂连麦的场景?直播架构体系如何应对超高流量?直播画面如何更高清?视频如何更便捷地存储?9
2022年9月21日
其他

Google 为何把 SurfaceView 设计的这么难用?

描述:https://source.android.com/docs/core/graphics/architecture最终我尝试走近这片迷雾,并一点点去思考下列问题的答案:SurfaceView
2022年9月20日
其他

Android NDK Camera2 使用

session);ACaptureSessionOutputContainer,通过ACaptureSessionOutputContainer_create方法创建。camera_status_t
2022年9月19日
其他

Android MediaCodec 使用说明

方法之前通过设置回调来异步处理数据。所以这里就直接介绍异步模式下如何输入需要编解码的数据,以及如何获取编解码后的数据。异步模式异步状态官方示例代码:MediaCodec
2022年9月16日
其他

关于 C++ 中的 extern "C",你真的了解吗

来区分。而本质上,编译器在进行编译时,与函数的处理相似,也为类中的变量取了一个独一无二的名字,这个名字与用户程序中同名的全局变量名字不同。其次,看看在未加
2022年9月13日
其他

Android.mk 文件语法详解

my-dir返回最近一次include的Makefile的路径,通常返回Android.mk所在的路径,它用来作为Android.mk的开头来定义LOCAL_PATH。LOCAL_PATH
2022年9月9日
其他

Java、C++ 内存模型都不知道,还敢说自己是高级工程师?

在这一部分关注点会从计算机软硬件,转向对具体内存管理算法的学习。学习内存管理算法,能够让我们正确地使用各种不同语言,例如在Python和Swift中你要注意解循环引用等等。
2022年9月8日
其他

OpenGL ES 与 EGL 有什么关系?

System)之间的通信接口,它的主要作用:与设备的原生窗口系统通信;查询绘图表面的可用类型和配置;创建绘图表面;在OpenGL
2022年9月7日
其他

警惕 996 让你成为一个走下坡路的人

前一段时间“996”闹的那么凶,看到很多值得思考的观点,顺便谈一下我对“996”的一些浅薄认识。1.“996”是一种工作制度的非官方简称,一般在程序员圈比较流行,即早上
2022年8月29日
其他

OpenGL ES 高级进阶:EGL 及 GL 线程

ES的方法GLES30.glIsTexture(imageTexture)来判断一个texture是不是合法的texture。如果我们把上述创建texture的操作放到主线程中会怎样?class
2022年8月25日
其他

深入 Android 系统 - Android 的 JNI

localRef);复制代码全局引用(GlobalReference)全局引用(GlobalReference)的对象需要显式的创建、删除。虚拟机不会回收。JNIEnv提供了两个函数:jobject
2022年8月24日
其他

Android NDK 开发逆向之 so 文件格式详解

第一、前言从今天开始我们正式开始Android的逆向之旅,关于逆向的相关知识,想必大家都不陌生了,逆向领域是一个充满挑战和神秘的领域。作为一名Android开发者,每个人都想去探索这个领域,因为一旦你破解了别人的内容,成就感肯定爆棚,不过相反的是,我们不仅要研究破解之道,也要研究加密之道,因为加密和破解是相生相克的。但是我们在破解的过程中可能最头疼的是native层,也就是so文件的破解。所以我们先来详细了解一下so文件的内容下面就来看看我们今天所要介绍的内容。今天我们先来介绍一下elf文件的格式,因为我们知道Android中的so文件就是elf文件,所以需要了解so文件,必须先来了解一下elf文件的格式,对于如何详细了解一个elf文件,就是手动的写一个工具类来解析一个elf文件。第二、准备资料我们需要了解elf文件的格式,关于elf文件格式详解,网上已经有很多介绍资料了。这里我也不做太多的解释了。不过有两个资料还是需要介绍一下的,因为网上的内容真的很多,很杂。这两个资料是最全的,也是最好的。我就是看这两个资料来操作的:第一个资料是非虫大哥的经典之作:看吧,是不是超级详细?后面我们用Java代码来解析elf文件的时候,就是按照这张图来的。但是这张图有些数据结构解释的还不是很清楚,所以第二个资料来了。第二个资料:北京大学实验室出的标准版http://download.csdn.net/detail/jiangwei0910410003/9204051这里就不对这个文件做详细解释了,后面在做解析工作的时候,会截图说明。关于上面的这两个资料,这里还是多数两句:一定要仔细认真的阅读。这个是经典之作。也是后面工作的基础。第三、工具当然这里还需要介绍一个工具,因为这个工具在我们下面解析elf文件的时候,也非常有用,而且是检查我们解析elf文件的模板。就是很出名的:readelf命令不过Window下这个命令不能用,因为这个命令是Linux的,所以我们还得做个工作就是安装Cygwin。关于这个工具的安装,大家可以看看这篇文章:http://blog.csdn.net/jiangwei0910410003/article/details/17710243不过在下载的过程中,我担心小朋友们会遇到挫折,所以很贴心的,放到的云盘里面:http://pan.baidu.com/s/1C1Zci下载下来之后,需要改一个东西才能用:该一下这个文件:这个路径要改成你本地cygwin64中的bin目录的路径,不然运行错误的。改好之后,直接运行Cygwin.bat就可以了。关于readelf工具我们这里不做太详细的介绍,只介绍我们要用到的命令:1、readelf
2022年8月19日
其他

减少 Android NDK 开发中 SO 包大小的几种方法

背景这周在做Yoga包的压缩工作。Yoga本身是用BUCK脚本编译的,而最终编译出几个包大小大总共约为7M,不能满足项目中对于APK大小的限制,因此需要对它进行压缩。这里先将Yoga编译脚本用CMAKE重新改写,以便可以在android
2022年8月15日
其他

Vulkan 和 OpenGL 的区别

Vulkan更有利于掌握图形显示的知识。来源:https://geek-docs.com/vulkan/vulkan-tutorial/vulkan-and-opengl.html
2022年6月24日
其他

干货:Android 音视频开发学习路线图

实现音视频播放(mp3/mp4/pcm/yuv)https://github.com/yangkun19921001/AVSample/tree/master/javaavplayerNative
2022年6月22日
其他

Vulkan - 高性能渲染

App开发者来说,这些工作什么时候发生,是否发生,都是在API层面无法确定的。所以这样的结果就是在CPU端造成卡顿。卡顿也许是你第一次给管线绑定特定的Shader,VBO或者Blend
2022年6月18日
其他

OpenGL 多线程同步方案

//...写在最后同步的方案其实不难,难的是怎么查关于多线程的渲染Bug。所以一定要从头理清项目里的渲染逻辑,从单线程小范围开始慢慢多线程改造是一条比较平坦的路。原文链接:
2022年6月16日
其他

Android JNI 常见问题

调用,这个比较麻烦一些,而且缓存classloader可能也会存在一些问题。使用java/lang/ClassLoader的getClassLoader,然后调用findClass:static
2022年6月13日
其他

建议收藏 | Android JNI 相关文章汇总

--进技术交流群,扫码添加我的微信:Byte-Flow
2022年6月6日
其他

Android JNI SO 加载原理

env),它的实现是可见,这里的gRegJNI是一个RegJNIRec数组,都通过调用array[i].mProc(env)来注册,由于C++知识的匮乏,初看还不太理解,做一下说明,拿方法int
2022年6月1日
其他

Android JNI 开发准则

函数返回的几乎每个对象都属于“局部引用”。局部引用只有在当前线程中的当前原生方法运行期间有效。**在原生方法返回后,即使对象本身继续存在,该引用也无效。**局部引用只有在当前方法内有效。这适用于
2022年5月31日
其他

Android JNI 动态库逆向

voidJNICALLJava_com_wsy_jnidemo_test_ReverseTest_reverseJudge(
2022年5月27日
其他

Android JNI原理分析

env);这些extern方法绝大多数位于/framework/base/core/jni/目录,大多数情况下native文件命名方式:[包名]_[类名].cpp[包名]_[类名].hTips:
2022年5月23日
其他

Android JNI 中发送 Http 网络请求

背景之前Linux网络编程的文章下有小伙帮咨询jni中发送http请求的示例,本文基于libcurl库实现http网络请求发送功能。image-20220211111024046.png2.
2022年5月20日
其他

Android NDK 减少 so 库体积方法总结

NDK)。因此要在程序中引入exception要自己实现相关逻辑,但是这样又会增加包体大小。对于开发者来说,exception可以帮助快速定位问题,而对于使用者并不是那么重要,这里可以去掉。10
2022年5月19日
其他

​Android 引用三方库导致 so 库冲突的解决办法

过滤掉某些文件或者目录不添加到APK中,作用于APK,不能过滤aar和jar中的内容。packagingOptions
2022年5月17日
其他

C++ 面试被问到的“左值引用和右值引用”

1.左值和右值在C++11中可以取地址的、有名字的就是左值,反之,不能取地址的、没有名字的就是右值(将亡值或纯右值)。举个例子,int
2022年5月7日
其他

STL vector push_back 和 emplace_back 区别

在使用vector容器时,往容器里添加元素时,有push_back和emplace_back两种方法,一般用得最多得是push_back,下面看看这两种方法得区别:push_back源码,有重载得左值和右值,关于左值和右值可以查看右值引用、移动构造函数和movevoid
2022年5月5日
其他

C++ STL deque 容器底层实现原理(深度剖析)

数组中的位置;迭代器在遍历某个具体的连续空间时,必须能够判断自己是否已经处于空间的边缘位置。如果是,则一旦前进或者后退,就需要跳跃到上一个或者下一个连续空间中。为了实现遍历
2022年4月28日
其他

了解 C++ 多态与虚函数表

什么是多态,多态有什么用途?定义:“一个接口,多种方法”,程序在运行时才决定调用的函数。实现:C++多态性主要是通过虚函数实现的,虚函数允许子类重写override(注意和overload的区别,overload是重载,是允许同名函数的表现,这些函数参数列表/类型不同)。目的:接口重用。封装可以使得代码模块化,继承可以扩展已存在的代码,他们的目的都是为了代码重用。而多态的目的则是为了接口重用。用法:声明基类的指针,利用该指针指向任意一个子类对象,调用相应的虚函数,可以根据指向的子类的不同而实现不同的方法。关于重载、重写的区别Overload(重载):在C++程序中,可以将语义、功能相似的几个函数用同一个名字表示,但参数或返回值不同(包括类型、顺序不同),即函数重载。(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual
2022年4月26日
其他

Android 图形显示系统 - 初识 ANativeWindow/Surface/SurfaceControl

"行百里者半九十",是说步行一百里路,走过九十里,只能算是走了一半。因为步行越接近目的地,走起来越困难。借指凡事到了接近成功,往往是最吃力、最艰难的时段。劝人做事贵在坚持,有始容易,有终实难。不多说了,希望自己能坚持写完这个系列
2022年3月28日
其他

FFmpeg 音视频倍速控制

,整理:音视频开发进阶来源:https://blog.csdn.net/qq_22633333/article/details/104967304--
2022年3月25日
其他

Android NDK CMake 指定 so 输出路径以及生成多个 so 的案例与总结

-Wno-error=pointer-sign")#设置生成的so动态库最后输出的路径set(CMAKE_LIBRARY_OUTPUT_DIRECTORY
2022年3月15日
其他

C++ 面试八股文:list、vector、deque 比较

优点:不指定一块内存大小的数组的连续存储,即可以像数组一样操作,但可以对此数组进行动态操作。通常体现在push_back()
2022年3月10日
其他

C++经典面试题(最全,面中率最高)

1.new、delete、malloc、free关系delete会调用对象的析构函数,和new对应free只会释放内存,new调用构造函数。malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。2.delete与
2022年2月19日