forked from MakieOrg/Makie.jl
-
Notifications
You must be signed in to change notification settings - Fork 0
/
record.jl
81 lines (72 loc) · 2.7 KB
/
record.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
using Logging
module VideoBackend
using Makie
struct Screen <: MakieScreen
size::Tuple{Int, Int}
end
struct ScreenConfig
end
Base.size(screen::Screen) = screen.size
Screen(scene::Scene, config::ScreenConfig, ::Makie.ImageStorageFormat) = Screen(size(scene))
Makie.backend_showable(::Type{Screen}, ::MIME"text/html") = true
Makie.backend_showable(::Type{Screen}, ::MIME"image/png") = true
Makie.colorbuffer(screen::Screen) = zeros(RGBf, reverse(screen.size)...)
Base.display(::Screen, ::Scene; kw...) = nothing
end
Makie.set_active_backend!(VideoBackend)
# We need a screenconfig in the theme for every backend!
set_theme!(VideoBackend=Attributes())
mktempdir() do tempdir
@testset "Video encoding" begin
n = 2
x = 0:(n - 1)
fig, ax, _ = lines(x, zeros(size(x)))
# test for no throwing when encoding
@testset "Encoding" begin
for fmt in ("mkv", "mp4", "webm", "gif")
dst = joinpath(tempdir, "out.$fmt")
@test begin
record(fig, dst, 1:n) do i
lines!(ax, sin.(i .* x))
return nothing
end
true
end
end
end
# test that the proper warnings are thrown
@testset "Warnings" begin
function run_record(dst; kwargs...)
record(fig, dst, 1:n; kwargs...) do i
lines!(ax, sin.(i .* x))
return nothing
end
end
# kwarg => (value, (should_warn => format))
warn_tests = [
(:compression, 20, ["mkv", "gif"], ["mp4", "webm"]),
(:profile, "high422", ["mkv", "webm", "gif"], ["mp4"]),
(
kwarg=:pixel_format,
value="yuv420p",
warn_fmts=["mkv", "webm", "gif"],
no_warn_fmts=["mp4"],
),
(:loop, 0, ["mkv", "webm", "mp4"], ["gif"]),
]
for (kwarg, value, warn_fmts, no_warn_fmts) in warn_tests
kwargs = Dict(kwarg => value)
warning_re = Regex("^`$(kwarg)`, with value $(repr(value))")
for fmt in warn_fmts
dst = joinpath(tempdir, "out.$fmt")
@test_logs (:warn, warning_re) run_record(dst; kwargs...)
end
for fmt in no_warn_fmts
dst = joinpath(tempdir, "out.$fmt")
@test_logs min_level = Logging.Warn run_record(dst; kwargs...)
end
end
end
end
end
Makie.set_active_backend!(missing)