@@ -70,21 +70,24 @@ defmodule ExWebRTC.RTP.H264.FU do
7070
7171 defp do_parse ( header , packet , acc )
7272
73- defp do_parse ( % FU.Header { start_bit: true } , packet , acc ) ,
74- do: { :incomplete , % __MODULE__ { acc | data: [ packet ] } }
73+ defp do_parse ( % FU.Header { start_bit: true } , data , % { data: [ ] } = acc ) ,
74+ do: { :incomplete , % __MODULE__ { acc | data: [ data ] } }
75+
76+ defp do_parse ( % FU.Header { start_bit: true } , _data , _acc ) ,
77+ do: { :error , :last_fu_not_finished }
7578
7679 defp do_parse ( % FU.Header { start_bit: false } , _data , % __MODULE__ { data: [ ] } ) ,
7780 do: { :error , :invalid_first_packet }
7881
79- defp do_parse ( % FU.Header { end_bit: true , type: type } , packet , % __MODULE__ { data: acc_data } ) do
82+ defp do_parse ( % FU.Header { end_bit: true , type: type } , data , % __MODULE__ { data: acc_data } ) do
8083 result =
81- [ packet | acc_data ]
84+ [ data | acc_data ]
8285 |> Enum . reverse ( )
8386 |> Enum . join ( )
8487
8588 { :ok , { result , type } }
8689 end
8790
88- defp do_parse ( _header , packet , % __MODULE__ { data: acc_data } = fu ) ,
89- do: { :incomplete , % __MODULE__ { fu | data: [ packet | acc_data ] } }
91+ defp do_parse ( _header , data , % __MODULE__ { data: acc_data } = fu ) ,
92+ do: { :incomplete , % __MODULE__ { fu | data: [ data | acc_data ] } }
9093end
0 commit comments