Alexander Traud wrote:
ast_format_cache_get(.) does not work for Speex.ASTERISK-25535 shows this, for example with chan_sip: ast_format_cap_append_by_type(sip_tech.capabilities, AST_MEDIA_TYPE_AUDIO); ast_format_cap_append_by_type ast_format_cache_get(ast_codec->name) Here, the source code deals with ast_codec. Now, an ast_format must be created from the name of a codec. In case of Speex, the name of the codec is the same for all rates: speex. Therefore, the cache cannot be accessed that way for speex16 or speex24 because it would return speex[8] always. Therefore, I had to add "codec != ast_format_get_codec(format)" in that patch. If each Speex format has a unique codec->name, no (unnecessary) new formats will be created. In case of AMR, this behavior has two additional implications, but that should be sufficient as example. Slin could be worked-around via ast_format_cache_is_slinear(format), and ast_format_cache_get_slin_by_rate(ast_codec->sample_rate).
When I originally reviewed that code I forgot about that limitation. The way to fix it for all would be to extend the format cache API to allow you to provide a codec for getting a cached format, and then it would return the closest cached format based on that.
I'm not sure if I'm willing to make such a substantial change with changing codec names. That potentially has far reaching consequences.
-- Joshua Colp Digium, Inc. | Senior Software Developer 445 Jan Davis Drive NW - Huntsville, AL 35806 - US Check us out at: www.digium.com & www.asterisk.org -- _____________________________________________________________________ -- Bandwidth and Colocation Provided by http://www.api-digital.com -- asterisk-dev mailing list To UNSUBSCRIBE or update options visit: http://lists.digium.com/mailman/listinfo/asterisk-dev
