diff --git a/include/asterisk/format.h b/include/asterisk/format.h index 32f9f2b40e..3da2d82368 100644 --- a/include/asterisk/format.h +++ b/include/asterisk/format.h @@ -275,6 +275,17 @@ void ast_format_set_attribute_data(struct ast_format *format, void *attribute_da */ const char *ast_format_get_name(const struct ast_format *format); +/*! + * \brief Get the codec associated with a format + * + * \param format The media format + * + * \return The codec + * + * \note The reference count of the returned codec is increased by 1 and must be decremented + */ +struct ast_codec *ast_format_get_codec(const struct ast_format *format); + /*! * \brief Get the codec identifier associated with a format * diff --git a/main/codec.c b/main/codec.c index e060efe3ec..19e78fa675 100644 --- a/main/codec.c +++ b/main/codec.c @@ -355,10 +355,7 @@ unsigned int ast_codec_samples_count(struct ast_frame *frame) return 0; } - /* BUGBUG - why not just get the codec pointer off the format? - This is a bit roundabout - */ - codec = ast_codec_get_by_id(ast_format_get_codec_id(frame->subclass.format)); + codec = ast_format_get_codec(frame->subclass.format); if (codec->samples_count) { samples = codec->samples_count(frame); diff --git a/main/format.c b/main/format.c index e54fca01b4..09d7ef0c50 100644 --- a/main/format.c +++ b/main/format.c @@ -323,6 +323,11 @@ void ast_format_generate_sdp_fmtp(const struct ast_format *format, unsigned int format->interface->format_generate_sdp_fmtp(format, payload, str); } +struct ast_codec *ast_format_get_codec(const struct ast_format *format) +{ + return ao2_bump(format->codec); +} + unsigned int ast_format_get_codec_id(const struct ast_format *format) { return format->codec->id;