123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273 |
- /*
- * Asterisk -- An open source telephony toolkit.
- *
- * Copyright (C) 2014, Digium, Inc.
- *
- * Joshua Colp <jcolp@digium.com>
- *
- * See http://www.asterisk.org for more information about
- * the Asterisk project. Please do not directly contact
- * any of the maintainers of this project for assistance;
- * the project provides a web site, mailing lists and IRC
- * channels for your use.
- *
- * This program is free software, distributed under the terms of
- * the GNU General Public License Version 2. See the LICENSE file
- * at the top of the source tree.
- */
- /*! \file
- *
- * \brief Media Format Bitfield Compatibility API
- *
- * \author Joshua Colp <jcolp@digium.com>
- */
- /*** MODULEINFO
- <support_level>core</support_level>
- ***/
- #include "asterisk.h"
- ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
- #include "asterisk/logger.h"
- #include "asterisk/astobj2.h"
- #include "asterisk/codec.h"
- #include "asterisk/format.h"
- #include "asterisk/format_compatibility.h"
- #include "asterisk/format_cache.h"
- uint64_t ast_format_compatibility_format2bitfield(const struct ast_format *format)
- {
- if (ast_format_cmp(format, ast_format_g723) == AST_FORMAT_CMP_EQUAL) {
- return AST_FORMAT_G723;
- } else if (ast_format_cmp(format, ast_format_gsm) == AST_FORMAT_CMP_EQUAL) {
- return AST_FORMAT_GSM;
- } else if (ast_format_cmp(format, ast_format_ulaw) == AST_FORMAT_CMP_EQUAL) {
- return AST_FORMAT_ULAW;
- } else if (ast_format_cmp(format, ast_format_alaw) == AST_FORMAT_CMP_EQUAL) {
- return AST_FORMAT_ALAW;
- } else if (ast_format_cmp(format, ast_format_g726_aal2) == AST_FORMAT_CMP_EQUAL) {
- return AST_FORMAT_G726_AAL2;
- } else if (ast_format_cmp(format, ast_format_adpcm) == AST_FORMAT_CMP_EQUAL) {
- return AST_FORMAT_ADPCM;
- } else if (ast_format_cmp(format, ast_format_slin) == AST_FORMAT_CMP_EQUAL) {
- return AST_FORMAT_SLIN;
- } else if (ast_format_cmp(format, ast_format_lpc10) == AST_FORMAT_CMP_EQUAL) {
- return AST_FORMAT_LPC10;
- } else if (ast_format_cmp(format, ast_format_g729) == AST_FORMAT_CMP_EQUAL) {
- return AST_FORMAT_G729;
- } else if (ast_format_cmp(format, ast_format_speex) == AST_FORMAT_CMP_EQUAL) {
- return AST_FORMAT_SPEEX;
- } else if (ast_format_cmp(format, ast_format_ilbc) == AST_FORMAT_CMP_EQUAL) {
- return AST_FORMAT_ILBC;
- } else if (ast_format_cmp(format, ast_format_g726) == AST_FORMAT_CMP_EQUAL) {
- return AST_FORMAT_G726;
- } else if (ast_format_cmp(format, ast_format_g722) == AST_FORMAT_CMP_EQUAL) {
- return AST_FORMAT_G722;
- } else if (ast_format_cmp(format, ast_format_siren7) == AST_FORMAT_CMP_EQUAL) {
- return AST_FORMAT_SIREN7;
- } else if (ast_format_cmp(format, ast_format_siren14) == AST_FORMAT_CMP_EQUAL) {
- return AST_FORMAT_SIREN14;
- } else if (ast_format_cmp(format, ast_format_slin16) == AST_FORMAT_CMP_EQUAL) {
- return AST_FORMAT_SLIN16;
- } else if (ast_format_cmp(format, ast_format_g719) == AST_FORMAT_CMP_EQUAL) {
- return AST_FORMAT_G719;
- } else if (ast_format_cmp(format, ast_format_speex16) == AST_FORMAT_CMP_EQUAL) {
- return AST_FORMAT_SPEEX16;
- } else if (ast_format_cmp(format, ast_format_opus) == AST_FORMAT_CMP_EQUAL) {
- return AST_FORMAT_OPUS;
- } else if (ast_format_cmp(format, ast_format_testlaw) == AST_FORMAT_CMP_EQUAL) {
- return AST_FORMAT_TESTLAW;
- } else if (ast_format_cmp(format, ast_format_h261) == AST_FORMAT_CMP_EQUAL) {
- return AST_FORMAT_H261;
- } else if (ast_format_cmp(format, ast_format_h263) == AST_FORMAT_CMP_EQUAL) {
- return AST_FORMAT_H263;
- } else if (ast_format_cmp(format, ast_format_h263p) == AST_FORMAT_CMP_EQUAL) {
- return AST_FORMAT_H263P;
- } else if (ast_format_cmp(format, ast_format_h264) == AST_FORMAT_CMP_EQUAL) {
- return AST_FORMAT_H264;
- } else if (ast_format_cmp(format, ast_format_mp4) == AST_FORMAT_CMP_EQUAL) {
- return AST_FORMAT_MP4;
- } else if (ast_format_cmp(format, ast_format_vp8) == AST_FORMAT_CMP_EQUAL) {
- return AST_FORMAT_VP8;
- } else if (ast_format_cmp(format, ast_format_jpeg) == AST_FORMAT_CMP_EQUAL) {
- return AST_FORMAT_JPEG;
- } else if (ast_format_cmp(format, ast_format_png) == AST_FORMAT_CMP_EQUAL) {
- return AST_FORMAT_PNG;
- } else if (ast_format_cmp(format, ast_format_t140_red) == AST_FORMAT_CMP_EQUAL) {
- return AST_FORMAT_T140_RED;
- } else if (ast_format_cmp(format, ast_format_t140) == AST_FORMAT_CMP_EQUAL) {
- return AST_FORMAT_T140;
- }
- return 0;
- }
- uint64_t ast_format_compatibility_codec2bitfield(const struct ast_codec *codec)
- {
- if (codec->id == ast_format_get_codec_id(ast_format_g723)) {
- return AST_FORMAT_G723;
- } else if (codec->id == ast_format_get_codec_id(ast_format_gsm)) {
- return AST_FORMAT_GSM;
- } else if (codec->id == ast_format_get_codec_id(ast_format_ulaw)) {
- return AST_FORMAT_ULAW;
- } else if (codec->id == ast_format_get_codec_id(ast_format_alaw)) {
- return AST_FORMAT_ALAW;
- } else if (codec->id == ast_format_get_codec_id(ast_format_g726_aal2)) {
- return AST_FORMAT_G726_AAL2;
- } else if (codec->id == ast_format_get_codec_id(ast_format_adpcm)) {
- return AST_FORMAT_ADPCM;
- } else if (codec->id == ast_format_get_codec_id(ast_format_slin)) {
- return AST_FORMAT_SLIN;
- } else if (codec->id == ast_format_get_codec_id(ast_format_lpc10)) {
- return AST_FORMAT_LPC10;
- } else if (codec->id == ast_format_get_codec_id(ast_format_g729)) {
- return AST_FORMAT_G729;
- } else if (codec->id == ast_format_get_codec_id(ast_format_speex)) {
- return AST_FORMAT_SPEEX;
- } else if (codec->id == ast_format_get_codec_id(ast_format_ilbc)) {
- return AST_FORMAT_ILBC;
- } else if (codec->id == ast_format_get_codec_id(ast_format_g726)) {
- return AST_FORMAT_G726;
- } else if (codec->id == ast_format_get_codec_id(ast_format_g722)) {
- return AST_FORMAT_G722;
- } else if (codec->id == ast_format_get_codec_id(ast_format_siren7)) {
- return AST_FORMAT_SIREN7;
- } else if (codec->id == ast_format_get_codec_id(ast_format_siren14)) {
- return AST_FORMAT_SIREN14;
- } else if (codec->id == ast_format_get_codec_id(ast_format_slin16)) {
- return AST_FORMAT_SLIN16;
- } else if (codec->id == ast_format_get_codec_id(ast_format_g719)) {
- return AST_FORMAT_G719;
- } else if (codec->id == ast_format_get_codec_id(ast_format_speex16)) {
- return AST_FORMAT_SPEEX16;
- } else if (codec->id == ast_format_get_codec_id(ast_format_opus)) {
- return AST_FORMAT_OPUS;
- } else if (codec->id == ast_format_get_codec_id(ast_format_testlaw)) {
- return AST_FORMAT_TESTLAW;
- } else if (codec->id == ast_format_get_codec_id(ast_format_h261)) {
- return AST_FORMAT_H261;
- } else if (codec->id == ast_format_get_codec_id(ast_format_h263)) {
- return AST_FORMAT_H263;
- } else if (codec->id == ast_format_get_codec_id(ast_format_h263p)) {
- return AST_FORMAT_H263P;
- } else if (codec->id == ast_format_get_codec_id(ast_format_h264)) {
- return AST_FORMAT_H264;
- } else if (codec->id == ast_format_get_codec_id(ast_format_mp4)) {
- return AST_FORMAT_MP4;
- } else if (codec->id == ast_format_get_codec_id(ast_format_vp8)) {
- return AST_FORMAT_VP8;
- } else if (codec->id == ast_format_get_codec_id(ast_format_jpeg)) {
- return AST_FORMAT_JPEG;
- } else if (codec->id == ast_format_get_codec_id(ast_format_png)) {
- return AST_FORMAT_PNG;
- } else if (codec->id == ast_format_get_codec_id(ast_format_t140_red)) {
- return AST_FORMAT_T140_RED;
- } else if (codec->id == ast_format_get_codec_id(ast_format_t140)) {
- return AST_FORMAT_T140;
- }
- return 0;
- }
- struct ast_format *ast_format_compatibility_bitfield2format(uint64_t bitfield)
- {
- switch (bitfield) {
- /*! G.723.1 compression */
- case AST_FORMAT_G723:
- return ast_format_g723;
- /*! GSM compression */
- case AST_FORMAT_GSM:
- return ast_format_gsm;
- /*! Raw mu-law data (G.711) */
- case AST_FORMAT_ULAW:
- return ast_format_ulaw;
- /*! Raw A-law data (G.711) */
- case AST_FORMAT_ALAW:
- return ast_format_alaw;
- /*! ADPCM (G.726, 32kbps, AAL2 codeword packing) */
- case AST_FORMAT_G726_AAL2:
- return ast_format_g726_aal2;
- /*! ADPCM (IMA) */
- case AST_FORMAT_ADPCM:
- return ast_format_adpcm;
- /*! Raw 16-bit Signed Linear (8000 Hz) PCM */
- case AST_FORMAT_SLIN:
- return ast_format_slin;
- /*! LPC10, 180 samples/frame */
- case AST_FORMAT_LPC10:
- return ast_format_lpc10;
- /*! G.729A audio */
- case AST_FORMAT_G729:
- return ast_format_g729;
- /*! SpeeX Free Compression */
- case AST_FORMAT_SPEEX:
- return ast_format_speex;
- /*! iLBC Free Compression */
- case AST_FORMAT_ILBC:
- return ast_format_ilbc;
- /*! ADPCM (G.726, 32kbps, RFC3551 codeword packing) */
- case AST_FORMAT_G726:
- return ast_format_g726;
- /*! G.722 */
- case AST_FORMAT_G722:
- return ast_format_g722;
- /*! G.722.1 (also known as Siren7, 32kbps assumed) */
- case AST_FORMAT_SIREN7:
- return ast_format_siren7;
- /*! G.722.1 Annex C (also known as Siren14, 48kbps assumed) */
- case AST_FORMAT_SIREN14:
- return ast_format_siren14;
- /*! Raw 16-bit Signed Linear (16000 Hz) PCM */
- case AST_FORMAT_SLIN16:
- return ast_format_slin16;
- /*! G.719 (64 kbps assumed) */
- case AST_FORMAT_G719:
- return ast_format_g719;
- /*! SpeeX Wideband (16kHz) Free Compression */
- case AST_FORMAT_SPEEX16:
- return ast_format_speex16;
- /*! Opus audio (8kHz, 16kHz, 24kHz, 48Khz) */
- case AST_FORMAT_OPUS:
- return ast_format_opus;
- /*! Raw mu-law data (G.711) */
- case AST_FORMAT_TESTLAW:
- return ast_format_testlaw;
- /*! H.261 Video */
- case AST_FORMAT_H261:
- return ast_format_h261;
- /*! H.263 Video */
- case AST_FORMAT_H263:
- return ast_format_h263;
- /*! H.263+ Video */
- case AST_FORMAT_H263P:
- return ast_format_h263p;
- /*! H.264 Video */
- case AST_FORMAT_H264:
- return ast_format_h264;
- /*! MPEG4 Video */
- case AST_FORMAT_MP4:
- return ast_format_mp4;
- /*! VP8 Video */
- case AST_FORMAT_VP8:
- return ast_format_vp8;
- /*! JPEG Images */
- case AST_FORMAT_JPEG:
- return ast_format_jpeg;
- /*! PNG Images */
- case AST_FORMAT_PNG:
- return ast_format_png;
- /*! T.140 RED Text format RFC 4103 */
- case AST_FORMAT_T140_RED:
- return ast_format_t140_red;
- /*! T.140 Text format - ITU T.140, RFC 4103 */
- case AST_FORMAT_T140:
- return ast_format_t140;
- }
- return NULL;
- }
|