On Sat, 27 Oct 2012 23:34:17 +0300, Martin Storsjö <mar...@martin.st> wrote: > This isn't too useful as a normal codec, but can be used in > voip style applications. The decoder updates the noise > generator parameters when a packet is given to it for decoding, > but if called with an empty packet, it generates more noise > according to the last parameters. > > --- > References: > https://tools.ietf.org/html/rfc3389 > http://www.itu.int/rec/T-REC-G.711-200002-I!AppII/en > http://webrtc.googlecode.com/svn/trunk/webrtc/modules/audio_coding/codecs/cng/webrtc_cng.c > --- > configure | 1 + > libavcodec/Makefile | 2 + > libavcodec/allcodecs.c | 1 + > libavcodec/avcodec.h | 1 + > libavcodec/cngdec.c | 162 > +++++++++++++++++++++++++++++++++++++++++++++++ > libavcodec/cngenc.c | 116 +++++++++++++++++++++++++++++++++ > libavcodec/codec_desc.c | 7 ++ > libavcodec/version.h | 2 +- > 8 files changed, 291 insertions(+), 1 deletion(-) > create mode 100644 libavcodec/cngdec.c > create mode 100644 libavcodec/cngenc.c > > diff --git a/configure b/configure > index 81f945f..30c17a6 100755 > --- a/configure > +++ b/configure > @@ -1440,6 +1440,7 @@ atrac3_decoder_select="mdct" > binkaudio_dct_decoder_select="mdct rdft dct sinewin" > binkaudio_rdft_decoder_select="mdct rdft sinewin" > cavs_decoder_select="golomb mpegvideo" > +comfortnoise_encoder_select="lpc" > cook_decoder_select="mdct sinewin" > cscd_decoder_select="lzo" > cscd_decoder_suggest="zlib" > diff --git a/libavcodec/Makefile b/libavcodec/Makefile > index d8c853a..4d14aea 100644 > --- a/libavcodec/Makefile > +++ b/libavcodec/Makefile > @@ -129,6 +129,8 @@ OBJS-$(CONFIG_CLJR_DECODER) += cljr.o > OBJS-$(CONFIG_CLJR_ENCODER) += cljr.o > OBJS-$(CONFIG_CLLC_DECODER) += cllc.o > OBJS-$(CONFIG_COOK_DECODER) += cook.o > +OBJS-$(CONFIG_COMFORTNOISE_DECODER) += cngdec.o celp_filters.o > +OBJS-$(CONFIG_COMFORTNOISE_ENCODER) += cngenc.o > OBJS-$(CONFIG_CSCD_DECODER) += cscd.o > OBJS-$(CONFIG_CYUV_DECODER) += cyuv.o > OBJS-$(CONFIG_DCA_DECODER) += dcadec.o dca.o dcadsp.o \ > diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c > index b175fbb..e5fb351 100644 > --- a/libavcodec/allcodecs.c > +++ b/libavcodec/allcodecs.c > @@ -91,6 +91,7 @@ void avcodec_register_all(void) > REGISTER_DECODER (CINEPAK, cinepak); > REGISTER_ENCDEC (CLJR, cljr); > REGISTER_DECODER (CLLC, cllc); > + REGISTER_ENCDEC (COMFORTNOISE, comfortnoise); > REGISTER_DECODER (CSCD, cscd); > REGISTER_DECODER (CYUV, cyuv); > REGISTER_DECODER (DFA, dfa); > diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h > index c505a92..d6a4e4d 100644 > --- a/libavcodec/avcodec.h > +++ b/libavcodec/avcodec.h > @@ -406,6 +406,7 @@ enum AVCodecID { > AV_CODEC_ID_IAC, > AV_CODEC_ID_ILBC, > AV_CODEC_ID_OPUS, > + AV_CODEC_ID_COMFORT_NOISE, > > /* subtitle codecs */ > AV_CODEC_ID_FIRST_SUBTITLE = 0x17000, ///< A dummy ID pointing > at the start of subtitle codecs. > diff --git a/libavcodec/cngdec.c b/libavcodec/cngdec.c > new file mode 100644 > index 0000000..8e3abd2 > --- /dev/null > +++ b/libavcodec/cngdec.c > + > +AVCodec ff_comfortnoise_decoder = { > + .name = "comfortnoise", > + .type = AVMEDIA_TYPE_AUDIO, > + .id = AV_CODEC_ID_COMFORT_NOISE, > + .priv_data_size = sizeof(CNGContext), > + .init = cng_decode_init, > + .decode = cng_decode_frame, > + .close = cng_decode_close, > + .long_name = NULL_IF_CONFIG_SMALL("RFC 3389 comfort noise > generator"), > + .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16, > + AV_SAMPLE_FMT_NONE }, > + .capabilities = CODEC_CAP_DELAY,
CODEC_CAP_DR1? -- Anton Khirnov _______________________________________________ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel