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软软软件工程小队 ,简称 ...
随机推荐
- 操作系统-I/O(2)设备的分配
作业执行前对设备提出申请时,指定某台具体的物理设备会让设备分配变得简单,但如果所指定设备出现故障,即便计算机系统中有同类设备也不能运行 设备独立性:用户通常不指定物理设备,而是指定逻辑设备,使得用户作 ...
- 第5篇 Scrum冲刺博客
1.站立式会议 1.1 会议图片 1.2 项目进展 成员 昨日任务 今日计划完成任务 陈忠明 歌曲信息的上传/下载包 歌曲批量下载压缩包 吴茂平 完善评论系统 新消息提醒功能设计 黄海钊 修改代码规范 ...
- 牛客网PAT练兵场-部分A+B
题解:简单循环 题目地址:https://www.nowcoder.com/questionTerminal/fb581ea099a14f5d97c6149cbeee249f /** * *作者:Yc ...
- Erlang中的宏定义应该在什么时候用
读<Erlang OTP并发编程实战>中看到这么一句话,遂做笔记以记录: 宏不是函数的替代品,当你所需的抽象无法用普通函数来实现时,宏给出了一条生路,比如,必须确保在编译期展开某些代码的时 ...
- 【从零开始撸一个App】PKCE
一个成功的App背后肯定有一堆后端服务提供支撑,认证授权服务(Authentication and Authorization Service,以下称AAS)就是其中之一,它是约束App.保障资源安全 ...
- 557反转字符串中的单词III
class Solution: # 定义一个反转字符串的函数. def str_rever(self,s): length = len(s) s1 = '' for index in range(le ...
- Centos7安装Oracle12c教程
12c数据库 创建oracle的系统用户和用户组 [root@localhost /]# groupadd oinstall [root@localhost /]# groupadd dba [roo ...
- 【Android】Listview返回顶部,快速返回顶部的功能实现,详解代码。
作者:程序员小冰,GitHub主页:https://github.com/QQ986945193 新浪微博:http://weibo.com/mcxiaobing 首先给大家看一下我们今天这个最终实现 ...
- 逆向工程,生成pojo、xml、mapper
package com.how2java; import java.io.File; import java.io.InputStream; import java.util.ArrayList; i ...
- Java自定义异常的用法
package day162020072701.day1601; /** * @author liuwenlong * @create 2020-07-27 09:25:44 */ @Suppress ...