X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Frtpdec_g726.c;h=20450d8dfb6d57cac2b1e64c56d8cf7385a4ce96;hb=a8cedbebf163ad376abc4703b3156c44d0858404;hp=cde832b21ab5f8299aabc6f36db1f69fd75e2dda;hpb=5c15b78e4a47c46de03d5e7291ed19a717f36885;p=ffmpeg diff --git a/libavformat/rtpdec_g726.c b/libavformat/rtpdec_g726.c index cde832b21ab..20450d8dfb6 100644 --- a/libavformat/rtpdec_g726.c +++ b/libavformat/rtpdec_g726.c @@ -21,74 +21,26 @@ #include "avformat.h" #include "rtpdec_formats.h" -static int g726_16_parse_sdp_line(AVFormatContext *s, int st_index, - PayloadContext *data, const char *line) -{ - AVStream *stream = s->streams[st_index]; - AVCodecContext *codec = stream->codec; - - codec->bit_rate = 16000; - - 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->bits_per_coded_sample = bitrate/8; \ + codec->bit_rate = codec->bits_per_coded_sample * codec->sample_rate; \ +\ + 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_parse_sdp_line(AVFormatContext *s, int st_index, - PayloadContext *data, const char *line) -{ - AVStream *stream = s->streams[st_index]; - AVCodecContext *codec = stream->codec; - - codec->bit_rate = 24000; - - return 0; -} - -static int g726_32_parse_sdp_line(AVFormatContext *s, int st_index, - PayloadContext *data, const char *line) -{ - AVStream *stream = s->streams[st_index]; - AVCodecContext *codec = stream->codec; - - codec->bit_rate = 32000; - - return 0; -} - -static int g726_40_parse_sdp_line(AVFormatContext *s, int st_index, - PayloadContext *data, const char *line) -{ - AVStream *stream = s->streams[st_index]; - AVCodecContext *codec = stream->codec; - - codec->bit_rate = 40000; - - return 0; -} - -RTPDynamicProtocolHandler ff_g726_16_dynamic_handler = { - .enc_name = "G726-16", - .codec_type = AVMEDIA_TYPE_AUDIO, - .codec_id = CODEC_ID_ADPCM_G726, - .parse_sdp_a_line = g726_16_parse_sdp_line, -}; - -RTPDynamicProtocolHandler ff_g726_24_dynamic_handler = { - .enc_name = "G726-24", - .codec_type = AVMEDIA_TYPE_AUDIO, - .codec_id = CODEC_ID_ADPCM_G726, - .parse_sdp_a_line = g726_24_parse_sdp_line, -}; - -RTPDynamicProtocolHandler ff_g726_32_dynamic_handler = { - .enc_name = "G726-32", - .codec_type = AVMEDIA_TYPE_AUDIO, - .codec_id = CODEC_ID_ADPCM_G726, - .parse_sdp_a_line = g726_32_parse_sdp_line, -}; - -RTPDynamicProtocolHandler ff_g726_40_dynamic_handler = { - .enc_name = "G726-40", - .codec_type = AVMEDIA_TYPE_AUDIO, - .codec_id = CODEC_ID_ADPCM_G726, - .parse_sdp_a_line = g726_40_parse_sdp_line, -}; +RTP_G726_HANDLER(16); +RTP_G726_HANDLER(24); +RTP_G726_HANDLER(32); +RTP_G726_HANDLER(40);