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

查询工程建设项目的网站文库网站开发教程

查询工程建设项目的网站,文库网站开发教程,企业qq一年多少费用,做网站做哪个好一、引言 从《音视频入门基础:H.264专题(18)——AVCDecoderConfigurationRecord简介》中可以知道,avcC跟AnnexB不一样,avcC包装的H.264码流中,每个NALU前面没有起始码。avcC通过在每个NALU前加上NALUnitL…

一、引言 

从《音视频入门基础:H.264专题(18)——AVCDecoderConfigurationRecord简介》中可以知道,avcC跟AnnexB不一样,avcC包装的H.264码流中,每个NALU前面没有起始码。avcC通过在每个NALU前加上NALUnitLength,在读取某个NALU之前,先把该NALU前面的NALUnitLength读取出来,拿到该NALU的总长度,然后根据该长度读取相应的字节数,读取出整个NALU。

而FFmpeg源码内部使用get_nalsize函数读取出某个NALU前面的NALUnitLength。

二、get_nalsize函数的定义

get_nalsize函数定义在FFmpeg源码(本文演示用的FFmpeg源码版本为7.0.1)的头文件libavcodec/h2645_parse.h中:

static inline int get_nalsize(int nal_length_size, const uint8_t *buf,int buf_size, int *buf_index, void *logctx)
{int i, nalsize = 0;if (*buf_index >= buf_size - nal_length_size) {// the end of the buffer is reached, refill itreturn AVERROR_INVALIDDATA;}for (i = 0; i < nal_length_size; i++)nalsize = ((unsigned)nalsize << 8) | buf[(*buf_index)++];if (nalsize <= 0 || nalsize > buf_size - *buf_index) {av_log(logctx, AV_LOG_ERROR,"Invalid NAL unit size (%d > %d).\n", nalsize, buf_size - *buf_index);return AVERROR_INVALIDDATA;}return nalsize;
}

该函数作用是读取avcC封装的H.264码流中某个NALU前面的NALUnitLength,或者读取AVCDecoderConfigurationRecord中某个SPS前面的sequenceParameterSetLength,或者读取AVCDecoderConfigurationRecord中某个PPS前面的pictureParameterSetLength。由于SPS和PPS都属于一种特殊的NALU,所以sequenceParameterSetLength和pictureParameterSetLength也算是一种NALUnitLength。只是存贮每个sequenceParameterSetLength和pictureParameterSetLength需要固定2字节空间,而存贮每个NALUnitLength所需的空间由AVCDecoderConfigurationRecord中的lengthSizeMinusOne属性决定而已。

形参nal_length_size:输入型参数。如果是要读取某个NALU前面的NALUnitLength,形参nal_length_size的值为“存贮该NALU对应NALUnitLength所需的以字节为单位的空间”;如果是要读取sequenceParameterSetLength或pictureParameterSetLength,形参nal_length_size的值固定为2。

形参buf:输入型参数,指向某个缓冲区。

1.如果是要读取某个NALU前面的NALUnitLength,该缓冲区存放该NALU对应的NALUnitLength + NALU Header + EBSP;

2.如果是要读取某个SPS前面的sequenceParameterSetLength,该缓冲区存放该SPS对应的sequenceParameterSetLength + NALU Header + 该SPS实际的NALU数据(该SPS的EBSP);

3.如果是要读取某个PPS前面的pictureParameterSetLength,该缓冲区存放该PPS对应的pictureParameterSetLength + NALU Header + 该PPS实际的NALU数据(该PPS的EBSP);

形参buf_size:形参buf指向的缓冲区的长度,单位为字节。

形参buf_index:既是输入型参数也是输出型参数。表示读取到形参buf指向的缓冲区的第几个字节了。

形参logctx:输入型参数。用来输出日志,可忽略。

返回值:执行成功返回读取到的NALUnitLength或sequenceParameterSetLength或pictureParameterSetLength,失败返回一个负数。

三、get_nalsize函数的内部实现分析

get_nalsize函数中,首先判断是否读到了形参buf指向的缓冲区的末尾。如果已经读到了末尾,返回AVERROR_INVALIDDATA:

    if (*buf_index >= buf_size - nal_length_size) {// the end of the buffer is reached, refill itreturn AVERROR_INVALIDDATA;}

如果还没读到末尾,继续执行。通过下面语句,读取NALUnitLength或sequenceParameterSetLength或pictureParameterSetLength,存贮到局部变量nalsize中:

    for (i = 0; i < nal_length_size; i++)nalsize = ((unsigned)nalsize << 8) | buf[(*buf_index)++];

如果读取到的该NALU的总长度小于0,或者读取到的该NALU的总长度大于形参buf指向的缓冲区中剩下的还未被读取的空间,打印日志"Invalid NAL unit size”,并返回AVERROR_INVALIDDATA:

    if (nalsize <= 0 || nalsize > buf_size - *buf_index) {av_log(logctx, AV_LOG_ERROR,"Invalid NAL unit size (%d > %d).\n", nalsize, buf_size - *buf_index);return AVERROR_INVALIDDATA;}

读取成功返回NALUnitLength或sequenceParameterSetLength或pictureParameterSetLength的值:

    return nalsize;

http://www.yayakq.cn/news/695294/

相关文章:

  • 报价网站杰奇网站地图插件
  • 柳州网站制作推荐获得网站后台地址
  • 宿城区建设局网站如何提高网站访问量
  • 建设工程质量监督竣工备案网站太原做网站的鸣蝉公司
  • 用wps网站栏目做树形结构图wordpress虎嗅网源码
  • 购物网站开发英文文献东莞网站推广策划
  • 网站域名备案地址信息流优化师面试常见问题
  • 网页游戏网站电影深圳seo排名优化
  • 国外做任务的网站网站的效果图
  • 网站建设案例教程手表回收网网站
  • 网站建设是什么意思 打不开阿里云备案网站服务内容怎么填
  • 建网站要钱吗网站怎么做需要花钱吗
  • 有关网站建设的论文大地seo视频
  • 做淘客推广用什么网站好字体设计网站有哪些
  • 网站建设项目标书制作个人博客网站
  • 九江市住房与城乡建设厅网站竞价服务托管价格
  • 内蒙古工程建设招投标中心网站龙华做网站怎么样
  • 新手做电影网站重庆便宜做网站的
  • 婚庆网站怎么设计模板江苏润通市政建设工程有限公司网站
  • 网站正在建设中页面网站运营课程
  • 局域网内部如何做网站商业网站最佳域名
  • 番禺建设网站哪个好wordpress 安全密钥
  • 发布个人免费网站的一般流程图友情链接站长平台
  • 商城网站开发多久旅游网站建设的参考文献
  • vs做网站怎么做窗体网站开发文章怎么分类
  • 想开个网站不知怎样做做微网站需要哪种公众号
  • 做企业公司网站淘宝网站c 设计怎么做的
  • 简述网站开发平台破解版软件下载网站
  • 装修设计网站排行外贸多语言网站建设
  • 厦门网站开发费用青岛网站设计推广