自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 资源 (14)
  • 收藏
  • 关注

原创 GCC显式连接静态库/动态库

gcc 连接器显式指定静态库/动态库

2022-10-08 14:06:50 650 1

原创 RockChip RGA与DRM大小端命名冲突解析

RockChip RGB图像经过RGA处理后显示异常 —— 像素格式大小端命名不统一

2022-06-29 09:38:03 984

原创 数值(double)转中文输出

数字转中文输出摘要本文讲述亿以内的double类型转为中文字符串示例,该示例难点在于double类型精度处理。代码#include <stdio.h>#include <string.h>#include <math.h>typedef int HI_S32;typedef int HI_BOOL;typedef unsigned int HI_U32;typedef char HI_CHAR;typedef unsigned short

2021-08-05 22:22:10 440

原创 Hi355x平台系统级别调试命令

概述本文记录HI355X平台系统级别的调试信息, 如内存查看, 硬件通道查看等.内存信息查看DMMA使用情况cat /proc/media-mem可通过该命令查看系统DMMZ资源使用情况.Linux内存使用情况cat /proc/meminfo查看Linux系统内存的占用情况. 板级配置中会指定Linux OS可使用内存, 该命令是对该内存的情况缝隙.硬件通道资源查看cat /proc/umap/vi注意: 在双系统架构下, 需要在LiteOs中查看....

2021-06-09 15:04:06 185

原创 HI355X SDK APP调试

HI355X SDK APP调试概述本文以HI3556 SDK的dashcam为例,讲述如何添加编译 -g 选项,以及gdb调试。模块编译选项添加路径:reference\dashcam\modules\ui\carrecorder\MakeFile... 略....PHONY: xmlxml: cpxml chmod +x $(XML2Bin) $(XML2Bin) -x $(XML_PATH_DEST) -b $(HI_HIGV_BIN_ROOT)/higv.bin -t c -

2021-05-27 16:36:55 176

原创 H264 AVCC 格式转 ANNEX B格式

概述有很多封装格式的H264码流采用的是AVCC格式。有些硬件编码器仅支持ANNEX B格式的H264码流,因此就需要做一次中转,本示例主要展示如何转换。代码#include <stdio.h>#include <string.h>#include <stdlib.h>#include <stdint.h>#define NALU_T...

2020-04-21 15:40:19 8643

原创 C++ 之结构体注意事项

概述从C转为C++,简单的逻辑如果没注意C++的类的特性性,就会将你的代码引入深渊。本文记录笔者在C++中使用结构体时遇到的错误。当前听同事感慨:C++最好不要用结构体。采坑1结构体中如果使用了C++中的类,比如string之类的。要特别小心不要在使用malloc、memcpy等操作。比如笔者犯的错误:#include <iostream>#include <strin...

2020-03-03 16:14:36 641

原创 FFMPEG Codec capabilities笔记

概述在ffmpeg音频编码中,有些编码器支持任意数量的音频样本(如,ALAW),还有些则仅支持固定长度的音频样本(如,AAC)。这些区别则可以通过codec->capabilities标记进行解读。AV_CODEC_CAP_VARIABLE_FRAME_SIZE如果编码器的capabilities字段含有该标记,则表示输入编码器的样本数量是可变的。否则则必须依照编码器的frame_si...

2019-12-12 10:24:29 1176

原创 G711/G726编解码示例

概述本文基于ffmpeg,演示g711a,g711u,g726,g726le的编码以及编码后的文件如何播放测试。g711本质还是pcm,不过是将16位带符号pcm数据压缩为8位pcm数据。g711a是取s16le格式的高13位;g711u则是取s16le格式的高14位。实际压缩比是2:1,具体压缩算法可参考如下博客:https://blog.csdn.net/q2519008/article/...

2019-12-11 16:37:25 3370

原创 ffmpeg播放帧率控制

概述30帧/秒的视频,如果解码性能足够块(比如RK3399解码可达到61帧/秒),那么ffplay播放时,是如何控制帧率为30帧/秒呢?本文就是为了解开该谜团。封装音视频在通过封装器封装时,都必须告诉封装器自己的帧率(采样率/bit rate),然后封装器根据帧率计算每帧的时间戳间隔。比如如下视频帧30帧/秒:frame0 pts:00msframe1 pts:33msfarme2 ...

2019-12-06 19:49:15 5794

原创 RK3399 4.4内核 修改DDR频率

查看当前DDR频率cat /sys/class/devfreq/dmc/cur_freq 查看频率范围cat /sys/class/devfreq/dmc/available_frequencies查看DDR容量 cat /proc/meminfo设置固定频率最大和最小频率设置相同即可,比如设置800Mecho 800000000 > /sys/class/devfre...

2019-12-05 11:29:21 4170 1

原创 FFMPEG演示教程——ResamplingAudio

概述本示例基于ffmpeg的resampling_audio.c示例,增加了Plane模式的支持以及将程序接口化。Plane格式的介绍可以参照博文:音频格式解析:交错模式 vs Plane模式。基于下文中代码,可实现AV_SAMPLE_FMT_S16转AV_SAMPLE_FMT_S16P,当然稍作修改,也可实现AV_SAMPLE_FMT_S16转AV_SAMPLE_FMT_FLTP。非Pla...

2019-11-14 20:09:09 448

原创 音频格式解析:交错模式 vs Plane模式

概述音频中我们常见格式如下所示,其中我们注意有些音频格式中带了“P”,比如AV_SAMPLE_FMT_S16P则表示带符号的16位Plane模式。本文我们重点讲述“交错模式”与“Plane模式”下,音频文件内各个Channel组织形式。并附带讲述下FFMPEG中frame结构对这两种格式的管理。enum AVSampleFormat { AV_SAMPLE_FMT_NONE = -1,...

2019-11-14 10:34:12 1582

原创 ffmpeg mux时间戳介绍

概述ffmpeg提供了很多官方demo,路径:ffmpeg-4.1.3/doc/examples。编译方法:make examples。本文讲述muxing.c这个示例,重点解析时间戳的生成。使用命令:muxing test.mp4,自动填充video和audio数据,并在当前路径下生成test.mp4文件。前提知识AVStream中的time_base以秒为单位,表示封装格式的采样率...

2019-11-11 22:13:19 841

原创 RockChip MPP编码“0拷贝”介绍

概述Rockchip平台的mpp硬件编码器:mpp enc 仅接受硬件buf作为输入。当然如果使用malloc开辟的内存,硬件编解码器则无法完成“Zero Copy”,从而大大降低编码性能。本文主要介绍如何组织DRM buf的像素格式,从而避免内存搬运,实现“0拷贝”。官方示例解说官方提供的mpi_enc_test示例,其开辟drm buf大小是按照宽高16对齐后来计算的。比如:1920x1...

2019-11-11 21:43:59 5988 1

原创 ADTS AAC 头部字段解析

概述头部格式介绍请参见https://www.cnblogs.com/zhangxuan/p/8809245.html,本文主要介绍代码解析ADTS 头格式。另外,根据笔者的测试,AAC文件的最后一帧会触发VLC播放停止。但最后一帧的头信息并没有特殊标记,仅长度比较短。如果需要循环播放AAC文件,可将最后一帧过滤。代码资源下载地址(包含源码和测试文件):打印adts aac 头部字段。...

2019-11-01 14:22:43 1002

原创 Live555: RtspServer 示例

概述live555官方地址:http://www.live555.com/liveMedia/public/。该地址下有live555的工程包(比如:live.2019.10.20.tar.gz),以及h264/h265的测试流文件。本文以live.2019.10.20.tar.gz为例,介绍live555 rtspserver示例代码。live555工程的目录结构如下所示,其中testPro...

2019-10-22 16:05:42 2240

原创 mppjpegdec vs jpegdec

概述mppjpegdec是RockChip公司研发的硬件jpeg解码器。jpegdec则是gstreamer提供的软件解码器。有时用户使用jpegdec可正常解码,但是直接将jpegdec替换为RK平台的mppjpegdec则管道报“协商失败”错误。本文就该问题进行解析。解决办法jpegdec sink和src信息mppjpegdec sink和src信息通过对比发现,mppjpe...

2019-10-21 09:27:57 1332

原创 DRM DUMB相关说明

概述笔者在涉及RK平台中如下链路时,对drm申请的buffer相关字段有些疑惑。因此写此贴作为一个记录。mppdec解码 --> rga缩放 --> drm显示流程解析如下接口是申请drm类型的dumb。首先需要传入的fd是设备的文件句柄,比如/dev/dri/card0。随后通过drmIoctl(fd, DRM_IOCTL_MODE_CREATE_DUMB, &ar...

2019-10-16 18:18:53 5982 4

原创 Basesrc源码分析(一)

概述通过Gstreamer官方文档,我们可以知道很多src类型的element都是Basesrc类的子类,因此对Basesrc源码的了解,有助于我们知pipeline数据源头是如何触发数据产生的。本文承接上文,以Filesrc element作为示例进行解说。管道命令如下:gst-launch-1.0 --gst-debug=filesrc:5,basesrc:5 filesrc locati...

2019-10-09 19:46:16 1216 1

原创 H264码流分析工具

概述本文作为一个笔记,记录笔者学习H264码流的过程。重点记录使用工具分析H264码流。使用该工具,可方便查看码流中NALU的结构,为我们学习和理解有很大帮助。H264码流介绍笔者直接参考:https://blog.csdn.net/chenchong_219/article/details/37990541工具使用说明打开工具打开文件查看帧信息上图可看到工具帮我们解析出...

2019-10-09 19:26:52 3719

原创 GObject 对象-类-实例概念介绍

GObject 对象、类、实例关于GObject中对象、类、实例概念,笔者搜了下相关资料,多数的介绍是对象是声明的变量,类是就是类型,实例是变量存储的内容看了上述描述,笔者仍很含糊,后面通过阅读代码,关于这三个概念笔者的总结如下图,如果有误还请评论区给予指正。...

2019-09-27 11:31:37 725

原创 Linux Debug工具汇总

概述笔者一开始上手写代码使用VS工具,对于当时单步调试,设置断点等还记忆犹新。后面转战Linux平台开发,虽然知道有gdb strace等好用工具,但一直没能实际操刀练手过。本文用于记录和总结笔者开发过程中遇到的好用的调试工具。文章对这些工具并不能很详细讲解,仅作为一个抛砖引玉的过程,学会这种调试方法后,其他功能可自行车资料扩展。strace工具按照strace官网的描述, strace是一...

2019-09-26 14:39:09 5933 1

原创 RK3399 Debian 制作xxx.deb

概述本文在ubuntu16.04上以gstreamer-rockchip为例,介绍rk3399 debian系统如何使用docker部署app(本文对应gstreamer-rockchip)。docker-rokchip环境搭建安装dockersudo apt-get install docker qemu-user-static binfmt-support下载docker-r...

2019-09-25 12:07:32 1638

原创 【Fix Bug】RockChip平台Bluez-Alsa Source端播放卡住

概述RockChip平台当时使用的Bluez-Alsa代码已经比较老了,但由于RK内部维护了一些补丁,因此并未直接使用同步最新的Bluez-Alsa代码,而是沿用老版本的代码。老版本代码存在一些BUG(新版本可能已经修复),本文就记录使用BT Souce功能时,播放会卡住,然后整个线程都被阻塞。此时调节蓝牙音量也是阻塞状态。现象log(阻塞在Connecting…):解决补丁原因:因多处对...

2019-09-23 18:16:38 871

原创 pthread相关用法记录

概述本篇记录通过pthread_setcancelstate确保线程退出前代码块一定会被执行。另外通过pthread_cleanup_push和pthread_cleanup_pop设定线程退出的执行函数,当然上述一组函数需要通过pthread_cancel来触发。例程话不多说,直接代码伺候。#include<stdlib.h>#include<stdio.h>...

2019-09-23 15:26:29 113

原创 Filesrc源码分析

概述根据上一篇博客的介绍,我们知道对于filesrc类我们只需完成其静态方法即可,调用逻辑则由pipeline/bin来完成。这里额外要提的是filesrc是集成basesrc的,basesrc是所有src类型element的一个模板,其接口完成了状态切换管理、Pad协商、内存分配器协商等等一系列逻辑。filesrc仅仅重载了basesrc的部分接口,如果不想使用basesrc的默认提供的逻辑,...

2019-09-11 10:26:47 950 2

原创 Gstreamer 设计理念 —— 【初探】

概述接触Gstreamer有一段时间了,看完了官网的教程,可能由于对英文单词释义理解不当,导致对Gstreamer中的很多概念并不是很清楚。感觉都是懵懵懂懂的知道点,但真要说,又说不出所以然。于是笔者想不再仅停留在gst-launch阶段,是时候去阅读Gstreamer的源码了,毕竟源码就是最好的文档。愿景我希望能写一套完整的教程。详细记录自己一点点啃Gstreamer源码的过程。但我也不清...

2019-09-10 20:25:09 404

原创 C语言#if defined高级用法

概述笔者需要完成“多个宏定义控制同一代码分支”的功能。平时都是接触简单的用法,比如:#ifndef TEST1#define TEST1#endif/* TEST1 或 TEST2被定义,则选择执行printf1,否则执行printf2 */#ifdef TEST1 printf1(".....");#else #ifdef TEST2 printf1(".....");...

2019-09-10 09:42:56 24765

原创 RK3399 Linux 开机Logo制作

概述如上主题搜索帖子,基本都是讲述Rockchip Android系统如何修改开机Logo,本文记录RK3399 Linux系统如何修改开机Logo。文件说明文件路径:SDK-Root/kerkel/logo.bmp:Uboot启动时的Logo。logo_kernel.bmp:Kernel启动时的Logo。方法U-boot logo 显示的两张图片是 kernel 根目录下的...

2019-09-09 10:03:45 3327 3

原创 CMake宏定义控制代码分支

概述本文基于Rockchip Buildroot,并以rkffplay包为例,介绍mk文件如何控制CMakeList.txt的编译分支,以及CMakeList.txt宏定义控制代码分支。mk文件控制CMake编译分支mk文件路径:rk1808/buildroot/package/rockchip/rkffplay/rkffplay.mk,文件内容如下:RKFFPLAY_SITE = $(T...

2019-08-30 10:45:06 3269

原创 Gstreamer从管道命令转为代码的注意事项

概述gstreamer提供了gst-launch工具,使用该工具我们可以很方便的搭建各种管道,比如gst-launc-1.0 videotestsrc ! autovideosink输入上述命令,我们就能测试视频通路是否OK。但有些场景需要我们提供代码形式,而在gst-launch的管道转换为代码时,经常会遇到管道间连接失败的问题。本文主要总结gst元素不同pad类型间如何连接。Always ...

2019-08-29 15:30:49 1570 5

原创 Gstreamer管道命令记录

概述本文作为笔者使用Gstreamer的笔记,会长期维护,不断丰富使用场景。Mp4转Avi【平台通用】gst-launch-1.0 filesrc location=SampleVideo_1280x720_5mb.mp4 ! qtdemux name=demux ! queue ! avdec_h264 ! video/x-raw ! avimux name=mux ! filesink...

2019-08-25 15:35:24 6345 1

原创 Gstreamer Debug:生成Pipeline 内部元素拓扑结构图

概述Gstreamer提供方便的playbin、decodebin等非常方便使用的组件,虽然使用方便,但这些bin均犹如一个黑盒子,有时我们需要获取到这些bin内部元素的拓扑结构作为参考。读完本文则可以轻易获取完整的gst pipeline的元素拓扑结构。GST_DEBUG_DUMP_DOT_DIR宏定义Gstreamer提供了GST_DEBUG_DUMP_DOT_DIR宏定义,该宏定义用于...

2019-08-22 08:55:24 1355

原创 Linux libdrm库入门教程

DRM 相关知识链接1、基础概念介绍:https://www.cnblogs.com/EaIE099/p/7514293.html2、api接口说明:https://docs.nvidia.com/drive/nvvib_docs/NVIDIA%20DRIVE%20Linux%20SDK%20Development%20Guide/baggage/group__direct__render...

2019-08-20 19:01:58 11134 13

原创 Win7下安装Ubuntu 16.04双系统

前提条件1、电脑已经装好了Win7系统。2、安装Win7后,硬盘仍预留空间给Ubuntu使用(尚未分配),比如笔者500G硬盘:Windows: C盘120G,D盘140GB,共计260GB。**Ubuntu:**240GB,此时的240GB处于尚未分配状态。3、具有Ubuntu 16.04系统启动盘。制作教程可参照:https://blog.csdn.net/YaoyuT/articl...

2019-08-17 14:45:22 148

原创 Gstreamer 搭建RTSP服务器

摘要基于Gstreamer搭建Rtsp Server并不是基于gst-launch方式,而是额外提供了一个工程。工程git地址:git clone git://anongit.freedesktop.org/gstreamer/gst-rtsp-server 这是因为gst-rtsp-server不是以plugin的形式存在,如果您需要基于Gstreamer构建Rtsp Server,则需要同步...

2019-08-12 17:08:18 14577 4

原创 ffplay 外部时钟同步的原理

概述ffplay有三种同步方式:1、音频作为主时钟;2、视频作为主时钟;3、外部时钟源作为主时钟。默认的同步方式为“音频作为主时钟”方式,具体代码分析可查阅:https://blog.csdn.net/lyy901135/article/details/95307111音频作为主时钟时,视频pts向音频的pts看齐,若视频播放延迟,则需进行丢帧处理。视频作为主时钟时,音频需向视频的pts看齐,...

2019-08-09 15:38:18 1332

原创 NV12图像格式叠加(水印原理演示)

概述图像叠加与音频叠加(混音)不同,人耳可以同时听到两种声音,因此混音时需要将两种信号都保留;但视频不同,图像一旦叠加,那么叠加区域人眼就只能看到最上层的图像。本文仅阐述对原始图像数据做修改的叠加方式,不涉及多个plane实现显示级别的图像叠加的知识。因此本文所述的图像叠加基本原理就是:顶层图像的像素直接替换掉底层图像的像素,从而新的图像会显示出叠加效果。NV12格式阐述代码/* * a...

2019-08-02 20:09:43 7986

原创 NV16 转 NV12

摘要关于像素格式转换,搜到的帖子基本是NV16转RGB24 或 NV12转RGB24,对于NV16转NV12并没太多资料,因此我打算参照这两个像素格式的结构,实现这个转换接口。NV16像素格式介绍NV16可以理解为yuyv像素格式的变种,属于YUV422SP类型。整帧图像的大小为 Width * Height * 2。其像素格式如下:start + 00: Y’00 Y’01 Y’02 ...

2019-07-31 19:31:28 3761 1

AVCC_Nalu_Parse.zip

演示H264 AVCC转为Annex B格式,提供详细注释以及资源文件,可直接运行。生成的文件VLC可以直接播放。

2020-04-21

Linux rga说明文档.pdf

Rockchip 提供的librga库主要用于对常用图形处理(裁剪、格式转换、图片叠、填色等)做硬件加速。本文为librga库的说明文档,提供了api详细介绍。

2020-02-11

DDR开发指南.pdf

介绍RockChip 平台DDR开发。涉及1、如何配置DDR对的dts;2、系统启动后如何给DDR定频。包含3.10和4.4内核。

2019-12-05

AAC-HeadParse.zip

实现读取本地aac文件,解析aac头部并打印每个frame的头部字段。包含测试文件:test.aac

2019-11-01

H265 Nalu分割示例

该示例用于演示H265码流的NALU分割,并保存成单帧文件。其中vps+sps+pps保存为第0帧。包含h265码流。可直接gcc编译运行。

2019-10-19

session-filesrc.log

对应的教程地址:https://blog.csdn.net/lyy901135/article/details/101512487

2019-10-09

Elecard StreamEye Tools.zip

该工具用于H264码流分析,便于观察码流结构。简单易用。

2019-10-09

gobject_setup_property_demo.zip

本示例演示Gobject类的创建、类属性设置、实例接口重载、类接口重载。带Makefile,可直接编译运行。

2019-09-27

mydrmtest.zip

基于RK1808的libdrm显示demo,包含CMakeList。用于演示libdrm api的使用方法。对应的博客地址:https://blog.csdn.net/lyy901135/article/details/99695607

2019-08-21

nv12图像叠加水印

对应博文:https://blog.csdn.net/lyy901135/article/details/98232619

2019-08-03

nv16_to_nv12.tar

本示例提供了NV16帧转为NV12格式方法,是个完整工程,make后可直接运行,提供了输入所需的nv16图像。

2019-07-31

gobject_create_class_demo.tar.gz

本示例用于演示GObject创建新类,类的继承与重载。代码实现了shape和square类,继承关系为: square -> shape ->gobject 其中,square重载了shape类的info接口。

2019-07-24

decode_video.tar.gz

基于ffmpeg源码中example稍作修改,可以保存完整YUV数据。添加Makefile,便于编译。解码MPEG视频,并将解码后的数据保存成一帧帧的图片。包含演示使用的视频文件。

2019-07-09

decode_audio.tar.gz

基于ffmpeg 源码中示例,稍作修改,用于学习ffmpeg api

2019-07-08

空空如也

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

TA关注的人

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