diff --git a/src/libosmo-mgcp/mgcp_codec.c b/src/libosmo-mgcp/mgcp_codec.c index 1a8d26a61..c287b7eb6 100644 --- a/src/libosmo-mgcp/mgcp_codec.c +++ b/src/libosmo-mgcp/mgcp_codec.c @@ -390,10 +390,10 @@ static bool codecs_same(struct mgcp_rtp_codec *codec_a, struct mgcp_rtp_codec *c return false; if (strcmp(codec_a->subtype_name, codec_b->subtype_name)) return false; - - /* Note: AMR allows to set the RTP payload format to octet-aligned or bandwith-efficient (octet-aligned=0) - * via SDP. This difference concerns payload format only, but not the actual codec. It is not a difference - * within the meaning of this function. */ + if (!strcmp(codec_a->subtype_name, "AMR")) { + if (mgcp_codec_amr_is_octet_aligned(codec_a) != mgcp_codec_amr_is_octet_aligned(codec_b)) + return false; + } return true; } diff --git a/tests/mgcp/mgcp_test.c b/tests/mgcp/mgcp_test.c index dfaba7198..444e07aa3 100644 --- a/tests/mgcp/mgcp_test.c +++ b/tests/mgcp/mgcp_test.c @@ -1897,13 +1897,16 @@ static const struct testcase_mgcp_codec_pt_translate test_mgcp_codec_pt_translat .codecs = { { { 111, "AMR/8000", &amr_param_octet_aligned_true, }, + { 112, "AMR/8000", &amr_param_octet_aligned_false, }, }, { { 122, "AMR/8000", &amr_param_octet_aligned_false, }, + { 121, "AMR/8000", &amr_param_octet_aligned_true, }, }, }, .expect = { - { .payload_type_map = {111, 122}, }, + { .payload_type_map = {111, 121}, }, + { .payload_type_map = {112, 122} }, { .end = true }, }, }, @@ -1912,13 +1915,15 @@ static const struct testcase_mgcp_codec_pt_translate test_mgcp_codec_pt_translat .codecs = { { { 111, "AMR/8000", &amr_param_octet_aligned_true, }, + { 112, "AMR/8000", &amr_param_octet_aligned_false, }, }, { { 122, "AMR/8000", &amr_param_octet_aligned_unset, }, }, }, .expect = { - { .payload_type_map = {111, 122}, }, + { .payload_type_map = {111, -EINVAL}, }, + { .payload_type_map = {112, 122} }, { .end = true }, }, }, @@ -1927,13 +1932,15 @@ static const struct testcase_mgcp_codec_pt_translate test_mgcp_codec_pt_translat .codecs = { { { 111, "AMR/8000", &amr_param_octet_aligned_true, }, + { 112, "AMR/8000", &amr_param_octet_aligned_false, }, }, { { 122, "AMR/8000", NULL, }, }, }, .expect = { - { .payload_type_map = {111, 122}, }, + { .payload_type_map = {111, -EINVAL}, }, + { .payload_type_map = {112, 122} }, { .end = true }, }, }, diff --git a/tests/mgcp/mgcp_test.ok b/tests/mgcp/mgcp_test.ok index 5b8d558b6..94fada35c 100644 --- a/tests/mgcp/mgcp_test.ok +++ b/tests/mgcp/mgcp_test.ok @@ -1347,24 +1347,32 @@ Testing mgcp_codec_pt_translate() #5: test AMR with differing octet-aligned settings - add codecs on conn0: 0: 111 AMR/8000 octet-aligned=1 -> rc=0 + 1: 112 AMR/8000 octet-aligned=0 -> rc=0 - add codecs on conn1: 0: 122 AMR/8000 octet-aligned=0 -> rc=0 - - mgcp_codec_pt_translate(conn0, conn1, 111) -> 122 - - mgcp_codec_pt_translate(conn1, conn0, 122) -> 111 + 1: 121 AMR/8000 octet-aligned=1 -> rc=0 + - mgcp_codec_pt_translate(conn0, conn1, 111) -> 121 + - mgcp_codec_pt_translate(conn1, conn0, 121) -> 111 + - mgcp_codec_pt_translate(conn0, conn1, 112) -> 122 + - mgcp_codec_pt_translate(conn1, conn0, 122) -> 112 #6: test AMR with missing octet-aligned settings (defaults to 0) - add codecs on conn0: 0: 111 AMR/8000 octet-aligned=1 -> rc=0 + 1: 112 AMR/8000 octet-aligned=0 -> rc=0 - add codecs on conn1: 0: 122 AMR/8000 octet-aligned=unset -> rc=0 - - mgcp_codec_pt_translate(conn0, conn1, 111) -> 122 - - mgcp_codec_pt_translate(conn1, conn0, 122) -> 111 + - mgcp_codec_pt_translate(conn0, conn1, 111) -> -22 + - mgcp_codec_pt_translate(conn0, conn1, 112) -> 122 + - mgcp_codec_pt_translate(conn1, conn0, 122) -> 112 #7: test AMR with NULL param (defaults to 0) - add codecs on conn0: 0: 111 AMR/8000 octet-aligned=1 -> rc=0 + 1: 112 AMR/8000 octet-aligned=0 -> rc=0 - add codecs on conn1: 0: 122 AMR/8000 -> rc=0 - - mgcp_codec_pt_translate(conn0, conn1, 111) -> 122 - - mgcp_codec_pt_translate(conn1, conn0, 122) -> 111 + - mgcp_codec_pt_translate(conn0, conn1, 111) -> -22 + - mgcp_codec_pt_translate(conn0, conn1, 112) -> 122 + - mgcp_codec_pt_translate(conn1, conn0, 122) -> 112 #8: match FOO/8000/1 and FOO/8000 as identical, single channel is implicit - add codecs on conn0: 0: 0 PCMU/8000/1 -> rc=0