自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

青山渺渺

记录Android Framework、Android Media开发。keep life,keep learn.

  • 博客(187)
  • 资源 (5)
  • 收藏
  • 关注

原创 Android MediaCodec(二)SimpleDecoder

从这一章开始,我们会基于同步SimplePlayer改造出一个简单的异步播放器(AsyncSimplePlayer),通过一步步的代码实现,我们能够更清晰地学习NuPlayer的实现方式。我们将从简单的框架实现入手,根据需求逐步分析并完善我们的AsyncSimplePlayer。在本节中,我们会先简要介绍播放器所需的模块及其作用,然后开始实现简单解码器模块。

2025-01-16 22:39:02 557

原创 Android MediaCodec(一)简介

MediaCodec是Android系统为上层应用提供的硬件编解码类,它封装了ACodec和CCodec,隐藏了底层组件的实现细节,向上层应用提供了统一且易用的硬件编解码接口。由于MediaCodec是为上层应用提供的接口,因此我们不会对其内部实现进行深入探讨,本篇文章将先简单介绍MediaCodec的异步消息处理机制、缓冲区管理以及API的使用这三部分内容,然后通过SimplePlayer了解MediaCodec的同步模式用法,为异步模式的播放器实现打下基础。

2025-01-16 22:36:13 921

原创 linux系统编程(七)管道和FIFO

成功的pipe调用会在数组filedes中返回两个打开的文件描述符,读取端为filedes[0],写入端为filedes[1]。我们可以使用read/write系统调用在管道上执行IO。管道上的read调用会读取的数据量为请求的字节数与管道中当前存在的字计数两者之间较小的那个。在单个进程中管道的用途不多,一般来说是使用管道让两个进程进行通信。为了让两个进程通过管道进行连接,调用完pipe调用之后可以调用fork。fork之后一般会让其中一个进程立即关闭管道的写入段文件描述符,另一端关闭读取的文件描述符。

2024-12-29 21:01:02 819

原创 Android Codec2 CCodec (三六)组件控制

这一篇我们对组件的控制过程(flush、resume、stop和release)做简单分析。

2024-12-24 22:01:56 956

原创 linux系统编程(六)

一个进程可以包含多个线程,同一程序中的所有线程会独立执行相同的程序,共享同一份全局内存区域(初始化数据段、未初始化数据段、堆)。线程可以很好地解决上面的问题要注意,虽然线程之间不会共享栈数据,但是线程栈都是驻留在同一虚拟地址空间的,所以可以通过指针共享对方栈中的数据。在多线程程序中,每个线程都有自己的errno。在linux平台上,编译调用了pthread api的程序时需要设置 -pthread。新线程会调用带有参数arg的函数start开始执行。

2024-12-23 23:03:45 808

原创 linux系统编程(五)

信号是事件发生时对进程的通知机制,针对每个信号都定义了一个唯一的整数,这些整数定义在signal.h中。第一个参数表示需要修改的信号,第二个参数handler是修改后的处置函数,返回值是之前的信号处置函数。我们可以使用kill来发送信号如果无进程与指定pid匹配,kill调用失败,errno设置为ESRCH。raise是对自身发送信号,相当于调用kill(getpid(), sig)。多个信号可以使用一个称之为信号集的数据结构来标识,该数据类型为sigset_t。

2024-12-22 14:43:09 884

原创 linux系统编程(四)

调用read和write系统调用操作时不会对磁盘直接发起访问,而是仅仅在用户空间缓冲区与内核缓冲区高速缓存之间复制数据。write调用会立刻返回,后续某个时刻内核才会将缓冲区内的数据刷新至磁盘。如果在此期间有另一个进程试图读取该文件的这几个字节,将从内核缓冲区读取,而不是从文件读取。对于read而言,内核从磁盘读取数据会存到内核缓冲区中,read会从缓冲区读取数据。linux内核对高速缓冲区的大小没有固定上限,且会尽可能多地分配高速缓存页。

2024-12-21 09:57:56 615

原创 linux系统编程(三)

每个进程都有自己的进程id,我们可以通过getpid拿到当前进程的id。每个进程也会有一个创建它的父进程,我们可以通过getppid拿到父进程的进程id。进程号的上限默认是32767,但是可以通过/proc/sys/kernel/pid_max 文件来进行调整。如果子进程的父进程终止,子进程就会变成孤儿,init进程会收养该子进程,子进程后续对getppid()的调用将返回进程号1。

2024-12-18 21:50:19 772

原创 Android Codec2 CCodec (三五)数据渲染

上一篇文章讲完了输出数据的回传过程,这一节我们再来过一遍数据渲染流程。

2024-12-17 21:19:44 836

原创 Android Codec2 CCodec (三四)组件处理与数据输出 - Ⅱ

上篇文章CCodecBufferChannel::onWorkDone刚讲一半就扯到extraBuffer了,这一篇我们接着讲完onWorkDone的剩余部分。

2024-12-17 21:17:27 1379

原创 Android Codec2 CCodec (三三)组件处理与数据输出 - Ⅰ

本节主要对数据的输出过程做简单梳理,组件的处理过程可以参考SimpleC2Component和C2SoftHevcDec这两章内容,本节不做展开。

2024-12-12 23:15:57 1592

原创 Android CCodec Codec2 (三二)组件启动与数据写入

这一节我们一起过一下组件的启动与数据写入过程。

2024-12-12 23:13:04 811

原创 linux系统编程(二)

fcntl用于控制文件描述符,该系统调用有很多功能,功能用cmd来控制,fcntl后面的参数根据cmd来填充。我们在判断F_GETFL,要用如果只是获取读写权限可以用。

2024-12-09 22:38:03 751

原创 Android Codec2 CCodec (三一)组件的创建与配置

接下来的几篇文章,我们将对组件的创建、配置、启动、数据写入、数据处理、数据渲染、flush、release过程做完整的流程分析。本篇我们将一起阅读组件的创建与配置过程。

2024-12-09 22:07:57 790

原创 Android Codec2 CCodec (三十)C2SoftHevcDec - Ⅱ

在这一篇文章中,我们将以C2SoftHevcDec为例,了解Codec2组件应该如何实现SimpleC2Component提供的接口,看完这一节我们应该对如何实现Codec2组件有清晰的思路。

2024-12-09 22:05:50 787

原创 linux系统编程(一)

linux 常用类型:clock_t 整形/浮点dev_t 运算类型之一,设备号mode_t 整形off_t 有符号整形 long intpid_t 有符号整形ptrdiff_t 有符号整形sigset_t 整形/结构类型size_t 无符号整形 long unsigned intsocklen_t 至少32位整形ssize_t 有符号整形 long inttime_t 整形或浮点数。

2024-12-08 16:42:43 814

原创 常用Vim操作

vimrc配置ctags -R *生成tags文件set numberset ts=4set sw=4set autoindentset cindentset tag=~/tmp/log/help/tags自动补全:ctrl+n:自动补全输入:a:从当前文字后插入i:从当前文字前插入s: 删除当前字符,从当前字符插入回退u:撤销恢复撤销:ctrl+r删除:[n]dd:删除n行[n]dw:从光标开始删除n个词d$: 删除光标之后的内容,但是不删除行号

2024-12-08 15:55:12 567

原创 Android Codec2 CCodec (二九)C2SoftHevcDec - Ⅰ

在上一篇文章中,我们了解了SimpleC2Component提供的接口的含义。这一节,我们将以C2SoftHevcDec为例,探讨Codec2组件的参数应该如何定义。

2024-12-06 21:58:21 443

原创 Android Codec2 CCodec (二八)SimpleC2Component

在 Android Codec2(九)组件实现分析 一文中, 我们了解了Codec2组件的实现框架,接下来这一章我们将深入探讨组件的实现细节。

2024-12-04 22:34:37 1672

原创 Android CCodec Codec2 (二七)PipelineWatcher

本节内容会对input buffer的追踪过程进行解析, 追踪分为上层(CCodecBufferChannel->PipelineWatcher)与组件层(Component->InputBufferManager)两部分。

2024-11-25 21:58:55 1250

原创 Android CCodec Codec2 (二六)C2Work

这一节我们将对Codec2的跨进程数据传输相关的内容做简单了解。

2024-11-25 21:55:04 1616

原创 Android CCodec Codec2 (二五)OutputBuffers

在这一篇文章中,我们将一起探讨CCodec的输出端口管理类OutputBuffers。与之前学习的InputBuffers截然不同,OutputBuffers并不涉及buffer的分配工作,所以它有一套新的buffer管理方法,另外OutputBuffers还提供了reorder(重排序)功能。

2024-11-21 22:56:45 1283

原创 Android CCodec Codec2 (二四)C2GraphicBlock

在这一篇文章中,我们将了解C2GraphicBlock、C2BufferQueueBlockPoolData与C2GraphicView的实现。

2024-11-21 22:54:11 1276

原创 Android CCodec Codec2 (二三)C2BufferQueueBlockPool - Ⅱ

上一篇文章对一些前置内容进行了介绍,这篇文章我们将继续阅读C2BufferQueueBlockPool的buffer分配相关内容。

2024-11-19 22:51:25 800

原创 Android CCodec Codec2 (二二)C2BufferQueueBlockPool - Ⅰ

我们在前面两篇文章中认识了C2PooledBlockPool以及C2LinearBlock,要注意的是C2PooledBlockPool除了可以被用于生产C2LinearBlock(1D)外,也可以用于生产C2GraphicBlock(2D)。在这一篇文章中,我们将对C2BlockPool的另一个子类C2BufferQueueBlockPool展开了解,它是专门用于生产C2GraphicBlock的。同样都可以生产C2GraphicBlock,它们又有什么区别呢?

2024-11-17 21:23:11 1052

原创 Android CCodec Codec2 (二一)InputBuffers

CCodec使用CCodecBuffers来对输入/输出端口上的buffer进行管理,这一篇文章我们将一起了解InputBuffers,也就是输入端口的buffer管理方法。

2024-11-15 22:10:55 1819

原创 Android CCodec Codec2 (二十)C2Buffer与Codec2Buffer

在阅读Codec2框架代码时,我们可能会发现好几个名称中都带有“buffer”的类,如MediaCodecBuffer、ABuffer、CCodecBuffers、Codec2Buffer以及C2Buffer。它们分别是什么?各自承担着什么功能?它们之间有何联系?本文将围绕这三个问题展开了解。

2024-11-07 22:13:22 1877

原创 Android CCodec Codec2 (十九)C2LinearBlock

在上一篇文章的结尾,我们看到fetchLinearBlock方法最终创建了一个C2LinearBlock对象。这一节,我们将深入了解C2LinearBlock是什么,它的作用是什么,以及它是如何被创建的。

2024-11-04 21:51:49 1022

原创 Android CCodec Codec2 (十八)C2PooledBlockPool

在这篇文章中,我们首先将了解C2BlockPool是什么,随后会探讨C2BlockPool与buffer pool以及C2Allocator之间的关系。最后,我们将深入了解C2BlockPool的一个子类—C2PooledBlockPool的具体实现方式,以及它是如何分配buffers的。

2024-10-27 20:07:21 1678

原创 Android Codec2 CCodec(十七)bufferpool

Codec2框架通过引入bufferpool,实现了全新的buffer分配与传递机制。在本文中,我们将一起了解bufferpool框架的实现。

2024-10-19 23:08:33 1749

原创 Android Codec2 CCodec(十六)C2AllocatorGralloc

这一篇文章我们一起来瞧瞧2D(Graphic) buffer分配器C2AllocatorGralloc是如何工作的。

2024-10-07 22:25:18 1165

原创 Android CCodec Codec2 (十五)C2DmaBufAllocator

Codec2框架采用了全新的Buffer分配机制C2Allocator,这一篇文章我们一起来瞧瞧C2DmaBufAllocator是如何工作的。

2024-09-28 09:23:59 1474

原创 Android CCodec Codec2 (十四)CCodecBufferChannel - Ⅱ

上一篇文章我们一起了解了Codec2 Data Process过程中的Delay,buffer count计算方法和C2AllocatorStore,这一篇文章我们接着分析CCodecBufferChannel的start方法。

2024-09-22 20:02:30 1520

原创 Android CCodec Codec2 (十三)CCodecBufferChannel - Ⅰ

CCodecBufferChannel是整个Codec2框架最复杂的部分,涉及到input buffer分配,input/output buffer的处理,内部封装了一些全新的机制,比如reorder、pipeline control等。本篇内容主要对CCodecBufferChannel的start流程进行了解,涉及到的C2BlockPool、C2Allocator、InputBuffers、OutputBuffers本篇不做展开。

2024-09-13 23:11:04 1495

原创 Android CCodec Codec2 (十二)CCodecConfig

Codec2组件的运行参数都存储在Interface中,这些参数由厂商预先设定,并力求达到最优(best effort),因此非必要情况下不建议进行修改。在CCodec中,我们很少看到对组件参数的修改,这与ACodec对组件配置的过程形成了明显的对比。CCodecConfig在Codec2框架中主要起着参数存储的作用,参数来自于两部分:从组件实例读取的厂商预定义的参数和上层应用配置下来的参数。CCodecConfig还有另外一个重要功能:向上层提供参数反射,实现非标准参数的设定,这部分我们不做了解。

2024-09-11 23:34:54 821

原创 Android CCodec Codec2 (十一)CCodec

CCodec继承于CodecBase,向下封装了Codec2Client,向上提供接口给MediaCodec调用。CCodec包含CCodecBufferChannel和CCodecConfig两大子模块,相较ACodec而言,CCodec的职责划分与消息处理逻辑做了很大改动。本节将简单剖析CCodec中的部分设计思路,为后续的数据处理流程分析做准备。

2024-09-08 22:09:35 1115

原创 Android CCodec Codec2 (十)Codec2Client

Codec2Client隐藏了Codec2 HAL的调用细节,并在HAL接口的基础上重新做了抽象和封装然后提供给sfPlugin使用,在这一篇文章中我们将对Codec2Client的设计结构进行简单分析。

2024-09-08 22:08:07 1367 3

原创 Ubuntu 20.04安装bootchart

到google上搜索说是Ubuntu 18.04之后bootchart被换成了systemd-bootchart,这个可以成功安装,但是无法导出PNG。最后就可以愉快地导出PNG了。

2024-09-06 18:01:58 689

原创 Android CCodec Codec2 (九)组件实现分析

在上一篇文章中,我们详细梳理了HIDL层组件的创建过程。在这一篇文章中,我们将以C2SoftMpeg2Dec为例简单了解SW C2Component的实现架构。

2024-09-05 23:08:25 1204

原创 Android Codec2 CCodec(八)SW组件创建过程分析

在这一篇文章中,我们将先了解SW ComponentStore HIDL层的Codec2组件创建过程,然后了解组件实现架构。

2024-09-02 23:33:14 1089

mp4info,解析mp4文件必备工具

mp4info,解析mp4文件必备工具

2023-09-23

7yuv安装包,音视频开发必备工具

7yuv安装包,音视频开发必备工具

2023-09-23

Android MediaPlayer Demo

用Android MediaPlayer实现的网络流播放,本地播放,seekbar,全屏显示的demo

2023-08-12

OpenCV车牌识别新手入门级讲解,含详细注释

车牌识别的详细思想步骤在博客中讲解https://blog.youkuaiyun.com/qq_41828351/article/details/89474638。使用的OpenCV340,可以更换属性表,显示是在VS2017下的MFC。文件中有3个文件夹,有两个是字符识别的ANN网络训练,有一个是识别的主程序。

2019-04-24

融入局部信息的直觉模糊C均值聚类方法的C++实现

基于模糊C均值优化的直觉模糊C均值,融合了区域特征,C++实现,附带论文,可以更好的学习。博客地址https://blog.youkuaiyun.com/qq_41828351/article/details/88402605

2019-03-11

FCM模糊C均值的C++实现

模糊C均值的C++实现,有很详细的代码解释,运行需要配置OpenCV340,各种踩坑,希望大家学习愉快,附带理论地址,代码配合公式能够更好的学习哦https://blog.youkuaiyun.com/qq_41828351/article/details/88402605

2019-03-11

C++结合OpenCV实现Kmeans聚类图像分割的案列

利用C++结合OpenCV实现Kmeans聚类图像分割,需要配置OpenCV340版本,其他版本需要更改属性表。

2019-03-11

文件分割合并器

在学习C#过程中学习到FileStream,然后用简单的拖控件完成了一个文件的分割和合并的功能,可以根据分割文件的个数和单个文件的大小两种方式来分割文件。

2018-06-04

空空如也

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

TA关注的人

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