jpeg软解码实现介绍
我的月经贴博客该更新了!!!已经有许多博文需要补了!
去年开始的jpeg解码项目,中间停止更新了大半年时间,上个月想起这事还没完工,就又做了更多兼容性和性能上的改进,目前终于接近尾声了。有需要参考的可以进去下载。
为了便于阅读,有必要从下面几点展开本博文:
1.为什么写这篇博文?
一来是对前期忙活事情的总结,二来是向感兴趣人们的介绍我的实现,三来为x264学习做一些铺垫性工作。
在此,要感谢一个台湾同仁提供的示范(由R语言编译)和说明,没有他的demo,我的这个demo也无法完工。因为解码过程是个漫漫长路,中间一步出错了,后面都会累积出错。
jpeg_tutorial由于是R语言这种小众语言编写,可能很多人学习道路停止在环境搭建上,因此我上传了编译后的可执行文件(jpeg_tutorial.exe),你可以拿来直接执行,来对照我的解码器JpegDecoder。
2.参考来源包括哪些?
2.1 TinyJpeg——一个小巧、精简的jpeg解码器,代码量非常少。参考其中的huffman解码时,被其算法绕进去了,因此放弃,导致自己实现huffman解码的冲动,于是有了这个MiniJpegDecoder解码器。
2.2 jpeg_tutorial——一个台湾同仁用Rust语言实现的jpeg解码器。由于R语言不懂,无法阅读源码,只使用了编译构建出的可执行文件进行对照验证。
2.3 libjpeg/libjpeg-turbo——被其众多文件所吓倒,放弃参考。
2.4 mozjpeg——文件和代码量太大,也放弃参考。
3.该版本功能和特性包括哪些?
3.1 由jpeg文件解码并保存为yuv文件(重采样为yuv444_3plane,或yuv420_3plane,或nv21格式)。
3.2 通过dump开关来检查每一步生成结果(例如各分量的量化表、huffman表,huffman解码结果、DPCM和RLC逆变换/反量化/逆ZigZag变换/IDCT2/逆零偏置,以及yuv格式转换)。
3.3 jpeg格式支持格式,包括四种:yuv444采样(MCU大小为8x8,各一个Y/U/V分量block)、yuv420(MCU大小为16x16,包括4个Y分量和各一个U/V分量的block)、两种YUV矩形采样(MCU大小为16x8或8x16,两个Y分量和各一个U/V分量block)
3.4 纯软件解码,未使用x86的MMX的多媒体指令集,因此速度较慢。
3.5 小范围验证,可以解码8成以上的jpg文件。
4.如何使用?
4.1 该解码器开发环境为win10+mingw32。移植到linux环境需要修改Makefile。
4.2 编译由两步组成:utils库编译和JpegDecoder编译,前者生成libcodec_utils.so,后者依赖前者生成可执行文件JpegDecoder。
jpeg软解码实现介绍的更多相关文章
- CUDA 实现JPEG图像解码为RGB数据
了解JPEG数据格式的人应该easy想到.其对图像以8*8像素块大小进行切割压缩的方法非常好用并行处理的思想来实现.而其实英伟达的CUDA自v5.5開始也提供了JPEG编解码的演示样例.该演示样例存储 ...
- 【STM32H7教程】第57章 STM32H7硬件JPEG编解码基础知识和HAL库API
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第57章 STM32H7硬件JPEG编解码基础知识 ...
- 简单易用的图像解码库介绍 —— stb_image
原文链接:简单易用的图像解码库介绍 -- stb_image 说到图像解码库,最容易想起的就是 libpng 和 libjpeg 这两个老牌图像解码库了. libpng 和 libjpeg 分别各自对 ...
- 【miscellaneous】硬解码与软解码
在显卡技术日益成熟的今天,一些概念我们都不是很清楚了,那么显卡硬件解码功能是什么意思呢?高清硬解和软件有什么不同呢?显卡配置需不需要考虑硬件解码呢?电脑爱好者为您分析. 什么是硬件解码? 显卡硬件解码 ...
- jpeg编解码概述
本博文为概览性介绍.后面有空了再分几篇博文分别介绍所用到的技术细节. 1.编解码目标 编码和解码是个逆过程.jpeg编码的目的在于图形去冗余,进行数据压缩,解码的目的在于还原图像,使能够进行预览. 2 ...
- 音视频处理基础知识扫盲:数字视频YUV像素表示法以及视频帧和编解码概念介绍
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt+moviepy音视频剪辑实战 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一. ...
- 摩托罗拉SE4500 三星 S3C6410 Wince6.0平台软解码调试记录以及驱动相关问题解释
虽然S3C6410出来很多年了,甚至于已经停产了,出货的几乎都有依赖于库存,SE4500也出来很多年了,但是网上依旧不会有调试资料帮助你,一切源于自私.希望本文能帮到你,不必感谢.本文来自C.S.D. ...
- Netty 粘包 & 拆包 & 编码 & 解码 & 序列化 介绍
目录: 粘包 & 拆包及解决方案 ByteToMessageDecoder 基于长度编解码器 基于分割符的编解码器 google 的 Protobuf 序列化介绍 其他的 前言 Netty 作 ...
- “介绍一下自己吧”——记2020BUAA软工团队介绍和采访
写在前面 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任建) 这个作业的要求在哪里 团队作业-团队介绍和采访 团队介绍 团队名称 我们是 BUAA软软软件工程小队 ,简称 ...
随机推荐
- JavaScript学习系列博客_2_JavaScript编写位置
JavaScript代码一般编写在哪里呢? 看到这个问题,第一个反应就是,JavaScript那当然是编写在<Script></Script>这对标签中啊!然而! 1.可以编写 ...
- SimpleXMLElement::addChild添加同级的空值xml节点
SimpleXMLElement::addChild添加同级的空值xml节点后,变成了其后面节点的父节点 解决方案:将节点以属性值的方式赋空值,$info->CONV_LEGAL_UNIT_NU ...
- magento 2 cronjob setup
crontab -u magento_user -e */5 * * * * php /var/www/html/bin/magento cron:run >> /var/www/html ...
- 从Vessel到二代裸金属容器,云原生的新一波技术浪潮涌向何处?
摘要:云原生大势,深度解读华为云四大容器解决方案如何加速技术产业融合. 云原生,可能是这两年云服务领域最火的词. 相较于传统的应用架构,云原生构建应用简便快捷,部署应用轻松自如.运行应用按需伸缩,是企 ...
- Java多线程_生产者消费者模式1
生产者消费者模型 具体来讲,就是在一个系统中,存在生产者和消费者两种角色,他们通过内存缓冲区进行通信,生产者生产消费者需要的资料,消费者把资料做成产品.生产消费者模式如下图.(图片来自网络 ...
- Linux安装Rabbitmq3.8.5
安装环境: 操作系统为:centOS-7 erlang版本为22.3,软件包:otp_src_22.3.tar.gz rabbitMQ版本为3.8.5,软件包:rabbitmq-server-gene ...
- 高可用集群corosync+pacemaker之crmsh使用(二)
上一篇博客我们聊到了crmsh的安装以及配置一个资源到corosync+pacemaker高可用集群上的相关命令的用法,回顾请参考https://www.cnblogs.com/qiuhom-1874 ...
- 三层架构的一点理解以及Dapper一对多查询
1.首先说一下自己对三层架构的一点理解 论坛里经常说会出现喜欢面相对象的写法,所以使用EF的,我个人觉得他俩没啥关系,先别反对,先听听我怎么说吧. 三层架构,基本都快说烂了,但今天还是说三层架构:UI ...
- 当this碰到return会发生什么
当this碰到return时 function fn(params) { this.user = 'fzy' return {} } var a = new fn console.log(a.user ...
- 博主心酸历程:初始Hadoop安装安装过程出现的各种问题。
首先,作为一名第一次安装Hadoop的小白,费时六七个小时终于安装好了. 如果你是一名小白也是第一次安装,请参考以下教程: 链接:https://pan.baidu.com/s/1pwu6_znWKz ...