diff --git a/android/ijkmediaplayer/src/tv/danmaku/ijk/media/player/IjkMediaPlayer.java b/android/ijkmediaplayer/src/tv/danmaku/ijk/media/player/IjkMediaPlayer.java index 30be0e3114e0a6a4c01643718693dee13d2ea45f..06670ba62de64260cf8bcece75038afe947a5c1c 100644 --- a/android/ijkmediaplayer/src/tv/danmaku/ijk/media/player/IjkMediaPlayer.java +++ b/android/ijkmediaplayer/src/tv/danmaku/ijk/media/player/IjkMediaPlayer.java @@ -381,7 +381,12 @@ public final class IjkMediaPlayer extends SimpleMediaPlayer { _setAvFormatOption(name, value); } + public void setAvCodecOption(String name, String value) { + _setAvCodecOption(name, value); + } + private native void _setAvFormatOption(String name, String value); + private native void _setAvCodecOption(String name, String value); @Override public void setAudioStreamType(int streamtype) { diff --git a/ijkmedia/ijkplayer/android/ijkplayer_jni.c b/ijkmedia/ijkplayer/android/ijkplayer_jni.c index b41f754c749d7da2a14b2588365b2cc175746d4a..1ce925e60569cbe9f4437ee3647d8eb7e912e366 100644 --- a/ijkmedia/ijkplayer/android/ijkplayer_jni.c +++ b/ijkmedia/ijkplayer/android/ijkplayer_jni.c @@ -288,6 +288,31 @@ IjkMediaPlayer_setAvFormatOption(JNIEnv *env, jobject thiz, jobject name, jobjec ijkmp_dec_ref_p(&mp); } +static void +IjkMediaPlayer_setAvCodecOption(JNIEnv *env, jobject thiz, jobject name, jobject value) +{ + MPTRACE("IjkMediaPlayer_setAvCodecOption"); + IjkMediaPlayer *mp = jni_get_media_player(env, thiz); + const char *c_name = NULL; + const char *c_value = NULL; + JNI_CHECK_GOTO(mp, env, "java/lang/IllegalStateException", "mpjni: setAvCodecOption: null mp", LABEL_RETURN); + + c_name = (*env)->GetStringUTFChars(env, name, NULL); + JNI_CHECK_GOTO(c_name, env, "java/lang/OutOfMemoryError", "mpjni: setAvCodecOption: name.string oom", LABEL_RETURN); + + c_value = (*env)->GetStringUTFChars(env, value, NULL); + JNI_CHECK_GOTO(c_name, env, "java/lang/OutOfMemoryError", "mpjni: setAvCodecOption: name.string oom", LABEL_RETURN); + + ijkmp_set_codec_option(mp, c_name, c_value); + + LABEL_RETURN: + if (c_name) + (*env)->ReleaseStringUTFChars(env, name, c_name); + if (c_value) + (*env)->ReleaseStringUTFChars(env, value, c_value); + ijkmp_dec_ref_p(&mp); +} + static void IjkMediaPlayer_native_init(JNIEnv *env) { @@ -436,6 +461,7 @@ static JNINativeMethod g_methods[] = { { "native_finalize", "()V", (void *) IjkMediaPlayer_native_finalize }, { "_setAvFormatOption", "(Ljava/lang/String;Ljava/lang/String;)V", (void *) IjkMediaPlayer_setAvFormatOption }, + { "_setAvCodecOption", "(Ljava/lang/String;Ljava/lang/String;)V", (void *) IjkMediaPlayer_setAvCodecOption }, }; JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved)