mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-20 03:59:01 +00:00
format_cap: Perform codec lookups by pointer instead of name
ASTERISK-28416 #close Change-Id: I069420875ebdbcaada52d92599a5f7de3cb2cdf4
This commit is contained in:
committed by
George Joseph
parent
53910b1f25
commit
30e08ce1bb
@@ -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);
|
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 */
|
#endif /* _AST_FORMAT_CACHE_H */
|
||||||
|
@@ -555,3 +555,24 @@ int ast_format_cache_is_slinear(struct ast_format *format)
|
|||||||
|
|
||||||
return 0;
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
format = ast_format_cache_get(codec->name);
|
format = ast_format_cache_get_by_codec(codec);
|
||||||
|
|
||||||
if (format == ast_format_none) {
|
if (format == ast_format_none) {
|
||||||
ao2_ref(format, -1);
|
ao2_ref(format, -1);
|
||||||
|
Reference in New Issue
Block a user