diff options
author | Martin Storsjö <martin@martin.st> | 2011-11-30 18:05:06 +0200 |
---|---|---|
committer | Martin Storsjö <martin@martin.st> | 2011-11-30 23:20:07 +0200 |
commit | c8f0e88b205208da0e74f9345d4c4eb6d725774b (patch) | |
tree | a3766b81d7c932ee4be39c3b6c429b9a85eae4dc | |
parent | bb8a6e03cc641035b3fd4dc7c8c77f2dc92b41d5 (diff) | |
download | ffmpeg-c8f0e88b205208da0e74f9345d4c4eb6d725774b.tar.gz |
rtpdec: Templatize the code for different g726 bitrate variants
Signed-off-by: Martin Storsjö <martin@martin.st>
-rw-r--r-- | libavformat/rtpdec_g726.c | 100 |
1 files changed, 23 insertions, 77 deletions
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); |