当前位置: 首页 > news >正文

FFmpeg内存对齐简述

目录

引文

行字节数的计算

ffmpeg中的align

ffmpeg中的linesize

内容参考


引文

在ffmpeg的使用过程中有时会发现align这个参数,那么这个参数代表什么意思,不同的值会产生什么影响呢,详见下文。

行字节数的计算

理解内存对齐之前首先要理解行的概念,视频有宽高两个概念,行通常是与宽相关联的。例如一张1280*720的图片,其宽就为1280,但其行却并不一定为1280,行具体为多少要取决于对齐数align是多少,一个行的大小必须是对齐数align的整数倍(类似于C语言的结构体对齐)。假设一张1280*720的图片,如果align为1,则行就为1280;如果align为3,则行为1281,需要在1280的基础上补1个字节。行的字节数计算方法可以概括为:r = ceil( w / align ) * align 其中ceil表示向上取整。

其实上面的说法不是很严谨,因为一个像素点不可能只有一个字节,以rgb存储模式为例,一个像素点有rgb三个通道,每个通道占1字节的话,那么一个像素点就会占3个字节,那么在align为1的情况下1280*720的图片在实际存储时每一行的字节数就不是1280了,而是1280*3=3840,所以总大小就为3840*720。

也就是说对齐是根据实际存储字节大小来计算的,我们先要计算出这一行实际占用的字节数,再根据计算出的字节数来计算对齐。例如3*10的图片,每个像素点占2个字节,对齐数align为4,那么行数是多少呢,从条件可知,每行3个像素点,每个像素点占2字节,那么每行就是6字节,而对齐数是4,6不是4的整数倍,因此6需要补2个字节凑成8,8就是4的整数倍了,那么我们就知道每行在内存中实际占用了8个字节,后两个字节是为了对齐补上的,总共有10行,那么这张图片在实际内存中就占用了8*10=80个字节,而不是60个字节了。本来这张图片只需要60个字节,为何要用80个字节来存储呢?这是因为cpu并不能从任意地址开始读取数据,如果不对齐,那么可能需要多次读取才能读到完整数据,因此对齐主要是为了提升性能,典型的空间换取时间。

值得注意的是yuv的计算,以w*h的yuv420p为例,他是分三个平面存储三个分量的,而u和v的计算是一致的,也就是说计算出了u即可得到v;对于y来说,它有w行h列,因此需要计算w行的对齐后字节数再乘以h;对于u来说,它有w/2行h/2列(这是因为每4个y共享一组uv),因此需要计算w/2行的对齐后字节数再乘以h/2;v的计算与u的一模一样,最后将这个三个数相加即可。

ffmpeg中的align

有了上面的基础后,现在就好理解ffmpeg中align参数了。所以一般ffmpeg中的align设为1就表示不对齐的意思,设的为多少就是多少。为0一般就表示默认(ffmpeg提供的方法)。

而之所以ffmpeg要设置这个align对齐数,主要就是为了为了确保解码和播放的正确性和输出的数据符合特定容器的要求。而且对齐还可能影响到性能,特别是在硬件加速的场景下,未对齐的数据访问可能导致额外的延迟或降低效率。

ffmpeg中的linesize

linesize其实就是我们上文提及到的行字节数,在我们解码出数据后,经常会遇到这个linesize,既然我们知道了align的概念,就该明白这个linesize就是为了让你取出真实的数据的。

解码后的数据中可能是经过对齐的,既然有对齐,那就是数据里加多了一些为了对齐而多余的字节,如果我们想最后显示视频数据,那么这些多余的数据势必要进行剔除掉,那么怎么剔除呢,linesize就是来帮你干这事的,有了它,你就可以一行一行比较,然后把每行最后为了对齐而补的字节删除,还原出视频的真实数据

内容参考

本文内容是基于如下博客做的归纳整理,如有侵权,请联系作者

FFmpeg简单分析系列----内存对齐简要说明_ffmpeg align-CSDN博客

相关文章:

FFmpeg内存对齐简述

目录 引文 行字节数的计算 ffmpeg中的align ffmpeg中的linesize 内容参考 引文 在ffmpeg的使用过程中有时会发现align这个参数,那么这个参数代表什么意思,不同的值会产生什么影响呢,详见下文。 行字节数的计算 理解内存对齐之前首先要…...

手机号码归属地查询接口如何对接?(一)

一、什么是手机号码归属地接口? 通过手机号查询归属地信息、是否虚拟运营商等。 二、手机号码归属地接口适用哪些场景? 例如:市场营销领域 (1)精准营销:企业可以通过手机号归属地查询接口了解客户的大致…...

DDei在线设计器-加载数据

加载数据 本示例演示了怎样加载已有的JSON到设计器中。 如需了解详细的API教程以及参数说明&#xff0c;请参考DDei文档 外部数据JSON demo.vue <script setup lang"ts"> import DDeiEditorView from "ddei-editor"; import { DDeiCoreStandLayou…...

NetLLM: Adapting Large Language Models for Networking.

目录 NetLLM: Adapting Large Language Models for Networking.GlossaryNotesINTRODUCTIONThe Main Roadmap so farNew Opportunities and ChallengesDesign and Contributions BACKGROUNDLearning-Based Networking AlgorithmsLarge Language Models MOTIVATIONNETLLM DESIGNM…...

基于Yolov8面部七种表情检测与识别C++模型部署

表情识别 七种表情识别是一个多学科交叉的研究领域&#xff0c;它结合了心理学、认知科学、计算机视觉和机器学习等学科的知识和技术。 基本概念 表情的定义&#xff1a;表情是人们在情绪体验时面部肌肉活动的结果&#xff0c;是人类情感交流的基本方式之一。基本表情理论&a…...

未确认融资费用含义及会计处理流程

文章目录 一、含义二、会计处理流程2.1、初始计量2.2、后续计量2.3、报表列式 三、实务中的注意事项 一、含义 未确认融资费用: 由于企业现有资金不足&#xff0c;购买资产时选择分期支付款项&#xff0c;导致实际支付的款项大于资产的购入价值&#xff0c;两者的差额就是由于…...

Linux配置go程序为service后台开机自启动

1.编写需要启动的项目路径以及简单配置 sudo nano /etc/systemd/system/go.service#定义服务的元数据和依赖关系。 [Unit] #这是对服务的简短描述。 DescriptionMy Go Service #network.target 是一个虚拟目标&#xff0c;它表示网络服务已经初始化完成。该指令告诉 systemd 在…...

汇舟问卷:完成16份调查,挣了40美金,换算后美滋滋

这个世界有太多的人30​岁&#xff0c;35岁以后&#xff0c;当初没有去做自己想做的工作&#xff0c;没有花时间去坚持想做的工作&#xff0c;他们在选择这份想做的事业的前提被自己的父母朋友爱人阻断了。 他们告诉你&#xff0c;要努力的做好现在的工作&#xff0c;争取升职…...

Nacos 202407月RCE漏洞(0day)与复现

免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。 一、背景与…...

Dynamo修改共享参数绑定的分组——群问题整理005

Hello大家好!我是九哥~ 今天继续给大家分享一些短平快的小教程,是来自群里面的问题。 问题005:Dynamo修改共享参数绑定的分组 今天看到群里询问如何修改参数所在的分组,查了下API,项目参数是不行的,不过共享参数是允许ReInsert()的,那么就好办了。 然后在Document下…...

聚焦汽车软件开发与测试:静态代码扫描、单元测试与集成测试等方面的实践应用

2024年7月18-19日&#xff0c;龙智携汽车软件开发及管理解决方案创新亮相2024 ATC汽车软件与安全技术周。龙智技术支持部负责人&Atlassian认证专家叶燕秀、龙智功能安全高级工程师景玉鑫在活动主会场联合发表了精彩演讲&#xff0c;分享推动汽车软件开发与功能安全的创新实…...

「队列」实现FIFO队列(先进先出队列|queue)的功能 / 手撕数据结构(C++)

概述 队列&#xff0c;是一种基本的数据结构&#xff0c;也是一种数据适配器。它在底层上以链表方法实现。 队列的显著特点是他的添加元素与删除元素操作&#xff1a;先加入的元素总是被先弹出。 一个队列应该应该是这样的&#xff1a; --------------QUEUE-------------——…...

C++ STL中 `set` 和 `multiset` 简单对比

在 C STL 中&#xff0c;set 和 multiset 都是用于存储唯一或重复元素的关联容器&#xff0c;但它们在处理元素的唯一性和特性方面有显著的区别。以下是这两个容器的详细比较&#xff1a; 1. 数据结构 set&#xff1a;基于红黑树&#xff08;自平衡的二叉搜索树&#xff09;实…...

代码随想录算法训练营Day20 | Leetcode 235 二叉搜索树的最近公共祖先 Leetcode 701 二叉搜索树中的插入操作

Leetcode 235 二叉搜索树的最近公共祖先 题目链接&#xff1a;235. 二叉搜索树的最近公共祖先 - 力扣&#xff08;LeetCode&#xff09; 代码随想录题解&#xff1a;代码随想录 (programmercarl.com) 思路&#xff1a;相比普通二叉树更简单&#xff0c;因为二叉搜索树的节点…...

第九届世界3D渲染大赛:赛程安排、赛事规则

第九届世界3D渲染大赛即将拉开帷幕&#xff0c;汇聚全球顶尖CG艺术家&#xff0c;展现最具有视觉盛宴的CG创作。那么该赛事的行程如何安排呢&#xff0c;赛事规则又是什么呢&#xff1f;本篇整理了赛事安排、赛事规则等内容&#xff0c;希望帮助大家。 赛事主题&#xff1a;Kin…...

RocketMQ5.0 Consumer Group

消费者分组的概念 消费者分组&#xff08;Consumer Group&#xff09;是指一组消费同一类消息的消费者实例。每个消费者分组有一个唯一的名称&#xff0c;用于标识该分组。消费者分组的设计使得消息能够被多个消费者实例并行消费&#xff0c;同时确保每条消息只被一个消费者实例…...

vulnhub之serial

这次我们来做这个靶场 项目地址https://download.vulnhub.com/serial/serial.zip 使用vm新建虚拟机 以下为注意事项 第一步&#xff0c;收集资产 扫描靶场ip netdiscover -i eth0 -r 192.168.177.0/24 抓个包 扫描目录 看到了cookie中有一个user Tzo0OiJVc2VyIjoyOntzOj…...

卷积神经网络(CNN)简单原理与简单代码实现

卷积神经网络&#xff08;CNN&#xff09;简单原理与简单代码实现 卷积神经网络&#xff08;CNN&#xff09;简单原理基本原理卷积层&#xff08;Convolutional Layer&#xff09;&#xff1a;激活层&#xff08;Activation Layer&#xff09;&#xff1a;池化层&#xff08;Po…...

实时数仓分层架构详解

首先&#xff0c;我们从数据仓库说起。 数据仓库的概念可以追溯到20世纪80年代&#xff0c;当时IBM的研究人员提出了商业数据仓库的概念。数据仓库概念的提出&#xff0c;是为了解决和数据流相关的各种问题&#xff0c;特别是多重数据复制带来的高成本问题。 数据仓库之父Bill …...

计算机“八股文”在实际工作中是助力、阻力还是空谈?

“八股文”在实际工作中是助力、阻力还是空谈&#xff1f; 作为现在各类大中小企业面试程序员时的必问内容&#xff0c;“八股文”似乎是很重要的存在。但“八股文”是否能在实际工作中发挥它“敲门砖”应有的作用呢&#xff1f;有IT人士不禁发出疑问&#xff1a;程序员面试考…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

Shell 解释器​​ bash 和 dash 区别

bash 和 dash 都是 Unix/Linux 系统中的 ​​Shell 解释器​​&#xff0c;但它们在功能、语法和性能上有显著区别。以下是它们的详细对比&#xff1a; ​​1. 基本区别​​ ​​特性​​​​bash (Bourne-Again SHell)​​​​dash (Debian Almquist SHell)​​​​来源​​G…...

NineData数据库DevOps功能全面支持百度智能云向量数据库 VectorDB,助力企业 AI 应用高效落地

NineData 的数据库 DevOps 解决方案已完成对百度智能云向量数据库 VectorDB 的全链路适配&#xff0c;成为国内首批提供 VectorDB 原生操作能力的服务商。此次合作聚焦 AI 开发核心场景&#xff0c;通过标准化 SQL 工作台与细粒度权限管控两大能力&#xff0c;助力企业安全高效…...

MAZANOKE结合内网穿透技术实现跨地域图像优化服务的远程访问过程

文章目录 前言1. 关于MAZANOKE2. Docker部署3. 简单使用MAZANOKE4. 安装cpolar内网穿透5. 配置公网地址6. 配置固定公网地址总结 前言 在数字世界高速发展的今天&#xff0c;您是否察觉到那些静默增长的视觉数据正在悄然蚕食存储空间&#xff1f;随着影像记录成为日常习惯&…...