Skip to content

Commit 31bc6b7

Browse files
committed
Adds native code to dialyzer ignore
Unfortunately we have very little control over that code so we are required to ignore the native code.
1 parent 17a9fd3 commit 31bc6b7

File tree

5 files changed

+43
-53
lines changed

5 files changed

+43
-53
lines changed

dialyzer.ignore-warnings

Whitespace-only changes.

dialyzer.ignore-warnings.exs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
[
2+
{"lib/turbojpeg/native.ex"}
3+
]

lib/turbojpeg.ex

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ defmodule Turbojpeg do
2222

2323
@spec yuv_to_jpeg(Shmex.t(), width, height, quality, format) ::
2424
{:ok, Shmex.t()} | error()
25-
2625
def yuv_to_jpeg(yuv, width, height, quality, format) do
2726
Native.yuv_to_jpeg(yuv, width, height, quality, format)
2827
rescue
@@ -32,7 +31,6 @@ defmodule Turbojpeg do
3231

3332
@spec jpeg_to_yuv(Shmex.t()) ::
3433
{:ok, Shmex.t()} | error()
35-
3634
def jpeg_to_yuv(jpeg) do
3735
Native.jpeg_to_yuv(jpeg)
3836
rescue

mix.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ defmodule Turbojpeg.MixProject do
1818
docs: docs(),
1919
deps: deps(),
2020
dialyzer: [
21-
ignore_warnings: "dialyzer.ignore-warnings"
21+
ignore_warnings: "dialyzer.ignore-warnings.exs"
2222
]
2323
]
2424
end

test/turbojpeg_test.exs

Lines changed: 39 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
defmodule TurbojpegTest do
22
use ExUnit.Case
3-
use PropCheck, default_opts: [numtests: 10]
3+
use PropCheck, numtests: 10
44
use Mogrify.Options
55

66
@jpeg_header <<255, 216, 255>>
@@ -10,52 +10,52 @@ defmodule TurbojpegTest do
1010
test "Converts an i420 frame into a jpeg" do
1111
frame = File.read!(@i420_fixture)
1212
shmex = Shmex.new(frame)
13-
{:ok, jpeg} = Turbojpeg.Native.yuv_to_jpeg(shmex, 1920, 1080, 100, :I420)
13+
{:ok, jpeg} = Turbojpeg.yuv_to_jpeg(shmex, 1920, 1080, 100, :I420)
1414
assert match?(@jpeg_header <> _, Shmex.to_binary(jpeg))
1515
end
1616

1717
test "extracts i444 frame from jpeg" do
1818
jpeg = Shmex.new(File.read!(@ff0000_fixture))
19-
{:ok, yuv} = Turbojpeg.Native.jpeg_to_yuv(jpeg)
20-
{:ok, new_jpeg} = Turbojpeg.Native.yuv_to_jpeg(yuv, 64, 64, 100, :I444)
19+
{:ok, yuv} = Turbojpeg.jpeg_to_yuv(jpeg)
20+
{:ok, new_jpeg} = Turbojpeg.yuv_to_jpeg(yuv, 64, 64, 100, :I444)
2121
assert Shmex.to_binary(jpeg) == Shmex.to_binary(new_jpeg)
2222
end
2323

2424
test "get jpeg header" do
2525
jpeg = Shmex.new(File.read!(@ff0000_fixture))
26-
{:ok, result} = Turbojpeg.Native.get_jpeg_header(jpeg)
26+
{:ok, result} = Turbojpeg.get_jpeg_header(jpeg)
2727
assert result.width == 64
2828
assert result.height == 64
2929
assert result.format == :I444
3030
end
3131

32-
@tag [timeout: :infinity]
33-
property "encoding an image is fast", numtests: 8 do
32+
@tag [timeout: :timer.minutes(2)]
33+
property "encoding an image is fast", numtests: 5 do
3434
forall [width, height] <- [
3535
width(100),
3636
height(100)
3737
] do
38-
{jpeg_creation_micros, jpeg} =
39-
:timer.tc(fn ->
40-
jpeg =
41-
%Mogrify.Image{}
42-
|> Mogrify.custom("size", "#{width}x#{height}")
43-
|> Mogrify.custom("seed", 43)
44-
|> Mogrify.custom("plasma", "fractal")
45-
|> Mogrify.custom("sampling-factor", "4:4:4")
46-
|> Mogrify.custom("stdout", "jpg:-")
47-
|> Mogrify.create(buffer: true)
48-
49-
Shmex.new(jpeg.buffer)
50-
end)
51-
52-
{_native_micros, ret} =
53-
:timer.tc(fn ->
54-
Turbojpeg.Native.jpeg_to_yuv(jpeg)
55-
end)
38+
jpeg =
39+
%Mogrify.Image{}
40+
|> Mogrify.custom("size", "#{width}x#{height}")
41+
|> Mogrify.custom("seed", 43)
42+
|> Mogrify.custom("plasma", "fractal")
43+
|> Mogrify.custom("sampling-factor", "4:4:4")
44+
|> Mogrify.custom("stdout", "jpg:-")
45+
|> Mogrify.create(buffer: true)
5646

47+
Shmex.new(jpeg.buffer)
48+
49+
ret = Turbojpeg.jpeg_to_yuv(jpeg)
50+
51+
# Only for local runs
52+
# {time_micros, ret} =
53+
# :timer.tc(fn ->
54+
# Turbojpeg.jpeg_to_yuv(jpeg)
55+
# end)
56+
57+
# assert time_micros / 1000 <= 5000
5758
assert match?({:ok, _}, ret)
58-
aggregate(true, result: {to_range(10, jpeg_creation_micros), to_range(1024, jpeg.size)})
5959
end
6060
end
6161

@@ -79,31 +79,25 @@ defmodule TurbojpegTest do
7979
|> Mogrify.create(buffer: true)
8080

8181
jpeg = Shmex.new(jpeg.buffer)
82-
{:ok, yuv} = Turbojpeg.Native.jpeg_to_yuv(jpeg)
82+
{:ok, yuv} = Turbojpeg.jpeg_to_yuv(jpeg)
8383

84-
{:ok, original_header} = Turbojpeg.Native.get_jpeg_header(jpeg)
84+
{:ok, original_header} = Turbojpeg.get_jpeg_header(jpeg)
8585

86-
{:ok, new_jpeg} =
87-
Turbojpeg.Native.yuv_to_jpeg(yuv, width, height, 100, original_header.format)
86+
{:ok, new_jpeg} = Turbojpeg.yuv_to_jpeg(yuv, width, height, 100, original_header.format)
8887

89-
{:ok, new_header} = Turbojpeg.Native.get_jpeg_header(new_jpeg)
88+
{:ok, new_header} = Turbojpeg.get_jpeg_header(new_jpeg)
9089

9190
assert original_header == new_header
92-
93-
aggregate(true,
94-
r: to_range(51, r),
95-
g: to_range(51, g),
96-
b: to_range(51, b)
97-
)
9891
end
9992
end
10093

10194
property "jpeg and yuv conversion are complementary after running through the tool once" do
102-
forall [width, height, seed, {sampling_factor, format}] <- [
95+
forall [width, height, seed, {sampling_factor, format}, quality] <- [
10396
width(),
10497
height(),
10598
seed(),
106-
format()
99+
format(),
100+
integer(0, 100)
107101
] do
108102
jpeg =
109103
%Mogrify.Image{}
@@ -115,16 +109,11 @@ defmodule TurbojpegTest do
115109
|> Mogrify.create(buffer: true)
116110

117111
jpeg = Shmex.new(jpeg.buffer)
118-
{:ok, yuv} = Turbojpeg.Native.jpeg_to_yuv(jpeg)
119-
{:ok, new_jpeg} = Turbojpeg.Native.yuv_to_jpeg(yuv, width, height, 100, format)
120-
{:ok, original_header} = Turbojpeg.Native.get_jpeg_header(jpeg)
121-
{:ok, new_header} = Turbojpeg.Native.get_jpeg_header(new_jpeg)
112+
{:ok, yuv} = Turbojpeg.jpeg_to_yuv(jpeg)
113+
{:ok, new_jpeg} = Turbojpeg.yuv_to_jpeg(yuv, width, height, quality, format)
114+
{:ok, original_header} = Turbojpeg.get_jpeg_header(jpeg)
115+
{:ok, new_header} = Turbojpeg.get_jpeg_header(new_jpeg)
122116
assert original_header == new_header
123-
124-
aggregate(true,
125-
size: to_range(10_000, width * height) |> as_bytes(1024),
126-
width: to_range(10, width)
127-
)
128117
end
129118
end
130119

@@ -137,11 +126,11 @@ defmodule TurbojpegTest do
137126
{div(min, size), div(max, size)}
138127
end
139128

140-
def width(multiplier \\ 50) do
129+
def width(multiplier \\ 10) do
141130
dimension(multiplier)
142131
end
143132

144-
def height(multiplier \\ 50) do
133+
def height(multiplier \\ 10) do
145134
dimension(multiplier)
146135
end
147136

0 commit comments

Comments
 (0)