Use piston_image instead of stb_image for decoding JPEGs

Bump image to 0.7
This commit is contained in:
Ulf Nilsson 2016-02-28 00:16:20 +01:00
parent 62814f7cb4
commit 8c07a1a3af
12 changed files with 93 additions and 95 deletions

View file

@ -91,7 +91,7 @@ git = "https://github.com/servo/webrender"
app_units = {version = "0.2.1", features = ["plugins"]}
euclid = {version = "0.6.2", features = ["plugins"]}
gleam = "0.2"
image = "0.5.0"
image = "0.7"
log = "0.3"
num = "0.1.24"
serde = "0.6"

View file

@ -23,10 +23,9 @@ path = "../plugins"
heapsize = "0.3.0"
heapsize_plugin = "0.1.2"
hyper = { version = "0.7", features = [ "serde-serialization" ] }
image = "0.5.0"
image = "0.7"
log = "0.3"
serde = "0.6"
serde_macros = "0.6"
stb_image = "0.2"
url = {version = "0.5.5", features = ["heap_size"]}
websocket = "0.15.0"

View file

@ -4,9 +4,7 @@
use ipc_channel::ipc::IpcSharedMemory;
use piston_image::{self, DynamicImage, GenericImage, ImageFormat};
use stb_image::image as stb_image2;
use util::opts;
use util::vec::byte_swap;
pub use msg::constellation_msg::{Image, ImageMetadata, PixelFormat};
@ -49,41 +47,7 @@ pub fn load_from_memory(buffer: &[u8]) -> Option<Image> {
debug!("{}", msg);
None
}
Ok(ImageFormat::JPEG) => {
// For JPEG images, we use stb_image because piston_image does not yet support progressive
// JPEG.
// Can't remember why we do this. Maybe it's what cairo wants
static FORCE_DEPTH: usize = 4;
match stb_image2::load_from_memory_with_depth(buffer, FORCE_DEPTH, true) {
stb_image2::LoadResult::ImageU8(mut image) => {
assert!(image.depth == 4);
// handle gif separately because the alpha-channel has to be premultiplied
if is_gif(buffer) {
byte_swap_and_premultiply(&mut image.data);
} else {
byte_swap(&mut image.data);
}
Some(Image {
width: image.width as u32,
height: image.height as u32,
format: PixelFormat::RGBA8,
bytes: IpcSharedMemory::from_bytes(&image.data[..]),
id: None,
})
}
stb_image2::LoadResult::ImageF32(_image) => {
debug!("HDR images not implemented");
None
}
stb_image2::LoadResult::Error(e) => {
debug!("stb_image failed: {}", e);
None
}
}
}
_ => {
Ok(_) => {
match piston_image::load_from_memory(buffer) {
Ok(image) => {
let mut rgba = match image {

View file

@ -19,7 +19,6 @@ extern crate ipc_channel;
extern crate log;
extern crate msg;
extern crate serde;
extern crate stb_image;
extern crate url;
extern crate util;
extern crate websocket;

View file

@ -74,7 +74,7 @@ heapsize = "0.3.0"
heapsize_plugin = "0.1.2"
html5ever = {version = "0.5.1", features = ["heap_size", "unstable"]}
hyper = { version = "0.7", features = [ "serde-serialization" ] }
image = "0.5.0"
image = "0.7"
libc = "0.2"
log = "0.3"
num = "0.1.24"

View file

@ -17,7 +17,7 @@ dependencies = [
"gfx_tests 0.0.1",
"gleam 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
"glutin_app 0.0.1",
"image 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
"image 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ipc-channel 0.2.0 (git+https://github.com/servo/ipc-channel)",
"layers 0.2.2 (git+https://github.com/servo/rust-layers)",
"layout 0.0.1",
@ -278,7 +278,7 @@ dependencies = [
"gfx 0.0.1",
"gfx_traits 0.0.1",
"gleam 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
"image 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
"image 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ipc-channel 0.2.0 (git+https://github.com/servo/ipc-channel)",
"layers 0.2.2 (git+https://github.com/servo/rust-layers)",
"layout_traits 0.0.1",
@ -721,7 +721,7 @@ dependencies = [
[[package]]
name = "gif"
version = "0.6.0"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"color_quant 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
@ -887,13 +887,14 @@ dependencies = [
[[package]]
name = "image"
version = "0.5.4"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"byteorder 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"enum_primitive 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"gif 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
"gif 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"glob 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
"jpeg-decoder 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)",
"png 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
@ -940,6 +941,17 @@ dependencies = [
"uuid 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "jpeg-decoder"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"byteorder 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"euclid 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
"num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)",
"rayon 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "js"
version = "0.1.2"
@ -1280,14 +1292,13 @@ dependencies = [
"heapsize 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
"heapsize_plugin 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
"hyper 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"image 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
"image 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ipc-channel 0.2.0 (git+https://github.com/servo/ipc-channel)",
"log 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
"msg 0.0.1",
"plugins 0.0.1",
"serde 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_macros 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)",
"stb_image 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"url 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)",
"util 0.0.1",
"websocket 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)",
@ -1574,6 +1585,16 @@ dependencies = [
"serde_macros 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "rayon"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"deque 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
"num_cpus 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
"rand 0.3.12 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "ref_slice"
version = "0.1.0"
@ -1636,7 +1657,7 @@ dependencies = [
"heapsize_plugin 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
"html5ever 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
"hyper 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"image 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
"image 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ipc-channel 0.2.0 (git+https://github.com/servo/ipc-channel)",
"js 0.1.2 (git+https://github.com/servo/rust-mozjs)",
"libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
@ -1878,14 +1899,6 @@ dependencies = [
"log 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "stb_image"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "string_cache"
version = "0.2.10"
@ -2225,7 +2238,7 @@ version = "0.0.1"
dependencies = [
"compositing 0.0.1",
"hyper 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"image 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
"image 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ipc-channel 0.2.0 (git+https://github.com/servo/ipc-channel)",
"log 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
"msg 0.0.1",

View file

@ -18,7 +18,7 @@ doc = false
bench = false
[dev-dependencies]
image = "0.5.0"
image = "0.7"
[dev-dependencies.gfx_tests]
path = "../../tests/unit/gfx"

View file

@ -26,7 +26,7 @@ git = "https://github.com/jgraham/webdriver-rust.git"
git = "https://github.com/servo/ipc-channel"
[dependencies]
image = "0.5.0"
image = "0.7"
log = "0.3"
hyper = "0.7"
rustc-serialize = "0.3.4"

46
ports/cef/Cargo.lock generated
View file

@ -25,7 +25,6 @@ dependencies = [
"script 0.0.1",
"script_traits 0.0.1",
"servo 0.0.1",
"stb_image 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"style 0.0.1",
"style_traits 0.0.1",
"url 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)",
@ -250,7 +249,7 @@ dependencies = [
"gfx 0.0.1",
"gfx_traits 0.0.1",
"gleam 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
"image 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
"image 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ipc-channel 0.2.0 (git+https://github.com/servo/ipc-channel)",
"layers 0.2.2 (git+https://github.com/servo/rust-layers)",
"layout_traits 0.0.1",
@ -651,7 +650,7 @@ dependencies = [
[[package]]
name = "gif"
version = "0.6.0"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"color_quant 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
@ -817,13 +816,14 @@ dependencies = [
[[package]]
name = "image"
version = "0.5.4"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"byteorder 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"enum_primitive 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"gif 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
"gif 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"glob 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
"jpeg-decoder 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)",
"png 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
@ -870,6 +870,17 @@ dependencies = [
"uuid 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "jpeg-decoder"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"byteorder 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"euclid 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
"num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)",
"rayon 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "js"
version = "0.1.2"
@ -1191,14 +1202,13 @@ dependencies = [
"heapsize 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
"heapsize_plugin 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
"hyper 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"image 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
"image 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ipc-channel 0.2.0 (git+https://github.com/servo/ipc-channel)",
"log 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
"msg 0.0.1",
"plugins 0.0.1",
"serde 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_macros 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)",
"stb_image 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"url 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)",
"util 0.0.1",
"websocket 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)",
@ -1460,6 +1470,16 @@ dependencies = [
"serde_macros 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "rayon"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"deque 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
"num_cpus 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
"rand 0.3.12 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "ref_slice"
version = "0.1.0"
@ -1522,7 +1542,7 @@ dependencies = [
"heapsize_plugin 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
"html5ever 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
"hyper 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"image 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
"image 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ipc-channel 0.2.0 (git+https://github.com/servo/ipc-channel)",
"js 0.1.2 (git+https://github.com/servo/rust-mozjs)",
"libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
@ -1792,14 +1812,6 @@ dependencies = [
"log 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "stb_image"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "string_cache"
version = "0.2.10"
@ -2111,7 +2123,7 @@ version = "0.0.1"
dependencies = [
"compositing 0.0.1",
"hyper 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"image 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
"image 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ipc-channel 0.2.0 (git+https://github.com/servo/ipc-channel)",
"log 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
"msg 0.0.1",

View file

@ -13,7 +13,6 @@ euclid = {version = "0.6.2", features = ["plugins"]}
gleam = "0.2"
libc = "0.2"
log = "0.3"
stb_image = "0.2"
url = {version = "0.5.5", features = ["heap_size"]}
[dependencies.servo]

View file

@ -40,7 +40,6 @@ extern crate msg;
extern crate util;
extern crate style;
extern crate style_traits;
extern crate stb_image;
extern crate libc;
extern crate url as std_url;

43
ports/gonk/Cargo.lock generated
View file

@ -242,7 +242,7 @@ dependencies = [
"gfx 0.0.1",
"gfx_traits 0.0.1",
"gleam 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
"image 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
"image 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ipc-channel 0.2.0 (git+https://github.com/servo/ipc-channel)",
"layers 0.2.2 (git+https://github.com/servo/rust-layers)",
"layout_traits 0.0.1",
@ -653,7 +653,7 @@ dependencies = [
[[package]]
name = "gif"
version = "0.6.0"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"color_quant 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
@ -798,13 +798,14 @@ dependencies = [
[[package]]
name = "image"
version = "0.5.4"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"byteorder 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"enum_primitive 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"gif 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
"gif 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"glob 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
"jpeg-decoder 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)",
"png 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
@ -851,6 +852,17 @@ dependencies = [
"uuid 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "jpeg-decoder"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"byteorder 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"euclid 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
"num 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)",
"rayon 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "js"
version = "0.1.2"
@ -1172,14 +1184,13 @@ dependencies = [
"heapsize 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
"heapsize_plugin 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
"hyper 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"image 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
"image 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ipc-channel 0.2.0 (git+https://github.com/servo/ipc-channel)",
"log 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
"msg 0.0.1",
"plugins 0.0.1",
"serde 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_macros 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)",
"stb_image 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"url 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)",
"util 0.0.1",
"websocket 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)",
@ -1441,6 +1452,16 @@ dependencies = [
"serde_macros 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "rayon"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"deque 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
"num_cpus 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
"rand 0.3.12 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "ref_slice"
version = "0.1.0"
@ -1503,7 +1524,7 @@ dependencies = [
"heapsize_plugin 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
"html5ever 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
"hyper 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"image 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
"image 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ipc-channel 0.2.0 (git+https://github.com/servo/ipc-channel)",
"js 0.1.2 (git+https://github.com/servo/rust-mozjs)",
"libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
@ -1771,14 +1792,6 @@ dependencies = [
"log 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "stb_image"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "string_cache"
version = "0.2.10"