x264重要结构体详细说明(2): x264_image_t、x264_picture_t、x264_nal_t

Windows下CLion配置ESP-IDF嵌入式开发环境实战指南 嵌入式开发中,CMake构建系统与IDE深度集成是提升开发效率的关键基础。CLion凭借其原生CMake支持、高精度符号索引和稳定GDB调试能力,成为Windows平台对接ESP-IDF的理想选择。相比VS Code插件不稳定、Keil对FreeRTOS支持弱、VS2022模板推导迟缓等问题,CLion在Windows原生环境下实现了编译响应提速、跳转准确率跃升及CI/CD无缝对接。尤其面向工业客户交付场景,该方案直击Windows企业IT基础设施适配痛点——兼容域策略、绕过防火墙限制、支持JTAG硬件调试 阅读详情

本博客转载于:http://nkwavelet.blog.163.com/blog/static/2277560382013102923912753/


/********************************************************************************************
 x264_image_t 结构用于存放一帧图像实际像素数据。该结构体定义在x264.h中
*********************************************************************************************/
typedef struct
{
    int     i_csp;           // 设置彩色空间,通常取值 X264_CSP_I420,所有可能取值定义在x264.h中
    int     i_plane;        //  图像平面个数,例如彩色空间是YUV420格式的,此处取值3
    int     i_stride[4];    // 每个图像平面的跨度,也就是每一行数据的字节数
    uint8_t *plane[4];   //  每个图像平面存放数据的起始地址, plane[0]是Y平面,
// plane[1]和plane[2]分别代表U和V平面
}  x264_image_t;


/********************************************************************************************
x264_picture_t 结构体描述一视频帧的特征,该结构体定义在x264.h中。
*********************************************************************************************/
typedef struct
{
int   i_type;            // 帧的类型,取值有X264_TYPE_KEYFRAME、X264_TYPE_P、
                            // X264_TYPE_AUTO等。初始化为auto,则在编码过程自行控制。
int   i_qpplus1;     // 此参数减1代表当前帧的量化参数值
int   i_pic_struct;  // 帧的结构类型,表示是帧还是场,是逐行还是隔行,
                           // 取值为枚举值 pic_struct_e,定义在x264.h中
int   b_keyframe; // 输出:是否是关键帧
int64_t   i_pts;     // 一帧的显示时间戳
int64_t   i_dts;     // 输出:解码时间戳。当一帧的pts非常接近0时,该dts值可能为负。

/* 编码器参数设置,如果为NULL则表示继续使用前一帧的设置。某些参数
   (例如aspect ratio) 由于收到H264本身的限制,只能每隔一个GOP才能改变。
   这种情况下,如果想让这些改变的参数立即生效,则必须强制生成一个IDR帧。*/ 
x264_param_t    *param;

x264_image_t     img;           // 存放一帧图像的真实数据
x264_image_properties_t    prop;
x264_hrd_t    hrd_timing;     // 输出:HRD时间信息,仅当i_nal_hrd设置了才有效
void    *opaque;                     // 私有数据存放区,将输入数据拷贝到输出帧中
} x264_picture_t ;


/****************************************************************************************************************

x264_nal_t中的数据在下一次调用x264_encoder_encode之后就无效了,因此必须在调用

x264_encoder_encode 或 x264_encoder_headers 之前使用或拷贝其中的数据。

*****************************************************************************************************************/

typedef struct

{

int  i_ref_idc;        // Nal的优先级

int  i_type;           // Nal的类型

int  b_long_startcode; // 是否采用长前缀码0x00000001

int  i_first_mb;       // 如果Nal为一条带,则表示该条带第一个宏块的指数

    int  i_last_mb;        // 如果Nal为一条带,则表示该条带最后一个宏块的指数

    int  i_payload;        // payload 的字节大小

    uint8_t *p_payload;    // 存放编码后的数据,已经封装成Nal单元

} x264_nal_t;



/****************************************************************************************************************

cli_opt_t结构体主要记录一些与编码关系较小的设置信息,其变量可通过读取main()的参数获得。

*****************************************************************************************************************/

typedef struct

{

       int   b_progress;     // bool类型的变量,用来控制是否显示编码进度。取值为0或1。

       int   i_seek;             // 整数类型 表示开始从哪一帧开始编码。

                                                 // 因为不一定从文件的第一帧开始编码,这是可以控制的。


   /* hnd_t(hnd=handle)是一个空指针, 定义在x264cli.h 中。void *在C语言里空指针是有几个

    特性的,它是一个一般化指针,可以指向任何一种类型,但却不能解引用,需要解引

    用的时候,需要进行强制转换。采用空指针的策略,是为了声明变量的简便和统一。 */

       hnd_t   hin;              // 指向输入yuv文件的指针

       hnd_t  hout;            // 指向编码过后生成的文件的指针。


   /* 一个指向文件类型的指针,它是文本文件,其每一行的格式是 :framenum frametye  

      QP用于强制指定某些帧或者全部帧的帧类型和QP(quant param量化参数)的值. */

       FILE   *qpfile;

} cli_opt_t;
x264 编码器x264.h文件中结构体详细介绍 阅读详情

相关推荐

x264源代码分析(h.264源代码中最难理解的部分做了阐释)

使用版本: x264-cvs-2004-05-11 这次的分析基本上已经将代码中最难理解的部分做了阐释,对代码的主线也做了剖析,如果这个主线理解了,就容易设置几个区间,进行分工阅读,将各个区间击破了.

流媒体-H264协议-编码-x264学习-主要结构体(二)

流媒体-H264协议-编码-x264学习-相关概念x264编译及文件解析(一) 文章目录写在前面:所有结构体属性意义内容可在:[ITU-T H.264建议书]查询libx264相关结构体x264_param_t 结构体cli_opt_t 结构体x264_level_t 结构体x264_image_t 结构体:存放一帧图像实际像素数据x264_image_properties_t 结构体x264_picture_t 结构体:描述一视频帧的特征x264_frame_t 结构体:图像帧编解码的相关参数x264_n

bwangk的博客 1667

【Elasticsearch专栏 16】深入探索:Elasticsearch的Master选举机制及其影响因素分析

Elasticsearch的Master选举机制是其分布式架构的基石,确保集群高可用性和数据一致性。通过多数派协议,节点间交换信息并投票选举Master,以维护集群状态和处理请求。该机制自动处理故障转移,保障服务连续性。

weixin_40736233的博客 1774

转)x264重要结构体详细说明(2): x264_image_t、x264_picture_t、x264_nal_t

转自:http://nkwavelet.blog.163.com/blog/static/2277560382013102923912753/ /******************************************************************************************** x264_image_t 结构用...

dianchixian5277的博客 360

【Labview】对连续采集数据的一种采样方法

图1如图1,想要对这样一个连续信号进行数据点的采集,我根据网上收集到的方法,在此分享一下最终的结果。可以拓展结合文件的写入,完成对连续信号的采集和输出。 已知: 一个连续信号,如图1. 目标: 设定一定采集点个数、采集点时间间隔、和采集周期次数,得到这条连续信号的数据点,如图2. 图2 方法如下: 主要利用的是队列的方法。 在连续信号生成的时候,不断的写入队列,并且清除队列。 ...

李时珍食疗志的博客 1万+

微生物组β-多样性——PCoA分析及可视化

让你的数据映入眼帘

qq_47369980的博客 1万+

x264源码分析与应用示例(一)——视频编码基本流程

x264源码分析与应用示例(一)——视频编码基本流程

m0_60259116的博客 2211

防火墙——双机热备理论讲解

本端和对端协商失败。有可能是因为本端和对端设备的软件版本不一致、某端配置错误、对端设备的心跳接口状态为Down、HRP源或目的端口号被修改、或者底层链路不通等原因导致。会话表、SeverMap表、IP监控表、分片缓存表、GTP表、黑名单、PAT方式端口映射表、NO-PAT方式地址映射表。两台设备一主一备,正常情况下业务流量由主设备处理,当主设备故障时,业务流量平滑切换到备用设备进行处理,业务不中断。开启自动备份后,当主用设备配置了一条可备份的命令或产生了可备份的会话表状态时,会直接备份到备用设备上。

m0_49864110的博客 2万+

04-编码篇-X264的部分函数分析

x264_encoder_encode 或 x264_encoder_headers 之前使用或拷贝其中的数据。在前面的章节中,笔者有描述如何最简单的将一个YUV数据转换成H264,关于此代码涉及到如下结构体与函数,如下。x264_nal_t中的数据在下一次调用x264_encoder_encode之后就无效了,因此必须在调用。1.x264_picture_t 结构体描述一视频帧的特征,该结构体定义在x264.h中。4.x264_t是一个控制X264编码的全局性结构体,该结构体控制着视频一帧一帧的编码。

sishen4199的博客 659

3D打印机控制系统设计:基于MATLAB的3D打印机运动学建模、轨迹规划和控制

控制实现:在控制实现中,需要将轨迹规划的结果转化为实际的控制指令,控制3D打印机按照规划的轨迹进行运动。3D打印机的运动学建模:3D打印机的运动学建模是指将3D打印机的机械结构、传动系统和运动控制部件等抽象成数学模型,以便于进行控制系统的设计和分析。轨迹规划:轨迹规划是指根据3D模型的几何形状和打印机的运动学模型,计算出打印机需要执行的运动轨迹,以便于实现所需的打印效果。控制实现:控制实现是指将轨迹规划的结果转化为控制指令,控制3D打印机按照规划的轨迹进行运动。

走向CTO的路上... 2473

从DDPM到DDIM:深入解读《Denoising Diffusion Implicit Models》

DDIM发表在ICRL2021上,是DDPM重要的改进之一,能显著提高DDPM的样本质量、减少采样时间,并且能显式控制插值,已经被广泛应用到现在的Diffusion Models上。这篇博客和大家一起详细解读一下DDIM,认识这一伟大的模型。.........

沉迷单车的追风少年 1万+

x264中几个重要结构体的说明

看代码,虽说不一定非得把每一个变量的含义都弄得一清二楚,但是对于比较重要的变量参数,你不了解的话那看起程序来会特别吃力,故这里先开个头,给出x264中几个重要结构体的说明,主要以注释的形式给出。 typedef struct x264_param_t { /* CPU flags */ unsigned int cpu; int i_threads

HEVC_CJL的专栏 5691

UNet改进(24):注意力机制-从基础原理到高级融合策略

本文系统探讨了如何通过引入各类注意力机制增强UNet在医学图像分割中的性能。文章分为基础篇、进阶篇和高级篇三个层级:基础篇介绍了时序注意力、可变形注意力、分层注意力等8种基础机制;进阶篇提出了5种混合注意力设计;高级篇则探讨了全局+局部+多尺度等复杂组合机制。实验表明,这些注意力模块在心脏MRI、肺部感染等任务中能提升2-15%的分割精度。文章还提供了硬件适配建议和完整实现代码,为研究者提供了全面的技术参考。未来方向包括NAS优化、量子注意力等前沿探索,为UNet在医疗影像等领域的应用革新提供了理论指导。

2501_91516851的博客 764

X264视频编码分析(2):libx264编码库

    x264编码库libx264实现真正的视频编解码,该编解码算法是基于块的混合编码技术,即帧内/帧间预测,然后对预测值变换、量化,最后熵编码所得。    编码帧的类型分为I帧(x264_type_i)、P帧(x264_type_p)、B帧(x264_type_b),在H264中叫做图像片Slice。X264把整帧图像看作一个Slice,片中有slice_type_i、slice_type_p...

为取经而来的博客 2176

Boot过程相关镜像详解:IVT、DCD、App Boot镜像到底是什么?

S32系列芯片中常说的IVT镜像、DCD镜像等跟Boot过程相关的镜像到底是什么,镜像结构长啥样?各镜像作用是什么?主分区和备份区的概念?答案统统在这里!!

车载系统攻城狮 4252

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

x264学习----x264.h结构体

x264.h结构体学习,还在持续更新中 /***************************************************************************** * x264.h: x264 public header **********************************************************************...

Wu_qz的博客 2283

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

zc301P摄像头opencv录制,libx264编码为H264格式文件(test.264)

/* * camera_yuv_x264.cpp */ #include <stdint.h> #include <opencv/highgui.h> #include <stdio.h> #include <unistd.h> #include <fcntl.h> #include <stdlib.h&gt...

weixin_30437481的博客 202

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

使用libx264将I420编码为H.264

libx264  libx264是一个自由的H.264编码库,是x264项目的一部分,使用广泛,ffmpeg的H.264实现就是用的libx264。 代码 要把一个I420视频文件编码为H264格式。I420是YUV中planar格式的一种,一张I420图片中有三个plane,分别存放整张图片的Y、U、V分量;采样比例为4:2:0,12bpp,Y:U:V的分量长度是4:1:1。 头文件

lvc851116的专栏 1014

X264代码分析

  Main(int argc,char *argv[]);为了方便起见,不妨改写为:Main(void){......    int argc=5;    char *argv[]={       "main","-o","test.264","foreman.yuv","352x288"       };           ......}===

jia_xiaoxin的专栏 6523

x264源代码框架分析

X264编码器主干部分的函数调用关系如下图所示。 从图中可以看出,x264主干部分最复杂的函数就是x264_encoder_encode(),该函数完成了编码一帧YUV为H.264码流的工作。与之配合的还有打开编码器的函数x264_encoder_open(),关闭编码器的函数x264_encoder_close(),以及输出SPS/PPS/SEI这样的头信息的x264_encoder_head...

yihuanyihuan的博客 812
上一篇: x264重要结构体详细说明(1): x264_param_t
下一篇: x264重要结构体详细说明(3): x264_sps_t、x264_pps_t
一世豁然
博客等级 码龄15年 1276粉丝 146原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值