解码图片由三部分组成: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解码的学习笔记相关推荐

  1. ffmpeg h264转avi学习笔记

    本章只记录h264封装成avi格式视频,参考ffmpeg项目的avienc.c,avi封装格式图请查看这个博客:https://blog.csdn.net/houxiaoni01/article/de ...

  2. python解码base64学习笔记

    base64模块是用来作base64编码解码的.这种编码方式在电子邮件中是很常见的.它可以把不能作为文本显示的二进制数据编码为可显示的文本信息.编码后的文本大小会增大1/3.这里主要介绍一下base6 ...

  3. 我的Android进阶之旅------gt;Android中编解码学习笔记

    编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析.应用开发.释放license收费等等 ...

  4. 编解码学习笔记(基础)

    编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析.应用开发.释放license收费等等 ...

  5. H264和H265的学习笔记

    H264和H265的学习笔记记录分享 一.H264的组成: 二.H265的组成: 三.H264和H265由es打包为pes再打包为ps的代码思路如下: 四.补充说明 一.H264的组成: 1.H264 ...

  6. NDK学习笔记:RtmpPusher之利用rtmpdump推h264/aac码流

    NDK学习笔记:RtmpPusher之利用rtmpdump推h264/aac码流 本篇将是 RtmpPusher 的最后一篇.在之前的3篇文章里,我们已经把原生的视频YUV格式编码成h264,把音频的 ...

  7. 编解码学习笔记(四) Mpeg系列——Mpeg 4

    在上次对MPEG-2的学习整理中,有一个疑惑,双声道理解,就是左右立体声,但是5.1声道是什么?我们经常看到杜比5.1声道的说法."0.1"声道具体指什么?今天去wiki查了一下, ...

  8. 各种音视频编解码学习详解之 编解码学习笔记(四):Mpeg系列——Mpeg 4

    最近在研究音视频编解码这一块儿,看到@bitbit大神写的[各种音视频编解码学习详解]这篇文章,非常感谢,佩服的五体投地.奈何大神这边文章太长,在这里我把它分解成很多小的篇幅,方便阅读.大神博客传送门 ...

  9. ADPCM编码与解码学习笔记·

    ADPCM编码与解码学习笔记 一.前言 之前许多次说过,有空的时候写写博客,可是一直没有好好落实.由于工作的原因,经常会接触到一些音视频的编解码技术,而ADPCM就是我第一接触的音频编码技术.所以,本 ...

最新文章

  1. Thread类中yield方法
  2. git 只允许 源码_如何阻止离职员工盗窃公司源码?你一定要知道的三种方案
  3. 【数据结构与算法】之深入解析“删除有序数组中的重复项”与“移除元素”的求解思路与算法示例
  4. php实现上传图片保存到数据库的方法
  5. 对Xml文档进行操作(修改,删除)
  6. 三星sd卡无法删除数据_单反相机里的SD卡在电脑中突然无法识别提示要格式化怎么办?...
  7. html信号动画,HTML5带音效的雷达检测信号动画
  8. python库skimage 图像直方图均衡化、自适应均衡化、对比度拉伸实现
  9. unable to remove repository reference  (must force) - container is using its referenced image
  10. 最棒的SpringCloud微服务后台管理系统
  11. 微软windows10易升_微软官网下载与安装windows10系统的操作步骤
  12. qgis打开shp数据_关于QGIS打开SHP文件属性表乱码
  13. 使用stream报错:stream has already been operated upon or closed
  14. 如何使用JWT进行身份验证与授权
  15. 告别脚本小子系列丨JAVA安全(6)——反序列化利用链(上)
  16. word press html,wordpress广告插件24款 管理网站广告代码很方便
  17. Spline算法实现
  18. 傅里叶级数FS,连续时间傅里叶变换CTFT,离散时间傅里叶变换DTFT,离散傅里叶变换DFT,推导与联系(二)
  19. 笔记本自带网卡坏了可以使用其他的替代
  20. C# 山寨版完整版QQ

热门文章

  1. Visual C# 编程操作Excel
  2. Dbgrid 中表字段所在的列序号
  3. php开发app接口教学,php开发App接口
  4. python代码示例500行源代码-500行Python代码打造刷脸考勤系统,其实也就那么简单...
  5. python做好的程序如何变成小程序-使用python编写简单的小程序编译成exe跑在win10上...
  6. python手机版idle-如何在Ubuntu上安装Python IDE IDLE
  7. 零基础学python需要多久-零基础学python大概要多久
  8. 为何python不好找工作k-为何有人说Python不好找工作?
  9. 计算机二级python用什么书-计算机二级Python考试有什么学习资料?
  10. python使用del保留字定义一个函数-python中自定义函数的保留字是