我的月经贴博客该更新了!!!已经有许多博文需要补了!

  去年开始的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软解码实现介绍的更多相关文章

  1. CUDA 实现JPEG图像解码为RGB数据

    了解JPEG数据格式的人应该easy想到.其对图像以8*8像素块大小进行切割压缩的方法非常好用并行处理的思想来实现.而其实英伟达的CUDA自v5.5開始也提供了JPEG编解码的演示样例.该演示样例存储 ...

  2. 【STM32H7教程】第57章 STM32H7硬件JPEG编解码基础知识和HAL库API

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第57章       STM32H7硬件JPEG编解码基础知识 ...

  3. 简单易用的图像解码库介绍 —— stb_image

    原文链接:简单易用的图像解码库介绍 -- stb_image 说到图像解码库,最容易想起的就是 libpng 和 libjpeg 这两个老牌图像解码库了. libpng 和 libjpeg 分别各自对 ...

  4. 【miscellaneous】硬解码与软解码

    在显卡技术日益成熟的今天,一些概念我们都不是很清楚了,那么显卡硬件解码功能是什么意思呢?高清硬解和软件有什么不同呢?显卡配置需不需要考虑硬件解码呢?电脑爱好者为您分析. 什么是硬件解码? 显卡硬件解码 ...

  5. jpeg编解码概述

    本博文为概览性介绍.后面有空了再分几篇博文分别介绍所用到的技术细节. 1.编解码目标 编码和解码是个逆过程.jpeg编码的目的在于图形去冗余,进行数据压缩,解码的目的在于还原图像,使能够进行预览. 2 ...

  6. 音视频处理基础知识扫盲:数字视频YUV像素表示法以及视频帧和编解码概念介绍

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt+moviepy音视频剪辑实战 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一. ...

  7. 摩托罗拉SE4500 三星 S3C6410 Wince6.0平台软解码调试记录以及驱动相关问题解释

    虽然S3C6410出来很多年了,甚至于已经停产了,出货的几乎都有依赖于库存,SE4500也出来很多年了,但是网上依旧不会有调试资料帮助你,一切源于自私.希望本文能帮到你,不必感谢.本文来自C.S.D. ...

  8. Netty 粘包 & 拆包 & 编码 & 解码 & 序列化 介绍

    目录: 粘包 & 拆包及解决方案 ByteToMessageDecoder 基于长度编解码器 基于分割符的编解码器 google 的 Protobuf 序列化介绍 其他的 前言 Netty 作 ...

  9. “介绍一下自己吧”——记2020BUAA软工团队介绍和采访

    写在前面 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任建) 这个作业的要求在哪里 团队作业-团队介绍和采访 团队介绍 团队名称 我们是 BUAA软软软件工程小队 ,简称 ...

随机推荐

  1. 初学Linux (Linux_note)

    根目录:/ /root: 存放root用户相关文件 /home: 存放不同用户的相关文件 /bin: 存放常用命令的目录 /sbin: 要具有一定权限才可以使用的命令 /mnt: 默认挂载光驱和软驱的 ...

  2. html的JavaScript的简单输入验证

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 区块链入门到实战(18)之以太坊(Ethereum) – 什么是智能合约

    作用:提供优于传统合约的安全方法,并减少与合约相关的其他交易成本. 以太坊网络基石:以太坊虚拟币和智能合约. 智能合约(Smart contract )是一种旨在以信息化方式传播.验证或执行合同的计算 ...

  4. 分享一个登录页面(前端框架layui)-20200318

    效果图 对该页面的总结: 1.前端框架layui layui官网:https://www.layui.com/,下载之后,简单配置就可使用 2.layui模块引用与使用的方式 <script&g ...

  5. 8点了解Java服务端单元测试

    一. 前言 单元测试并不只是为了验证你当前所写的代码是否存在问题,更为重要的是它可以很大程度的保障日后因业务变更.修复Bug或重构等引起的代码变更而导致(或新增)的风险. 同时将单元测试提前到编写正式 ...

  6. Event loop详解(包含Node端)

    Event loop事件循环,是一个执行模型.不同的浏览器以及Nodejs里的具体实现是不一样的. 一,浏览器端: HTML5规范里有明确定义,简单的说: 1,JS是单线程的,执行的时候在一条主栈上: ...

  7. WPF实现的加载动画

    2020-09-03 09:43:30 xaml代码 <Grid x:Name="LayoutRoot" Background="Transparent" ...

  8. 【Android】安卓开发之activity如何传值到fragment,activity与fragment传值

    作者:程序员小冰,GitHub主页:https://github.com/QQ986945193 新浪微博:http://weibo.com/mcxiaobing 大家知道,我们利用activity使 ...

  9. 【pytest】teardown里的yield和addfinalizer

    在之前介绍pytest中的fixture用法的文章中https://zhuanlan.zhihu.com/p/87775743,提到了teardown的实现. 最近在翻pytest官方文档的时候,又发 ...

  10. Educational Codeforces Round 68 (Rated for Div. 2)-C-From S To T

    You are given three strings ss, tt and pp consisting of lowercase Latin letters. You may perform any ...