JPEG解码——(6)IDCT逆离散余弦变换
摘要:本篇是该系列的第六篇,承接上篇IZigZag变换,介绍接下来的一个步骤——逆离散余弦变换,即逆零偏置前的一个步骤。 该步骤比较偏理论,其业务是对IZigZag变换后的数据,再进一步的处理,使其恢复DCT变换前的数据。 需要补充一点说明的是,上面的DCT其实是DCT2,因为jpeg编码下都是对8x8的
阅读全文
JPEG解码——(5)反量化和逆ZigZag变换
摘要:本篇是该系列的第五篇,承接上篇huffman解码,介绍接下来的两个步骤——反量化和逆zigzag变换,即IDCT前的两个步骤。 需要说明的是,这两个步骤可以颠倒,本人的实现是,先反量化,再逆ZigZag变换。 其实,这两步不需要太多说明,无非是查表对数据进行scale和数据重排,为了完整性,还是介绍
阅读全文
H264解码demo
摘要:从某个Android版本开始(Android4.4之后的某个版本),google提供了H264的软件编解码方案,在Android9和10平台上,看到使用的方案来自一家印度公司——Ittiam。 1. codec库&插件路径 编解码库路径:external/libavc,点这儿 omx组件路径:fra
阅读全文
JPEG解码——(4)霍夫曼解码
摘要:本篇是该系列的第四篇,承接前篇的文件头解析,主要介绍霍夫曼解码相关内容。 承接上篇,文件头解析完毕后,就进入了编码数据区域,即SOS的tag后的区域,也是图片数据量的大头所在。 1. 待处理的数据区域 一个例子来说明,仍使用那张animal_park.jpg的图片。 其二进制数据显示如下(FFDA所
阅读全文
JPEG解码——(3)文件头解析
摘要:与具体的编码数据空间相比,jpeg文件头占据非常小乃至可以忽略不计的大小。 仍然拿JPEG解码--(1)JPEG文件格式概览中的《animal park》这张图片来举例,从跳过SOS(FF DA)的TAG开始——offset=0x153, 就真正进入了编码数据区域,如下图所示: 其占据的比例为:0x
阅读全文
JPEG解码——(2)读数据的底层依赖库
摘要:本篇是JPEG解码系列的第二篇——读数据的底层依赖库。 本人所开发的MiniJpegDecoder项目,主要分为两层,一层是底层依赖库,另外一层是包含jpeg解码逻辑的应用层。 其实,分三层的话结构更为合理:底层库+解码库+应用层。但由于目前没时间维护这个库,等什么时候空闲了再优化一下结构吧。 今天
阅读全文
JM8.6之内存分配——基础篇
摘要:在研究JM8.6中内存分配模块(memalloc.c)时,看到如下代码(注意入参的byte ***): 如果C语言基础较好的话,对上面的实现也比较好理解。也即是双指针的初始化。 但是再看到下面: 以及再下面: 可真得花点时间去琢磨内存如何布局的,以及如何访问到期望位置的值。 本篇文章就准备将背景知识
阅读全文
JPEG解码——(1)JPEG文件格式概览
摘要:由于懒和人的忘性,以前做的一些笔记再回过头看时又有些生疏了,我决定把一些内容整理出来,以供有需要的来参考。 了解的人知道其价值所在,不知道的人就弃之如废物吧。 本篇是JPEG解码系列的第一篇——JPEG文件格式概览。 1. 图片文件的数据是什么? 这是一幅人眼可视的图片: 这是其对应的二进制数据:(
阅读全文
x264在Android平台上构建
摘要:x264在通用linux平台上容易编译,但是如果想在Android平台上编译和使用,怎么做呢? 我修改了一份,上传到了这里,这几个文件放到你的x264源码包的根目录下,就可以编译。 说明几点: 1. 编译产物 共两个编译产物:libx264.so动态库和example测试demo 并没有编译出x26
阅读全文
x264编码demo定制修改介绍
摘要:x264编码器,提供了两个demo来验证编码功能:一个是大而全的x264.c,另外一个是简洁版的example.c。 其中,前者demo,可以配置很多编码参数,但太冗长繁杂,对初学者不太友好。 后者demo,大多参数都已hard code,用户仅需调整width、height、color_space
阅读全文
JM8.6解码——帧类型判别
摘要:h264裸码流,根据nalu_header可以知道类型,例如该帧是I帧,P帧/B帧。 例如,常见的0x65代表I帧,0x41代表非关键帧,即P帧或B帧,但是只根据nalu_header是无法区分P帧和B帧的,还需进入到RBSP内部根据语法含义来做判断。 1. JM实现的判别 1 int FirstP
阅读全文
jm8.6编解码器概述
摘要:自己在学习h264的路上,欢迎讨论交流。 前段时间研究JM出品的h264编码器,代码实在看不下去,因此换了个角度来研究诸多算法——逆向方式(解码),本系列文章记录一些遇到的东西和思考。 1. JM介绍 JM编解码器,是一个纯软件编解码器,由位于德国的海因里希赫兹研究所(Heinrich Hertz
阅读全文
缩略图调查——抖音客户端/PC/iphone
摘要:最近对抖音有点上瘾,经常看到这样的视频列表: 由于抖音平台的限制,用户最多只能上传60s的视频,因此分段为3个视频。而在视频列表的缩略图模式下,三个视频的封面恰好组合成一张图像。这种方式比较符合审美标准。 接下来跟我一起探讨一下怎么实现,以及背后的原理。 1. 验证平台 使用三个平台进行测试视频缩略
阅读全文
H264裸码流I/P/B帧类型判别
摘要:花了两天时间做了个h264裸流nal类型和frame类型检测的工具,已上传至github,有需要的自行下载(其中包含构建出来的可执行文件exe)。 1.NAL类型检测 nal类型检测非常容易,对照下表即可容易判断类型。 较常用nal类型包括:SPS(7)、PPS(8)、IDR(5)、SLICE(1)
阅读全文
jpeg编解码概述
摘要:本博文为概览性介绍。后面有空了再分几篇博文分别介绍所用到的技术细节。 1.编解码目标 编码和解码是个逆过程。jpeg编码的目的在于图形去冗余,进行数据压缩,解码的目的在于还原图像,使能够进行预览。 2.编码过程 贴一张网上复制来的图片,该图虽然缺少了一些步骤,但能大体描述主要步骤。下面用文字来描述编
阅读全文
MiniJpegDecoder使用介绍
摘要:承接昨天写的《JPEG软解码实现介绍》,今天介绍其使用方法和一些细节说明。 1.仓库下已经包含了几个jpeg文件,以方便直接校验。 2.使用命令分为两种模式。 一种是直接解码为yuv文件,另外一种是解码的同时还dump所指定mcu位置的各阶段值。 3.需要特别交代一点的是,不需指定输出文件。 内部默
阅读全文
jpeg软解码实现介绍
摘要:我的月经贴博客该更新了!!!已经有许多博文需要补了! 去年开始的jpeg解码项目,中间停止更新了大半年时间,上个月想起这事还没完工,就又做了更多兼容性和性能上的改进,目前终于接近尾声了。有需要参考的可以进去下载。 为了便于阅读,有必要从下面几点展开本博文: 1.为什么写这篇博文? 一来是对前期忙活事
阅读全文
视频编解码类型调查——抖音客户端
摘要:今天使用公司开发手机,调研一下当下很火的抖音客户端,其使用的视频编码类型。 在调研前,有个初步判断: 1.从抖音服务器推送到客户端的视频流要么是avc码流,要么是hevc码流(具体要视平台解码硬件支持情况,本地上传支持情况,云端再推来相应的码流)。 2.本地客户端,解码器选择有三个,手机平台提供硬件
阅读全文