Skip to content

Commit

Permalink
Merge pull request #46 from lincollincol/multithread_fix
Browse files Browse the repository at this point in the history
Fixed multithreading crash
  • Loading branch information
lincollincol authored Aug 5, 2022
2 parents 5d05704 + 182e2b6 commit 2fd3566
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 9 deletions.
14 changes: 9 additions & 5 deletions app/src/main/cpp/amplituda-native-lib.cpp
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
#include <jni.h>
//#include <android/log.h>
#include <string>
#include <vector>
#include "error_code.h"
#include "compress_type.h"
//#include <android/log.h>

extern "C" {
#include "libavutil/timestamp.h"
Expand Down Expand Up @@ -260,8 +260,8 @@ Java_linc_com_amplituda_Amplituda_amplitudesFromAudioJNI(
int compress_type = (int) jcompress_type;

// meta and params
int current_frame_idx = 0, current_progress = 0;
int nb_frames, actual_frames_per_second, compression_divider;
int current_frame_idx = 0, current_progress = 0, nb_frames = 0;
int actual_frames_per_second, compression_divider;
double duration = 0.0;
bool valid_listener = false;

Expand Down Expand Up @@ -337,7 +337,10 @@ Java_linc_com_amplituda_Amplituda_amplitudesFromAudioJNI(

// full formula: (channels * rate * duration [seconds]) / frame_size
// amplituda case - 1 [channel] instead of audio_dec_ctx->channels
nb_frames = (audio_dec_ctx->sample_rate * (int) duration) / audio_dec_ctx->frame_size;
// also prevent division by zero exception
if(audio_dec_ctx->frame_size > 0) {
nb_frames = (audio_dec_ctx->sample_rate * (int) duration) / audio_dec_ctx->frame_size;
}

// prepare compression params
actual_frames_per_second = (int) (nb_frames / duration);
Expand Down Expand Up @@ -384,8 +387,9 @@ Java_linc_com_amplituda_Amplituda_amplitudesFromAudioJNI(
}

av_packet_unref(pkt);
if (ret < 0)
if (ret < 0) {
break;
}

// update progress listener
if(valid_listener) {
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/java/linc/com/amplituda/Amplituda.java
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,7 @@ public AmplitudaProcessingOutput<byte[]> processAudio(
* Calculate amplitudes from file
* @param audio - source file
*/
private <T> AmplitudaResultJNI processFileJNI(
private synchronized <T> AmplitudaResultJNI processFileJNI(
final File audio,
final InputAudio<T> inputAudio,
final Compress compress,
Expand Down
9 changes: 6 additions & 3 deletions example/src/main/java/linc/com/example/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,22 @@
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;

import java.io.File;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;

import linc.com.amplituda.Amplituda;
import linc.com.amplituda.AmplitudaProcessingOutput;
import linc.com.amplituda.AmplitudaProgressListener;
import linc.com.amplituda.AmplitudaResult;
import linc.com.amplituda.Compress;
import linc.com.amplituda.InputAudio;
import linc.com.amplituda.ProgressOperation;
import linc.com.amplituda.callback.AmplitudaErrorListener;
import linc.com.amplituda.exceptions.AmplitudaException;

public class MainActivity extends AppCompatActivity {

Expand All @@ -23,10 +28,8 @@ protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_main);

Amplituda amplituda = new Amplituda(this);

amplituda.processAudio(
// "/storage/emulated/0/Music/Linc - Amplituda.mp3",
"/storage/9016-4EF8/MUSIC/Palace - Heaven Up There.mp3",
"/storage/emulated/0/Music/Linc - Amplituda.mp3",
Compress.withParams(Compress.AVERAGE, 1),
new AmplitudaProgressListener() {
@Override
Expand Down

0 comments on commit 2fd3566

Please sign in to comment.