H264解码的学习笔记
解码图片由三部分组成:1个luma采样数组,2个chroma采样数组
Chroma Format |
ChromaFormatFactor |
monochrome |
1 |
4:2:0 |
1.5 |
4:2:2 |
2 |
4:4:4 |
3 |
在monochrome采样情况下,只有一个采样数组,luma数组
在4:2:0采样情况下,chroma数组的宽和高是luma数组的一半
在4:2:2采样情况下,chroma数组的高与luma一样,宽是luma的一半
在4:4:4情况下,chroma数组的宽和高与luma一样
InverseRasterScan(a, b, c, d, e) = (a % (d / b)) * b ; e = 0
(a / (d / b)) * c ; e = 1
逆宏块的扫描过程
返回的是luma采样的左上角相对于picture采样左上角的位置
如果MbaffFrameFlag = 0
x = InverseRasterScan(mbAddr, 16, 16,PicWidthInSamples, 0)
y = InverseRasterScan(mbAddr, 16, 16,PicWidthInSamples, 1)
如果MbaffFrameFlag= 1
x0 = InverseRasterScan(mbAddr / 2, 16,32, PicWidthInSamples, 0)
y0 = InverseRasterScan(mbAddr / 2, 16,32, PicWidthSamples, 1)
如果当前的宏块是帆宏块:
x = x0
y = y0 + (mbAddr % 2) * 16
否则:
x = x0 y = y0 + (mbAddr % 2)
逆宏块分区扫描过程
输入是宏块要分区mbPartIdx的索引,输出是luma左上角采样相对于宏块左上角采样的位置
x = InverseRasterScan(mbPartIdx, MbPartWidth(mb_type),MbPartHeight(mb_type), 16, 0)
y = InverseRasterScan(mbPartIdx,MbPartWidth(mb_type), MbPartHeight(mb_type), 16, 1)
逆子宏块分区扫描过程
输入为宏块分区mbPartIdx的索引和子宏块分区subMaPartIdx索引
输出为左上角luma采样相对子宏块左上角采样的位置
如果mb_type等于P_8x8, P_8x8ref0, B_8x8:
x = InverseRasterScan(subMbPartIdx,SubMbPartWidth(sub_mb_type[mbPartIdx]),
SubMbPartHeight(sub_mb_type[mbPartIdx]), 8,0)
y = InverseRasterScan(subMbPartIdx,SubMbPartWidth(sub_mb_type[mbPartIdx]),
SubMbPartHeight(sub_mb_type[mbPartIdx]), 8,1)
否则:
x = InverseRasterScan(subMbPartIdx, 4,4, 8, 0)
y = InverseRasterScan(subMbPartIdx, 4,4, 8, 1)
逆4x4luma块扫描过程
输入为4x4luma块luma4x4BlkIdx的索引
输出为相对位置
x = InverseRasterScan(luma4x4BlkIdx / 4, 8, 8, 19, 0) +InverseRasterScan(luma4x4BlkIdx % 4, 4, 4, 8, 0)
y = InverseRasterScan(luma4x4BlkIdx /4, 8, 8, 16, 1) + InverseRasterScan(luma4x4BlkIdx % 4, 4, 4, 8, 1)
宏块可用的推断过程
输入为宏块地址mbAddr
输出为宏块地址的可用性
不可用情况有三种:
1、 mbAddr< 0
2、 mbAddr> CurrMbAddr
3、 mbAddr宏块属于另外一个片slice,与当前片slice不一样
相邻宏块地址及可用性的推导
当MbaffFrameFlag等于零时,该过程才会触发
输出为mbAddrA(左边), mbAddrB(上方), mbAddrC(右上), mbAddrD(左上)
mbAddrA =CurrMbAddr – 1
mbAddrB =CurrMbAddr – PicWidthInMbs
mbAddrC =CurrMbAddr – PicWidthInMbs + 1
mbAddrD =CurrMbAddr – PicWidthInMbs - 1
MBAFF帧下宏块地址及可用性的推导
当MbaffFrameFlag等于1,该过程会触发
输出为mbAddrA(左),mbAddrB(上),mbAddrC(右上),mbAddrD(左上)
mbAddrA= 2 * (CurrMbAddr / 2 – 1)
mbAddrB= 2 * (CurrMbAddr / 2 – PicWidthInMbs)
mbAddrC= 2 * (CurrMbAddr / 2 – PicWidthInMbs + 1)
mbAddrD= 2 * (CurrMbAddr / 2 – PicWidthInMbs – 1)
H264解码的学习笔记相关推荐
- ffmpeg h264转avi学习笔记
本章只记录h264封装成avi格式视频,参考ffmpeg项目的avienc.c,avi封装格式图请查看这个博客:https://blog.csdn.net/houxiaoni01/article/de ...
- python解码base64学习笔记
base64模块是用来作base64编码解码的.这种编码方式在电子邮件中是很常见的.它可以把不能作为文本显示的二进制数据编码为可显示的文本信息.编码后的文本大小会增大1/3.这里主要介绍一下base6 ...
- 我的Android进阶之旅------gt;Android中编解码学习笔记
编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析.应用开发.释放license收费等等 ...
- 编解码学习笔记(基础)
编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析.应用开发.释放license收费等等 ...
- H264和H265的学习笔记
H264和H265的学习笔记记录分享 一.H264的组成: 二.H265的组成: 三.H264和H265由es打包为pes再打包为ps的代码思路如下: 四.补充说明 一.H264的组成: 1.H264 ...
- NDK学习笔记:RtmpPusher之利用rtmpdump推h264/aac码流
NDK学习笔记:RtmpPusher之利用rtmpdump推h264/aac码流 本篇将是 RtmpPusher 的最后一篇.在之前的3篇文章里,我们已经把原生的视频YUV格式编码成h264,把音频的 ...
- 编解码学习笔记(四) Mpeg系列——Mpeg 4
在上次对MPEG-2的学习整理中,有一个疑惑,双声道理解,就是左右立体声,但是5.1声道是什么?我们经常看到杜比5.1声道的说法."0.1"声道具体指什么?今天去wiki查了一下, ...
- 各种音视频编解码学习详解之 编解码学习笔记(四):Mpeg系列——Mpeg 4
最近在研究音视频编解码这一块儿,看到@bitbit大神写的[各种音视频编解码学习详解]这篇文章,非常感谢,佩服的五体投地.奈何大神这边文章太长,在这里我把它分解成很多小的篇幅,方便阅读.大神博客传送门 ...
- ADPCM编码与解码学习笔记·
ADPCM编码与解码学习笔记 一.前言 之前许多次说过,有空的时候写写博客,可是一直没有好好落实.由于工作的原因,经常会接触到一些音视频的编解码技术,而ADPCM就是我第一接触的音频编码技术.所以,本 ...
最新文章
- Thread类中yield方法
- git 只允许 源码_如何阻止离职员工盗窃公司源码?你一定要知道的三种方案
- 【数据结构与算法】之深入解析“删除有序数组中的重复项”与“移除元素”的求解思路与算法示例
- php实现上传图片保存到数据库的方法
- 对Xml文档进行操作(修改,删除)
- 三星sd卡无法删除数据_单反相机里的SD卡在电脑中突然无法识别提示要格式化怎么办?...
- html信号动画,HTML5带音效的雷达检测信号动画
- python库skimage 图像直方图均衡化、自适应均衡化、对比度拉伸实现
- unable to remove repository reference (must force) - container is using its referenced image
- 最棒的SpringCloud微服务后台管理系统
- 微软windows10易升_微软官网下载与安装windows10系统的操作步骤
- qgis打开shp数据_关于QGIS打开SHP文件属性表乱码
- 使用stream报错:stream has already been operated upon or closed
- 如何使用JWT进行身份验证与授权
- 告别脚本小子系列丨JAVA安全(6)——反序列化利用链(上)
- word press html,wordpress广告插件24款 管理网站广告代码很方便
- Spline算法实现
- 傅里叶级数FS,连续时间傅里叶变换CTFT,离散时间傅里叶变换DTFT,离散傅里叶变换DFT,推导与联系(二)
- 笔记本自带网卡坏了可以使用其他的替代
- C# 山寨版完整版QQ
热门文章
- Visual C# 编程操作Excel
- Dbgrid 中表字段所在的列序号
- php开发app接口教学,php开发App接口
- python代码示例500行源代码-500行Python代码打造刷脸考勤系统,其实也就那么简单...
- python做好的程序如何变成小程序-使用python编写简单的小程序编译成exe跑在win10上...
- python手机版idle-如何在Ubuntu上安装Python IDE IDLE
- 零基础学python需要多久-零基础学python大概要多久
- 为何python不好找工作k-为何有人说Python不好找工作?
- 计算机二级python用什么书-计算机二级Python考试有什么学习资料?
- python使用del保留字定义一个函数-python中自定义函数的保留字是