diff --git a/lib/codeclib.c b/lib/codeclib.c index 3a8a022bc..d717ea69f 100644 --- a/lib/codeclib.c +++ b/lib/codeclib.c @@ -31,63 +31,261 @@ packetizer_f packetizer_samplestream; // flat stream of samples - -#define CODEC_DEF_FULL(ref, codec_id, mult, name, clockrate, channels, bitrate, ptime, pizer, bps) { \ - .rtpname = #ref, \ - .avcodec_id = codec_id, \ - .clockrate_mult = mult, \ - .avcodec_name = #name, \ - .default_clockrate = clockrate, \ - .default_channels = channels, \ - .default_bitrate = bitrate, \ - .default_ptime = ptime, \ - .packetizer = packetizer_ ## pizer, \ - .bits_per_sample = bps, \ -} -#define CODEC_DEF_AVC(ref, id, mult, name, clockrate, channels, bitrate, ptime, pizer, bps) \ - CODEC_DEF_FULL(ref, AV_CODEC_ID_ ## id, mult, name, clockrate, channels, bitrate, ptime, pizer, bps) -#define CODEC_DEF_MULT_NAME(ref, id, mult, name, pizer, bps) CODEC_DEF_AVC(ref, id, mult, name, -1, -1, 0, 0, pizer, bps) -#define CODEC_DEF_MULT(ref, id, mult, pizer, bps) CODEC_DEF_MULT_NAME(ref, id, mult, NULL, pizer, bps) -#define CODEC_DEF_NAME(ref, id, name, pizer, bps) CODEC_DEF_MULT_NAME(ref, id, 1, name, pizer, bps) -#define CODEC_DEF(ref, id, pizer, bps) CODEC_DEF_MULT(ref, id, 1, pizer, bps) - -// _ENC macros provided for codecs not having defaults in the RTP RFC -#define CODEC_DEF_NAME_ENC(ref, id, name, clockrate, channels, bitrate, ptime, pizer, bps) \ - CODEC_DEF_MULT_NAME_ENC(ref, id, 1, name, clockrate, channels, bitrate, ptime, pizer, bps) -#define CODEC_DEF_MULT_ENC(ref, id, mult, clockrate, channels, bitrate, ptime, pizer, bps) \ - CODEC_DEF_MULT_NAME_ENC(ref, id, mult, NULL, clockrate, channels, bitrate, ptime, pizer, bps) -#define CODEC_DEF_ENC(ref, id, clockrate, channels, bitrate, ptime, pizer, bps) \ - CODEC_DEF_MULT_ENC(ref, id, 1, clockrate, channels, bitrate, ptime, pizer, bps) -#define CODEC_DEF_MULT_NAME_ENC(ref, id, mult, name, clockrate, channels, bitrate, ptime, pizer, bps) \ - CODEC_DEF_AVC(ref, id, mult, name, clockrate, channels, bitrate, ptime, pizer, bps) - -// not real audio codecs -#define CODEC_DEF_STUB(ref) CODEC_DEF_FULL(ref, -1, 1, ref, -1, -1, 0, 0, passthrough, 0) - static const struct codec_def_s codecs[] = { - CODEC_DEF(PCMA, PCM_ALAW, samplestream, 8), - CODEC_DEF(PCMU, PCM_MULAW, samplestream, 8), - CODEC_DEF(G723, G723_1, passthrough, 0), - CODEC_DEF_MULT(G722, ADPCM_G722, 2, samplestream, 8), - CODEC_DEF(QCELP, QCELP, passthrough, 0), - CODEC_DEF(G729, G729, passthrough, 0), - CODEC_DEF_ENC(speex, SPEEX, 16000, 1, 11000, 20, passthrough, 0), - CODEC_DEF(GSM, GSM, passthrough, 0), - CODEC_DEF(iLBC, ILBC, passthrough, 0), - CODEC_DEF_NAME_ENC(opus, OPUS, libopus, 48000, 2, 32000, 20, passthrough, 0), - CODEC_DEF_NAME(vorbis, VORBIS, libvorbis, passthrough, 0), - CODEC_DEF(ac3, AC3, passthrough, 0), - CODEC_DEF(eac3, EAC3, passthrough, 0), - CODEC_DEF(ATRAC3, ATRAC3, passthrough, 0), - CODEC_DEF(ATRAC-X, ATRAC3P, passthrough, 0), + { + .rtpname = "PCMA", + .avcodec_id = AV_CODEC_ID_PCM_ALAW, + .clockrate_mult = 1, + .avcodec_name = NULL, + .default_clockrate = 8000, + .default_channels = 1, + .default_bitrate = 0, + .default_ptime = 20, + .packetizer = packetizer_samplestream, + .bits_per_sample = 8, + }, + { + .rtpname = "PCMU", + .avcodec_id = AV_CODEC_ID_PCM_MULAW, + .clockrate_mult = 1, + .avcodec_name = NULL, + .default_clockrate = 8000, + .default_channels = 1, + .default_bitrate = 0, + .default_ptime = 20, + .packetizer = packetizer_samplestream, + .bits_per_sample = 8, + }, + { + .rtpname = "G723", + .avcodec_id = AV_CODEC_ID_G723_1, + .clockrate_mult = 1, + .avcodec_name = NULL, + .default_clockrate = 8000, + .default_channels = 1, + .default_bitrate = 0, + .default_ptime = 30, + .packetizer = packetizer_passthrough, + .bits_per_sample = 0, + }, + { + .rtpname = "G722", + .avcodec_id = AV_CODEC_ID_ADPCM_G722, + .clockrate_mult = 2, + .avcodec_name = NULL, + .default_clockrate = 8000, + .default_channels = 1, + .default_bitrate = 0, + .default_ptime = 20, + .packetizer = packetizer_samplestream, + .bits_per_sample = 8, + }, + { + .rtpname = "QCELP", + .avcodec_id = AV_CODEC_ID_QCELP, + .clockrate_mult = 1, + .avcodec_name = NULL, + .default_clockrate = -1, + .default_channels = -1, + .default_bitrate = 0, + .default_ptime = 20, + .packetizer = packetizer_passthrough, + .bits_per_sample = 0, + }, + { + .rtpname = "G729", + .avcodec_id = AV_CODEC_ID_G729, + .clockrate_mult = 1, + .avcodec_name = NULL, + .default_clockrate = 8000, + .default_channels = 1, + .default_bitrate = 0, + .default_ptime = 20, + .packetizer = packetizer_passthrough, + .bits_per_sample = 0, + }, + { + .rtpname = "speex", + .avcodec_id = AV_CODEC_ID_SPEEX, + .clockrate_mult = 1, + .avcodec_name = NULL, + .default_clockrate = 16000, + .default_channels = 1, + .default_bitrate = 11000, + .default_ptime = 20, + .packetizer = packetizer_passthrough, + .bits_per_sample = 0, + }, + { + .rtpname = "GSM", + .avcodec_id = AV_CODEC_ID_GSM, + .clockrate_mult = 1, + .avcodec_name = NULL, + .default_clockrate = 8000, + .default_channels = 1, + .default_bitrate = 0, + .default_ptime = 20, + .packetizer = packetizer_passthrough, + .bits_per_sample = 0, + }, + { + .rtpname = "iLBC", + .avcodec_id = AV_CODEC_ID_ILBC, + .clockrate_mult = 1, + .avcodec_name = NULL, + .default_clockrate = -1, + .default_channels = -1, + .default_bitrate = 0, + .default_ptime = 20, + .packetizer = packetizer_passthrough, + .bits_per_sample = 0, + }, + { + .rtpname = "opus", + .avcodec_id = AV_CODEC_ID_OPUS, + .clockrate_mult = 1, + .avcodec_name = "libopus", + .default_clockrate = 48000, + .default_channels = 2, + .default_bitrate = 32000, + .default_ptime = 20, + .packetizer = packetizer_passthrough, + .bits_per_sample = 0, + }, + { + .rtpname = "vorbis", + .avcodec_id = AV_CODEC_ID_VORBIS, + .clockrate_mult = 1, + .avcodec_name = "libvorbis", + .default_clockrate = -1, + .default_channels = -1, + .default_bitrate = 0, + .default_ptime = 20, + .packetizer = packetizer_passthrough, + .bits_per_sample = 0, + }, + { + .rtpname = "ac3", + .avcodec_id = AV_CODEC_ID_AC3, + .clockrate_mult = 1, + .avcodec_name = NULL, + .default_clockrate = -1, + .default_channels = -1, + .default_bitrate = 0, + .default_ptime = 20, + .packetizer = packetizer_passthrough, + .bits_per_sample = 0, + }, + { + .rtpname = "eac3", + .avcodec_id = AV_CODEC_ID_EAC3, + .clockrate_mult = 1, + .avcodec_name = NULL, + .default_clockrate = -1, + .default_channels = -1, + .default_bitrate = 0, + .default_ptime = 20, + .packetizer = packetizer_passthrough, + .bits_per_sample = 0, + }, + { + .rtpname = "ATRAC3", + .avcodec_id = AV_CODEC_ID_ATRAC3, + .clockrate_mult = 1, + .avcodec_name = NULL, + .default_clockrate = -1, + .default_channels = -1, + .default_bitrate = 0, + .default_ptime = 20, + .packetizer = packetizer_passthrough, + .bits_per_sample = 0, + }, + { + .rtpname = "ATRAC-X", + .avcodec_id = AV_CODEC_ID_ATRAC3P, + .clockrate_mult = 1, + .avcodec_name = NULL, + .default_clockrate = -1, + .default_channels = -1, + .default_bitrate = 0, + .default_ptime = 20, + .packetizer = packetizer_passthrough, + .bits_per_sample = 0, + }, #if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(57, 0, 0) - CODEC_DEF(EVRC, EVRC, passthrough, 0), - CODEC_DEF(EVRC0, EVRC, passthrough, 0), - CODEC_DEF(EVRC1, EVRC, passthrough, 0), + { + .rtpname = "EVRC", + .avcodec_id = AV_CODEC_ID_EVRC, + .clockrate_mult = 1, + .avcodec_name = NULL, + .default_clockrate = -1, + .default_channels = -1, + .default_bitrate = 0, + .default_ptime = 20, + .packetizer = packetizer_passthrough, + .bits_per_sample = 0, + }, + { + .rtpname = "EVRC0", + .avcodec_id = AV_CODEC_ID_EVRC, + .clockrate_mult = 1, + .avcodec_name = NULL, + .default_clockrate = 8000, + .default_channels = -1, + .default_bitrate = -1, + .default_ptime = 20, + .packetizer = packetizer_passthrough, + .bits_per_sample = 0, + }, + { + .rtpname = "EVRC1", + .avcodec_id = AV_CODEC_ID_EVRC, + .clockrate_mult = 1, + .avcodec_name = NULL, + .default_clockrate = 8000, + .default_channels = -1, + .default_bitrate = -1, + .default_ptime = 20, + .packetizer = packetizer_passthrough, + .bits_per_sample = 0, + }, #endif - CODEC_DEF_ENC(AMR, AMR_NB, 8000, 1, 6600, 20, passthrough, 0), - CODEC_DEF_ENC(AMR-WB, AMR_WB, 16000, 1, 14250, 20, passthrough, 0), - CODEC_DEF_STUB(telephone-event), + { + .rtpname = "AMR", + .avcodec_id = AV_CODEC_ID_AMR_NB, + .clockrate_mult = 1, + .avcodec_name = NULL, + .default_clockrate = 8000, + .default_channels = 1, + .default_bitrate = 6600, + .default_ptime = 20, + .packetizer = packetizer_passthrough, + .bits_per_sample = 0, + }, + { + .rtpname = "AMR-WB", + .avcodec_id = AV_CODEC_ID_AMR_NB, + .clockrate_mult = 1, + .avcodec_name = NULL, + .default_clockrate = 16000, + .default_channels = 1, + .default_bitrate = 14250, + .default_ptime = 20, + .packetizer = packetizer_passthrough, + .bits_per_sample = 0, + }, + { + .rtpname = "telephone-event", + .avcodec_id = -1, + .clockrate_mult = 1, + .avcodec_name = NULL, + .default_clockrate = -1, + .default_channels = -1, + .default_bitrate = -1, + .default_ptime = -1, + .packetizer = packetizer_passthrough, + .bits_per_sample = 0, + }, };