Add the 'all' keyword for the codec accept option in publish mode:
- 'all': keep all codecs supported for transcoding and their
supplemental codecs, removing only unsupported ones
- 'all' + 'any': keep all codecs from the offer without removing any
Closes#2105
Change-Id: Ic271a5e461703e3b9dba3c0717bfbb9da89a03ca
It doesn't make sense to produce an answer SDP with ICE attributes (and
enabling ICE processing) if the offer didn't indicate ICE support.
Closes#2106
Change-Id: I7cc6083beffc3f76f34c965049e8179866df2e6f
Check what it actually returns and accordingly return false
in case of error to the `monologue_call_create_media()` caller.
Change-Id: I90b8069dcc770187aabefb40d96c1c6929c2f703
Check what it actually returns and accordingly return -1
in case of error to the `monologue_subscribe_request1()` caller.
Change-Id: I5a14a19c97c1ca51d212d133670bbd8e8158628e
Check what it actually returns and accordingly return -1
in case of error to the `monologue_publish()` caller.
Change-Id: Ibcf8e71bc1234787654667b04afd43db5cebe5bb
This wrapper should likely call the `__unsubscribe_all_from_monologue()`
instead of the `__unsubscribe_monologue_from_all()`, because
the latter is already used by another wrapper of the same name.
And "unsubscriber all from monologue" name hints that
we unsubscribe our subscribers from us.
Change-Id: I6a16ab7320c619adedd9ba7c05e0d9a401971bfe
Running the Docker image raises the following exception:
```
rtpengine: error while loading shared libraries: libip4tc.so.2: cannot open shared object file: No such file or directory
```
Adds libip4tc for ipv4 handling
Closes#2102
Change-Id: I102c83652e1b52b0026fe873164a06e116b5daa5
Comparing the `unsigned int` against -1 leads
to comparison of the maximum value representable by unsigned int
(UINT_MAX).
Use explicitly the `UINT_MAX` instead.
Change-Id: Ib1e435c25d481ae680fd3d3f3cb74ec1c7d6109d
Not only the `.name` and `.value` but also the rest
(so the `.line_value` and `.key`).
If not to do so, this may affect future generic logic.
Change-Id: I786aa52233af6bf4324ed401873df42fc7f63c46
If `a=` has been given as part of the manipulation flags,
then this would lead to appending `a=a=`, so instead check it,
and if already there, then skip adding our own.
Change-Id: If943fac403fc3942cad8ad89be14fe4689b9974e
Add assert for the case when the execution sequence:
`get_any_interface_address()` -> `get_interface_address()`
still returns NULL.
If to dereference the `local_intf` later without checking it,
then it's definitely a crash.
Change-Id: Idc8557dd5352a6a421ca4056ef1ebd822be5fe08
For the case when we fail in during streams allocation
in `sdp_streams()` we only take care to clean the
main pointer for the stream params, but not about
the subsequent heap allocated stuff like SDES params.
For this purpose we actually have `sp_free()` which takes
care to de-allocate subsequent heap allocated queues.
Change-Id: I326bc91c9194752e901406dc919da9c4ef5aa51a
In `sdp_out_add_media()` the port is given as
`unsigned int` but then is being appended to the SDP body
as `%i`. Instead the `%u` should actually be used.
Same for the `sdp_out_add_osrtp_media()` which treats
the `unsigned int` as the `signed` one actually.
Change-Id: I6a7a45e9a0daa70ffffd17d2a35ff7db8c8cf7ab
Fixes:
*** CID 1671239: Control flow issues (MISSING_BREAK)
/daemon/call_flags.c: 1902 in call_ng_main_flags()
1896 case CSH_LOOKUP("rtcp-mux"):
1897 case CSH_LOOKUP("RTCP-mux"):
1898 case CSH_LOOKUP("rtcp mux"):
1899 case CSH_LOOKUP("RTCP mux"):
1900 return call_ng_flags_str_list(parser, value, call_ng_flags_rtcp_mux, out);
1901 case CSH_LOOKUP("rtpp-flags"):
>>> CID 1671239: Control flow issues (MISSING_BREAK)
>>> The case for value "164" is not terminated by a "break" statement.
1902 case CSH_LOOKUP("rtpp_flags"):;
1903 case CSH_LOOKUP("rtpp flags"):;
1904 /* s - list of rtpp flags */
1905 out->rtpp_flags = true;
1906 parse_rtpp_flags(&s, out);
1907 break;
Change-Id: I1d8c41ad08c5f090fe58ab0b5c03308b9a1155bb
Add RED (RFC 2198) codec definition to codeclib as a supplemental codec.
Modify codec_store_accept_one() to preserve supplemental codecs whose
clock rate matches the accepted primary codec. Skip supplemental codecs
in codec_store_is_full_answer() since they are optional in SDP answers.
Closes#2100
Change-Id: Ie81f45091c5d3dc55e20896d5a6e7a8361fda2f4
The ffmpeg G.726 encoder operates on fixed frame sizes which don't
reflect the expected frame size on the wire. Add an encoder init wrapper
to set the correct frame size.
Change-Id: I4d635e52b6c3bd4f924d1b295ec1bf4c56ef22bc
In case of bitstream style codecs which still use an encoder which
operates on fixed frame sizes (e.g. G.726), passing the maximum allowed
frame/packet size to the packetizer is not enough. Instead it needs to
know separately how much data it is expected to return. Add another
argument to pass this information.
This also fixes the incorrect math to adjust the frame duration in case
of chunked output.
Change-Id: I1d57c684ecea055059481de0220f6b6001088605
Instead of taking an average, take the minimum over the last X frames.
This fixes skew calculation in situations where the encoder is expected
to produce burst output (e.g. G.726).
Probably the exception for media playback can also be removed.
Change-Id: I92e03916c04c670f6e8e72ad243a67d675504690
The format of a received audio frame can differ from the required format
for the audio player (Opus decoder supporting multiple sample rates).
Add a resampler in case resampling is needed.
Change-Id: I7f1be18334a5a12c6491e7763699559d2ee487f1
Some containers (MP3) fill the audio format information only after
reading the first frame. Do that if the information is missing.
Change-Id: I7865dee130e2a109e289eca5119d38a4e00f2a32
Skip initialisation of seq_out to a random number and track its init
state with a dedicated flag. Initialise it to the first received seq.
Change-Id: Iecdd3d28c5d6fe36d0a7488dd231767ff788942e