|
|
|
@ -3,10 +3,10 @@ |
|
|
|
|
#include "ffmpeg_jni_define.h" |
|
|
|
|
|
|
|
|
|
#define FFMPEG_TAG "FFmpegCmd" |
|
|
|
|
#define INPUT_SIZE (4 * 1024) |
|
|
|
|
#define INPUT_SIZE (8 * 1024) |
|
|
|
|
|
|
|
|
|
#define ALOGI(TAG, FORMAT, ...) __android_log_vprint(ANDROID_LOG_INFO, TAG, FORMAT, ##__VA_ARGS__); |
|
|
|
|
#define ALOGE(TAG, FORMAT, ...) __android_log_vprint(ANDROID_LOG_ERROR, TAG, FORMAT, ##__VA_ARGS__); |
|
|
|
|
#define ALOGI(TAG, FORMAT, ...) __android_log_vprint(ANDROID_LOG_INFO, TAG, FORMAT, ##__VA_ARGS__) |
|
|
|
|
#define ALOGE(TAG, FORMAT, ...) __android_log_vprint(ANDROID_LOG_ERROR, TAG, FORMAT, ##__VA_ARGS__) |
|
|
|
|
|
|
|
|
|
int err_count; |
|
|
|
|
JNIEnv *ff_env; |
|
|
|
@ -21,7 +21,7 @@ void init(JNIEnv *env) { |
|
|
|
|
err_count = 0; |
|
|
|
|
ff_class = (*env)->FindClass(env, "com/frank/ffmpeg/FFmpegCmd"); |
|
|
|
|
ff_method = (*env)->GetStaticMethodID(env, ff_class, "onProgressCallback", "(III)V"); |
|
|
|
|
msg_method = (*env)->GetStaticMethodID(env, ff_class, "onMsgCallback", "(Ljava/lang/String;)V"); |
|
|
|
|
msg_method = (*env)->GetStaticMethodID(env, ff_class, "onMsgCallback", "(Ljava/lang/String;I)V"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
FFMPEG_FUNC(jint, handle, jobjectArray commands) { |
|
|
|
@ -56,12 +56,12 @@ FFMPEG_FUNC(void, cancelTaskJni, jint cancel) { |
|
|
|
|
cancel_task(cancel); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void msg_callback(const char *format, va_list args) { |
|
|
|
|
void msg_callback(const char *format, va_list args, int level) { |
|
|
|
|
if (ff_env && msg_method) { |
|
|
|
|
char *ff_msg = (char *) malloc(sizeof(char) * INPUT_SIZE); |
|
|
|
|
vsprintf(ff_msg, format, args); |
|
|
|
|
jstring jstr = (*ff_env)->NewStringUTF(ff_env, ff_msg); |
|
|
|
|
(*ff_env)->CallStaticVoidMethod(ff_env, ff_class, msg_method, jstr); |
|
|
|
|
(*ff_env)->CallStaticVoidMethod(ff_env, ff_class, msg_method, jstr, level); |
|
|
|
|
free(ff_msg); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -71,14 +71,14 @@ void log_callback(void *ptr, int level, const char *format, va_list args) { |
|
|
|
|
case AV_LOG_INFO: |
|
|
|
|
ALOGI(FFMPEG_TAG, format, args); |
|
|
|
|
if (format && strncmp("silence", format, 7) == 0) { |
|
|
|
|
msg_callback(format, args); |
|
|
|
|
msg_callback(format, args, 3); |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
case AV_LOG_ERROR: |
|
|
|
|
ALOGE(FFMPEG_TAG, format, args); |
|
|
|
|
if (err_count < 10) { |
|
|
|
|
err_count++; |
|
|
|
|
msg_callback(format, args); |
|
|
|
|
msg_callback(format, args, 6); |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|