1
1
defmodule TurbojpegTest do
2
2
use ExUnit.Case
3
- use PropCheck , default_opts: [ numtests: 10 ]
3
+ use PropCheck , numtests: 10
4
4
use Mogrify.Options
5
5
6
6
@ jpeg_header << 255 , 216 , 255 >>
@@ -10,52 +10,52 @@ defmodule TurbojpegTest do
10
10
test "Converts an i420 frame into a jpeg" do
11
11
frame = File . read! ( @ i420_fixture )
12
12
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 )
14
14
assert match? ( @ jpeg_header <> _ , Shmex . to_binary ( jpeg ) )
15
15
end
16
16
17
17
test "extracts i444 frame from jpeg" do
18
18
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 )
21
21
assert Shmex . to_binary ( jpeg ) == Shmex . to_binary ( new_jpeg )
22
22
end
23
23
24
24
test "get jpeg header" do
25
25
jpeg = Shmex . new ( File . read! ( @ ff0000_fixture ) )
26
- { :ok , result } = Turbojpeg.Native . get_jpeg_header ( jpeg )
26
+ { :ok , result } = Turbojpeg . get_jpeg_header ( jpeg )
27
27
assert result . width == 64
28
28
assert result . height == 64
29
29
assert result . format == :I444
30
30
end
31
31
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
34
34
forall [ width , height ] <- [
35
35
width ( 100 ) ,
36
36
height ( 100 )
37
37
] 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 )
56
46
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
57
58
assert match? ( { :ok , _ } , ret )
58
- aggregate ( true , result: { to_range ( 10 , jpeg_creation_micros ) , to_range ( 1024 , jpeg . size ) } )
59
59
end
60
60
end
61
61
@@ -79,31 +79,25 @@ defmodule TurbojpegTest do
79
79
|> Mogrify . create ( buffer: true )
80
80
81
81
jpeg = Shmex . new ( jpeg . buffer )
82
- { :ok , yuv } = Turbojpeg.Native . jpeg_to_yuv ( jpeg )
82
+ { :ok , yuv } = Turbojpeg . jpeg_to_yuv ( jpeg )
83
83
84
- { :ok , original_header } = Turbojpeg.Native . get_jpeg_header ( jpeg )
84
+ { :ok , original_header } = Turbojpeg . get_jpeg_header ( jpeg )
85
85
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 )
88
87
89
- { :ok , new_header } = Turbojpeg.Native . get_jpeg_header ( new_jpeg )
88
+ { :ok , new_header } = Turbojpeg . get_jpeg_header ( new_jpeg )
90
89
91
90
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
- )
98
91
end
99
92
end
100
93
101
94
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 ] <- [
103
96
width ( ) ,
104
97
height ( ) ,
105
98
seed ( ) ,
106
- format ( )
99
+ format ( ) ,
100
+ integer ( 0 , 100 )
107
101
] do
108
102
jpeg =
109
103
% Mogrify.Image { }
@@ -115,16 +109,11 @@ defmodule TurbojpegTest do
115
109
|> Mogrify . create ( buffer: true )
116
110
117
111
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 )
122
116
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
- )
128
117
end
129
118
end
130
119
@@ -137,11 +126,11 @@ defmodule TurbojpegTest do
137
126
{ div ( min , size ) , div ( max , size ) }
138
127
end
139
128
140
- def width ( multiplier \\ 50 ) do
129
+ def width ( multiplier \\ 10 ) do
141
130
dimension ( multiplier )
142
131
end
143
132
144
- def height ( multiplier \\ 50 ) do
133
+ def height ( multiplier \\ 10 ) do
145
134
dimension ( multiplier )
146
135
end
147
136
0 commit comments