From c8f0e88b205208da0e74f9345d4c4eb6d725774b Mon Sep 17 00:00:00 2001 From: Martin Storsjö Date: Wed, 30 Nov 2011 18:05:06 +0200 Subject: rtpdec: Templatize the code for different g726 bitrate variants MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Martin Storsjö --- libavformat/rtpdec_g726.c | 100 +++++++++++----------------------------------- 1 file changed, 23 insertions(+), 77 deletions(-) (limited to 'libavformat/rtpdec_g726.c') diff --git a/libavformat/rtpdec_g726.c b/libavformat/rtpdec_g726.c index 0b7b0f0f94..5735c2cba6 100644 --- a/libavformat/rtpdec_g726.c +++ b/libavformat/rtpdec_g726.c @@ -21,82 +21,28 @@ #include "avformat.h" #include "rtpdec_formats.h" -static int g726_16_init(AVFormatContext *s, int st_index, PayloadContext *data) -{ - AVStream *stream = s->streams[st_index]; - AVCodecContext *codec = stream->codec; - - codec->bit_rate = 16000; - if (codec->sample_rate) - codec->bits_per_coded_sample = - av_clip((codec->bit_rate + codec->sample_rate/2) / codec->sample_rate, 2, 5); - - return 0; +#define RTP_G726_HANDLER(bitrate) \ +static int g726_ ## bitrate ##_init(AVFormatContext *s, int st_index, PayloadContext *data) \ +{ \ + AVStream *stream = s->streams[st_index]; \ + AVCodecContext *codec = stream->codec; \ +\ + codec->bit_rate = bitrate*1000; \ + if (codec->sample_rate) \ + codec->bits_per_coded_sample = \ + av_clip((codec->bit_rate + codec->sample_rate/2) / codec->sample_rate, 2, 5); \ +\ + return 0; \ +} \ +\ +RTPDynamicProtocolHandler ff_g726_ ## bitrate ## _dynamic_handler = { \ + .enc_name = "G726-" #bitrate, \ + .codec_type = AVMEDIA_TYPE_AUDIO, \ + .codec_id = CODEC_ID_ADPCM_G726, \ + .init = g726_ ## bitrate ## _init, \ } -static int g726_24_init(AVFormatContext *s, int st_index, PayloadContext *data) -{ - AVStream *stream = s->streams[st_index]; - AVCodecContext *codec = stream->codec; - - codec->bit_rate = 24000; - if (codec->sample_rate) - codec->bits_per_coded_sample = - av_clip((codec->bit_rate + codec->sample_rate/2) / codec->sample_rate, 2, 5); - - return 0; -} - -static int g726_32_init(AVFormatContext *s, int st_index, PayloadContext *data) -{ - AVStream *stream = s->streams[st_index]; - AVCodecContext *codec = stream->codec; - - codec->bit_rate = 32000; - if (codec->sample_rate) - codec->bits_per_coded_sample = - av_clip((codec->bit_rate + codec->sample_rate/2) / codec->sample_rate, 2, 5); - - return 0; -} - -static int g726_40_init(AVFormatContext *s, int st_index, PayloadContext *data) -{ - AVStream *stream = s->streams[st_index]; - AVCodecContext *codec = stream->codec; - - codec->bit_rate = 40000; - if (codec->sample_rate) - codec->bits_per_coded_sample = - av_clip((codec->bit_rate + codec->sample_rate/2) / codec->sample_rate, 2, 5); - - return 0; -} - -RTPDynamicProtocolHandler ff_g726_16_dynamic_handler = { - .enc_name = "G726-16", - .codec_type = AVMEDIA_TYPE_AUDIO, - .codec_id = CODEC_ID_ADPCM_G726, - .init = g726_16_init, -}; - -RTPDynamicProtocolHandler ff_g726_24_dynamic_handler = { - .enc_name = "G726-24", - .codec_type = AVMEDIA_TYPE_AUDIO, - .codec_id = CODEC_ID_ADPCM_G726, - .init = g726_24_init, -}; - -RTPDynamicProtocolHandler ff_g726_32_dynamic_handler = { - .enc_name = "G726-32", - .codec_type = AVMEDIA_TYPE_AUDIO, - .codec_id = CODEC_ID_ADPCM_G726, - .init = g726_32_init, -}; - -RTPDynamicProtocolHandler ff_g726_40_dynamic_handler = { - .enc_name = "G726-40", - .codec_type = AVMEDIA_TYPE_AUDIO, - .codec_id = CODEC_ID_ADPCM_G726, - .init = g726_40_init, -}; +RTP_G726_HANDLER(16); +RTP_G726_HANDLER(24); +RTP_G726_HANDLER(32); +RTP_G726_HANDLER(40); -- cgit v1.2.3