自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

洪伟的专栏

长兄于病视神,未有形而除之,故名不出于家。中兄治病,其在毫毛,故名不出于闾。若扁鹊者,镵血脉,投毒药,副肌肤,闲而名出闻于诸侯。

  • 博客(211)
  • 资源 (10)
  • 收藏
  • 关注

原创 Rust 程序设计语言学习——枚举&模式匹配

假设我们要跨省出行,有多种交通工具供选择。常用的交通工具有飞机、火车、汽车和轮船。这是我们常用的跨省出行乘坐交通工具的所有形式:所以可以枚举出所有可能的值,这也正是此枚举名字的由来。可以通过在代码中定义一个 Vehicle 枚举来表现这个概念并列出可能的交通工具类型,Airplane(飞机)、Train(火车)、Car(汽车) 和 Ship(轮船)。这被称为枚举的成员Airplane,Train,Car,Ship,如果现在我们要区分汽车到底是哪一种?

2024-04-05 20:10:31 1269 1

原创 Rust 程序设计语言学习——结构体

定义结构体,需要使用struct关键字并为整个结构体提供一个名字。结构体的名字需要描述它所组合的数据的意义。接着,在大括号中,定义每一部分数据的名字和类型,我们称为 字段(field)。

2024-03-24 07:41:29 1011

原创 Rust 程序设计语言学习——所有权

这一节主要来学习 Rust 语言的其他特性,所有权、引用与借用、Slice 类型。

2024-03-17 07:04:54 1167 1

原创 Rust 程序设计语言学习——基础语法

println!( “Hello World”) 中的 println 后面还有一个!符号,println 不是一个函数,而是一个宏规则。println!()和print!()。这两个"函数"都是向命令行输出字符串的方法,区别仅在于前者会在输出的最后附加输出一个换行符。当用这两个"函数"输出信息的时候,第一个参数是格式字符串,后面是一串可变参数,对应着格式字符串中的"占位符",这一点与 C 语言中的printf函数很相似。但是,Rust 中格式字符串中的占位符不是 “% + 字母” 的形式,而是一对{}

2024-01-21 11:09:12 1382 1

原创 【ARMv8 SIMD和浮点指令编程】浮点数据转换指令——数据类型互转必备

浮点数据转换指令包括不同的浮点精度数之间的转换,还包括整型和浮点数之间的转化。在了解数据转换指令前,必须学习 IEEE 754 定义的五种舍入规则。

2023-12-09 07:33:58 1178

原创 【ARMv8 SIMD和浮点指令编程】浮点加减乘除指令——四则运算

浮点指令有专门的加减乘除四则运算指令,比如 FADD、FSUB、FMUL、FDIV 等。

2023-11-05 13:56:32 733

原创 【ARMv8 SIMD和浮点指令编程】NEON 通用数据处理指令——复制、反转、提取、转置...

NEON 通用数据处理指令包括以下指令(不限于):• DUP将标量复制到向量的所有向量线。• EXT提取。反转向量中的元素。• TBL、TBX向量表查找。• TRN向量转置。• UZP、ZIP向量交叉存取和反向交叉存取。

2023-10-29 07:30:01 1082

原创 【ARMv8 SIMD和浮点指令编程】NEON 存储指令——如何将数据从寄存器存储到内存?

和加载指令一样,NEON 有一系列的存储指令。比如 ST1、ST2、ST3、ST4。

2023-10-28 14:54:47 1388

原创 【ARMv8 SIMD和浮点指令编程】NEON 加载指令——如何将数据从内存搬到寄存器(其它指令)?

除了基础的 LDx 指令,还有 LDP、LDR 这些指令,我们也需要关注。

2023-09-30 07:10:46 671

原创 【ARMv8 SIMD和浮点指令编程】NEON 加载指令——如何将数据从内存搬到寄存器(LDx&LDxR)?

将内存中的数据搬到 NEON 寄存器,有很多指令可以完成,熟悉这些指令是必须的。

2023-09-30 07:00:50 870

原创 【ARMv8 SIMD和浮点指令编程】NEON 乘法指令——asimdrdm

ARMv8 有许多版本(ARMv8.1 等),它们定义了强制和可选功能。Linux 内核通过 hwcaps 公开了其中一些功能的存在。这些值显示在 /proc/cpuinfo 中。

2023-09-03 07:24:33 982

原创 【ARMv8 SIMD和浮点指令编程】NEON 乘法指令——乘法知多少?

NEON 乘法指令包括向量乘法、向量乘加和向量乘减,还有和饱和相关的指令。总之,乘法指令是必修课,在我们的实际开发中会经常遇到。

2023-08-27 17:05:18 1035

原创 【ARMv8 SIMD和浮点指令编程】NEON 移位指令——左右移位之术

NEON 移位指令主要涉及逻辑移位、算术移位两大类,同时下面还介绍了两个移位插入指令。

2023-07-22 08:14:13 402

原创 【ARMv8 SIMD和浮点指令编程】NEON 比较指令——比较的方方面面

比较指令是常见的一类指令,NEON 中当然也排除,下面涉及比较和测试位两类指令。

2023-06-22 07:20:22 720

原创 【ARMv8 SIMD和浮点指令编程】NEON 移动指令——精通 MOV?

移动指令主要涉及 MOV 和 MVN,它们分别是移动和求反移动。如果你认为仅仅两条指令,还是太小看设计者了!

2023-06-18 07:22:32 789

原创 【ARMv8 SIMD和浮点指令编程】NEON 逻辑指令——与或非有多少?

NEON 逻辑指令主要包括与、或、异或、位清除、或非、为 False 时按位插入、为 True 时按位插入和按位选择指令。

2023-06-10 07:43:37 887

原创 【ARMv8 SIMD和浮点指令编程】NEON 通用算术指令——杂项也不少

无符号向量差值绝对值累加和差值绝对值。向量绝对值和求反。无符号向量最大值,无符号向量最小值,无符号向量按对最大值,无符号向量按对最小值,无符号跨向量最大值和跨向量最小值。向量前导符号位计数,前导零计数和设置位计数。

2023-06-10 07:28:02 618

原创 【ARMv8 SIMD和浮点指令编程】NEON 减法指令——减法也好几种

向量减法包括常见的普通加指令,还包括长减、宽减、半减、饱和减、按对减、按对加并累加、选择高半部分结果加、全部元素加等。

2023-06-04 06:43:12 382

原创 【ARMv8 SIMD和浮点指令编程】NEON 加法指令——加法都能玩出花

向量加法包括常见的普通加指令,还包括长加、宽加、半加、饱和加、按对加、按对加并累加、选择高半部分结果加、全部元素加等。如果你和我一开始以为的只有一种普通加,那就太小看设计者了!同时这么多加法指令的确会提升我们设计程序的效率,同样学习这些指令也需要花费不少精力。

2023-06-03 07:27:57 481

原创 【ARMv8 编程】A64 系统控制和其他指令

A64 指令集包含与以下相关的指令:异常处理、系统寄存器访问、调试、提示指令,在许多系统中都有电源管理应用程序。

2023-05-17 07:24:13 1037

原创 【ARMv8 编程】A64 流控制指令

A64 指令集提供了许多不同种类的分支指令。对于简单的相对分支,即那些从当前地址偏移的分支,使用 B 指令。无条件简单相对分支可以从当前程序计数器位置向后或向前分支最多 128MB。有条件的简单相对分支,其中条件代码附加到 B,具有 ±1MB 的较小范围。调用子程序时,需要将返回地址存储在链接寄存器(X30)中,使用 BL 指令。这没有条件版本。BL 的行为类似于 B 指令,具有将返回地址存储在寄存器 X30 中的附加作用,返回地址是 BL 之后指令的地址。

2023-05-17 07:18:33 503

原创 【ARMv8 编程】A64 内存访问其他指令

A64 内存访问其他指令包括浮点和 NEON 标量加载存储指令、访问多个内存位置指令、非特权访问指令、预取内存指令、非临时加载存储对指令、内存屏障和栅栏指令、同步原语等。

2023-05-13 11:02:28 992

原创 【ARMv8 编程】A64 内存访问指令——内存存储指令

在内存加载一节中实际上已经使用了内存存储指令了,内存存储指令将寄存器的值存储到内存中。还有 unscaled-offset 偏移形式,例如STUR。程序员通常不需要明确使用 STUR 形式,因为大多数汇编器可以根据使用的偏移量选择合适的版本。要存储的大小可能小于寄存器。可以通过向 STR 添加 B 或 H 后缀来指定它。在这种情况下,存储的总是寄存器的最低有效部分。

2023-05-02 06:47:07 1215

原创 【ARMv8 编程】A64 内存访问指令——内存加载指令

与所有先前的 ARM 处理器一样,ARMv8 架构是一种加载/存储架构。这意味着没有数据处理指令直接对内存中的数据进行操作。数据必须首先被加载到寄存器中,修改,然后存储到内存中。该程序必须指定地址、要传输的数据大小以及源或目标寄存器。有额外的加载和存储指令提供更多选项,例如非临时加载/存储、加载/存储独占和获取/释放。对于加载到整数寄存器中的指令,可以选择要加载的大小。

2023-04-29 07:46:38 1494

原创 【ARMv8 编程】A64 数据处理指令——位域&字节操作指令

有些指令将字节、半字或字扩展到寄存器大小,可以是 X 或 W。这些指令存在于有符号(SXTB、SXTH、SXTW)和无符号(UXTB、UXTH)变体中,并且是适当的位域操作指令。这些指令的有符号和无符号变体都将字节、半字或字(尽管只有 SXTW 对字进行操作)扩展到寄存器大小。源始终是 W 寄存器。目标寄存器是 X 或 W 寄存器,但 SXTW 除外,它必须是 X 寄存器。—— 通过重复字节的最左边的位,将寄存器 W1 的最低有效字节从 8 位符号扩展为 64 位。

2023-04-15 13:46:48 2290

原创 【ARMv8 编程】A64 数据处理指令——移动&比较指令

移动指令主要为 MOV 以及它的各种“变体”,而比较指令主要用来进行比较并更新条件标志,用来实现条件判断等。

2023-04-08 07:20:49 2138 2

原创 【ARMv8 编程】A64 数据处理指令——逻辑&移位指令

逻辑指令包括与、或等指令,移位指令则分为逻辑移位和算术移位指令,下面则详细展开学习。

2023-04-02 15:36:23 1582

原创 【ARMv8 编程】A64 数据处理指令——算术指令

加减乘除类的指令统称为算术指令(ADD、SUB、ADC、SBC、NEG、MADD、MNEG、MSUB、MUL、SMADDL、SMNEGL、SMSUBL、SMULH、SMULL、UMADDL、UMNEGL、UMSUBL、UMULH、UMULL、SDIV、UDIV)

2023-03-26 08:21:25 1460

原创 【ARMv8 编程】ARMv8 指令集介绍

ARMv8 架构中引入的最重要的变化之一是增加了 64 位指令集。该指令集补充了现有的 32 位指令集架构。

2023-02-26 15:22:02 2015

原创 【ARMv8 SIMD和浮点指令编程】编程基础

ARM 高级 SIMD 架构、相关的实现和支持软件通常被称为 NEON 技术。AArch32(相当于 ARMv7 的 NEON 指令)和 AArch64 都有 NEON 指令集。两者都可以显著加速在大型数据集上的重复操作。这在媒体编解码器等应用中很有用。AArch64 的 NEON 架构使用 32 × 128 位寄存器,是 ARMv7 的两倍。这些寄存器与浮点指令使用的寄存器相同。

2023-02-14 08:05:12 1165

原创 FFmpeg 集成 x265 编译及解码

在编译 FFmpeg 之前需要先编译 x265,但并不是所有的版本都能直接使用,比如笔者同时编译 Android、Window 和 Linux 三个平台时,使用 Android NDK r21e 会遇到很多报错,符号缺失,无法编译 .S 文件都是可能遇到的问题。

2023-01-10 08:13:16 4037

原创 【ARMv8 SIMD和浮点指令编程】Libyuv I420 转 ARGB 流程分析

Libyuv 可以说是做图形图像相关从业者绕不开的一个常用库,它使用了单指令多数据流提升性能。以 ARM 处理为主线,通过 I420 转 ARGB 流程来分析它是如何流转的。

2023-01-01 10:03:34 1900

原创 RTSP 协议漫谈,揭秘 RTSP 协议内幕

RTP 协议是为流媒体端到端的实时传输而设计的。该协议提供了抖动补偿和数据包丢失和乱序的检测功能,这些在 IP 网络上的 UDP 传输中很常见。RTP 允许通过 IP 组播将数据传输到多个目的地。RTP 被认为是 IP 网络中音频/视频传输的主要标准,并与相关的配置文件和有效载荷格式一起使用。RTP 的设计基于被称为应用层分帧的架构原则,其中协议功能在应用程序中实现,而不是在操作系统的协议栈中实现。实时多媒体流应用要求信息的及时传递,通常可以容忍一些丢包来达到这一目的。

2022-12-09 08:21:57 1127

原创 详解 YUV,一文搞定 YUV 是什么!

YUV 是一个颜色模型,通常用作彩色图像管道的一部分。它对彩色图像或视频进行编码时考虑到了人类的感知,与“直接”的 RGB 表示相比,允许减少色度分量的带宽。

2022-11-16 07:47:01 13727 1

原创 Linux ELF 可执行链接格式学习

ELF 是一种用于二进制文件、可执行文件、目标代码、共享库和核心转储格式文件的格式。

2022-11-03 19:25:48 1286

原创 【ARMv8 编程】寄存器

ARMv8 用于描述整体架构,包括 32 位执行和 64 位执行。它使用 64 位位宽寄存器,同时保持向后兼容 v7。

2022-08-29 08:29:03 1833

原创 基于 arm64 Linux nanosleep 系统调用流程分析

nanosleep (高分辨率睡眠)可实现纳秒级的睡眠,暂停调用线程的执行。在 Linux 内核中是如何实现的?下面基于 arm64 cpu 架构去分析。

2022-08-02 20:01:48 1324

原创 【Android 10 源码】Camera v1 startPreview 流程

Camera v1 startPreview 起点位于 android.hardware 包下的 Camera 类中,这是老版本的 Camera 预览的起点。有助于理解后续 Camera v2 API 所做的努力。

2022-07-28 07:52:49 1087

原创 从 Java sleep 来看 arm64 Linux 内核都干了些什么?

使当前正在执行的线程休眠(暂时停止执行)指定的毫秒数,取决于系统计时器和调度器的精度和准确性。

2022-07-11 18:44:17 641

原创 【Android 10 源码】MediaRecorder 录像流程:MediaRecorder 开始录制

前面已经分析过 MediaRecorder 初始化和配置过程,接下来就可以真正进入录制流程了。现在不难得出这个结论:MediaRecorder 录制 Camera 的数据实际上是将预览数据经过 MediaCodec 硬编码后封装成对应的容器。具体到现在谈的场景实际上将渲染数据直接绘制到硬编码器 Surface 上然后去编码,编码后的数据是 H264,将 MIC 音频硬编码为 AAC,然后将它们封装成 MP4。开始捕获数据并将数据编码到使用 setOutputFile() 指定的文件中。在 prepare

2022-05-08 12:16:44 1754

ORMLite和GreenDao性能对比Demo

ORMLite和GreenDao性能对比Demo,两个常用数据库ORM框架用法与比较

2016-01-03

android使用html写一个关于页面

使用html写一个android的关于页面,动态修改版本号,让你从繁重的Textview 堆砌中彻底解放出来

2015-11-07

Android FTP客户端与服务端

两部手机其中一部手机作为服务器,另一部手机作为客户端下载,使用FTP方式传输文件,图片下载,多图加载,滑动停止加载完整DEMO。

2015-09-13

MPAndroidChart

关于MPAndroidChart就不多说了,是一个开源的android图表库,包含折线图、柱状图、散点图、雷达图等等,功能非常强大

2015-09-05

Android图片局部放大镜

图片上某一点看不清楚,你不需要将整张图片都放大,只需要放大你想看到的部分,这个时候放大镜就派上用场了。

2015-08-16

Android发送邮件功能实现

使用commons-net-3.3.jar或mail.jar核心邮件包实现邮件发送功能,可发送附件、图片、HTML邮件,灵活控制,甚至实现后台发送邮件功能!

2015-08-16

android图片堆叠效果实现

android图片堆叠效果实现,实现任意小角度堆叠显示,可用于图片相册缩略图

2015-07-18

软件内每日提醒功能实现

软件内每日提醒功能实现,可添加到工程中实现每日提醒,隔天提醒等提醒功能

2015-07-12

可分割的环形进度条

可分割的环形进度条,适合倒计时等场景,已经定义好,只需把文件拷入即可使用

2015-06-13

高仿今日头条字体渐变指示器

今日头条的指示器很炫酷,随着你的滑动字体颜色可以逐渐的变化,实现方法主要是使用自定义控件结合ViewPager。 CompleteTrackColorViewDemo实现高仿今日头条字体渐变指示器,滑动+点击切换,如丝顺滑

2015-04-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除