diff --git a/libavformat/rtpdec_g726.c b/libavformat/rtpdec_g726.c index 0b7b0f0f94f8f..5735c2cba6535 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);