Skip to content

Commit aeea29d

Browse files
committed
fix tests
1 parent 6a8989d commit aeea29d

File tree

3 files changed

+42
-23
lines changed

3 files changed

+42
-23
lines changed

lib/ex_webrtc/rtp/h264/nal_header.ex

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ defmodule ExWebRTC.RTP.H264.NAL.Header do
9393
defp do_decode_type(28), do: :fu_a
9494
defp do_decode_type(29), do: :fu_b
9595
defp do_decode_type(number) when number in [30, 31], do: :reserved
96+
defp do_decode_type(_), do: :invalid
9697

9798
@doc """
9899
Encodes given NAL type

test/ex_webrtc/rtp/depayloader_test.exs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,12 @@ defmodule ExWebRTC.RTP.DepayloaderTest do
7575
Depayloader.DTMF.depayload(depayloader, @packet)
7676
end
7777

78-
test "returns error if no depayloader exists for given codec" do
79-
assert {:error, :no_depayloader_for_codec} =
78+
test "creates a H264 depayloader and dispatches calls to its module" do
79+
assert {:ok, depayloader} =
8080
%RTPCodecParameters{payload_type: 97, mime_type: "video/H264", clock_rate: 90_000}
8181
|> Depayloader.new()
82+
83+
assert Depayloader.depayload(depayloader, @packet) ==
84+
Depayloader.H264.depayload(depayloader, @packet)
8285
end
8386
end

test/ex_webrtc/rtp/h264/depayloader_test.exs

Lines changed: 36 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,38 +3,36 @@ defmodule ExWebRTC.RTP.H264.DepayloaderTest do
33

44
alias ExWebRTC.RTP.Depayloader
55

6-
test "depayload/2" do
7-
payload_stapa = <<56, 0, 1, 128, 0, 1, 129>>
8-
payload_stapa_out = <<0, 0, 0, 1, 128, 0, 0, 0, 1, 129>>
9-
10-
payload_fuas = <<60, 133, 128>>
11-
payload_fua = <<60, 5, 129>>
12-
payload_fuae = <<60, 69, 130>>
13-
payload_fua_out = <<0, 0, 0, 1, 37, 128, 129, 130>>
14-
6+
test "Check valid Single NAL Unit" do
157
payload_single = <<53, 131>>
168
payload_single_out = <<0, 0, 0, 1, 131>>
179

18-
# reserved NALu types (22, 23, 30, 31)
19-
payloads_nalu_reserved = [<<55, 131>>, <<56, 131>>, <<62, 131>>, <<63, 131>>]
20-
# malformed STAP-A payload. First NAL should be 1-byte long, but is 2-bytes long
21-
payload_invalid = <<56, 0, 1, 128, 12, 0, 1, 129>>
22-
2310
depayloader = Depayloader.H264.new()
24-
25-
# Single NAL Unit
2611
packet = ExRTP.Packet.new(payload_single, timestamp: 123)
2712

2813
assert {^payload_single_out, %{current_timestamp: 123, fu_parser_acc: nil}} =
2914
Depayloader.H264.depayload(depayloader, packet)
15+
end
3016

31-
# STAP-A NAL
17+
test "Check valid STAP-A NAL" do
18+
payload_stapa = <<56, 0, 1, 128, 0, 1, 129>>
19+
payload_stapa_out = <<0, 0, 0, 1, 128, 0, 0, 0, 1, 129>>
20+
21+
depayloader = Depayloader.H264.new()
3222
packet = ExRTP.Packet.new(payload_stapa, timestamp: 123)
3323

3424
assert {^payload_stapa_out, %{current_timestamp: 123, fu_parser_acc: nil}} =
3525
Depayloader.H264.depayload(depayloader, packet)
26+
end
27+
28+
test "Check valid FU-A NAL" do
29+
payload_fuas = <<60, 133, 128>>
30+
payload_fua = <<60, 5, 129>>
31+
payload_fuae = <<60, 69, 130>>
32+
payload_fua_out = <<0, 0, 0, 1, 37, 128, 129, 130>>
33+
34+
depayloader = Depayloader.H264.new()
3635

37-
# FU-A NAL
3836
packet1 = ExRTP.Packet.new(payload_fuas, timestamp: 10)
3937
packet2 = ExRTP.Packet.new(payload_fua, timestamp: 10)
4038
packet3 = ExRTP.Packet.new(payload_fuae, timestamp: 10)
@@ -51,8 +49,14 @@ defmodule ExWebRTC.RTP.H264.DepayloaderTest do
5149

5250
assert {^payload_fua_out, %{current_timestamp: 10, fu_parser_acc: nil}} =
5351
Depayloader.H264.depayload(depayloader, packet3)
52+
end
53+
54+
test "Check colliding timestamps in one FU-A" do
55+
payload_fuas = <<60, 133, 128>>
56+
payload_fua = <<60, 5, 129>>
57+
58+
depayloader = Depayloader.H264.new()
5459

55-
# Colliding timestamps in one FU-A
5660
packet1 = ExRTP.Packet.new(payload_fuas, timestamp: 10)
5761
packet2 = ExRTP.Packet.new(payload_fua, timestamp: 11)
5862

@@ -65,16 +69,27 @@ defmodule ExWebRTC.RTP.H264.DepayloaderTest do
6569

6670
assert {nil, %{current_timestamp: nil, fu_parser_acc: nil}} =
6771
{bin, depayloader}
72+
end
73+
74+
test "Check all reserved NAL types" do
75+
# reserved NALu types (22, 23, 30, 31)
76+
payloads_nalu_reserved = [<<55, 131>>, <<56, 131>>, <<62, 131>>, <<63, 131>>]
77+
78+
depayloader = Depayloader.H264.new()
6879

69-
# Check all reserved NAL types
7080
Enum.map(payloads_nalu_reserved, fn payload ->
7181
packet = ExRTP.Packet.new(payload, timestamp: 123)
7282

7383
assert {nil, %{current_timestamp: nil, fu_parser_acc: nil}} =
7484
Depayloader.H264.depayload(depayloader, packet)
7585
end)
86+
end
7687

77-
# Check malformed NAL
88+
test "Check malformed NAL" do
89+
# malformed STAP-A payload. First NAL should be 1-byte long, but is 2-bytes long
90+
payload_invalid = <<56, 0, 1, 128, 12, 0, 1, 129>>
91+
92+
depayloader = Depayloader.H264.new()
7893
packet = ExRTP.Packet.new(payload_invalid, timestamp: 123)
7994

8095
assert {nil, %{current_timestamp: nil, fu_parser_acc: nil}} =

0 commit comments

Comments
 (0)