From 618702389cfdd4b8d07c58f73e5b3691fcb28128 Mon Sep 17 00:00:00 2001 From: xufuji456 <839789740@qq.com> Date: Sun, 21 Feb 2021 10:44:04 +0800 Subject: [PATCH] change ffprobe_cmd.c to cpp --- app/CMakeLists.txt | 2 +- app/src/main/cpp/audio_player.c | 2 +- app/src/main/cpp/ffmpeg_jni_define.h | 8 ++++++ app/src/main/cpp/ffprobe_cmd.c | 33 ---------------------- app/src/main/cpp/ffprobe_cmd.cpp | 42 ++++++++++++++++++++++++++++ 5 files changed, 52 insertions(+), 35 deletions(-) delete mode 100644 app/src/main/cpp/ffprobe_cmd.c create mode 100644 app/src/main/cpp/ffprobe_cmd.cpp diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index e7c52f8..575b7d2 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -33,7 +33,7 @@ add_library( # Sets the name of the library. src/main/cpp/media_player.cpp src/main/cpp/video_filter.c src/main/cpp/fast_start.c - src/main/cpp/ffprobe_cmd.c + src/main/cpp/ffprobe_cmd.cpp ) add_library( ffmpeg diff --git a/app/src/main/cpp/audio_player.c b/app/src/main/cpp/audio_player.c index eae822d..867a78f 100644 --- a/app/src/main/cpp/audio_player.c +++ b/app/src/main/cpp/audio_player.c @@ -35,7 +35,7 @@ AUDIO_PLAYER_FUNC(void, play, jstring input_jstr) { //get the audio stream index in the stream array int i = 0, audio_stream_idx = -1; for (; i < pFormatCtx->nb_streams; i++) { - if (pFormatCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_AUDIO) { + if (pFormatCtx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) { audio_stream_idx = i; break; } diff --git a/app/src/main/cpp/ffmpeg_jni_define.h b/app/src/main/cpp/ffmpeg_jni_define.h index ce9ca4c..4a5e7c3 100644 --- a/app/src/main/cpp/ffmpeg_jni_define.h +++ b/app/src/main/cpp/ffmpeg_jni_define.h @@ -18,6 +18,14 @@ JNIEXPORT RETURN_TYPE JNICALL Java_com_frank_ffmpeg_FFmpegCmd_ ## FUNC_NAME \ (JNIEnv *env, jclass thiz, ##__VA_ARGS__)\ +#define FFPROBE_FUNC(RETURN_TYPE, FUNC_NAME, ...) \ +extern "C" { \ + JNIEXPORT RETURN_TYPE JNICALL Java_com_frank_ffmpeg_FFmpegCmd_ ## FUNC_NAME \ + (JNIEnv *env, jclass thiz, ##__VA_ARGS__);\ +}\ + JNIEXPORT RETURN_TYPE JNICALL Java_com_frank_ffmpeg_FFmpegCmd_ ## FUNC_NAME \ + (JNIEnv *env, jclass thiz, ##__VA_ARGS__)\ + #define VIDEO_PLAYER_FUNC(RETURN_TYPE, FUNC_NAME, ...) \ JNIEXPORT RETURN_TYPE JNICALL Java_com_frank_ffmpeg_VideoPlayer_ ## FUNC_NAME \ (JNIEnv *env, jobject thiz, ##__VA_ARGS__)\ diff --git a/app/src/main/cpp/ffprobe_cmd.c b/app/src/main/cpp/ffprobe_cmd.c deleted file mode 100644 index 0f3106d..0000000 --- a/app/src/main/cpp/ffprobe_cmd.c +++ /dev/null @@ -1,33 +0,0 @@ -// -// Created by frank on 2020-01-06. -// - -#include -#include -#include -#include -#include - -FFMPEG_FUNC(jstring, handleProbe, jobjectArray commands) { - int argc = (*env)->GetArrayLength(env, commands); - char **argv = (char **) malloc(argc * sizeof(char *)); - int i; - for (i = 0; i < argc; i++) { - jstring jstr = (jstring) (*env)->GetObjectArrayElement(env, commands, i); - char *temp = (char *) (*env)->GetStringUTFChars(env, jstr, 0); - argv[i] = malloc(1024); - strcpy(argv[i], temp); - (*env)->ReleaseStringUTFChars(env, jstr, temp); - } - //execute ffprobe command - char *result = ffprobe_run(argc, argv); - //release memory - for (i = 0; i < argc; i++) { - free(argv[i]); - } - free(argv); - - return (*env)->NewStringUTF(env, result); -} - - diff --git a/app/src/main/cpp/ffprobe_cmd.cpp b/app/src/main/cpp/ffprobe_cmd.cpp new file mode 100644 index 0000000..624f3c9 --- /dev/null +++ b/app/src/main/cpp/ffprobe_cmd.cpp @@ -0,0 +1,42 @@ +// +// Created by frank on 2020-01-06. +// + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#include "ffmpeg_jni_define.h" +#include "ffmpeg/ffprobe.h" + +#ifdef __cplusplus +} +#endif + +FFPROBE_FUNC(jstring, handleProbe, jobjectArray commands) { + int argc = env->GetArrayLength(commands); + char **argv = (char **) malloc(argc * sizeof(char *)); + int i; + for (i = 0; i < argc; i++) { + jstring jstr = (jstring) env->GetObjectArrayElement( commands, i); + char *temp = (char *) env->GetStringUTFChars(jstr, 0); + argv[i] = static_cast(malloc(1024)); + strcpy(argv[i], temp); + env->ReleaseStringUTFChars(jstr, temp); + } + //execute ffprobe command + char *result = ffprobe_run(argc, argv); + //release memory + for (i = 0; i < argc; i++) { + free(argv[i]); + } + free(argv); + + return env->NewStringUTF(result); +} + +