音视频
文章平均质量分 85
fanged
野生程序员。。。这里主要是一些学习笔记和心得。。。
展开
-
树莓派外挂Camera4(pipeline)
现在说起Pipeline都有点迷糊了,很多都是这个概念。GStreamer里面有,相机里面有,然后还有别的地方也有。pipeline本身其实没什么特殊的,简单理解就是一段处理。晚上查了一下,确实这几个地方都叫pipeline,然后树莓派还有个自己的Post-processing,也就是后处理。今天主要说camera的和Post-processing的。原创 2024-10-03 01:13:48 · 502 阅读 · 0 评论 -
树莓派外挂Camera2(libcamera)
树莓派其实有两个摄像头接口,一个是rpicam,另一个是libcamera。不过rpicam是以前的接口,而且貌似还是树莓派专用的,所以不用再花精力去看了。而libcamera是开源库,貌似现在用的还越来越普遍,所以学学完全没问题。现在树莓派在libcamera之上,又封装了picamera2,本来python又快又好的信条,所以先从picamera2开始学吧。原创 2024-10-03 01:12:58 · 404 阅读 · 0 评论 -
树莓派外挂Camera1(基操)
手上有OV5647,OV2640,看这次能不能驱动吧。。。今天忙活一阵,终于把OV5647跑起来了。图像质量很一般,10块多点的camera,本来也没指望太多。原创 2024-09-29 01:54:52 · 380 阅读 · 0 评论 -
树莓派3B驱动ST7735(内核)(Framebuffer篇)(TODO)
终于一条龙的将ST7735驱动,Framebuffer,还有LVGL的东西点亮了。现在也有点时间来总结一下。原创 2024-09-25 02:05:27 · 360 阅读 · 1 评论 -
LVGL UI 库(TODO)
还是老规矩,先上图。。。整体来说还是接着以前的,之前在树莓派上弄通了ST7735的驱动,framebuffer,现在终于能来看GUI了。原创 2024-05-05 04:00:52 · 141 阅读 · 0 评论 -
树莓派3B驱动ST7735(内核)(配置篇)
事实上树莓派已经内置了st7735的驱动,只要打开spi,配置io口就可以用了。你需要创建或修改设备树覆盖文件,以便配置 SPI 接口和 ST7735S 显示屏。如果配置正确,启动信息将显示在 ST7735S 显示屏上,并且可以通过显示屏进行 shell 交互。最后附带了GPT的做法,可以比对一下实际出图的做法。我这边和视频刚好是相反的,fb0是ST7735,fb1看起来是HDMI。最后试了一下ffmpeg播放视频,除了因为屏幕小不能全屏,其它倒是都很不错。按照这个guide,翻车翻的挺厉害的。原创 2024-09-01 15:49:29 · 497 阅读 · 0 评论 -
总线学习5--I2S
音频信号在原始状态下是模拟信号,表现为随时间连续变化的电压波形。为了将这些模拟信号存储或处理为数字形式,需要将其转换为一系列离散的数字值。这一过程称为。原创 2024-08-06 00:34:57 · 143 阅读 · 0 评论 -
如何根据业务判断需要的内存带宽
内存带宽指的是内存总线所能提供的数据传输能力,它决定了单位时间内存储器所存取的信息量,通常以位/秒(bps)或字节/秒(Bytes/s)为单位来表示。例如:DDR400内存的数据传输频率为400MHz,那么单条模组就拥有64bit×400MHz÷8(Byte)=3.2GB/s的带宽。如果需要处理多路视频流(例如双摄像头系统),则需要将所有视频流的带宽需求累加,确保总带宽在内存总线的承受范围内。系统总线:还需考虑内存总线的带宽,如DDR、LPDDR的速率,确保系统总带宽足够支撑所需的所有操作。原创 2024-08-11 21:58:07 · 454 阅读 · 0 评论 -
显示学习5(基于树莓派Pico) -- 彩色LCD的驱动
第一个封装的都是self._writecommand(TFT.CASET),_writecommand(TFT.RASET),_writecommand(TFT.RAMWR)这几个SPI的接口。画图,画线,画圆,显示图片,颜色有时候要转换成屏要的格式,让上层更方便使用。然后逐个点处理,首先读取BMP的bgr信息,bgr = f.read(3),然后调用接口将颜色一个一个的写进去。之后就是行列和颜色的设置,这里有个特别点的。简单整理一下,大概是这么几类,画图形,比如circle,画线,文字,操作点。原创 2024-08-04 03:25:26 · 492 阅读 · 0 评论 -
Android音频系统
最近在做UAC的项目,大概就是接收内核UAC的事件,也就是声音相关事件。然后就是pcm_read和AudioTrackr->write之间互传。感觉略微有点奇怪,所以简单总结一下。原创 2024-06-21 18:50:07 · 445 阅读 · 0 评论 -
音视频的Buffer处理
最近在做安卓下UVC的一个案子。正好之前搞过ST方案的开机广告,这个也是我少数最后没搞成功的项目。当时也有点客观原因,当时ST要退出机顶盒市场,所以一切的支持都停了,当时啃他家播放器几十万行的代码,而且几乎没有文档,真的是非常痛苦。后面虽然功能是搞出来了,但是不稳定,持续几次后就会crash。还记得当时最后到底层ST是用的滑动窗口缓存,双指针,一个写指针和一个读指针,当时我做了一个管道往缓存中注数据。主要就是共享内存,滑动窗口,双缓冲,环形缓冲这些内容。就是两个buffer,一个读一个写,写完之后交换。原创 2024-06-20 14:20:23 · 638 阅读 · 0 评论 -
USB UVC 3-- uvc gadget
USB分为USB Host和USB Device两种,PC一般是USB Host,手机等终端数码设备一般是USB Device。OTG是指设备既可以作为USB Device,又可以作为USB Host。在Linux中,USB Device设备称为Gadget。这个代码是应用层的,在驱动层之上。还有一个代码是可以的话比对着一起看吧,兼听则明啊。。。原创 2024-05-02 01:55:51 · 516 阅读 · 0 评论 -
USB UVC 2-- libuvc
这个部分的内容就比较多,首先还是libusb_open,然后uvc_get_device_info,获取设备的具体能力,uvc_claim_if,这里申明UVC的接口。然后就是一套,libusb_get_device_descriptor,libusb_fill_interrupt_transfer,libusb_submit_transfer(是 libusb 库中的一个函数,用于将 USB 传输请求提交给 USB 设备。主要就是调用了libusb_init,应该是对usb的初始化。原创 2024-04-26 01:55:21 · 557 阅读 · 0 评论 -
USB UVC 1-- 基础
USB UVC,顾名思义,首先还是USB,整个UVC还是基于USB框架的,要真正掌握这个,还是要掌握USB的协议。然后是UVC,全称是USB Video Class,用于支持视频设备(例如网络摄像头、摄像机、扫描仪等)与计算机之间的通信和交互。首先摄像头要支持USB协议,其次要支持UVC协议,要提供符合UVC协议的设备描述符,然后是遵循UVC定义好的控制命令,多媒体格式,还有传输方式。:Realtek 是一家知名的芯片制造商,在其 RTS 系列中也有支持 UVC 的摄像头芯片。Brightness(背光)原创 2024-02-17 02:05:40 · 601 阅读 · 1 评论 -
试手一下CameraX(APP)
name,contentValues,mediaStoreOutputOptions都是作为参数使用。在output中,好像是使用了lambda函数,弄了一些内置行为。name,contentValues,outputOptions都是作为参数传进去。大体的流程就是首先取得surface,然后使用cameraProvider.bindToLifecycle,将surface作为参数传进去。这个应该是camerax的控件。增加两个按键,分别是takephoto和capturevideo,并增加按键事件。原创 2024-03-03 22:22:28 · 358 阅读 · 0 评论 -
V4L2学习(框架和上层)
上层有什么呢:GStreamer,FFmpeg,OpenCV,v4l-utils。当然,你直接调用ioctl写一个简单的也行,也不算复杂。最近才看了下V4L2,说起来V4L2实际上是一个接口标准。使用V4L2上层接口的应用,V4L2框架,以及使用V4L2下层接口的驱动。另外要值得看的是和GStreamer之间的接口处理,等到看GStreamer的时候再写写吧。上层总的来说不算复杂,10来个接口,照着写一遍就懂了,唯一就是BUF的处理可能会麻烦点。NVIDIA的这个图说的还比较简明扼要。原创 2024-03-04 01:56:31 · 436 阅读 · 0 评论 -
GStreamer 1 简单看看
GStreamer的核心是pipeline,这块很强,很适合现在对视频流进行连续处理。下面的sources,sinks,containers,decoder就是一个个的插件,应该一个插件就是一个so动态链接库。我在想可能它家的机制在商业上也有一定好处,比如说插件之间可以比较独立,而且可以闭源发大财,所以现在很多大厂都基于它在搞。Comprehensive Core Library:核心库,提供插件API框架,应该涉及到线程管理,任务调度,同步,调试系统等等。从它家的主页来看,整个GS大概有以下4个部分。原创 2024-03-22 01:41:38 · 570 阅读 · 0 评论