mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-04 03:50:31 +00:00
chan_sip: Filter pass-through audio/video formats away, again.
Instead of looking for pass-through formats in the list of transcodable formats (which is going to find nothing), go through the result which is going to be the jointcaps of the tech_pvt of the channel. Finally, only with that list, ast_format_cap_remove(.) is going to succeed. This restores the behaviour of Asterisk 1.8. However, it does not fix ASTERISK_29282 because that issue report is about chan_sip and PJSIP. Here, only chan_sip is fixed because PJSIP does not even call ast_rtp_instance_available_formats -> ast_translate_available_format. Change-Id: Icade2366ac2b82935b95a9981678c987da2e8c34
This commit is contained in:
committed by
George Joseph
parent
d847f7e8f8
commit
99666117be
@@ -1509,16 +1509,19 @@ static void check_translation_path(
|
||||
struct ast_format_cap *result, struct ast_format *src_fmt,
|
||||
enum ast_media_type type)
|
||||
{
|
||||
int index, src_index = format2index(src_fmt);
|
||||
int i;
|
||||
|
||||
if (ast_format_get_type(src_fmt) != type) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* For a given source format, traverse the list of
|
||||
known formats to determine whether there exists
|
||||
a translation path from the source format to the
|
||||
destination format. */
|
||||
for (index = 0; (src_index >= 0) && index < cur_max_index; index++) {
|
||||
struct ast_codec *codec = index2codec(index);
|
||||
RAII_VAR(struct ast_format *, fmt, ast_format_create(codec), ao2_cleanup);
|
||||
|
||||
ao2_ref(codec, -1);
|
||||
for (i = ast_format_cap_count(result) - 1; 0 <= i; i--) {
|
||||
int index, src_index;
|
||||
struct ast_format *fmt = ast_format_cap_get_format(result, i);
|
||||
|
||||
if (ast_format_get_type(fmt) != type) {
|
||||
continue;
|
||||
@@ -1535,6 +1538,15 @@ static void check_translation_path(
|
||||
continue;
|
||||
}
|
||||
|
||||
/* if this is a pass-through format, not in the source,
|
||||
we cannot transcode. Therefore, remove it from the result */
|
||||
src_index = format2index(src_fmt);
|
||||
index = format2index(fmt);
|
||||
if (src_index < 0 || index < 0) {
|
||||
ast_format_cap_remove(result, fmt);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* if we don't have a translation path from the src
|
||||
to this format, remove it from the result */
|
||||
if (!matrix_get(src_index, index)->step) {
|
||||
|
Reference in New Issue
Block a user