H264 CAVLC学习笔记

H.264熵解码详细过程 1、三种熵编码形式熵编码是无损压缩编码方法,它生成的码流可以经熵解码无失真地恢复出数据。 对应熵编码方案,在H.264标准中也有3种熵解码方案: 指数哥伦布解码,CAVLC解码和CABAC解码。在标准中通过描述子(Descriptor)的形式来说明一个语法元素熵解码的方法。对于片层以上的语法元素有定长解码和变长解码方案;对于片层以下的语法元素,当entropy_coding_mode_flag为0 阅读详情

本文和复旦大学开源的h264_enc代码对应

编码过程:

假设有一个4*4数据块
{
0, 3, -1, 0,
0, -1, 1, 0,
1, 0, 0, 0,
0, 0, 0, 0
}
数据重排列:0,3,0,1,-1,-1,0,1,0……

1) 初始值设定:

//TotalCoefZero.v
//TrailingOne.v
//NC_compute.v

非零系数的数目(TotalCoeffs) = 5; 
非零系数为{3,1,-1,-1,1}

拖尾系数的数目(TrailingOnes)= 3; 
(+1)和(-1)在非零系数中的数量是4个,trailingones的范围是[0,3]
所以最后trailingones的取值是3

最后一个非零系数前零的数目(Total_zeros) = 3;
最后一个非零系数是1,前面有3个0,所以total_zeros取值是3

Nc = 1
Nc:当前块值(Number current)。除色度的直流系数外,其它系数类型Nc值是根据当前左边
4x4块的非零系数数目(NA)和当前块上面4x4的非零系数的数目(NB)求得的。
如果左边存在4x4块,上边也存在4x4块,Nc = (NA + NB + 1) >> 1
如果左边不存在4x4块,上边存在4x4块,Nc = NB
如果左边存在4x4块,上边不存在4x4块,Nc = NA
如果左边和上边都不存在4x4块,Nc = 0

当调用色度直流系数时,Nc由YUV格式确定
4:2:0时,Nc = -1
4:2:2时,Nc = -2

YUV格式会确定另外一个参数
4:2:0时,ChromaArrayType = 1
4:2:2时,ChromaArrayType = 2
4:4:4时,ChromaArrayType = 3
other,ChromaArrayType = 0

suffixLength = 0; 
i = TotalCoeffs = 5; 

2) 编码coeff_token:

//Coeff_token_enc.v

查标准(Rec.ITU-T H.264)Table 9-5,可得: 
If (TotalCoeffs == 5 && TrailingOnes == 3 && 0 <= NC < 2) 
  coeff_token = 0000 100; 
  code_bit = 0000 100; 

3) 编码所有TrailingOnes的符号:

// Coeff_Sign_packer.v

逆序编码,三个拖尾系数的符号依次是+(0),-(1),-(1); 
即:

TrailingOne sign[2] = 0;  
TrailingOne sign[1] = 1;   
TrailingOne sign[0] = 1;  
tmpCodeBit = 0000 1000 11; 
tmpCodeBit = {code_bit,TrailingOne sign[2],TrailingOne sign[1],TrailingOne sign[0]}

Coeff_Sign_packer.v输出的是CoeffSignCodeBit,
如上所示,tmpCodeBit的位数是10bit,
CoeffsignCodeBit = {tmpCodeBit,(19-10){1'b0}}
CoeffsignCodeBit = 0000 1000 1100 0000 000

与拖尾系数对应的levels为{1,-1,-1}
当TrailingOne sign为0时,对应level为1
当TrailingOne sign为1时,对应level为-1

4) 编码除了拖尾系数以外非零系数幅值Levels:

//level_enc.v
过程如下:

(1)将有符号的Level转换成无符号的levelCode

  如果Level是正的,levelCode = (Level<<1) – 2;  
  如果Level是负的,levelCode = - (Level<<1) – 1; 
  如果TrailingOnes小于3,那么第一个非TrailingOnes的非零系数必不为 +1、-1,
  为了节省编码比特,将其幅值减1。也就是如果level为正,level=level-1;
  否则,level=level+1。然后再按(1)

(2)计算level_prefix:

  如果TotalCoeffs>10,且TrailingOnes<3,那么suffixlength初始化为1;
  否则suffixlength初始化为0  
  level_prefix = levelCode / (1<<suffixLength); 
  查表9-6可得所对应的bit string; 

(3)计算level_suffix:

  level_suffix = levelCode % (1<<suffixLength); 

(4)根据suffixLength的值来确定后缀的长度;

(5)更新suffixLength值

更新suffixLength函数如下: 
If ( suffixLength == 0 ) 
        suffixLength++; 
else if ( levelCode > (3<<(suffixLength-1)) && suffixLength <6) 
        suffixLength++; 

回到例子中,依然按照逆序,
按逆序除了拖尾系数之外的非零系数为1,3;suffixLength的初始值为0
Level[i--] = 1;(i-- = 1)
levelCode = (Level[i] << 1)- 2 = (1 << 1) - 2 = 2 - 2 = 0;
level_prefix =levelCode / (1<< suffixLength)= 0 / (1 << 0) = 0
level_suffix = levelCode%(1 << suffixLength)= 0 % (1 << 0) = 0 
查表9-6,可得level_prefix = 0时对应的bit string = 1; 
因为suffixLength初始化为0,故该Level没有后缀; 
因为suffixLength = 0,故suffixLength++; 
Code = 0000 1000 111; 
Code = {tmpCodeBit, bit string};

编码下一个Level:Level[0] = 3; 
levelCode = (Level[i] << 1)- 2 = (3 << 1) - 2 = 6 - 2 = 4;
level_prefix =levelCode / (1<< suffixLength)= 4 / (1 << 1) = 2;
查表得bit string = 001; 
level_suffix = levelCode%(1 << suffixLength)= 4 % (1 << 1)=0;
SuffixLength = 1,level_suffix的Code = 0; 
Code = 0000 1000 1110 010;
Code = {Code,bit string,level_suffix} 
i = 0,编码Level结束。 

5)编码最后一个非零系数前零的数目(TotalZeros):

// TotalZeros_enc.v

TotalZeros指的是在最后一个非零系数前零的数目,此非零系数指的是按照正向扫描的最后一
个非零系数。例如:已知一串系数0 0 5 0 3 0 0 0 1 0 0 -1 0 0 0 0,最后一个非零系数是-1,
TotalZeros的值等于 2+3+1+2=8。因为非零系数数目TotalCoeffs是已知的,这就决定了
TotalZeros可能的最大值。编码见 H264标准Table9-7,Table9-8,Table9-9

查表9-7,当TotalCoeffs = 5,total_zero = 3时,bit string = 111; 
tzVlcIndex = TotalCoeffs
Code = 0000 1000 1110 0101 11
Code = {Code,bit string}

6) 对每个非零系数前零的个数(RunBefore)进行编码:

ZerosLeft:当前系数之前所有零的个数;
Run_before:紧接当前系数前零的个数;
每个非零系数前零的个数RunBefore是按照倒序来进行编码的,从最高频的非零系数开始。    
RunBefore在以下两种情况下是不需要编码的:
1、最后一个非零系数(在低频位置上)前零的个数; 
2、如果没有剩余的零需要编码(即所有的RunBefore求和等于TotalZeros)时,没有必要再进行 RunBefore的编码。
每个非零系数前零的个数的编码是依赖于ZeroLeft的值,ZeroLeft的初始值等于TotalZeros,在每个非零系数的RunBefore值编码后进行更新。

按照逆序进行编码: 0,3,0,1,-1,-1,0,1,0,0,0,0,0,0,0,0
第一个非零系数1,之前所有零的个数ZerosLeft = 3,1之前零的个数 run_before = 1,
ZerosLeft == 3 && run_before == 1 ,查表得到run_before[4] = 10;
第二个非零系数-1,ZerosLeft = 2, run_before = 0,
ZerosLeft == 2 && run_before == 0 ,查表得到run_before[3] = 1;
第三个非零系数-1,ZerosLeft = 2, run_before = 0,
ZerosLeft == 2 && run_before == 0 ,查表得到run_before[2] = 1;
第四个非零系数1,ZerosLeft = 2, run_before = 1,
ZerosLeft == 2 &&run_before == 1 ,查表得到run_before[1] = 01;
第五个非零系数3,ZerosLeft = 1, run_before = 1,run_before[0]不需要码流来表示;
Code = 0000 1000 1110 0101 1110 1101;
Code = {Code,run_before[4],run_before[3],run_before[2],run_before[1]} 

编码完毕。

7)mv等参数

//Bit_stream_packer.v P135
mv等参数,先要进行编码,生成17bit的编码数据(headcode)。先将headcode后面
补59bit 0补成76bit输出,再输出由4x4矩阵生成的编码数据。

解码过程:

{
0,3,-1,0,
0,-1,1,0,
1,0,0,0,
0,0,0,0
}NC=1,编码后得到的序列为:0000 1000 1110 010 11110 1101

1、Coeff_token

查表得到Coeff_token(TrailingOnes,TotalCoeff)的值;
NC=1,查表9-5,依次对应序列中的每一位,表中存在0000100,不存在00001000,
0000100对应的TrailingOnes = 3, TotalCoeff = 5。
输出序列:无

2、Level[i]

if(totalCoeff > 0){
suffixLength = 0;
for(i=0;i < TotalCoeff;i++){
}

traling_ones_sign_flag = {0 1 1}
其长度是TrailingOnes = 3,位于0000100后那3bit

i = 0 时,0<3 --> trailing_ones_sign_flag = 0 , level[0] = 1-2*0=1;
i = 1 时,1<3 --> trailing_ones_sign_flag = 1 , level[1] = 1-2*1=-1;
i = 2 时,2<3 --> trailing_ones_sign_flag = 1 , level[2] = 1-2*1=-1;
i = 3 时, 查表9-6 码流 1 对应level_prefix = 0,
suffixLength初始值为0

计算levelSuffixSize:(后缀是长度为levelSuffixSize的无符号整数)
除了以下两种情况levelSuffixSize = SuffixLength:
1)level_prefix == 14 && suffixLength == 0时,levelSuffixSize = 4;
2)level_prefix >= 15时,levelSuffixSize = level_prefix - 3;

此时,用例得出的levelSuffixSize = 0

计算level_suffix:
如果levelSuffixSize>0,level_suffix为编码序列后续的levelSuffixSize位bit
如果levelSuffixSize=0,level_suffix = 0

此时,用例得出的level_suffix = 0

levelCode = Min( 15, level_prefix ) << suffixLength ) + level_suffix
if (level_prefix >= 15 && suffixLength == 0)
    levelCode = levelCode + 15
if (level_prefix >= 16)
   levelCode = levelCode + (1<<( level_prefix − 3 )) − 4096
if (i ==  TrailingOnes  && TrailingOnes < 3)
   levelCode = levelCode + 2

此时levelCode = 0<<0+0 = 0

如果levelCode是奇数
level[i] = (-levelCode - 1) >> 1
如果levelCode是偶数
level[i] = (levelCode + 2) >> 1
此时,level[3] = (levelCode + 2) >> 1 = (0+2)>>1 = 1; 

更新suffixLength
If ( suffixLength == 0 ) 
        suffixLength++; 
else if ( levelCode > (3<<(suffixLength-1)) && suffixLength <6) 
        suffixLength++; 
此时,suffixLength = 1;

i = 4 时, 查表9-6 码流 001 对应level_prefix = 2,
levelSuffixSize = 1
levelSuffix为0000 1000 1110 01后面的那1bit,即为0

levelCode = 2 << 1 + 0 = 4 ;  
level[4] = (levelCode + 2) >> 1 = (4+1) >> 1 = 3;
输出序列:level[i--] = 3,1,-1,-1,1 

3、total_zeros

根据TotalCoeffs = 5 ,输入码流 111 ,查表9-7得到Total_Zeros = 3; 
zeroLeft = total_zeros = 3;
for(i = 0; i <TotalCoeff:i++){
}

i = 0,zeroLeft = 3,根据码流 10 ,查表9-10得到run_before = 1, run[0] = run_before = 1; 

zeroLeft = zeroLeft - run[0] = 3 - 1 =2;
i = 1,zeroLeft = 2,根据码流 1,查表9-10得到run_before = 0, run[1] = run_before = 0;

zeroLeft = zeroLeft - run[1] = 2 - 0 =2;
i = 2 ,  zeroLeft = 2,  根据码流 1,查表9-10得到run_before = 0, run[2] = run_before = 0;

zeroLeft = zeroLeft - run[2] = 2 - 0 =2;
i = 3 ,  zeroLeft = 2,  根据码流 01,查表9-10得到run_before = 1,run[3] = run_before = 1;

zeroLeft = zeroLeft - run[3] = 2 - 1 =1;
run[TotalCoeff-1] = run[4] = zeroLeft = 1;

coeffNum = -1;
for(i = TotalCoeff - 1; i >= 0:i++){
}
i = 4,  coeffNum = coeffNum + (run[4] + 1) = -1 + (1 + 1) = 1; coeffLevel[1] = level[4] = 3;
i = 3, coeffNum = coeffNum + (run[3] + 1) = 1 + (1 + 1) = 3;    coeffLevel[3] = level[3] = 1;
i = 2, coeffNum = coeffNum + (run[2] + 1) = 3 + (0 + 1) = 4;    coeffLevel[4] = level[2] = -1;
i = 1, coeffNum = coeffNum + (run[1] + 1) = 4 + (0 + 1) = 5;    coeffLevel[5] = level[1] = -1;
i = 0, coeffNum = coeffNum + (run[0] + 1) = 5 + (1 + 1) = 7;    coeffLevel[7] = level[0] = 1;
输出序列:coeffLevel[i++] = 0,3,0,1,-1,-1,0,1;

4、剩下的元素用0补齐

输出序列为0,3,0,1,-1,-1,0,1,0,0,0,0,0,0,0,0,
按照Zigzag序列可得到4*4矩阵
{
0,3,-1,0,
0,-1,1,0,
1,0,0,0,
0,0,0,0
}

解码完毕!

5、mv等参数

mv等参数是在headerbit中,由17bit编码和59bit0组成,要确保一次性将所有
header读入,每次读出的数据位宽必须为80bits(10bytes)。
H264学习笔记(3):CAVLC基于上下文自适应的可变长编码 熵编码的基本原理:熵编码是无损压缩编码方法,它生成的马路可以经解码无失真地恢复出原数据,熵编码是简历在随机过程的统计基础上。        自信息量:设X可发出的消息符号集合为A={ai|i=1,2,...,m},并设X发出符号ai的概率为p(ai),则ai出现的自信息量为I(ai)=-log p(ai)。通常取2为底,这是信息量单位为比特。        无记忆信息源:如果各符号出现是独立的 阅读详情

相关推荐

H264-CAVLC(基于上下文可变长度编码)

H264/AVC 编码器原理 概念 宏块: 一个编码图像划分为若干宏块,一个宏块由1616亮度像素和附加的一个88 Cb和8*8 Cr色度像素块组成。 H264功能分为两层:VCL(视频编码层),网络提取层(NAL)

dongkun152的专栏 2047

HEVC熵编码原理解读之transform_tree(一)

HEVC熵编码原理解读之transform_tree(一)

verycoollv的博客 1407

麦当劳app之sign逆向分析

摘要:本文分析了麦当劳APP请求参数sign的逆向过程。通过抓包发现32位sign参数疑似MD5加密,使用frida-trace工具跟踪CC_MD5函数验证其为标准MD5算法。加密参数包含时间戳、token、版本号等固定和动态字段,拼接后经MD5加密生成sign。文章提供了JS和Python两种实现方案,包含完整的请求头参数和加密逻辑,最终成功获取API响应数据。该研究仅用于逆向技术学习,展示了移动应用常见加密参数的逆向分析方法。

佛系更新... 2435

H.264标准----概念和定义

访问单元:一系列NAL单元,包含一个primary coded picture,也可以包含一系列redundant coded pictures和一个auxiliary coded picture。 逐行扫描:每个frame进行frame coding 隔行扫描:每个frame可以选择frame coding还是field coding inter预测的direct...

NBA_1的博客 851

基于Qt与PaddleOCR的跨平台OCR工具开发实战

本文详细介绍了基于Qt与PaddleOCR开发跨平台OCR工具的实战经验。通过Qt的跨平台特性和PaddleOCR的高效识别能力,开发者可以快速构建支持Windows、Linux和macOS的OCR工具。文章涵盖了环境配置、核心功能实现、性能优化及打包发布等关键环节,特别针对中文识别、内存管理和多线程处理等常见问题提供了解决方案。

weixin_30296405的博客 88

SQL Server 2025在Windows 11上的安装避坑指南

SQL Server 是微软主流关系型数据库管理系统,其安装与Windows操作系统深度耦合;Windows 11作为新一代桌面平台,强化了基于虚拟化的安全(HVCI)、驱动签名强制策略(WDAC)及内核隔离机制,导致传统数据库部署流程失效。理解二者底层交互原理,是解决服务启动失败、配置管理器无法打开、远程连接被拒等高频问题的技术前提。本文聚焦SQL Server 2025与Windows 11的兼容性挑战,覆盖系统预配置、安装节点诊断、防火墙与服务权限调优等工程实践环节,适用于高校教学、电赛备赛、中小企业

weixin_28741413的博客 315

h264码流结构

H264 码流实际可以理解为由一个一个的 NALU 单元组成。一个NALU的组成结构如下:其中。

柳依依 2254

企业微信获取code,URL详解

“https://open.weixin.qq.com/connect/oauth2/authorize?”+ “appid=”企业ID “&redirect_uri=”重定向路径+ “&agentid=”小程序AgentId+ “&response_type=code&scope=snsapi_userinfo&state=123&conn...

weixin_44804985的博客 8732

H265_HEVC编解码系列(2):CTB的四叉树分割语法

H265/HEVC编解码系列(2):CTB的四叉树分割一、CTU产生以及四叉树分割1、CTU的产成2、四叉树分割参考 一、CTU产生以及四叉树分割 1、CTU的产成   上篇大致看了一下CTU是如何一步步划分的。下面我们说说,CTU具体是怎样得到的。上面这个图,我们现在只需要看红框里的部分,图中的第①部就是接下来要讲的。如果是yuv420采样,CTU可以分为luma CTB和chroma CTB,我们就统一按照CTB来分析吧,对两种CTB处理上都是一样的。首先一幅图片会被分割成许多个大小一样的CTB块,但

qq_39565868的博客 2375

linux中的sendmail发送邮件

linux下的sendmail发送邮件

无痕的博客 6416

对比实验系列:Efficientdet环境配置及训练个人数据集

可以通过下方链接下载Efficientdet源码。

Yayisheng的博客 4585

H264的CAVLC探秘

CAVLC的算法搜索出来的资料比较多,但是怎么理解这个CAVLC呢。 CAVLC=CA+VLC VLC(Variable-Length Code) 变长编码 想想霍夫曼编码吧。还不明白,google下吧。 CA (Context Adaptivie) 上下文自适应 上下文-就是利用图像的空间冗余性,上边和左边的4x4块残差和当前快的是具有相关性。 那具体怎么设计这个编码算法

ljb_iss的专栏 8059

从投影到抗噪:直线拟合三大算法实战指南

本文深入解析了直线拟合的三大核心算法:常规最小二乘法(OLS)、正交回归(TLS)和RANSAC。通过对比其几何原理、代码实现与适用场景,为计算机视觉和数据分析领域的实践者提供了清晰的选型指南,帮助在抗噪、旋转不变性等不同需求下,精准选择并应用最合适的算法。

ujm567890的博客 576

h264之cavlc

  什么是cavlc?  cavlc 是h264视频标准中用到的一种熵编码,全称是基于上下文的可变长编码。可变长编码(vlc),这里就不多说,基本的精神就是频繁出现的事件用较少的比特表示,出现概率低的用较多的比特表示。cavlc的重点在于基于上下文,至于如何做到上下文相关,下面会讲到。  什么是拖尾系数?  zigzag扫描后的数据列里,从最后的一个非零系数开始(高频区数据)往

charlesbjwang的专栏 1465

HyperLynx仿真(一)LineSim简单介绍

可以选择设置信号线与信号线之间默认的距离和信号线与同平面的平面之间的距离,这些设置根据工程师项目上经常使用的情况而设置,也可以选择不设置,在每次仿真时根据需要再对每一个仿真单独设置。仿真属性的设置对话框包含一般设置、 显示颜色设置、LineSim 设置、BoardSim 设置、 层叠默认设置、焊盘类型设置、仿真示波器默认设置、电路仿真器默认设置、电源完整性设置及高级设置。第一次使用HyperLynx软件时需要设置仿真相关环境,包括仿真软件的基本设置、模型库路径设置、仿真控制器控制、单位等。...

小幽余生不加糖 8944

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

h264CAVLC编码实例

再来一个例子:

xietingcandice的专栏 910

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

H264熵编码之CAVLC

一、CACLV的目的:用于残差数据的熵编码 二、CACLV的相关变量及含义: 1、TotalCoffes: 代表ZigZag扫描后序列中非0值的个数; 2、TrailingOnes: 又称做拖尾系数,代表ZigZag扫描后序列中+1,和-1的总个数,如果超过3,则为3 3、TotalZeros: 最后一个非零系数之前零的数目; 4、NC:用来决策coeff如何编码的变量;通过NC查表得到编码模型 NC的取值: 待编码数据为 色度分量的直流系数时 NC= -1 NA:表示左邻的宏块的NC值 NB:表示上邻的宏

weixin_38189964的博客 1100

VC中sqlite的使用

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

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

H264——H264的CAVLC和CABAC

CAVLC和CABAC简介 H.264基本介绍 熵编码压缩是一种无损压缩,其实现原理是使用新的编码来表示输入的数据,从而达到压缩的效果。常用的熵编码有游程编码,哈夫曼编码和CAVLC编码等。 (1)CAVLC CAVLC(Context Adaptive VariableLength Coding)是在H.264/MPEG-4AVC中使用的熵编码方式。 在H.264中,CAVLC以zig-zag顺序用于对变换后的残差块进行编码。CAVLC是CABAC的替代品,虽然其压缩效率不如CABAC,但CAVLC实现简

路人coder 2658

H264编码器13(CAVLC和CABAC简介)

来自:https://blog.youkuaiyun.com/jubincn/article/details/6948334   CABAC/CAVLCin H.264 什么是熵编码? 熵编码压缩是一种无损压缩,其实现原理是使用新的编码来表示输入的数据,从而达到压缩的效果。常用的熵编码有游程编码,哈夫曼编码和CAVLC编码等。   第一部分   CAVLC CAVLC(Context Adap...

时间的诗 8126

CAVLC和CABAC简介

CABAC/CAVLCin H.264 什么是熵编码? 熵编码压缩是一种无损压缩,其实现原理是使用新的编码来表示输入的数据,从而达到压缩的效果。常用的熵编码有游程编码,哈夫曼编码和CAVLC编码等。 CAVLC CAVLC(Context Adaptive VariableLength Coding)是在H.264/MPEG-4AVC中使用的熵编码方式。在H.264中,CAVLC以zig-

jubincn的专栏 3万+

H264 CAVLC overview

fanbird2008的专栏 1266

H264/AVC-基于上下文自适应可变长编码CAVLC原理以及代码实现

1. 基本原理 CAVLC属于熵编码。熵编码是一种无损压缩编码方法,它生成的码流可以经解码无失真地恢复出原数据。熵编码是建立在随机过程的统计特性基础上的,因此它主要为了降低数据的统计冗余。 在 H.264 的 CAVLC(基于上下文自适应的可变长编码)相比于huffman编码,它可以通过根据已编码句法元素的情况自适应调整当前编码中使用的码表,从而取得了极高的压缩比。 下面举例说明CAVLC的基于上下文特性。 下图是色度分量DC系数解析要用到的码表,其中tzVlcIndex指的是非零DC系数个数(色度DC系数

qq_42139383的博客 3266

H264 CAVLC 研究

目录1 CAVLC概念2 CAVLC原理 3 CAVLC编码流程4 CAVLC解码流程展开全部1 CAVLC概念2 CAVLC原理 3 CAVLC编码流程4 CAVLC解码流程收起摘要纠错编辑摘要<br />CAVLC即基于上下文的自适应变长编码。H.264标准中使用CAVLC对4*4模块的亮度和色度残差数据进行编码。CAVLC-CAVLC概念    <br />CAVLC的全称是Context-Adaptive Varialbe-Length Coding,即基于上下文的自适应变长编码。CAVLC的本质是

szu030606的专栏 3478

H264 CAVLC encode procedure example 1

fanbird2008的专栏 1592

H264 CAVLC encode procedure example 3

fanbird2008的专栏 730
下一篇: H265 CABAC学习笔记
lichtenlade
博客等级 码龄18年 222粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值