[asterisk-commits] mjordan: branch group/media_formats-reviewed-trunk r417165 - in /team/group/m...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Mon Jun 23 17:29:11 CDT 2014
Author: mjordan
Date: Mon Jun 23 17:29:00 2014
New Revision: 417165
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=417165
Log:
------------------------------------------------------------------------
r417164 | mjordan | 2014-06-23 17:09:47 -0500 (Mon, 23 Jun 2014) | 28 lines
Update more of the core
This patch includes all of Corey's fine work on r3625, more that he did in
channel/rtp_engine/dsp, and enough work in format_cache/elsewhere to get
Asterisk's core to compile, along with some improvements in translate.
Major changes made in this patch:
* Removed ast_best_codec, as it was a farce. All channel drivers will now
use the first codec listed in their configured set of codecs as their
preferred codec.
* Formats now store their name, as it can differ from the codec. This now
has the accessor ast_format_get_name; codecs get the new
ast_format_get_codec_name. Similarly, formats can now be constructed
either entirely from the codec, or from a codec + name.
* Updated the format_cache with the expected short-hand pointers to the
cached formats.
* channel.c was updated. That's large. Note that this was done mostly by
Corey Farrell
* Codecs can do an explicit name match without their sample rate. This is
done to make it a bit easier for CLI commands to query codecs with
singular but odd sample rates (looking at you Opus)
* CLI commands in translate.c should now mostly work. translate.c will
now correctly register translation paths - previously, it used the
passed in codecs, which did not contain the codec->id field.
Review: https://reviewboard.asterisk.org/r/3665/
------------------------------------------------------------------------
Modified:
team/group/media_formats-reviewed-trunk/ (props changed)
team/group/media_formats-reviewed-trunk/addons/chan_ooh323.c
team/group/media_formats-reviewed-trunk/channels/chan_gtalk.c
team/group/media_formats-reviewed-trunk/channels/chan_h323.c
team/group/media_formats-reviewed-trunk/channels/chan_iax2.c
team/group/media_formats-reviewed-trunk/channels/chan_jingle.c
team/group/media_formats-reviewed-trunk/channels/chan_mgcp.c
team/group/media_formats-reviewed-trunk/channels/chan_misdn.c
team/group/media_formats-reviewed-trunk/channels/chan_multicast_rtp.c
team/group/media_formats-reviewed-trunk/channels/chan_phone.c
team/group/media_formats-reviewed-trunk/channels/chan_sip.c
team/group/media_formats-reviewed-trunk/channels/chan_skinny.c
team/group/media_formats-reviewed-trunk/channels/chan_unistim.c
team/group/media_formats-reviewed-trunk/codecs/ex_alaw.h
team/group/media_formats-reviewed-trunk/include/asterisk/_private.h
team/group/media_formats-reviewed-trunk/include/asterisk/channel.h
team/group/media_formats-reviewed-trunk/include/asterisk/format.h
team/group/media_formats-reviewed-trunk/include/asterisk/format_cache.h
team/group/media_formats-reviewed-trunk/include/asterisk/rtp_engine.h
team/group/media_formats-reviewed-trunk/main/asterisk.c
team/group/media_formats-reviewed-trunk/main/channel.c
team/group/media_formats-reviewed-trunk/main/codec.c
team/group/media_formats-reviewed-trunk/main/codec_builtin.c
team/group/media_formats-reviewed-trunk/main/core_unreal.c
team/group/media_formats-reviewed-trunk/main/dsp.c
team/group/media_formats-reviewed-trunk/main/format.c
team/group/media_formats-reviewed-trunk/main/format_cache.c
team/group/media_formats-reviewed-trunk/main/format_cap.c
team/group/media_formats-reviewed-trunk/main/frame.c
team/group/media_formats-reviewed-trunk/main/rtp_engine.c
team/group/media_formats-reviewed-trunk/main/slinfactory.c
team/group/media_formats-reviewed-trunk/main/translate.c
team/group/media_formats-reviewed-trunk/res/res_pjsip_sdp_rtp.c
team/group/media_formats-reviewed-trunk/tests/test_format_cache.c
Propchange: team/group/media_formats-reviewed-trunk/
------------------------------------------------------------------------------
svn:mergeinfo = /team/group/media_formats-reviewed:417164
Modified: team/group/media_formats-reviewed-trunk/addons/chan_ooh323.c
URL: http://svnview.digium.com/svn/asterisk/team/group/media_formats-reviewed-trunk/addons/chan_ooh323.c?view=diff&rev=417165&r1=417164&r2=417165
==============================================================================
--- team/group/media_formats-reviewed-trunk/addons/chan_ooh323.c (original)
+++ team/group/media_formats-reviewed-trunk/addons/chan_ooh323.c Mon Jun 23 17:29:00 2014
@@ -385,10 +385,12 @@
if (ch && caps) {
ast_channel_tech_set(ch, &ooh323_tech);
- if (cap)
- ast_best_codec(cap, &tmpfmt);
- if (!tmpfmt)
+ if (cap) {
+ tmpfmt = ast_format_cap_get_format(cap, 0);
+ }
+ if (!tmpfmt) {
tmpfmt = ast_format_cap_get_format(i->cap, 0);
+ }
ast_format_cap_add(caps, tmpfmt, 0);
ast_channel_nativeformats_set(ch, caps);
Modified: team/group/media_formats-reviewed-trunk/channels/chan_gtalk.c
URL: http://svnview.digium.com/svn/asterisk/team/group/media_formats-reviewed-trunk/channels/chan_gtalk.c?view=diff&rev=417165&r1=417164&r2=417165
==============================================================================
--- team/group/media_formats-reviewed-trunk/channels/chan_gtalk.c (original)
+++ team/group/media_formats-reviewed-trunk/channels/chan_gtalk.c Mon Jun 23 17:29:00 2014
@@ -1157,11 +1157,12 @@
}
/* Set Frame packetization */
+// BUGBUG
// if (i->rtp) {
// ast_rtp_codecs_packetization_set(ast_rtp_instance_get_codecs(i->rtp), i->rtp, &i->prefs);
// }
- ast_best_codec(what, &tmpfmt);
+ tmpfmt = ast_format_cap_get_format(what, 0);
ast_format_cap_add(caps, tmpfmt, 0);
ast_format_cap_append_by_type(caps, i->jointcap, AST_MEDIA_TYPE_VIDEO);
ast_channel_nativeformats_set(tmp, caps);
Modified: team/group/media_formats-reviewed-trunk/channels/chan_h323.c
URL: http://svnview.digium.com/svn/asterisk/team/group/media_formats-reviewed-trunk/channels/chan_h323.c?view=diff&rev=417165&r1=417164&r2=417165
==============================================================================
--- team/group/media_formats-reviewed-trunk/channels/chan_h323.c (original)
+++ team/group/media_formats-reviewed-trunk/channels/chan_h323.c Mon Jun 23 17:29:00 2014
@@ -1103,7 +1103,7 @@
ast_format_compatibility_bitfield2cap(fmt, nativeformats);
ast_channel_nativeformats_set(ch, nativeformats);
- ast_best_codec(nativeformats, &tmpfmt);
+ tmpfmt = ast_format_cap_get_format(nativeformats, 0);
ast_format_cap_remove_bytype(nativeformats, AST_MEDIA_TYPE_UNKNOWN);
ast_format_cap_add(nativeformats, tmpfmt, 0);
Modified: team/group/media_formats-reviewed-trunk/channels/chan_iax2.c
URL: http://svnview.digium.com/svn/asterisk/team/group/media_formats-reviewed-trunk/channels/chan_iax2.c?view=diff&rev=417165&r1=417164&r2=417165
==============================================================================
--- team/group/media_formats-reviewed-trunk/channels/chan_iax2.c (original)
+++ team/group/media_formats-reviewed-trunk/channels/chan_iax2.c Mon Jun 23 17:29:00 2014
@@ -1819,7 +1819,7 @@
if ((cap = ast_format_cap_alloc(AST_FORMAT_CAP_FLAG_DEFAULT))) {
ast_format_compatibility_bitfield2cap(formats, cap);
- ast_best_codec(cap, &tmpfmt);
+ tmpfmt = ast_format_cap_get_format(cap, 0);
format = ast_format_compatibility_format2bitfield(tmpfmt);
ao2_ref(tmpfmt, -1);
ao2_ref(cap, -1);
@@ -1839,7 +1839,7 @@
}
ast_format_compatibility_bitfield2cap(formats, cap);
- ast_best_codec(cap, &tmpfmt);
+ tmpfmt = ast_format_cap_get_format(cap, 0);
format = ast_format_compatibility_format2bitfield(tmpfmt);
ao2_ref(tmpfmt, -1);
ao2_ref(cap, -1);
@@ -5847,13 +5847,14 @@
/* We can support any format by default, until we get restricted */
ast_format_compatibility_bitfield2cap(capability, native);
ast_channel_nativeformats_set(tmp, native);
- ast_best_codec(ast_channel_nativeformats(tmp), &tmpfmt);
+ tmpfmt = ast_format_cap_get_format(ast_channel_nativeformats(tmp), 0);
ast_channel_set_readformat(tmp, tmpfmt);
ast_channel_set_rawreadformat(tmp, tmpfmt);
ast_channel_set_writeformat(tmp, tmpfmt);
ast_channel_set_rawwriteformat(tmp, tmpfmt);
+ ao2_ref(tmpfmt, -1);
ao2_ref(native, -1);
ast_channel_tech_pvt_set(tmp, CALLNO_TO_PTR(i->callno));
@@ -12448,7 +12449,7 @@
ao2_ref(best_fmt_native, -1);
}
ast_channel_nativeformats_set(c, joint);
- ast_best_codec(ast_channel_nativeformats(c), &format);
+ format = ast_format_cap_get_format(ast_channel_nativeformats(c), 0);
ast_channel_set_readformat(c, format);
ast_channel_set_writeformat(c, format);
Modified: team/group/media_formats-reviewed-trunk/channels/chan_jingle.c
URL: http://svnview.digium.com/svn/asterisk/team/group/media_formats-reviewed-trunk/channels/chan_jingle.c?view=diff&rev=417165&r1=417164&r2=417165
==============================================================================
--- team/group/media_formats-reviewed-trunk/channels/chan_jingle.c (original)
+++ team/group/media_formats-reviewed-trunk/channels/chan_jingle.c Mon Jun 23 17:29:00 2014
@@ -877,10 +877,11 @@
what = global_capability;
/* Set Frame packetization */
+// BUGBUG
// if (i->rtp)
// ast_rtp_codecs_packetization_set(ast_rtp_instance_get_codecs(i->rtp), i->rtp, &i->prefs);
- ast_best_codec(what, &tmpfmt);
+ tmpfmt = ast_format_cap_get_format(what, 0);
ast_format_cap_add(caps, tmpfmt, 0);
ast_format_cap_append_by_type(caps, i->jointcap, AST_MEDIA_TYPE_VIDEO);
ast_channel_nativeformats_set(tmp, caps);
Modified: team/group/media_formats-reviewed-trunk/channels/chan_mgcp.c
URL: http://svnview.digium.com/svn/asterisk/team/group/media_formats-reviewed-trunk/channels/chan_mgcp.c?view=diff&rev=417165&r1=417164&r2=417165
==============================================================================
--- team/group/media_formats-reviewed-trunk/channels/chan_mgcp.c (original)
+++ team/group/media_formats-reviewed-trunk/channels/chan_mgcp.c Mon Jun 23 17:29:00 2014
@@ -1540,9 +1540,11 @@
} else {
i->dsp = NULL;
}
- if (state == AST_STATE_RING)
+ if (state == AST_STATE_RING) {
ast_channel_rings_set(tmp, 1);
- ast_best_codec(ast_channel_nativeformats(tmp), &tmpfmt);
+ }
+
+ tmpfmt = ast_format_cap_get_format(ast_channel_nativeformats(tmp), 0);
ast_channel_set_writeformat(tmp, tmpfmt);
ast_channel_set_rawwriteformat(tmp, tmpfmt);
ast_channel_set_readformat(tmp, tmpfmt);
Modified: team/group/media_formats-reviewed-trunk/channels/chan_misdn.c
URL: http://svnview.digium.com/svn/asterisk/team/group/media_formats-reviewed-trunk/channels/chan_misdn.c?view=diff&rev=417165&r1=417164&r2=417165
==============================================================================
--- team/group/media_formats-reviewed-trunk/channels/chan_misdn.c (original)
+++ team/group/media_formats-reviewed-trunk/channels/chan_misdn.c Mon Jun 23 17:29:00 2014
@@ -8204,7 +8204,7 @@
if (tmp) {
chan_misdn_log(2, port, " --> * NEW CHANNEL dialed:%s caller:%s\n", exten, callerid);
- ast_best_codec(cap, &tmpfmt);
+ tmpfmt = ast_format_cap_get_format(cap, 0);
ast_format_cap_add(native, ast_format_alaw, 0);
ast_channel_nativeformats_set(tmp, native);
ast_channel_set_writeformat(tmp, tmpfmt);
Modified: team/group/media_formats-reviewed-trunk/channels/chan_multicast_rtp.c
URL: http://svnview.digium.com/svn/asterisk/team/group/media_formats-reviewed-trunk/channels/chan_multicast_rtp.c?view=diff&rev=417165&r1=417164&r2=417165
==============================================================================
--- team/group/media_formats-reviewed-trunk/channels/chan_multicast_rtp.c (original)
+++ team/group/media_formats-reviewed-trunk/channels/chan_multicast_rtp.c Mon Jun 23 17:29:00 2014
@@ -120,7 +120,7 @@
struct ast_format_cap *caps = NULL;
struct ast_format *fmt = NULL;
- ast_best_codec(cap, &fmt);
+ fmt = ast_format_cap_get_format(cap, 0);
ast_sockaddr_setnull(&control_address);
Modified: team/group/media_formats-reviewed-trunk/channels/chan_phone.c
URL: http://svnview.digium.com/svn/asterisk/team/group/media_formats-reviewed-trunk/channels/chan_phone.c?view=diff&rev=417165&r1=417164&r2=417165
==============================================================================
--- team/group/media_formats-reviewed-trunk/channels/chan_phone.c (original)
+++ team/group/media_formats-reviewed-trunk/channels/chan_phone.c Mon Jun 23 17:29:00 2014
@@ -893,7 +893,7 @@
} else {
ast_format_cap_append_by_type(caps, prefcap, AST_MEDIA_TYPE_UNKNOWN);
}
- ast_best_codec(caps, &tmpfmt);
+ tmpfmt = ast_format_cap_get_format(caps, 0);
ast_channel_nativeformats_set(tmp, caps);
ao2_ref(caps, -1);
ast_channel_set_rawreadformat(tmp, tmpfmt);
Modified: team/group/media_formats-reviewed-trunk/channels/chan_sip.c
URL: http://svnview.digium.com/svn/asterisk/team/group/media_formats-reviewed-trunk/channels/chan_sip.c?view=diff&rev=417165&r1=417164&r2=417165
==============================================================================
--- team/group/media_formats-reviewed-trunk/channels/chan_sip.c (original)
+++ team/group/media_formats-reviewed-trunk/channels/chan_sip.c Mon Jun 23 17:29:00 2014
@@ -11321,6 +11321,7 @@
}
}
}
+ ao2_ref(format, -1);
}
}
@@ -11367,6 +11368,7 @@
} else {
ast_rtp_codecs_payloads_unset(newvideortp, NULL, codec);
}
+ ao2_ref(format, -1);
}
}
Modified: team/group/media_formats-reviewed-trunk/channels/chan_skinny.c
URL: http://svnview.digium.com/svn/asterisk/team/group/media_formats-reviewed-trunk/channels/chan_skinny.c?view=diff&rev=417165&r1=417164&r2=417165
==============================================================================
--- team/group/media_formats-reviewed-trunk/channels/chan_skinny.c (original)
+++ team/group/media_formats-reviewed-trunk/channels/chan_skinny.c Mon Jun 23 17:29:00 2014
@@ -2652,7 +2652,7 @@
if (!(req = req_alloc(sizeof(struct open_receive_channel_message), OPEN_RECEIVE_CHANNEL_MESSAGE)))
return;
- ast_best_codec(l->cap, &tmpfmt);
+ tmpfmt = ast_format_cap_get_format(l->cap, 0);
framing = ast_format_cap_get_framing(l->cap, tmpfmt);
req->data.openreceivechannel.conferenceId = htolel(sub->callid);
@@ -3666,7 +3666,7 @@
SKINNY_DEBUG(DEBUG_AUDIO, 4, "Peerip = %s:%d\n", ast_inet_ntoa(them.sin_addr), ntohs(them.sin_port));
- ast_best_codec(l->cap, &tmpfmt);
+ tmpfmt = ast_format_cap_get_format(l->cap, 0);
framing = ast_format_cap_get_framing(l->cap, tmpfmt);
SKINNY_DEBUG(DEBUG_AUDIO, 4, "Setting payloadType to '%s' (%d ms)\n", ast_format_get_name(tmpfmt), framing);
@@ -5440,7 +5440,7 @@
}
ast_channel_nativeformats_set(tmp, caps);
ao2_ref(caps, -1);
- ast_best_codec(ast_channel_nativeformats(tmp), &tmpfmt);
+ tmpfmt = ast_format_cap_get_format(ast_channel_nativeformats(tmp), 0);
SKINNY_DEBUG(DEBUG_SUB, 3, "skinny_new: tmp->nativeformats=%s fmt=%s\n",
ast_getformatname_multiple(dbgsub_buf, sizeof(dbgsub_buf), ast_channel_nativeformats(tmp)),
ast_format_get_name(tmpfmt));
@@ -6921,7 +6921,7 @@
SKINNY_DEBUG(DEBUG_PACKET, 4, "device ipaddr = %s:%d\n", ast_inet_ntoa(sin.sin_addr), ntohs(sin.sin_port));
SKINNY_DEBUG(DEBUG_PACKET, 4, "asterisk ipaddr = %s:%d\n", ast_inet_ntoa(us.sin_addr), ntohs(us.sin_port));
- ast_best_codec(l->cap, &tmpfmt);
+ tmpfmt = ast_format_cap_get_format(l->cap, 0);
framing = ast_format_cap_get_framing(l->cap, tmpfmt);
SKINNY_DEBUG(DEBUG_PACKET, 4, "Setting payloadType to '%s' (%d ms)\n", ast_format_get_name(tmpfmt), framing);
Modified: team/group/media_formats-reviewed-trunk/channels/chan_unistim.c
URL: http://svnview.digium.com/svn/asterisk/team/group/media_formats-reviewed-trunk/channels/chan_unistim.c?view=diff&rev=417165&r1=417164&r2=417165
==============================================================================
--- team/group/media_formats-reviewed-trunk/channels/chan_unistim.c (original)
+++ team/group/media_formats-reviewed-trunk/channels/chan_unistim.c Mon Jun 23 17:29:00 2014
@@ -2887,7 +2887,7 @@
if (!ast_format_cap_iscompatible_format(ast_channel_nativeformats(sub->owner), ast_channel_readformat(sub->owner))) {
struct ast_format *tmpfmt;
char tmp[256];
- ast_best_codec(ast_channel_nativeformats(sub->owner), &tmpfmt);
+ tmpfmt = ast_format_cap_get_format(ast_channel_nativeformats(sub->owner), 0);
ast_log(LOG_WARNING,
"Our read/writeformat has been changed to something incompatible: %s, using %s best codec from %s\n",
ast_format_get_name(ast_channel_readformat(sub->owner)),
@@ -5711,7 +5711,7 @@
ast_channel_nativeformats_set(tmp, caps);
ao2_ref(caps, -1);
- ast_best_codec(ast_channel_nativeformats(tmp), &tmpfmt);
+ tmpfmt = ast_format_cap_get_format(ast_channel_nativeformats(tmp), 0);
if (unistimdebug) {
char tmp1[256], tmp2[256], tmp3[256];
Modified: team/group/media_formats-reviewed-trunk/codecs/ex_alaw.h
URL: http://svnview.digium.com/svn/asterisk/team/group/media_formats-reviewed-trunk/codecs/ex_alaw.h?view=diff&rev=417165&r1=417164&r2=417165
==============================================================================
--- team/group/media_formats-reviewed-trunk/codecs/ex_alaw.h (original)
+++ team/group/media_formats-reviewed-trunk/codecs/ex_alaw.h Mon Jun 23 17:29:00 2014
@@ -31,6 +31,6 @@
.src = __PRETTY_FUNCTION__,
.data.ptr = ex_alaw,
};
- f.subclass.format = ast_format_copy(ast_format_ulaw);
+ f.subclass.format = ast_format_copy(ast_format_alaw);
return &f;
}
Modified: team/group/media_formats-reviewed-trunk/include/asterisk/_private.h
URL: http://svnview.digium.com/svn/asterisk/team/group/media_formats-reviewed-trunk/include/asterisk/_private.h?view=diff&rev=417165&r1=417164&r2=417165
==============================================================================
--- team/group/media_formats-reviewed-trunk/include/asterisk/_private.h (original)
+++ team/group/media_formats-reviewed-trunk/include/asterisk/_private.h Mon Jun 23 17:29:00 2014
@@ -121,16 +121,6 @@
*/
int ast_plc_reload(void);
-/*!
- * \brief Init the ast_format attribute interface register container.
- */
-int ast_format_attr_init(void);
-
-/*!
- * \brief Init the Asterisk global format list after all format attribute modules have been loaded
- */
-int ast_format_list_init(void);
-
/*! \brief initializes the rtp engine arrays */
int ast_rtp_engine_init(void);
Modified: team/group/media_formats-reviewed-trunk/include/asterisk/channel.h
URL: http://svnview.digium.com/svn/asterisk/team/group/media_formats-reviewed-trunk/include/asterisk/channel.h?view=diff&rev=417165&r1=417164&r2=417165
==============================================================================
--- team/group/media_formats-reviewed-trunk/include/asterisk/channel.h (original)
+++ team/group/media_formats-reviewed-trunk/include/asterisk/channel.h Mon Jun 23 17:29:00 2014
@@ -2085,17 +2085,6 @@
* \return 0 on success and -1 on failure
*/
int ast_channel_setoption(struct ast_channel *channel, int option, void *data, int datalen, int block);
-
-/*!
- * \brief Pick the best codec
- *
- * \param cap capabilities to pick best codec out of
- * \param result stucture to store the best codec in.
- * \retval on success, pointer to result structure
- * \retval on failure, NULL
- */
-struct ast_format *ast_best_codec(struct ast_format_cap *cap, struct ast_format **result);
-
/*!
* \brief Checks the value of an option
Modified: team/group/media_formats-reviewed-trunk/include/asterisk/format.h
URL: http://svnview.digium.com/svn/asterisk/team/group/media_formats-reviewed-trunk/include/asterisk/format.h?view=diff&rev=417165&r1=417164&r2=417165
==============================================================================
--- team/group/media_formats-reviewed-trunk/include/asterisk/format.h (original)
+++ team/group/media_formats-reviewed-trunk/include/asterisk/format.h Mon Jun 23 17:29:00 2014
@@ -122,13 +122,31 @@
*
* \param codec The codec to use
*
- * \param non-NULL success
- * \param NULL failure
+ * \retval non-NULL success
+ * \retval NULL failure
*
* \note The format is returned with reference count incremented. It must be released using
* ao2_ref or ao2_cleanup.
*/
struct ast_format *ast_format_create(struct ast_codec *codec);
+
+/*!
+ * \brief Create a new media format with a specific name
+ *
+ * \param format_name The name to use for the format
+ * \param codec The codec to use
+ *
+ * \note This creation function should be used when the name of the \c codec
+ * cannot be explicitly used for the name of the format. This is the case for
+ * codecs with multiple sample rates
+ *
+ * \note The format is returned with reference count incremented. It must be released using
+ * ao2_ref or ao2_cleanup.
+ *
+ * \retval non-NULL success
+ * \retval NULL failure
+ */
+struct ast_format *ast_format_create_named(const char *format_name, struct ast_codec *codec);
/*!
* \brief Compare two formats
@@ -213,6 +231,15 @@
#define ast_format_interface_register(codec, interface) __ast_format_interface_register(codec, interface, ast_module_info->self)
/*!
+ * \brief Get the name associated with a format
+ *
+ * \param format The media format
+ *
+ * \return The name of the format
+ */
+const char *ast_format_get_name(const struct ast_format *format);
+
+/*!
* \brief Get the codec identifier associated with a format
*
* \param format The media format
@@ -226,9 +253,9 @@
*
* \param format The media format
*
- * \return codec name
- */
-const char *ast_format_get_name(const struct ast_format *format);
+ * \return The codec name
+ */
+const char *ast_format_get_codec_name(const struct ast_format *format);
/*!
* \brief Get the media type of a format
Modified: team/group/media_formats-reviewed-trunk/include/asterisk/format_cache.h
URL: http://svnview.digium.com/svn/asterisk/team/group/media_formats-reviewed-trunk/include/asterisk/format_cache.h?view=diff&rev=417165&r1=417164&r2=417165
==============================================================================
--- team/group/media_formats-reviewed-trunk/include/asterisk/format_cache.h (original)
+++ team/group/media_formats-reviewed-trunk/include/asterisk/format_cache.h Mon Jun 23 17:29:00 2014
@@ -114,11 +114,6 @@
extern struct ast_format *ast_format_g726_aal2;
/*!
- * \brief Built-in cached g726-aal2 format.
- */
-extern struct ast_format *ast_format_g726_aal2;
-
-/*!
* \brief Built-in cached ilbc format.
*/
extern struct ast_format *ast_format_ilbc;
@@ -237,7 +232,7 @@
int ast_format_cache_init(void);
/*!
- * \brief Add a named format cache entry.
+ * \brief Set a named format cache entry.
*
* \param name Name of the cached format
* \param format A pointer to the format to cache
@@ -245,7 +240,7 @@
* \retval 0 success
* \retval -1 failure
*/
-int ast_format_cache_add(const char *name, struct ast_format *format);
+int ast_format_cache_set(const char *name, struct ast_format *format);
/*!
* \brief Retrieve a named format from the cache.
@@ -272,4 +267,14 @@
*/
struct ast_format *ast_format_cache_get_slin_by_rate(unsigned int rate);
+/*!
+ * \brief Determines if a format is one of the cached slin formats
+ *
+ * \param format The format to check
+ *
+ * \retval 0 if the format is not an SLIN format
+ * \retval 1 if the format is an SLIN format
+ */
+int ast_format_cache_is_slinear(struct ast_format *format);
+
#endif /* _AST_FORMAT_CACHE_H */
Modified: team/group/media_formats-reviewed-trunk/include/asterisk/rtp_engine.h
URL: http://svnview.digium.com/svn/asterisk/team/group/media_formats-reviewed-trunk/include/asterisk/rtp_engine.h?view=diff&rev=417165&r1=417164&r2=417165
==============================================================================
--- team/group/media_formats-reviewed-trunk/include/asterisk/rtp_engine.h (original)
+++ team/group/media_formats-reviewed-trunk/include/asterisk/rtp_engine.h Mon Jun 23 17:29:00 2014
@@ -600,6 +600,18 @@
AST_RWLIST_ENTRY(ast_rtp_glue) entry;
};
+/*!
+ * \brief Allocation routine for \ref ast_rtp_payload_type
+ *
+ * \retval NULL on error
+ * \retval An ao2 ref counted \c ast_rtp_payload_type on success.
+ *
+ * \note The \c ast_rtp_payload_type returned by this function is an
+ * ao2 ref counted object.
+ *
+ */
+struct ast_rtp_payload_type *ast_rtp_engine_alloc_payload_type(void);
+
#define ast_rtp_engine_register(engine) ast_rtp_engine_register2(engine, ast_module_info->self)
/*!
@@ -1251,6 +1263,9 @@
* \retval pointer to format structure on success
* \retval NULL on failure
*
+ * \note The format returned by this function has its reference count increased.
+ * Callers are responsible for decrementing the reference count.
+ *
* \since 10.0
*/
struct ast_format *ast_rtp_codecs_get_payload_format(struct ast_rtp_codecs *codecs, int payload);
Modified: team/group/media_formats-reviewed-trunk/main/asterisk.c
URL: http://svnview.digium.com/svn/asterisk/team/group/media_formats-reviewed-trunk/main/asterisk.c?view=diff&rev=417165&r1=417164&r2=417165
==============================================================================
--- team/group/media_formats-reviewed-trunk/main/asterisk.c (original)
+++ team/group/media_formats-reviewed-trunk/main/asterisk.c Mon Jun 23 17:29:00 2014
@@ -4337,6 +4337,11 @@
exit(1);
}
+ if (ast_format_init()) {
+ printf("%s", term_quit());
+ exit(1);
+ }
+
if (ast_format_cache_init()) {
printf("%s", term_quit());
exit(1);
@@ -4401,8 +4406,6 @@
threadstorage_init();
- ast_format_attr_init();
- ast_format_list_init();
if (ast_rtp_engine_init()) {
printf("%s", term_quit());
exit(1);
Modified: team/group/media_formats-reviewed-trunk/main/channel.c
URL: http://svnview.digium.com/svn/asterisk/team/group/media_formats-reviewed-trunk/main/channel.c?view=diff&rev=417165&r1=417164&r2=417165
==============================================================================
--- team/group/media_formats-reviewed-trunk/main/channel.c (original)
+++ team/group/media_formats-reviewed-trunk/main/channel.c Mon Jun 23 17:29:00 2014
@@ -764,78 +764,6 @@
}
}
-/*! \brief Pick the best audio codec */
-struct ast_format *ast_best_codec(struct ast_format_cap *cap, struct ast_format *result)
-{
- /* This just our opinion, expressed in code. We are asked to choose
- the best codec to use, given no information */
- static const enum ast_format_id prefs[] =
- {
- /*! Okay, ulaw is used by all telephony equipment, so start with it */
- AST_FORMAT_ULAW,
- /*! Unless of course, you're a silly European, so then prefer ALAW */
- AST_FORMAT_ALAW,
- AST_FORMAT_G719,
- AST_FORMAT_SIREN14,
- AST_FORMAT_SIREN7,
- AST_FORMAT_TESTLAW,
- /*! G.722 is better then all below, but not as common as the above... so give ulaw and alaw priority */
- AST_FORMAT_G722,
- /*! Okay, well, signed linear is easy to translate into other stuff */
- AST_FORMAT_SLINEAR192,
- AST_FORMAT_SLINEAR96,
- AST_FORMAT_SLINEAR48,
- AST_FORMAT_SLINEAR44,
- AST_FORMAT_SLINEAR32,
- AST_FORMAT_SLINEAR24,
- AST_FORMAT_SLINEAR16,
- AST_FORMAT_SLINEAR12,
- AST_FORMAT_SLINEAR,
- /*! G.726 is standard ADPCM, in RFC3551 packing order */
- AST_FORMAT_G726,
- /*! G.726 is standard ADPCM, in AAL2 packing order */
- AST_FORMAT_G726_AAL2,
- /*! ADPCM has great sound quality and is still pretty easy to translate */
- AST_FORMAT_ADPCM,
- /*! Okay, we're down to vocoders now, so pick GSM because it's small and easier to
- translate and sounds pretty good */
- AST_FORMAT_GSM,
- /*! iLBC is not too bad */
- AST_FORMAT_ILBC,
- /*! Speex is free, but computationally more expensive than GSM */
- AST_FORMAT_SPEEX32,
- AST_FORMAT_SPEEX16,
- AST_FORMAT_SPEEX,
- /*! Opus */
- AST_FORMAT_OPUS,
- /*! SILK is pretty awesome. */
- AST_FORMAT_SILK,
- /*! CELT supports crazy high sample rates */
- AST_FORMAT_CELT,
- /*! Ick, LPC10 sounds terrible, but at least we have code for it, if you're tacky enough
- to use it */
- AST_FORMAT_LPC10,
- /*! G.729a is faster than 723 and slightly less expensive */
- AST_FORMAT_G729A,
- /*! Down to G.723.1 which is proprietary but at least designed for voice */
- AST_FORMAT_G723_1,
- };
- char buf[512];
- int x;
-
- /* Find the first preferred codec in the format given */
- for (x = 0; x < ARRAY_LEN(prefs); x++) {
- if (ast_format_cap_best_byid(cap, prefs[x], result)) {
- return result;
- }
- }
-
- ast_format_clear(result);
- ast_log(LOG_WARNING, "Don't know any of %s formats\n", ast_getformatname_multiple(buf, sizeof(buf), cap));
-
- return NULL;
-}
-
/*! \brief Channel technology used to extract a channel from a running application. The
* channel created with this technology will be immediately hung up - most external
* applications won't ever want to see this.
@@ -883,7 +811,7 @@
ast_channel_stage_snapshot(tmp);
- if (!(nativeformats = ast_format_cap_alloc(AST_FORMAT_CAP_FLAG_CACHE_STRINGS))) {
+ if (!(nativeformats = ast_format_cap_alloc(AST_FORMAT_CAP_FLAG_DEFAULT))) {
/* format capabilities structure allocation failure */
return ast_channel_unref(tmp);
}
@@ -2629,14 +2557,15 @@
ast_translator_free_path(ast_channel_readtrans(clonechan));
ast_channel_writetrans_set(clonechan, NULL);
ast_channel_readtrans_set(clonechan, NULL);
- if (ast_format_cap_is_empty(ast_channel_nativeformats(clonechan))) {
- ast_format_clear(ast_channel_rawwriteformat(clonechan));
- ast_format_clear(ast_channel_rawreadformat(clonechan));
+ if (!ast_format_cap_count(ast_channel_nativeformats(clonechan))) {
+ ast_channel_set_rawwriteformat(clonechan, NULL);
+ ast_channel_set_rawreadformat(clonechan, NULL);
} else {
- struct ast_format tmpfmt;
- ast_best_codec(ast_channel_nativeformats(clonechan), &tmpfmt);
- ast_format_copy(ast_channel_rawwriteformat(clonechan), &tmpfmt);
- ast_format_copy(ast_channel_rawreadformat(clonechan), &tmpfmt);
+ struct ast_format *tmpfmt;
+ tmpfmt = ast_format_cap_get_format(ast_channel_nativeformats(clonechan), 0);
+ ast_channel_set_rawwriteformat(clonechan, tmpfmt);
+ ast_channel_set_rawreadformat(clonechan, tmpfmt);
+ ao2_cleanup(tmpfmt);
}
}
@@ -3001,7 +2930,7 @@
if (!tmp || !generate)
return 0;
- res = generate(chan, tmp, 0, ast_format_rate(ast_channel_writeformat(chan)) / 50);
+ res = generate(chan, tmp, 0, ast_format_get_sample_rate(ast_channel_writeformat(chan)) / 50);
ast_channel_lock(chan);
if (ast_channel_generator(chan) && generate == ast_channel_generator(chan)->generate) {
@@ -3677,11 +3606,9 @@
* We must generate frames in phase locked mode since
* we have no internal timer available.
*/
-
if (ast_format_cmp(&f->subclass.format, ast_channel_writeformat(chan)) == AST_FORMAT_CMP_NOT_EQUAL) {
float factor;
-
- factor = ((float) ast_format_rate(ast_channel_writeformat(chan))) / ((float) ast_format_rate(&f->subclass.format));
+ factor = ((float) ast_format_get_sample_rate(ast_channel_writeformat(chan))) / ((float) ast_format_get_sample_rate(&f->subclass.format));
samples = (int) (((float) f->samples) * factor);
} else {
samples = f->samples;
@@ -4186,11 +4113,11 @@
ast_frfree(f);
f = &ast_null_frame;
}
- } else if ((f->frametype == AST_FRAME_VOICE) && !ast_format_cap_iscompatible(ast_channel_nativeformats(chan), &f->subclass.format)) {
+ } else if ((f->frametype == AST_FRAME_VOICE) && !ast_format_cap_iscompatible_format(ast_channel_nativeformats(chan), f->subclass.format)) {
/* This frame is not one of the current native formats -- drop it on the floor */
char to[200];
ast_log(LOG_NOTICE, "Dropping incompatible voice frame on %s of format %s since our native format has changed to %s\n",
- ast_channel_name(chan), ast_getformatname(&f->subclass.format), ast_getformatname_multiple(to, sizeof(to), ast_channel_nativeformats(chan)));
+ ast_channel_name(chan), ast_format_get_name(f->subclass.format), ast_getformatname_multiple(to, sizeof(to), ast_channel_nativeformats(chan)));
ast_frfree(f);
f = &ast_null_frame;
} else if ((f->frametype == AST_FRAME_VOICE)) {
@@ -4206,7 +4133,9 @@
#ifndef MONITOR_CONSTANT_DELAY
int jump = ast_channel_outsmpl(chan) - ast_channel_insmpl(chan) - 4 * f->samples;
if (jump >= 0) {
- jump = calc_monitor_jump((ast_channel_outsmpl(chan) - ast_channel_insmpl(chan)), ast_format_rate(&f->subclass.format), ast_format_rate(&ast_channel_monitor(chan)->read_stream->fmt->format));
+ jump = calc_monitor_jump((ast_channel_outsmpl(chan) - ast_channel_insmpl(chan)),
+ ast_format_get_sample_rate(f->subclass.format),
+ ast_format_get_sample_rate(ast_channel_monitor(chan)->read_stream->fmt->format));
if (ast_seekstream(ast_channel_monitor(chan)->read_stream, jump, SEEK_FORCECUR) == -1) {
ast_log(LOG_WARNING, "Failed to perform seek in monitoring read stream, synchronization between the files may be broken\n");
}
@@ -4215,7 +4144,9 @@
ast_channel_insmpl_set(chan, ast_channel_insmpl(chan) + f->samples);
}
#else
- int jump = calc_monitor_jump((ast_channel_outsmpl(chan) - ast_channel_insmpl(chan)), ast_format_rate(f->subclass.codec), ast_format_rate(ast_channel_monitor(chan)->read_stream->fmt->format));
+ int jump = calc_monitor_jump((ast_channel_outsmpl(chan) - ast_channel_insmpl(chan)),
+ ast_format_get_sample_rate(f->subclass.codec),
+ ast_format_get_sample_rate(ast_channel_monitor(chan)->read_stream->fmt->format));
if (jump - MONITOR_DELAY >= 0) {
if (ast_seekstream(ast_channel_monitor(chan)->read_stream, jump - f->samples, SEEK_FORCECUR) == -1)
ast_log(LOG_WARNING, "Failed to perform seek in monitoring read stream, synchronization between the files may be broken\n");
@@ -4748,7 +4679,7 @@
}
CHECK_BLOCKING(chan);
- if (ast_channel_tech(chan)->write_text && (ast_format_cap_has_type(ast_channel_nativeformats(chan), AST_FORMAT_TYPE_TEXT))) {
+ if (ast_channel_tech(chan)->write_text && (ast_format_cap_has_type(ast_channel_nativeformats(chan), AST_MEDIA_TYPE_TEXT))) {
struct ast_frame f;
f.frametype = AST_FRAME_TEXT;
@@ -4759,7 +4690,7 @@
f.offset = 0;
f.seqno = 0;
- ast_format_set(&f.subclass.format, AST_FORMAT_T140, 0);
+ f.subclass.format = ast_format_t140;
res = ast_channel_tech(chan)->write_text(chan, &f);
} else if (ast_channel_tech(chan)->send_text) {
res = ast_channel_tech(chan)->send_text(chan, text);
@@ -4856,7 +4787,7 @@
/* Send an empty audio frame to get things moving */
if (ast_channel_state(chan) != AST_STATE_UP) {
ast_debug(1, "Prodding channel '%s'\n", ast_channel_name(chan));
- ast_format_copy(&a.subclass.format, ast_channel_rawwriteformat(chan));
+ a.subclass.format = ast_channel_rawwriteformat(chan);
a.data.ptr = nothing + AST_FRIENDLY_OFFSET;
a.src = "ast_prod"; /* this better match check in ast_write */
if (ast_write(chan, &a))
@@ -5068,7 +4999,7 @@
CHECK_BLOCKING(chan);
break;
case AST_FRAME_TEXT:
- if (fr->subclass.integer == AST_FORMAT_T140) {
+ if (ast_format_cmp(fr->subclass.format, ast_format_t140) == AST_FORMAT_CMP_EQUAL) {
res = (ast_channel_tech(chan)->write_text == NULL) ? 0 :
ast_channel_tech(chan)->write_text(chan, fr);
} else {
@@ -5093,16 +5024,16 @@
if (ast_channel_tech(chan)->write == NULL)
break; /*! \todo XXX should return 0 maybe ? */
- if (ast_opt_generic_plc && fr->subclass.format.id == AST_FORMAT_SLINEAR) {
+ if (ast_opt_generic_plc && ast_format_cmp(fr->subclass.format, ast_format_slin) == AST_FORMAT_CMP_EQUAL) {
apply_plc(chan, fr);
}
/* If the frame is in the raw write format, then it's easy... just use the frame - otherwise we will have to translate */
- if (ast_format_cmp(&fr->subclass.format, ast_channel_rawwriteformat(chan)) != AST_FORMAT_CMP_NOT_EQUAL) {
+ if (ast_format_cmp(fr->subclass.format, ast_channel_rawwriteformat(chan)) != AST_FORMAT_CMP_NOT_EQUAL) {
f = fr;
} else {
- if ((!ast_format_cap_iscompatible(ast_channel_nativeformats(chan), &fr->subclass.format)) &&
- (ast_format_cmp(ast_channel_writeformat(chan), &fr->subclass.format) != AST_FORMAT_CMP_EQUAL)) {
+ if ((!ast_format_cap_iscompatible_format(ast_channel_nativeformats(chan), fr->subclass.format)) &&
+ (ast_format_cmp(ast_channel_writeformat(chan), fr->subclass.format) != AST_FORMAT_CMP_EQUAL)) {
char nf[512];
/*
@@ -5115,9 +5046,9 @@
* areas.
*/
ast_log(LOG_WARNING, "Codec mismatch on channel %s setting write format to %s from %s native formats %s\n",
- ast_channel_name(chan), ast_getformatname(&fr->subclass.format), ast_getformatname(ast_channel_writeformat(chan)),
+ ast_channel_name(chan), ast_format_get_name(fr->subclass.format), ast_format_get_name(ast_channel_writeformat(chan)),
ast_getformatname_multiple(nf, sizeof(nf), ast_channel_nativeformats(chan)));
- ast_set_write_format_by_id(chan, fr->subclass.format.id);
+ ast_set_write_format(chan, fr->subclass.format);
}
f = (ast_channel_writetrans(chan)) ? ast_translate(ast_channel_writetrans(chan), fr, 0) : fr;
@@ -5185,7 +5116,9 @@
#ifndef MONITOR_CONSTANT_DELAY
int jump = ast_channel_insmpl(chan) - ast_channel_outsmpl(chan) - 4 * cur->samples;
if (jump >= 0) {
- jump = calc_monitor_jump((ast_channel_insmpl(chan) - ast_channel_outsmpl(chan)), ast_format_rate(&f->subclass.format), ast_format_rate(&ast_channel_monitor(chan)->read_stream->fmt->format));
+ jump = calc_monitor_jump((ast_channel_insmpl(chan) - ast_channel_outsmpl(chan)),
+ ast_format_get_sample_rate(f->subclass.format),
+ ast_format_get_sample_rate(ast_channel_monitor(chan)->read_stream->fmt->format));
if (ast_seekstream(ast_channel_monitor(chan)->write_stream, jump, SEEK_FORCECUR) == -1) {
ast_log(LOG_WARNING, "Failed to perform seek in monitoring write stream, synchronization between the files may be broken\n");
}
@@ -5194,7 +5127,9 @@
ast_channel_outsmpl_set(chan, ast_channel_outsmpl(chan) + cur->samples);
}
#else
- int jump = calc_monitor_jump((ast_channel_insmpl(chan) - ast_channel_outsmpl(chan)), ast_format_rate(f->subclass.codec), ast_format_rate(ast_channel_monitor(chan)->read_stream->fmt->format));
+ int jump = calc_monitor_jump((ast_channel_insmpl(chan) - ast_channel_outsmpl(chan)),
+ ast_format_get_sample_rate(f->subclass.codec),
+ ast_format_get_sample_rate(ast_channel_monitor(chan)->read_stream->fmt->format));
if (jump - MONITOR_DELAY >= 0) {
if (ast_seekstream(ast_channel_monitor(chan)->write_stream, jump - cur->samples, SEEK_FORCECUR) == -1) {
ast_log(LOG_WARNING, "Failed to perform seek in monitoring write stream, synchronization between the files may be broken\n");
@@ -5300,21 +5235,20 @@
{
struct ast_trans_pvt *trans_pvt;
struct ast_format_cap *cap_native;
- struct ast_format best_set_fmt;
- struct ast_format best_native_fmt;
+ RAII_VAR(struct ast_format *, best_set_fmt, ast_format_cap_get_format(cap_set, 0), ao2_cleanup);
+ struct ast_format *best_native_fmt;
int res;
-
- ast_best_codec(cap_set, &best_set_fmt);
/* See if the underlying channel driver is capable of performing transcoding for us */
if (!ast_channel_setoption(chan, direction ? AST_OPTION_FORMAT_WRITE : AST_OPTION_FORMAT_READ, &best_set_fmt, sizeof(best_set_fmt), 0)) {
ast_debug(1, "Channel driver natively set channel %s to %s format %s\n", ast_channel_name(chan),
- direction ? "write" : "read", ast_getformatname(&best_set_fmt));
+ direction ? "write" : "read", ast_format_get_name(best_set_fmt));
ast_channel_lock(chan);
- ast_format_copy(format, &best_set_fmt);
- ast_format_copy(rawformat, &best_set_fmt);
[... 2509 lines stripped ...]
More information about the asterisk-commits
mailing list