Davinci encode分析(DM355)

视频编码全流程 每一帧图像,划分成一个个块来进行编码的,这一个个块在 H264 中叫做宏块,宏块大小一般是16x16(H264、VP8),32x32(H265、VP9),64x64(H265、VP9、AV1),128x128(AV1)这几种。一个图像一个帧内,每16*16作为一个字块,相邻的字块之间有较强的相关性和相似性。另外同一个 16*16 的小块内基本上每个像素点的颜色是一样的可以减少编码数据量。 阅读详情

对视频和音频进行编码

音频算法是G.711

视频算法是mpeg4和H.264

这些算法符合xDM界面。

6个线程:控制线程、视频线程、显示线程、写线程、语音线程、采集线程。

主线程—--->视频线程video thread、语音线程Speech Thread、采集线程、写线程

          视频线程-->显示线程Display Thread、写线程Write Thread

主线程-à控制线程

注:视频文件存在则创建视频线程、采集线程、写线程、显示线程

      语音文件存在则创建语音线程

完成以上线程的创建后控制线程变为控制线程。

至少存在一个文件,因此系统中最少有2个线程,最多有6个线程。

用法

Usage: encode [options]

Options:

-s | --speechfile Speech file to record to         声音文件名

-v | --videofile Video file to record to       视频文件名

-r | --resolution Video resolution ('width'x'height') [720x480]视频分辨率

-b | --bitrate Bit rate to encode video at [variable]

-d | --deinterlace Disable removal of interlacing artifacts from the

captured video frames before encoding [off]

-x | --svideo Use s-video instead of composite video input [off]

-l | --linein Use line in for encoding sound instead of mic [off]

-k | --keyboard Enable keyboard interface [off]

-t | --time Number of seconds to run the demo [infinite]

-i | --interface Launch the demo interface when exiting [off]

-h | --help Print this message

You must supply at least a video or a speech file or both

with appropriate extensions for the file formats.

writer线程分析

1. Open the output video file: outputFp = fopen(envp->videoFile, "w");

2.等待汇集:  如果有视频文件或语音文件则汇集线程数为5;

                如果视频文件和语音文件都有则汇集线程数为6;

                视频文件和语音文件至少有一个。

Rendezvous_meet(envp->hRendezvousInit);

 这些线程是:控制线程、视频线程、采集线程、写线程、显示线程

                        语音线程

3.进入循环

4. Get an encoded buffer from the video thread.

5. Is the video thread flushing the pipe? Yes, Exit. No, cont.

6. Store the encoded frame to disk.

7. Send back the buffer to the video thread. (the encoded buffer)

8. goto 3.

video线程分析

视频线程所用管道

videoEnv.hCaptureOutFifo = &captureEnv.outFifo;

videoEnv.hCaptureInFifo = &captureEnv.inFifo;

videoEnv.hWriterOutFifo = &writerEnv.outFifo;

videoEnv.hWriterInFifo = &writerEnv.inFifo;

1. Open Codec Engine, Reset, load, and start DSP Engine.

2. Create video encoder,/* Allocate and initialize video encoder on the engine;

3. Allocate buffers for encoded data and prime the writer thread.

          为已编码的数据分配缓冲区,并装填给写线程。

Memory_contigAlloc() 分配连续的缓冲区

          FifoUtil_put(envp->hWriterInFifo, &we) //写管道操作

                    // 将申请的缓冲区内容写到管道hWriterInFifo中。

          我的理解,申请若干个缓冲区,每个缓冲区要连续,并将缓冲区中的内容

写到管道envp->hWriterInFifo中(注:该管道在创建线程之前,已打开)。

有用吗?buffer中的数据是什么?

4. Allocate buffers for interacting with the capture thread

          Memory_contigAlloc() 分配连续的缓冲区

          FifoUtil_put(envp->hCaptureInFifo, &ce) // FIFo且当管道

                    // 将申请的缓冲区放在hCaptureInFifo队列中。

          我的理解,申请若干个缓冲区,每个缓冲区要连续,并将它们放在

采集线程的缓冲队列中。

5.等待汇集;

6.当不需要退出时,执行下列步骤:

7.测试等待状态,按要求决定是否继续。

8. Get a buffer from the capture thread. hCaptureOutFifo

 视频线程读采集线程采集的数据-->ce

9.视频线程从写线程读回数据。àwe

10.对ce编码并送到we中。

11.视频线程将已编码的数据写到管道,由写线程写文件

12.视频线程将原数据送给采集线程。ce

13. goto 6.

pause

Pause_open

      初始化互斥变量和条件变量;

      且设置pause未暂停,hPause->pause = FALSE;

Pause_test 如果在暂停中则等待,否则继续。

      1. 进入临界区(有互斥变量控制);

      2. 如果在暂停中,则等待在条件变量中;

      3. 退出临界区。

Pause_on

      1. 进入临界区(有互斥变量控制);

      2. 设置暂停标志;

      3. 退出临界区。

Pause_off

      1. 进入临界区(有互斥变量控制);

      2. 如果在暂停中,则清暂停标志,并向其他线程广播该消息;

      3. 退出临界区。

Pause_close

      释放互斥变量和条件变量。

Pause的应用

      显示线程:   开始循环时:Pause_test(envp->hPause);

退出时:Pause_off(envp->hPause);

语音线程:    开始循环时:Pause_test(envp->hPause);

退出时:Pause_off(envp->hPause);

采集线程:    开始循环时:Pause_test(envp->hPause);

退出时:Pause_off(envp->hPause);

写线程: 退出时:Pause_off(envp->hPause);

控制线程:    当按下录制键时:Pause_off(envp->hPause);

                    当按下暂停键时:Pause_on(hPause);

退出时:Pause_off(envp->hPause);

fifoutil

This interface enables easy passing of fixed size messages between POSIX threads in Linux using first in first out ordering. Only one reader and writer per fifo is supported unless the application serializes the calls.

FifoUtil_open

static inline int FifoUtil_open(FifoUtil_Handle hFifo, size_t size);

brief Opens the fifo. Must be called before other API:s on a fifo.

摘要:打开fifo管道。

@param hFifo Pointer to the fifo object to open.

@param size Size in bytes of the messages to be passed through this fifo.

@return FIFOUTIL_SUCCESS for success or FIFOUTIL_FAILURE for failure.

使用管道。

FifoUtil_close

static inline int FifoUtil_close(FifoUtil_Handle hFifo);

brief Closes the fifo. No API calls can be made on this fifo after this.

param hFifo Pointer to the fifo object to close.

return FIFOUTIL_SUCCESS for success or FIFOUTIL_FAILURE for failure.

FifoUtil_get 读管道

FifoUtil_get(FifoUtil_Handle hFifo, void *buffer);

brief Blocking call to get a message from a fifo.

param hFifo Pointer to a previously opened fifo object.

param buffer A pointer to the buffer which will be copied to the fifo.

return FIFOUTIL_SUCCESS for success or FIFOUTIL_FAILURE for failure.

读管道。

static inline int FifoUtil_get(FifoUtil_Handle hFifo, void *buffer)

{

if (read(hFifo->pipes[0], buffer, hFifo->size) != hFifo->size) {

return FIFOUTIL_FAILURE;

}

return FIFOUTIL_SUCCESS;

}

FifoUtil_put 写管道

FifoUtil_put(FifoUtil_Handle hFifo, void *buffer)

@brief Put a message on the fifo.

@param hFifo Pointer to a previously opened fifo object.

@param buffer A pointer to the buffer which will be copied from the fifo.

@return FIFOUTIL_SUCCESS for success or FIFOUTIL_FAILURE for failure.

static inline int FifoUtil_put(FifoUtil_Handle hFifo, void *buffer)

{

if (write(hFifo->pipes[1], buffer, hFifo->size) != hFifo->size) {

return FIFOUTIL_FAILURE;

}

return FIFOUTIL_SUCCESS;

}

 

opencv如何对视频进行编解码 VideoCapture captRefrnc(“Megamind.avi")                     ||                     \/ /*cap.cpp文件*/ CV_IMPL CvCapture * cvCreateFileCapture (const char * filename) {     CvCapture * result = 0; 阅读详情

相关推荐

视频编解码

视频编解码是一项复杂而重要的技术,目前市面上流行的视频编解码器大多都是使用C++语言实现的。视频解码的主要任务是将压缩后的视频流进行解码,还原出原始的视频数据。(3)视频后处理:对解码后的视频数据进行一些基本的处理,例如去除噪声、调整亮度和对比度等。(2)视频预处理:对原始视频数据进行一些基本的处理,例如去除噪声、调整亮度和对比度等。(3)视频编码:将处理后的视频数据进行压缩编码,生成压缩后的视频流。(2)视频解码:对读取到的视频流进行解码,还原出原始的视频数据。

道亦无名 1057

对视频和音频进行编码

对视频和音频进行编码 音频算法是G.711 视频算法是mpeg4和H.264 这些算法符合xDM界面。 6个线程:控制线程、视频线程、显示线程、写线程、语音线程、采集线程。 主线程—--->视频线程video thread、语音线程Speech Thread、采集线程、写线程 视频线程-->显示线程Display...

weixin_33937913的博客 357

三种视频编码的方式

作者:泽布隆 链接:https://www.zhihu.com/question/22567173/answer/21882826 来源:知乎 著作权归作者所有,转载请联系作者获得授权。 视音频编码的意义就是用尽可能小的带宽传送高质量的视音频数据。 从mpeg-1到mpeg-2,H.263到H.264到你提到的HEVC即H.265,标准的新提出也是为了让码流更优化、压缩效率更高、稳定

tianyu的专栏 - Linux site:blog.youkuaiyun.com/wishfly 4505

音频编码流程详解

1、音频编码整体流程 2、FFmpeg音频编码详细流程 3、关键函数说明 (1)avcodec_find_encoder:根据指定的AVCodecID查找注册的编码器。 (2)avcodec_alloc_context3:为AVCodecContext分配内存。 (3)avcodec_open2:打开编码器。 (4)avcodec_send_frame:将AVFrame非压缩数据给编码器。 (5)avcodec_receive_packet:获取到编码后的AVPacket数据,收到的pack..

locahuang的博客 5119

DM368 NAND FLASH启动解密

DM368 NAND FLASH启动解密,讲述了从RBL->UBL->U-BOOT>kernel 启动的详细过程,对了解整体的一个框架,具有非常好的指导作用,不可多得的好资料。

2021-08-20

通过QQ号获取绑定的手机号 导语 偶有奇想,我们可以通过手机号来搜索获取其对应的QQ号,那么,反过来呢? 一.缩小范围 由于手机号属于隐私数据,腾讯QQ并没有直接给出通过QQ号查找对应手机号的接口。 国内的手机号有十一位数字,从数学的角度上来说,包含了1011种可能。如果遍历这1011个数据,通过QQ中手机号查找QQ号的接口来寻找,未免太过费时费力,根据网上查到的资料,同一个QQ号,在十分钟内只能进行30次查询(未验证)。因此,直接遍历的方法不现实。 在这10^13个数据中,包含着大量的可去除的无用数据。我

m0_56063822的博客 4714

音频编码讲解

音频重采样: 1、什么是音频重采样: 将音频三元组(采样率、采样大小、声道数)的值转换为另外一组值, 比如:将44100/16/2转换为44100/32/2 2、为什么要重采样: 从设备采集的音频数据与编码器要求的数据不一致 扬声器要求的音频数据与播放的音频数据不一致 方便计算:(比如回音消除的时候,就转换为单声道,比起多声道更容易处理) 3、如何知道是否需要重采样: 了解音频设备参数 查看FFmpeg源码 ...

l18320786461的博客 730

Python自动化车载测试:5分钟搞定CANoe COM接口调用(附完整代码)

本文详细介绍了如何使用Python快速实现CANoe COM接口调用,完成车载测试自动化。通过实战案例展示ECU信号测试框架搭建,包括环境配置、核心架构解析、信号读写封装及多线程安全方案,帮助开发者5分钟内掌握高效测试技巧。

vv45678的博客 1131

Davinci encode分析(dm355)

原文地址:encode分析(dm355)" style="text-decoration:none; color:rgb(82,102,115)">Davinci encode分析(dm355)作者:姜汁呗 对视频和音频进行编码 音频算法是G.711 视频算法是mpeg4和H.264 这些算法符合xDM界面。 6个线程:控制线程、视频线程、显示线程、写线程、语音线

zhangjikuan的专栏 793

易智联LM401模块学习(一)——初识Lora

Lora

weixin_46046597的博客 1054

STM32 RT-Thread 系统分析(1)- 启动文件

RT-Thread STM32 系统分析(1)- 启动文件前言基本信息前言说明三级目录 前言 基本信息 名称 描述说明 RT-Thread Studio 软件版本 版本: 1.1.3 RT-Thread 系统版本 4.0.2 STM32CubeIDE 软件版本 1.4.0 STM32芯片型号 STM32F013VG 前言说明 使用了STM32CubeIDE 和 RT-Thread Studio 建立了相同型号芯片的工程,对比其中启动文件内容差异如下: 左侧是RT-Threa

鸳鸯冰笔的博客 4096

Davinci encode分析(dm365)

原文地址:encode分析(dm355)" style="text-decoration:none; color:rgb(82,102,115)">Davinci encode分析(dm355)作者:姜汁呗 对视频和音频进行编码 音频算法是G.711 视频算法是mpeg4和H.264 这些算法符合xDM界面。 6个线程:控制线程、视频线程、显示线程、写线程、语音线

zhangjikuan的专栏 1205

zds1104示波器使用指南

(2)将探头连接到探头补偿端,按下auto setup按键,一键捕获。(3)连接需要测量信号,开始查看波形。操作说明书,可以自行查看操作说明书。

m0_61973119的博客 6769

视频编码流程详解

1、视频编码整体流程 2、FFmpeg视频编码详细流程 从本地读取YUV数据编码为H264格式的数据,然后再存入到本地,编码后的数据有带startcode。 与FFmpeg示例音频编码的流程基本一致。 3、关键函数说明 (1)avcodec_find_encoder_by_name:根据指定的编码器名称查找注册的编码器。 (2)avcodec_alloc_context3:为AVCodecContext分配内存。 (3)avcodec_open2:打开编码器。 (4)avcodec_send..

locahuang的博客 6310

微信4.1.5.16升级后,你的自动化脚本失灵了?手把手教你用C#让UI树“复活”

微信4.1.5.16版本更新导致自动化脚本失效?本文深入解析微信UI树隐藏的原因,并提供C#实战解决方案,通过UIAutomation技术恢复UI树结构,帮助开发者重新实现自动化操作。涵盖技术原理、代码实现及优化策略,适合RPA开发者和自动化脚本编写者参考。

weixin_30879169的博客 519

搭建自己的MQTT服务器,实现设备上云(Ubuntu+EMQX)

这篇文章教大家在ECS云服务器上部署EMQX,搭建自己私有的MQTT服务器,配置EMQX实现设备上云,设备数据转发,存储;服务器我采用的华为云的ECS服务器,系统选择Ubuntu系统。

2万+

音频基础概念及常见编码格式

声音是由物体振动而产生的 声波的三要素 声波的三要素是频率、振幅和波形,频率代表音阶的高低,振幅代表响度(音量),波形代表音色。   PCM脉冲编码调制 PCM(Pulse Code Modulation),脉冲编码调制。人耳听到的是模拟信号,PCM是把声音从模拟信号转化为数字信号的技术。原理是用一个固定的频率对模拟信号进行采样,采样后的信号在波形上看就像一串连续的幅值不一的脉冲(脉...

漫步语林 7485

基于FPGA的车道线检测系统设计

本文设计了一种基于FPGA的车道线检测系统,采用Altera Cyclone IV EP4CE10F17C8作为主控芯片,结合OV7725摄像头和LCD显示屏实现实时车道线检测。系统通过硬件流水线处理架构,依次完成图像采集、灰度转换、中值滤波、Sobel边缘检测和Hough变换直线识别等功能模块。所有模块均采用Verilog HDL实现,充分利用FPGA的并行处理能力,显著提升了系统响应速度。测试结果表明,该系统能够有效检测道路车道线,满足实时性要求,为ADAS系统提供了一种高效的硬件解决方案。

huanghm88的专栏 121

关于为什么视频音频的,需要编码解码?为什么有的在编码前需要驱动有的不需要?

1.为什么需要编码解码 采集的原始音视频信号体积都非常大。里面有很多相同的、眼看不到的、耳听不到的内容。为了减小体积便于存储、传输、交流,就有了压缩无用信息和不重要的信息的“压缩处理”,这就叫“编码”。 压缩(编码)过的内容无法直接使用,使用(观看)时必须解压缩,还原为原始的信号(比如视频中某个点的颜色等),这就是“解码“或者”解压缩“2. 为什么有的在编码前需要驱动有...

whyqcwy的专栏 4023

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

leopardDm365 mt9p031 encode-demo输出

leopardDm365 mt9p031 encode-demo输出 环境:开发板Leopardboard.org dm365 sdk包:DVSDK4.02 摄像头模块:LI-5M03(mt9p031) 本文档目的:使用sdk包里面的encode,demo程序输出摄像头的图像到显示器(composite 输出模式) 步骤: 1、编译内核时,指定开发板输出模式为composite,c

xiufu004的专栏 2214

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

上一篇: inux top命令详解
下一篇: 软件开发项目规划时,SA、SD与SE的区别与重要性
pointfish
博客等级 码龄17年 58粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值