TYYJ-洪伟
码龄10年
  • 329,239
    被访问
  • 175
    原创
  • 4,844
    排名
  • 5,068
    粉丝
  • 365
    铁粉
关注
提问 私信

个人简介:Android高级开发工程师,熟悉App开发,熟悉Framework定制开发,略了解Linux内核。开发使用的语言涉及Java、Kotlin、C/C++、Python和汇编NEON指令集。

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:湖北省
  • 加入CSDN时间: 2012-09-16
博客简介:

洪伟的专栏

博客描述:
长兄于病视神,未有形而除之,故名不出于家。中兄治病,其在毫毛,故名不出于闾。若扁鹊者,镵血脉,投毒药,副肌肤,闲而名出闻于诸侯。
查看详细资料
  • 6
    领奖
    总分 1,952 当月 51
个人成就
  • 博客专家认证
  • 获得162次点赞
  • 内容获得158次评论
  • 获得711次收藏
创作历程
  • 12篇
    2022年
  • 30篇
    2021年
  • 78篇
    2020年
  • 32篇
    2019年
  • 7篇
    2017年
  • 4篇
    2016年
  • 12篇
    2015年
成就勋章
TA的专栏
  • NEON
    付费
    17篇
  • Linux
    4篇
  • Android源码
    71篇
  • 音视频
    16篇
  • 工具
    3篇
  • Wi-Fi
    2篇
  • 音视频#OpenGL ES
    4篇
  • RaspberryPi
    3篇
  • 杂
    1篇
  • NanoPC-T4
    4篇
  • 程序人生
  • Flutter
    10篇
  • JNI编程
    11篇
  • Java集合源码
    3篇
  • Android
    26篇
  • Python
    2篇
  • kotlin
    1篇
  • java
    3篇
兴趣领域 设置
  • 移动开发
    flutter
  • Android
    android
  • 操作系统
    harmonyos
  • 软件工程
    性能优化
  • 最近
  • 文章
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

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

nanosleep (高分辨率睡眠)可实现纳秒级的睡眠,暂停调用线程的执行。在 Linux 内核中是如何实现的?下面基于 arm64 cpu 架构去分析。
原创
发布博客 2022.08.02 ·
41 阅读 ·
0 点赞 ·
0 评论

【Android 10 源码】Camera v1 startPreview 流程

Camera v1 startPreview 起点位于 android.hardware 包下的 Camera 类中,这是老版本的 Camera 预览的起点。有助于理解后续 Camera v2 API 所做的努力。
原创
发布博客 2022.07.28 ·
133 阅读 ·
0 点赞 ·
0 评论

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

使当前正在执行的线程休眠(暂时停止执行)指定的毫秒数,取决于系统计时器和调度器的精度和准确性。
原创
发布博客 2022.07.11 ·
181 阅读 ·
0 点赞 ·
0 评论

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

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

【Android 10 源码】MediaRecorder 录像流程:MediaRecorder 配置

MediaRecorder 录像配置主要涉及输出文件路径、音频来源、视频来源、输出格式、音频编码格式、视频编码格式、比特率、帧率和视频尺寸等。我们假设视频输入源来自 Camera,Camera2 API 将相机图像渲染到 MediaRecorder 提供的 Surface 上,而 MediaRecorder 将这个渲染数据编码为 H264。 /** * 配置录制视频相关数据 */ private void configMediaRecorder(){ F
原创
发布博客 2022.05.08 ·
456 阅读 ·
0 点赞 ·
2 评论

【Android 10 源码】MediaRecorder 录像流程:MediaRecorder 初始化

MediaRecorder 用于录制音频和视频,录制控制基于一个简单的状态机。下面是典型的使用 camera2 API 录制,需要使用到的 MediaRecorder API。 /** * 初始化MediaRecorder */ private void initMediaRecorder(){ mMediaRecorder = new MediaRecorder(); } /** * 配置录制视频相关数据 */
原创
发布博客 2022.05.07 ·
838 阅读 ·
1 点赞 ·
0 评论

【Android 10 源码】healthd 模块 BatteryService 初始化

BatteryService 是在 SystemServer 中启动的,BatteryService 监控设备电池的充电状态和充电水平。当这些值改变时,这个服务会将这些新值广播给所有正在监听 ACTION_BATTERY_CHANGED 的广播接收者。BatteryService 被划分到核心服务类别。frameworks/base/services/java/com/android/server/SystemServer.javapublic final class SystemServer {
原创
发布博客 2022.03.16 ·
360 阅读 ·
1 点赞 ·
0 评论

【Android 10 源码】healthd 模块 HAL 2.0 分析

Android 9 引入了从 health@1.0 HAL 升级的主要版本 android.hardware.health HAL 2.0。
原创
发布博客 2022.03.14 ·
3527 阅读 ·
1 点赞 ·
0 评论

【Android 10 源码】healthd 模块 HAL 1.0 分析

health@1.0:android.hardware.health@1.0 的缩写。指的是 Android 8.0 中发布的运行状况 HIDL 的 1.0 版 HAL。Android 8.x 中的“运行状况”服务在 Android 8.x 中,运行状况组件的工作原理详情如下图所示:在此图中:框架通过一次 Binder 调用和一次 hwbinder 调用与硬件进行通信。healthd 静态关联到 libhealthd_android、libbatterymonitor 和 libbattery
原创
发布博客 2022.03.14 ·
394 阅读 ·
0 点赞 ·
0 评论

Linux 4.19.111 供电(power supply )子系统

Linux 内核中为了方便对 battery 的管理,专门提供了power supply framework。battery 管理分开为两个部分,一个是电池监控(fuelgauge),另一个是充放电管理(charger)。fuelgauge 驱动主要负责向上层 android 系统提供当前电池的电量以及健康状态信息等,另外它也向 charger 驱动提供电池的相关信息;charger 驱动主要负责电源线的插拔检测,以及充放电的过程管理。对于 battery 管理,硬件上有电量计 IC 和充放电 IC。
原创
发布博客 2022.03.13 ·
3221 阅读 ·
3 点赞 ·
0 评论

NDK Clang 编译 FFmpeg 4.4.1 + fdk-aac 2.0.2 + x264 20191217

现在编译 FFmpeg 已经全面采用 Clang 了,gcc 被高版本 NDK 废弃,所以从网上搜索出来的编译脚本既有使用低版本 NDK 编译 FFmpeg 的,也有采用高版本 NDK 编译的。采用低版本 NDK 编译 FFmpeg 虽然也是一种手段,但是采用高版本 NDK 编译 FFmpeg 一定是“大势所趋”。另外就算采用低版本 NDK 去编译 FFmpeg,你会发现高版本的 FFmpeg 编译会报各种错误,有的人甚至修改了 FFmpeg 源码,虽然修改源码最终可以编译完成,但是终究不是解决问题的良方
原创
发布博客 2022.01.23 ·
3717 阅读 ·
1 点赞 ·
3 评论

FFmpeg 解码 H264 格式的视频

FFmpeg 解码 H264 主要分三个步骤,其一获取解码器,其二向解码器中送入 H264 NALU,其三从解码器中获取解码后的 YUV 等数据。一、H264H.264,同时也是 MPEG-4 第十部分,是由 ITU-T 视频编码专家组(VCEG)和 ISO/IEC 动态图像专家组(MPEG)联合组成的联合视频组(JVT,Joint Video Team)提出的高度压缩数字视频编解码器标准。这个标准通常被称之为 H.264/AVC(或者 AVC/H.264 或者 H.264/MPEG-4 AVC 或 M
原创
发布博客 2022.01.10 ·
1448 阅读 ·
1 点赞 ·
0 评论

FFmpeg 解码 AAC 格式的音频

FFmpeg 默认是可以解码 AAC 格式的音频,但是如果需要获取 PCM16 此类数据则需要经过音频转码。首先要打开解码器,然后向解码器发送 AAC 音频帧(不带 ADTS),然后从解码器获取解码后的音频帧,数据是 float 类型的,如果需要则进行转码流程将 float 转成整型。一、AAC 音频AAC 是高级音频编码(Advanced Audio Coding)的缩写,出现于 1997 年,最初是基于 MPEG-2 的音频编码技术。由Fraunhofer IIS、Dolby Laboratorie
原创
发布博客 2021.12.26 ·
2180 阅读 ·
0 点赞 ·
0 评论

CMake 基础用法,掌握 CMake 诀窍

CMake 到底在干什么?怎么用!
原创
发布博客 2021.12.08 ·
597 阅读 ·
0 点赞 ·
0 评论

MediaCodec 硬编解码的哪些坑-基于 rk3399

做 Android 音视频离不开 MediaCodec。实际上不局限于平台看问题,不管是 Linux、Mac OS、iOS、Android 还是 Window 这些系统,只要涉及到音视频编解码,无非要么软编解码、要么硬编解码,软编解码通常会使用瑞士军刀“FFmpeg”,主要靠 cpu 的算力去实现。硬编解码就要调用系统开放的 API 去使用硬件编解码。从效率上看,调用硬件编解码是最快的,通常会使用专用的硬件去处理编解码。尤其在嵌入式设备上通常 cpu 性能有限,想要达到满足要求的编解码需求,不用硬件编解码也
原创
发布博客 2021.11.01 ·
4808 阅读 ·
2 点赞 ·
9 评论

【Android 10 源码】深入理解 MediaCodec configure

使用 MediaCodec 的关键一步是 configure,在 start 之前配置是必须的。以解码为例,并且直接解码到外部提供的 surface 上,所以输入的 surface 不为空。configure(…) 提供给外部调用的 public 方法内部调用了同名重载版本的方法。遍历从 MediaFormat 返回的 map,构造为 key 和 value 数组;调用 native_configure(…) 交给 native 层处理。frameworks/base/media/java/a
原创
发布博客 2021.10.29 ·
2734 阅读 ·
0 点赞 ·
8 评论

【Android 10 源码】深入理解 MediaCodec 组件分配

MediaCodec 系列文章:【Android 10 源码】深入理解 MediaCodec 硬解码初始化【Android 10 源码】深入理解 Omx 初始化【Android 10 源码】深入理解 codecservice 启动【Android 10 源码】深入理解 software Codec2 服务启动【Android 10 源码】深入理解构建 MediaCodec 列表:buildMediaCodecList组件分配的起点位于 native MediaCodec 的 init 流程。
原创
发布博客 2021.10.29 ·
1869 阅读 ·
0 点赞 ·
0 评论

【Android 10 源码】深入理解构建 MediaCodec 列表:buildMediaCodecList

构建 MediaCodec 列表——buildMediaCodecList(…) ,确切地说是构建了 std::vector<sp > 容器,容器内部是指向 MediaCodecInfo 对象的指针。关于 buildMediaCodecList(…) 在 MediaCodec 中初始化流程可以参考前一节《【Android 10 源码】深入理解 MediaCodec 硬解码初始化》。在 MediaCodecList 构造函数中,根据分析得出 builder 调用其 buildMediaCode
原创
发布博客 2021.10.24 ·
4569 阅读 ·
1 点赞 ·
0 评论

【Android 10 源码】深入理解 software Codec2 服务启动

经过前面几节分析不难得出想要支持 Codec2 框架,需要实现其要求的 hal 接口,并实现相应的支撑服务。这里以源码中实现 software Codec2 服务启动为例进行分析。software Codec2 服务启动位于 CodecServiceRegistrant.cpp 中。在 rk3399 Android 10 平台上可以看到启动 Log:CodecServiceRegistrant: Creating software Codec2 service…CodecServiceRegistra
原创
发布博客 2021.10.24 ·
831 阅读 ·
1 点赞 ·
0 评论

【Android 10 源码】深入理解 codecservice 启动

MediaCodec 系列文章:【Android 10 源码】深入理解 MediaCodec 硬解码初始化【Android 10 源码】深入理解 Omx 初始化codecservice 主要负责 HAL 层给 framework 层提供调用音视频编解码接口。它的入口是 main_codecservice.cpp。首先我们来看下启动它的配置 rc 脚本。可以看到它放在 vendor 目录下,说明和供应商有关。frameworks/av/services/mediacodec/android.ha
原创
发布博客 2021.10.24 ·
3451 阅读 ·
0 点赞 ·
0 评论
加载更多