| 
																	
																	
																		
																	
																	
																 | 
																@@ -38,6 +38,7 @@ | 
															
														
														
													
														
															
																 | 
																 | 
																#include "libavutil/common.h" | 
																 | 
																 | 
																#include "libavutil/common.h" | 
															
														
														
													
														
															
																 | 
																 | 
																#include "libavutil/float_dsp.h" | 
																 | 
																 | 
																#include "libavutil/float_dsp.h" | 
															
														
														
													
														
															
																 | 
																 | 
																#include "libavutil/mathematics.h" | 
																 | 
																 | 
																#include "libavutil/mathematics.h" | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																#include "libavutil/thread.h" | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																#include "audio_frame_queue.h" | 
																 | 
																 | 
																#include "audio_frame_queue.h" | 
															
														
														
													
														
															
																 | 
																 | 
																#include "avcodec.h" | 
																 | 
																 | 
																#include "avcodec.h" | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																	
																	
																		
																	
																	
																 | 
																@@ -147,10 +148,29 @@ static av_cold int encode_end(AVCodecContext *avctx) | 
															
														
														
													
														
															
																 | 
																 | 
																    return 0; | 
																 | 
																 | 
																    return 0; | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																static av_cold void nellymoser_init_static(void) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																{ | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    /* faster way of doing | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    for (int i = 0; i < POW_TABLE_SIZE; i++) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																       pow_table[i] = 2^(-i / 2048.0 - 3.0 + POW_TABLE_OFFSET); */ | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    pow_table[0] = 1; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    pow_table[1024] = M_SQRT1_2; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    for (int i = 1; i < 513; i++) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        double tmp = exp2(-i / 2048.0); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        pow_table[i] = tmp; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        pow_table[1024-i] = M_SQRT1_2 / tmp; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        pow_table[1024+i] = tmp * M_SQRT1_2; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        pow_table[2048-i] = 0.5 / tmp; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    } | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    /* Generate overlap window */ | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    ff_init_ff_sine_windows(7); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																static av_cold int encode_init(AVCodecContext *avctx) | 
																 | 
																 | 
																static av_cold int encode_init(AVCodecContext *avctx) | 
															
														
														
													
														
															
																 | 
																 | 
																{ | 
																 | 
																 | 
																{ | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    static AVOnce init_static_once = AV_ONCE_INIT; | 
															
														
														
													
														
															
																 | 
																 | 
																    NellyMoserEncodeContext *s = avctx->priv_data; | 
																 | 
																 | 
																    NellyMoserEncodeContext *s = avctx->priv_data; | 
															
														
														
													
														
															
																 | 
																 | 
																    int i, ret; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    int ret; | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																    if (avctx->channels != 1) { | 
																 | 
																 | 
																    if (avctx->channels != 1) { | 
															
														
														
													
														
															
																 | 
																 | 
																        av_log(avctx, AV_LOG_ERROR, "Nellymoser supports only 1 channel\n"); | 
																 | 
																 | 
																        av_log(avctx, AV_LOG_ERROR, "Nellymoser supports only 1 channel\n"); | 
															
														
														
													
												
													
														
															
																| 
																	
																	
																	
																		
																	
																 | 
																@@ -175,21 +195,6 @@ static av_cold int encode_init(AVCodecContext *avctx) | 
															
														
														
													
														
															
																 | 
																 | 
																    if (!s->fdsp) | 
																 | 
																 | 
																    if (!s->fdsp) | 
															
														
														
													
														
															
																 | 
																 | 
																        return AVERROR(ENOMEM); | 
																 | 
																 | 
																        return AVERROR(ENOMEM); | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																    /* Generate overlap window */ | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    ff_init_ff_sine_windows(7); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    /* faster way of doing | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    for (i = 0; i < POW_TABLE_SIZE; i++) | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																       pow_table[i] = 2^(-i / 2048.0 - 3.0 + POW_TABLE_OFFSET); */ | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    pow_table[0] = 1; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    pow_table[1024] = M_SQRT1_2; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    for (i = 1; i < 513; i++) { | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        double tmp = exp2(-i / 2048.0); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        pow_table[i] = tmp; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        pow_table[1024-i] = M_SQRT1_2 / tmp; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        pow_table[1024+i] = tmp * M_SQRT1_2; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        pow_table[2048-i] = 0.5 / tmp; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    } | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    if (s->avctx->trellis) { | 
																 | 
																 | 
																    if (s->avctx->trellis) { | 
															
														
														
													
														
															
																 | 
																 | 
																        s->opt  = av_malloc(NELLY_BANDS * OPT_SIZE * sizeof(float  )); | 
																 | 
																 | 
																        s->opt  = av_malloc(NELLY_BANDS * OPT_SIZE * sizeof(float  )); | 
															
														
														
													
														
															
																 | 
																 | 
																        s->path = av_malloc(NELLY_BANDS * OPT_SIZE * sizeof(uint8_t)); | 
																 | 
																 | 
																        s->path = av_malloc(NELLY_BANDS * OPT_SIZE * sizeof(uint8_t)); | 
															
														
														
													
												
													
														
															
																| 
																	
																	
																	
																		
																	
																 | 
																@@ -197,6 +202,8 @@ static av_cold int encode_init(AVCodecContext *avctx) | 
															
														
														
													
														
															
																 | 
																 | 
																            return AVERROR(ENOMEM); | 
																 | 
																 | 
																            return AVERROR(ENOMEM); | 
															
														
														
													
														
															
																 | 
																 | 
																    } | 
																 | 
																 | 
																    } | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    ff_thread_once(&init_static_once, nellymoser_init_static); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																    return 0; | 
																 | 
																 | 
																    return 0; | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																	
																	
																		
																	
																	
																 | 
																@@ -424,5 +431,5 @@ AVCodec ff_nellymoser_encoder = { | 
															
														
														
													
														
															
																 | 
																 | 
																    .capabilities   = AV_CODEC_CAP_SMALL_LAST_FRAME | AV_CODEC_CAP_DELAY, | 
																 | 
																 | 
																    .capabilities   = AV_CODEC_CAP_SMALL_LAST_FRAME | AV_CODEC_CAP_DELAY, | 
															
														
														
													
														
															
																 | 
																 | 
																    .sample_fmts    = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_FLT, | 
																 | 
																 | 
																    .sample_fmts    = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_FLT, | 
															
														
														
													
														
															
																 | 
																 | 
																                                                     AV_SAMPLE_FMT_NONE }, | 
																 | 
																 | 
																                                                     AV_SAMPLE_FMT_NONE }, | 
															
														
														
													
														
															
																 | 
																 | 
																    .caps_internal  = FF_CODEC_CAP_INIT_CLEANUP, | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    .caps_internal  = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, | 
															
														
														
													
														
															
																 | 
																 | 
																}; | 
																 | 
																 | 
																}; |