Skip to content
Snippets Groups Projects
Commit 30e08ce1 authored by Sean Bright's avatar Sean Bright Committed by George Joseph
Browse files

format_cap: Perform codec lookups by pointer instead of name

ASTERISK-28416 #close

Change-Id: I069420875ebdbcaada52d92599a5f7de3cb2cdf4
parent 53910b1f
No related branches found
No related tags found
3 merge requests!138Merge branch asterisk-20.3.0 into devel properly,!123Merge asterisk '20.3.0' into devel,!118Draft: manager: AOC-S support for AOCMessage
......@@ -314,4 +314,17 @@ struct ast_format *ast_format_cache_get_slin_by_rate(unsigned int rate);
*/
int ast_format_cache_is_slinear(struct ast_format *format);
/*!
* \brief Retrieve a format from the cache by its codec
*
* \param codec The codec to search by
*
* \retval non-NULL if found
* \retval NULL if not found
*
* \note The returned format has its reference count incremented. It must be
* dropped using ao2_ref or ao2_cleanup.
*/
struct ast_format *ast_format_cache_get_by_codec(const struct ast_codec *codec);
#endif /* _AST_FORMAT_CACHE_H */
......@@ -555,3 +555,24 @@ int ast_format_cache_is_slinear(struct ast_format *format)
return 0;
}
struct ast_format *ast_format_cache_get_by_codec(const struct ast_codec *codec)
{
struct ast_format *format;
struct ao2_iterator it;
for (it = ao2_iterator_init(formats, 0);
(format = ao2_iterator_next(&it));
ao2_ref(format, -1)) {
struct ast_codec *candidate = ast_format_get_codec(format);
if (codec == candidate) {
ao2_cleanup(candidate);
ao2_iterator_destroy(&it);
return format;
}
ao2_cleanup(candidate);
}
ao2_iterator_destroy(&it);
return NULL;
}
......@@ -232,7 +232,7 @@ int ast_format_cap_append_by_type(struct ast_format_cap *cap, enum ast_media_typ
continue;
}
format = ast_format_cache_get(codec->name);
format = ast_format_cache_get_by_codec(codec);
if (format == ast_format_none) {
ao2_ref(format, -1);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment