diff --git a/app/src/main/cpp/audio_player.cpp b/app/src/main/cpp/audio_player.cpp index fa54b26..7af1b48 100644 --- a/app/src/main/cpp/audio_player.cpp +++ b/app/src/main/cpp/audio_player.cpp @@ -286,10 +286,9 @@ AUDIO_PLAYER_FUNC(void, play, jstring input_jstr, jstring filter_jstr) { jmethodID fft_method = env->GetMethodID(player_class, "fftCallbackFromJNI", "([S)V"); filter_sys_t *fft_filter = static_cast(malloc(sizeof(filter_sys_t))); - open_visualizer(fft_filter); + init_visualizer(fft_filter); auto *block = static_cast(malloc(sizeof(block_t))); block->i_nb_samples = 0; -// block->fft_callback.callback = fft_callback; int16_t *output = static_cast(malloc(FFT_BUFFER_SIZE * sizeof(int16_t))); //read audio frame @@ -317,10 +316,8 @@ AUDIO_PLAYER_FUNC(void, play, jstring input_jstr, jstring filter_jstr) { auto *data = static_cast(malloc(frame->nb_samples * sizeof(uint8_t))); block->p_buffer = data; block->i_nb_samples = static_cast(frame->nb_samples); - LOGE(TAG, "frame->nb_samples=%d", frame->nb_samples); } if (block->i_nb_samples == frame->nb_samples) { - LOGE(TAG, "start frame->nb_samples=%d", frame->nb_samples); memcpy(block->p_buffer, frame->data[0], static_cast(frame->nb_samples)); fft_once(fft_filter, block, output); fft_callback(env, thiz, fft_method, output); @@ -373,6 +370,7 @@ end: env->CallVoidMethod(thiz, releaseMethod); filter_again = 0; filter_release = 0; + release_visualizer(fft_filter); LOGE(TAG, "audio release..."); } @@ -387,7 +385,6 @@ AUDIO_PLAYER_FUNC(void, release) { } void fft_callback(JNIEnv *jniEnv, jobject thiz, jmethodID fft_method, int16_t * arg) { - LOGE(TAG, "arg[100]=%d,arg[101]=%d,arg[102]=%d", arg[100], arg[101], arg[102]); jshortArray dataArray = jniEnv->NewShortArray(256); jniEnv->SetShortArrayRegion(dataArray, 0, 256, arg); jniEnv->CallVoidMethod(thiz, fft_method, dataArray); diff --git a/app/src/main/cpp/visualizer/execute_fft.c b/app/src/main/cpp/visualizer/execute_fft.c index 42b9f5d..a96c8ca 100644 --- a/app/src/main/cpp/visualizer/execute_fft.c +++ b/app/src/main/cpp/visualizer/execute_fft.c @@ -13,7 +13,7 @@ #define ROTATION_INCREMENT .1f #define BAR_DECREMENT .075f -/*static*/ int open_visualizer(filter_sys_t *p_sys) +int open_visualizer(filter_sys_t *p_sys) { if (p_sys == NULL) return VLC_ENOMEM; @@ -33,29 +33,30 @@ window_get_param(&p_sys->wind_param); /* Create the FIFO for the audio data. */ -// vlc_queue_t *queue = vlc_queue_init(5); -// p_sys->queue = *queue; -// p_sys->dead = false; + vlc_queue_t *queue = vlc_queue_init(5); + p_sys->queue = *queue; + p_sys->dead = false; -// pthread_create (&p_sys->thread, NULL, fft_thread, p_sys);//TODO + pthread_create (&p_sys->thread, NULL, fft_thread, p_sys);//TODO return VLC_SUCCESS; } -/*static*/ block_t *filter_audio(filter_sys_t *p_sys, void *p_in_buf) +block_t *filter_audio(filter_sys_t *p_sys, void *p_in_buf) { return vlc_queue_push(&p_sys->queue, p_in_buf); } -/*static*/ void close_visualizer(filter_sys_t *p_filter) +void close_visualizer(filter_sys_t *p_filter) { filter_sys_t *p_sys = p_filter; - /* Terminate the thread. */ vlc_queue_free(&p_sys->queue); pthread_join(p_sys->thread, NULL); free(p_sys->p_prev_s16_buff); + free(&p_sys->wind_param); + free(p_sys); } static void *fft_thread(void *p_data) @@ -179,6 +180,34 @@ release: return NULL; } + +int init_visualizer(filter_sys_t *p_sys) +{ + if (p_sys == NULL) + return -1; + + /* Create the object for the thread */ + p_sys->i_channels = 1; + p_sys->i_prev_nb_samples = 0; + p_sys->p_prev_s16_buff = NULL; + + window_param *w_param = (window_param*) malloc(sizeof(window_param)); + p_sys->wind_param = *w_param; + + /* Fetch the FFT window parameters */ + window_get_param(&p_sys->wind_param); + + return 0; +} + +void release_visualizer(filter_sys_t *p_filter) +{ + filter_sys_t *p_sys = p_filter; + free(p_sys->p_prev_s16_buff); + free(&p_sys->wind_param); + free(p_sys); +} + void fft_once(void *p_data, block_t *block, int16_t *output) { filter_sys_t *p_sys = (filter_sys_t*)p_data; diff --git a/app/src/main/cpp/visualizer/execute_fft.h b/app/src/main/cpp/visualizer/execute_fft.h index fd6b707..bc63825 100644 --- a/app/src/main/cpp/visualizer/execute_fft.h +++ b/app/src/main/cpp/visualizer/execute_fft.h @@ -39,12 +39,16 @@ typedef struct static void *fft_thread(void *); -/*static*/ int open_visualizer(filter_sys_t *p_sys); +int open_visualizer(filter_sys_t *p_sys); -/*static*/ block_t *filter_audio(filter_sys_t *p_sys, void *p_in_buf); +block_t *filter_audio(filter_sys_t *p_sys, void *p_in_buf); -/*static*/ void close_visualizer(filter_sys_t *p_filter); +void close_visualizer(filter_sys_t *p_filter); void fft_once(void *p_data, block_t *block, int16_t *output); +int init_visualizer(filter_sys_t *p_sys); + +void release_visualizer(filter_sys_t *p_sys); + #endif //PLAYER_CORE_RUN_FFT_H