@ -73,6 +73,8 @@ static const char *avc_encoder_init(encoder_t *enc, const str *);
static int avc_encoder_input ( encoder_t * enc , AVFrame * * frame ) ;
static void avc_encoder_close ( encoder_t * enc ) ;
static const char * g726_encoder_init ( encoder_t * enc , const str * ) ;
static int amr_decoder_input ( decoder_t * dec , const str * data , GQueue * out ) ;
static void amr_encoder_got_packet ( encoder_t * enc ) ;
static int ilbc_decoder_input ( decoder_t * dec , const str * data , GQueue * out ) ;
@ -243,6 +245,15 @@ static const codec_type_t codec_type_avcodec = {
. encoder_input = avc_encoder_input ,
. encoder_close = avc_encoder_close ,
} ;
static const codec_type_t codec_type_g726 = {
. def_init = avc_def_init ,
. decoder_init = avc_decoder_init ,
. decoder_input = avc_decoder_input ,
. decoder_close = avc_decoder_close ,
. encoder_init = g726_encoder_init ,
. encoder_input = avc_encoder_input ,
. encoder_close = avc_encoder_close ,
} ;
static const codec_type_t codec_type_libopus = {
. decoder_init = libopus_decoder_init ,
. decoder_input = libopus_decoder_input ,
@ -773,94 +784,102 @@ static struct codec_def_s __codec_defs[] = {
. format_cmp = format_cmp_ignore ,
. codec_type = & codec_type_cn ,
} ,
{
. rtpname = " G726-16 " ,
. avcodec_id = AV_CODEC_ID_ADPCM_G726 ,
. default_clockrate = 8000 ,
. default_channels = 1 ,
. default_ptime = 20 ,
. minimum_ptime = 20 ,
. default_bitrate = 16000 ,
. packetizer = packetizer_passthrough ,
. media_type = MT_AUDIO ,
. codec_type = & codec_type_avcodec ,
. dtx_methods = {
[ DTX_SILENCE ] = & dtx_method_silence ,
[ DTX_CN ] = & dtx_method_cn ,
} ,
} ,
{
. rtpname = " G726-24 " ,
. avcodec_id = AV_CODEC_ID_ADPCM_G726 ,
. default_clockrate = 8000 ,
. default_channels = 1 ,
. default_ptime = 20 ,
. minimum_ptime = 20 ,
. default_bitrate = 24000 ,
. packetizer = packetizer_passthrough ,
. media_type = MT_AUDIO ,
. codec_type = & codec_type_avcodec ,
. dtx_methods = {
[ DTX_SILENCE ] = & dtx_method_silence ,
[ DTX_CN ] = & dtx_method_cn ,
} ,
} ,
{
. rtpname = " G726-32 " ,
. avcodec_id = AV_CODEC_ID_ADPCM_G726 ,
. default_clockrate = 8000 ,
. default_channels = 1 ,
. default_ptime = 20 ,
. minimum_ptime = 20 ,
. default_bitrate = 32000 ,
. packetizer = packetizer_passthrough ,
. media_type = MT_AUDIO ,
. codec_type = & codec_type_avcodec ,
. dtx_methods = {
[ DTX_SILENCE ] = & dtx_method_silence ,
[ DTX_CN ] = & dtx_method_cn ,
} ,
} ,
{
. rtpname = " G726-40 " ,
. avcodec_id = AV_CODEC_ID_ADPCM_G726 ,
. default_clockrate = 8000 ,
. default_channels = 1 ,
. default_ptime = 20 ,
. minimum_ptime = 20 ,
. default_bitrate = 40000 ,
. packetizer = packetizer_passthrough ,
. media_type = MT_AUDIO ,
. codec_type = & codec_type_avcodec ,
. dtx_methods = {
[ DTX_SILENCE ] = & dtx_method_silence ,
[ DTX_CN ] = & dtx_method_cn ,
} ,
} ,
{
. rtpname = " L16 " ,
. avcodec_id = AV_CODEC_ID_PCM_S16BE ,
. default_clockrate = 44100 ,
. default_channels = 1 ,
. default_ptime = 20 ,
. minimum_ptime = 20 ,
. bits_per_sample = 16 ,
. packetizer = packetizer_passthrough ,
. media_type = MT_AUDIO ,
. codec_type = & codec_type_avcodec ,
} ,
{
. rtpname = " X-L16 " ,
. avcodec_id = AV_CODEC_ID_PCM_S16LE ,
. default_clockrate = 44100 ,
. default_channels = 1 ,
. default_ptime = 20 ,
. minimum_ptime = 20 ,
. bits_per_sample = 16 ,
. packetizer = packetizer_passthrough ,
. media_type = MT_AUDIO ,
. codec_type = & codec_type_avcodec ,
} ,
{
. rtpname = " G726-16 " ,
. avcodec_id = AV_CODEC_ID_ADPCM_G726 ,
. default_clockrate = 8000 ,
. default_channels = 1 ,
. default_ptime = 20 ,
. minimum_ptime = 20 ,
. default_bitrate = 16000 ,
. packetizer = packetizer_samplestream ,
. bits_per_sample = 2 ,
. media_type = MT_AUDIO ,
. codec_type = & codec_type_g726 ,
. dtx_methods = {
[ DTX_SILENCE ] = & dtx_method_silence ,
[ DTX_CN ] = & dtx_method_cn ,
} ,
. fixed_sizes = 1 ,
} ,
{
. rtpname = " G726-24 " ,
. avcodec_id = AV_CODEC_ID_ADPCM_G726 ,
. default_clockrate = 8000 ,
. default_channels = 1 ,
. default_ptime = 20 ,
. minimum_ptime = 20 ,
. default_bitrate = 24000 ,
. packetizer = packetizer_samplestream ,
. bits_per_sample = 3 ,
. media_type = MT_AUDIO ,
. codec_type = & codec_type_g726 ,
. dtx_methods = {
[ DTX_SILENCE ] = & dtx_method_silence ,
[ DTX_CN ] = & dtx_method_cn ,
} ,
. fixed_sizes = 1 ,
} ,
{
. rtpname = " G726-32 " ,
. avcodec_id = AV_CODEC_ID_ADPCM_G726 ,
. default_clockrate = 8000 ,
. default_channels = 1 ,
. default_ptime = 20 ,
. minimum_ptime = 20 ,
. default_bitrate = 32000 ,
. packetizer = packetizer_samplestream ,
. bits_per_sample = 4 ,
. media_type = MT_AUDIO ,
. codec_type = & codec_type_g726 ,
. dtx_methods = {
[ DTX_SILENCE ] = & dtx_method_silence ,
[ DTX_CN ] = & dtx_method_cn ,
} ,
. fixed_sizes = 1 ,
} ,
{
. rtpname = " G726-40 " ,
. avcodec_id = AV_CODEC_ID_ADPCM_G726 ,
. default_clockrate = 8000 ,
. default_channels = 1 ,
. default_ptime = 20 ,
. minimum_ptime = 20 ,
. default_bitrate = 40000 ,
. packetizer = packetizer_samplestream ,
. bits_per_sample = 5 ,
. media_type = MT_AUDIO ,
. codec_type = & codec_type_g726 ,
. dtx_methods = {
[ DTX_SILENCE ] = & dtx_method_silence ,
[ DTX_CN ] = & dtx_method_cn ,
} ,
. fixed_sizes = 1 ,
} ,
{
. rtpname = " L16 " ,
. avcodec_id = AV_CODEC_ID_PCM_S16BE ,
. default_clockrate = 44100 ,
. default_channels = 1 ,
. default_ptime = 20 ,
. minimum_ptime = 20 ,
. bits_per_sample = 16 ,
. packetizer = packetizer_passthrough ,
. media_type = MT_AUDIO ,
. codec_type = & codec_type_avcodec ,
} ,
{
. rtpname = " X-L16 " ,
. avcodec_id = AV_CODEC_ID_PCM_S16LE ,
. default_clockrate = 44100 ,
. default_channels = 1 ,
. default_ptime = 20 ,
. minimum_ptime = 20 ,
. bits_per_sample = 16 ,
. packetizer = packetizer_passthrough ,
. media_type = MT_AUDIO ,
. codec_type = & codec_type_avcodec ,
} ,
// for file reading and writing
{
. rtpname = " PCM-U8 " ,
@ -1891,6 +1910,16 @@ static const char *avc_encoder_init(encoder_t *enc, const str *extra_opts) {
return NULL ;
}
static const char * g726_encoder_init ( encoder_t * enc , const str * extra_opts ) {
const char * err = avc_encoder_init ( enc , extra_opts ) ;
if ( err )
return err ;
enc - > samples_per_packet = enc - > ptime * 8 ;
return NULL ;
}
int encoder_config ( encoder_t * enc , codec_def_t * def , int bitrate , int ptime ,
const format_t * requested_format , format_t * actual_format )
{