H263压缩码流如何分解为一个一个单元并查询到其宽高?

H263码流尺寸规格有限,只有以下几种:
在这里插入图片描述
H263码流有四个分层:
1、图像层
2、块组
3、宏块
4、块
下面分别介绍:
在这里插入图片描述
具体介绍如下,5.1.3中红色框选部分就是压缩码流的宽高指示:

图像层

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上面就是H263的图像层,块组层在图像层里面。

块组层

在这里插入图片描述
上图红色框中的Group of Blocks为块组层。
在这里插入图片描述

宏块层

在这里插入图片描述

上图中的红框为宏块层。
在这里插入图片描述
因为我们本章主要介绍如何将连续的H263分解为一帧一帧的packet,并且实时求出每个packet中的宽高,所以我们本次只分析图像层即可。

我们继续回顾图像层:
在这里插入图片描述

名称bit说明
图像开始码(PSC)22bitPSC 是一个 22 比特的字。它的值是 0000 0000 0000 0000 1 00000。所有的图象开始码都应该以字节对齐。这应该通过在开始码之前插入 PSTUF 来完成,因此开始码的第一位是一个字节中的第一位(也是最重要的一位)
时域参照 (TR)8bit一个 8 比特的数可以有 256 种可能值。通过将它在前一帧传送的图象头中的值加 1 再加未传送的帧数(以 29.97 Hz 计)来形成这个值。只对 8 个 LSB 进行计算。在可选的 PB 帧模式下,TR 只指定 P 帧地址;对于 B 帧的时域参照请查看 5.17 部分。
类别信息1(PTYPE)位1始终为“1”,为了避免混淆开始码
类别信息2(PTYPE)位2始终为“0”,与 H.261 相区别
类别信息3(PTYPE)位3屏幕分割指示位,“0”关,“1”开
类别信息4(PTYPE)位4文件相机指示器,“0”关,“1”开
类别信息5(PTYPE)位5静止图象释放位,“0”关,“1”开
类别信息6-8(PTYPE)位6-8信源格式,“000”禁止,“001”sub-QCIF,“010”QCIF,“011”CIF, “100” 4CIF, “101” 16CIF, “110” 保留, “111”保留
类别信息9(PTYPE)位9图象编码类型,“0” INTRA (I-picture),“1” INTER (P-picture)
类别信息10(PTYPE)位10可选无限制矢量模式,“0”关,“1”开
类别信息11(PTYPE)位11可选基于句法的编码模式,“0”关,“1”开
类别信息12(PTYPE)位12可选高级预测模式,“0”关,“1”开
类别信息13(PTYPE)位13可选 PB 帧模式,“0”关,“1”开
量化器信息 (PQUANT) (5 bits)5bit这是一个固定长度为 5 比特的码字,它指示了为图象使用量化器 QUANT 直到被更新为 GQUANT 或 DQUANT。这个码字以二进制方式表示了 QUANT 的半步距,即从 1 到 31
连续出现的多点 (CPM)1 bit这是一个只有一个比特位的码字,它通知了是否使用可选的连续出现多点模式(CPM);“0”关,“1”开。关于 CPM 的使用请参见附录 C
图象子比特流指示位 (PSBI)2bit这是个固定长度位 2 比特位的码字。只有在 CPM 指示了连续出现多点模式为有效时,这个码字才出现。这个码字以二进制形式表示图象头和后续直到下一帧图象或 GOB 开始码的信息的子比特流数(参见附录 C)
B帧的时间参照 (TRB)3 bit如果 PTYPE 指示了“PB 帧”(见附录 G)则 TRB 出现,并指示了从上一个 I 帧或 P 帧到现在这个 B 帧所位传送的帧数。这个码字以简单的二进制形式表示了未传送整数加 1。最大的未传送帧数是 6
B帧的量化信息 (DBQUANT)2 bit如果 PTTYPE 指示了“PB 帧”则 DBQUANT 出现。在译码过程中,对每个宏块可以得到一个量化参数。PB 帧中对 P 块使用QUANT,对B块使用另一个量化参数BQUANT。QUANT的范围是1到31。DBQUANT指示了如表3/H.263中定义的QUANT和 BQUANT 之间的关系。BQUANT 的范围是 1 到 31,如果由表 3/H.263计算得出的值大于 31 则被剪切到 31
额外插入信息 (PEI)1 bit这个位如果被设置位“1”,则标志存在着后续的可选数据域
空信息 (PSPARE)(0/8/16 . . . bits)如果 PEI 被设置为"1",则后续的 9 个比特位包含了 8 个数据位(PSPARE)和另一个 PEI 位以指示后续是否还有 9 个位,……。在 ITU 指明之前编码器不要插入 PSPARE。译码器在 PEI 位为“1”时要能够分解 PSPARE。着就允许 ITU 在 PSPARE 中添加向后兼容的信息。如果 PSPARE 后紧跟着 PEI=0,PSPARE=xx000000 是不允许的,以避免和开始码相混淆。(x=不关心, 所以 256 中可能值中由四分之一被禁止)
填塞 (ESTUF)(变长) bit这是一个长度可变的包含由少于 8 个“0”位的码字。编码器可以直接在 EOS 码字前插入这个码字。如果有 ESTUF 则 ESTUF的最后一位应该是该字节的最后一位(最不重要)。所以 EOS 码字的开始处是字节对齐的。译码器应被设计成可抛弃 ESTUF
序列结束 (EOS)22 bit这个码字由 22 个比特位。它的值为 0000 0000 0000 0000 1 11111。由编码器来决定是否插入这个码字。EOS 可以是字节对齐的。在开始码前插入 ESTUF 可使开始码字节对齐
填塞 (PSTUF)(变长) bit这是一个长度可变的包含由少于 8 个“0”位的码字。编码器应将这个码字插入在下一个 PSC 之前以实现字节对齐。PSTUF的最后一位应该是该字节的最后一位(最不重要),因此包含 PSTUF 的视频比特流到 H.263 比特流开始处的偏移比特数是 8的倍数。译码器应该能够抛弃 PSTUF如果由于某些原因编码器停止编码了一段时间后又继续进行编码,编码器停止之前应发送 PSTUF,以防止出现将上一帧图象编码的最后几位(最多可达 7 位)保留到重新编码开始

为了将连续的h263压缩码流分割为一个个以帧为单位的packet,我们就要找到每一帧的起始位置和结束位置,为了简单考虑,我们抛弃图像层不重要的部分,只关心起始和结束的几个关键位:
在这里插入图片描述
上图是两帧h263,通过观察发现,我们只要找到PSC就可以了。
具体代码如下:

#define END_NOT_FOUND (-100)int ff_h263_find_frame_end(ParseContext *pc, const uint8_t *buf, int buf_size) {int vop_found, i;uint32_t state;vop_found = pc->frame_start_found;state = pc->state;i = 0;if (!vop_found) {for (i = 0; i < buf_size; i++) {state = (state << 8) | buf[i];if (state >> (32 - 22) == 0x20) {i++;vop_found = 1;break;}}}if (vop_found) {for (; i < buf_size; i++) {state = (state << 8) | buf[i];if (state >> (32 - 22) == 0x20) {pc->frame_start_found = 0;pc->state = -1;return i - 3;}}}pc->frame_start_found = vop_found;pc->state = state;return END_NOT_FOUND;
}

至于宽高,则只要解析类信息的第6-8位再查表即可,不再赘述。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/79660.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P1156 垃圾陷阱(背包变形)

垃圾陷阱 题目描述 卡门――农夫约翰极其珍视的一条 Holsteins 奶牛――已经落了到 “垃圾井” 中。“垃圾井” 是农夫们扔垃圾的地方&#xff0c;它的深度为 D D D&#xff08; 2 ≤ D ≤ 100 2 \le D \le 100 2≤D≤100&#xff09;英尺。 卡门想把垃圾堆起来&#xff0c…

智慧水利整体解决方案[43页PPT]

导读&#xff1a;原文《智慧水利整体解决方案[43页PPT]》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 完整版领取方式 完整版领取方式&#xff1a; 如需获取完整的…

概念解析 | 生成式与判别式模型在低级图像恢复与点云重建中的角力:一场较量与可能性探索

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:生成式模型与判别式模型在低级图像恢复/点云重建任务中的优劣与特性。 生成式与判别式模型在低级图像恢复与点云重建中的角力:一场较量与可能性探索 1. 背景介绍 机器学习…

elasticSearch常见的面试题

常见的面试问题 描述使用场景 es集群架构3个节点&#xff0c;根据不同的服务创建不同的索引&#xff0c;根据日期和环境&#xff0c;平均每天递增60*2&#xff0c;大约60Gb的数据。 调优技巧 原文参考&#xff1a;干货 | BAT等一线大厂 Elasticsearch面试题解读 - 掘金 设计阶…

C++QT教程2——创建QT项目

文章目录 2 创建Qt项目2.1 使用向导创建2.2 手动创建2.3 .pro文件2.4 一个最简单的Qt应用程序main入口函数中&#xff08;main.cpp&#xff09;arnold_widget.h函数arnold_widget.cpp 参考文章 2 创建Qt项目 2.1 使用向导创建 打开Qt Creator 界面选择 New Project或者选择菜…

SAP MM学习笔记15-物料调达中的Master数据(2)-品目Master

SAP中做一个购买发注的时候&#xff0c;涉及到以下Master数据&#xff1a; 1&#xff0c;仕入先Master&#xff08;供应商&#xff09;&#xff1a;跟谁买 2&#xff0c;品目Master&#xff08;物料&#xff09;&#xff1a;买什么 3&#xff0c;购买情报&#xff1a;什么价…

Python selenium对应的浏览器chromedriver版本不一致

1、chrome和chromedriver版本不一致导致的&#xff0c;我们只需要升级下chromedriver的版本即可 浏览器版本查看 //打开google浏览器直接访问&#xff0c;查看浏览器版本 chrome://version/ 查看chromedriver的版本 //查看驱动版本 chromedriver chromedriver下载 可看到浏…

Zebec Protocol ,不止于 Web3 世界的 “Paypal”

Paypal是传统支付领域的巨头企业&#xff0c;在北美支付市场占有率约为77%以上。从具体的业务数据看&#xff0c;在8月初&#xff0c;Paypal公布的2023年第二季度财报显示&#xff0c;PayPal第二季度净营收为73亿美元&#xff0c;净利润为10.29亿美元。虽然Paypal的净利润相交去…

按轨迹运行(纯跟踪)

文章目录 import numpy as np import math import matplotlib.pyplot as pltk = 0.1 # 前视距离系数 Lfc = 2.0 # 前视距离 Kp = 1.0 # 速度P控制器系数 dt = 0.1 # 时间间隔,单位:s L = 2.9 # 车辆轴距,单位:mdef plot_arrow(x, y, yaw, length=5, width=1):dx = len…

css小练习:案例6.炫彩加载

一.效果浏览图 二.实现思路 html部分 HTML 写了一个加载动画效果&#xff0c;使用了一个包含多个 <span> 元素的 <div> 元素&#xff0c;并为每个 <span> 元素设置了一个自定义属性 --i。 这段代码创建了一个简单的动态加载动画&#xff0c;由20个垂直排列的…

小程序的api使用 以及一些weui组件实列获取头像 扫码等

今日目标 响应式单位rpx小程序的生命周期 【重点】20%小程序框架 weui 【重点】 50%内置API 【重点】30%综合练习 1. 响应式rpx 1.1 rpx单位 rpx是微信小程序提出的一个尺寸单位&#xff0c;将整个手机屏幕宽度分为750份&#xff0c;1rpx 就是 1/750&#xff0c;避免不同手…

漫画 | TCP/IP之大明邮差

后记&#xff1a; 1973年&#xff0c;卡恩与瑟夫开发出了网络中最核心的两个协议&#xff1a;TCP协议和IP协议&#xff0c;随后为了验证两个协议的可用性&#xff0c;他们做了一个实验&#xff0c;在多个异构网络中进行数据传输&#xff0c;数据包在经过近10万公里的旅程后到达…

windows永久关闭更新

不要去services.msc 服务里面关闭windowUpdata了&#xff0c;对win11和部分win10根本不管用&#xff0c;下面在教你一招永久关闭&#xff08;原理不是关闭&#xff0c;只是延长更新时间&#xff0c;时间可以设置百年后&#xff0c;所以和关闭差不多&#xff09; windows图形化…

ModaHub魔搭社区:大模型落地需要“记忆力”,这家公司想为向量数据库Milvus Cloud正名

现实生活中若两人进行对话,大致需要三步流程:一方首先抛出话题作引子;另一方会先调动记忆判断自己是否了解这个话题,然后再分析给出应该做出何种回答。如此循环往复直到互动结束,而此次对话又会作为一种新的“记忆”被双方吸收。 为让计算机完成这样的互动过程,并持续…

acwing第 115 场周赛第二题题解:维护最大值和次大值

一、链接 5132. 奶牛照相 二、题目 约翰的农场有 nn 头奶牛&#xff0c;编号 1∼n1∼n。 其中&#xff0c;第 ii 头奶牛的宽度为 wiwi&#xff0c;高度为 hihi&#xff0c; 有一天&#xff0c;它们聚餐后决定拍照留念。 关于拍照的描述如下&#xff1a; 它们一共拍了 nn…

【Linux初阶】基础IO - 动静态库 | 初识、生成、链接、加载

&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f; &#x1f36d;&#x1f36d;系列专栏&#xff1a;【Linux初阶】 ✒️✒️本篇内容&#xff1a;动静态库初识&#xff0c;库的含义&#xff0c;静态库的生成与链接&#xff0c;gcc/g默认链接方式&#xff0c…

Grafana V10 告警推送

最近项目建设完成&#xff0c;一个城域网项目&#xff0c;相关zabbix和grafana展示已经完&#xff0c;想了想&#xff0c;不想天天看平台去盯网络监控平台&#xff0c;索性对告警进行分类调整&#xff0c;增加告警的推送&#xff0c;和相关部门的提醒&#xff0c;其他部门看不懂…

C语言经典小游戏之三子棋(超详解释+源码)

“纵有疾风来&#xff0c;人生不言弃&#xff0c;风乍起&#xff0c;合当奋意向此生。” 今天我们一起来学习一下三子棋小游戏用C语言怎么写出来&#xff1f; 三子棋小游戏 1.游戏规则介绍2.游戏准备3.游戏的实现3.1生成菜单3.2游戏的具体实现3.2.1初始化棋盘3.2.2打印棋盘3.2…

rv1109/1126 rknn 模型部署过程

rv1109/1126是瑞芯微出的嵌入式AI芯片&#xff0c;带有npu, 可以用于嵌入式人工智能应用。算法工程师训练出的算法要部署到芯片上&#xff0c;需要经过模型转换和量化&#xff0c;下面记录一下整个过程。 量化环境 模型量化需要安装rk的工具包&#xff1a; rockchip-linux/rk…

FineBI 人力资源 专题

此处使用FineBI处理人力资源数据&#xff0c;数据来源于HR_database数据文件&#xff0c;将此文件拷贝到安装目录下 然后配置数据库连接 在【公共数据】中新建一个文件夹&#xff0c;并将之前数据库中需要用到的表放入此处&#xff0c;更新数据。显示如下。 这时候首先要建立…