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

Reply via email to