diff options
Diffstat (limited to 'main/format_cap.c')
-rw-r--r-- | main/format_cap.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/main/format_cap.c b/main/format_cap.c index 1d566050f..c8bdd4fa3 100644 --- a/main/format_cap.c +++ b/main/format_cap.c @@ -409,7 +409,7 @@ struct ast_format_cap *ast_format_cap_joint(const struct ast_format_cap *cap1, c return NULL; } -int ast_format_cap_joint_copy(const struct ast_format_cap *cap1, const struct ast_format_cap *cap2, struct ast_format_cap *result) +static int joint_copy_helper(const struct ast_format_cap *cap1, const struct ast_format_cap *cap2, struct ast_format_cap *result, int append) { struct ao2_iterator it; struct ast_format *tmp; @@ -417,8 +417,9 @@ int ast_format_cap_joint_copy(const struct ast_format_cap *cap1, const struct as .joint_cap = result, .joint_found = 0, }; - - ast_format_cap_remove_all(result); + if (!append) { + ast_format_cap_remove_all(result); + } it = ao2_iterator_init(cap1->formats, cap2->nolock ? AO2_ITERATOR_DONTLOCK : 0); while ((tmp = ao2_iterator_next(&it))) { data.format = tmp; @@ -433,6 +434,16 @@ int ast_format_cap_joint_copy(const struct ast_format_cap *cap1, const struct as return ao2_container_count(result->formats) ? 1 : 0; } +int ast_format_cap_joint_append(const struct ast_format_cap *cap1, const struct ast_format_cap *cap2, struct ast_format_cap *result) +{ + return joint_copy_helper(cap1, cap2, result, 1); +} + +int ast_format_cap_joint_copy(const struct ast_format_cap *cap1, const struct ast_format_cap *cap2, struct ast_format_cap *result) +{ + return joint_copy_helper(cap1, cap2, result, 0); +} + struct ast_format_cap *ast_format_cap_get_type(const struct ast_format_cap *cap, enum ast_format_type ftype) { struct ao2_iterator it; |