format_cap: Perform codec lookups by pointer instead of name
ASTERISK-28416 #close Change-Id: I069420875ebdbcaada52d92599a5f7de3cb2cdf4
This commit is contained in:
parent
cc71be0078
commit
4964302984
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue