|
1 | 1 | defmodule Turbojpeg.FilterTest do
|
2 | 2 | use ExUnit.Case
|
| 3 | + |
| 4 | + import Membrane.ChildrenSpec |
3 | 5 | import Membrane.Testing.Assertions
|
4 |
| - alias Membrane.Testing |
5 | 6 |
|
6 |
| - defmodule MockSource do |
7 |
| - use Membrane.Source |
| 7 | + alias Membrane.Testing |
8 | 8 |
|
9 |
| - def_output_pad :output, mode: :push, caps: :any |
| 9 | + @stream_format %Membrane.RawVideo{ |
| 10 | + width: 64, |
| 11 | + height: 64, |
| 12 | + pixel_format: :I444, |
| 13 | + framerate: nil, |
| 14 | + aligned: true |
| 15 | + } |
10 | 16 |
|
11 |
| - def_options yuv: [spec: binary], repeat: [spec: pos_integer] |
| 17 | + defp start_pipeline(jpeg, repeat) do |
| 18 | + {:ok, yuv} = Turbojpeg.jpeg_to_yuv(jpeg) |
| 19 | + data = List.duplicate(yuv, repeat) |
12 | 20 |
|
13 |
| - @impl true |
14 |
| - def handle_prepared_to_playing(_ctx, state) do |
15 |
| - buffers = %Membrane.Buffer{payload: state.yuv} |> Bunch.Enum.repeated(state.repeat) |
16 |
| - send(self(), :end_of_stream) |
17 |
| - {{:ok, buffer: {:output, buffers}}, state} |
18 |
| - end |
| 21 | + structure = [ |
| 22 | + child(:source, %Testing.Source{output: data, stream_format: @stream_format}) |
| 23 | + |> child(:filter, %Turbojpeg.Filter{quality: 100}) |
| 24 | + |> child(:sink, Testing.Sink) |
| 25 | + ] |
19 | 26 |
|
20 |
| - @impl true |
21 |
| - def handle_other(:end_of_stream, _ctx, state) do |
22 |
| - {{:ok, end_of_stream: :output}, state} |
23 |
| - end |
| 27 | + Testing.Pipeline.start_link_supervised!(structure: structure) |
24 | 28 | end
|
25 | 29 |
|
26 | 30 | test "integration test" do
|
27 |
| - repeat = 5 |
28 | 31 | jpeg = File.read!("fixture/ff0000_i444.jpg")
|
29 |
| - {:ok, yuv} = Turbojpeg.jpeg_to_yuv(jpeg) |
30 |
| - |
31 |
| - children = [ |
32 |
| - source: %MockSource{yuv: yuv, repeat: repeat}, |
33 |
| - parser: %Membrane.Element.RawVideo.Parser{format: :I444, width: 64, height: 64}, |
34 |
| - filter: %Turbojpeg.Filter{quality: 100}, |
35 |
| - sink: Membrane.Testing.Sink |
36 |
| - ] |
37 |
| - |
38 |
| - assert {:ok, pipeline} = |
39 |
| - Testing.Pipeline.start_link(%Testing.Pipeline.Options{elements: children}) |
| 32 | + repeat = 5 |
40 | 33 |
|
41 |
| - :ok = Testing.Pipeline.play(pipeline) |
42 |
| - assert_pipeline_playback_changed(pipeline, _, :playing) |
| 34 | + pid = start_pipeline(jpeg, repeat) |
| 35 | + assert_pipeline_play(pid) |
43 | 36 |
|
44 | 37 | 1..repeat
|
45 | 38 | |> Enum.each(fn _ ->
|
46 |
| - assert_sink_buffer(pipeline, :sink, buffer) |
| 39 | + assert_sink_buffer(pid, :sink, buffer) |
47 | 40 | assert buffer.payload == jpeg
|
48 | 41 | end)
|
49 | 42 |
|
50 |
| - assert_end_of_stream(pipeline, :sink) |
51 |
| - refute_sink_buffer(pipeline, :sink, _, 0) |
| 43 | + assert_end_of_stream(pid, :sink) |
52 | 44 | end
|
53 | 45 | end
|
0 commit comments