提交 6cb4dfdd 编写于 作者: Z Zhang Rui

android: get vfps/vdps

上级 0a4d826c
......@@ -645,6 +645,17 @@ public final class IjkMediaPlayer extends AbstractMediaPlayer {
private native int _getLoopCount();
public float getVideoOutputFramesPerSecond() {
return _getVideoOutputFramesPerSecond();
}
public float getVideoDecodeFramesPerSecond() {
return _getVideoDecodeFramesPerSecond();
}
private native float _getVideoOutputFramesPerSecond();
private native float _getVideoDecodeFramesPerSecond();
public native void setVolume(float leftVolume, float rightVolume);
@Override
......
......@@ -334,6 +334,36 @@ LABEL_RETURN:
return loop_count;
}
static jfloat
ijkMediaPlayer_getVideoOutputFramesPerSecond(JNIEnv *env, jobject thiz)
{
jint fps = 1;
MPTRACE("%s\n", __func__);
IjkMediaPlayer *mp = jni_get_media_player(env, thiz);
JNI_CHECK_GOTO(mp, env, NULL, "mpjni: getVideoOutputFramesPerSecond: null mp", LABEL_RETURN);
fps = ijkmp_get_video_output_frames_per_second(mp);
LABEL_RETURN:
ijkmp_dec_ref_p(&mp);
return fps;
}
static jfloat
ijkMediaPlayer_getVideoDecodeFramesPerSecond(JNIEnv *env, jobject thiz)
{
jint fps = 1;
MPTRACE("%s\n", __func__);
IjkMediaPlayer *mp = jni_get_media_player(env, thiz);
JNI_CHECK_GOTO(mp, env, NULL, "mpjni: getVideoDecodeFramesPerSecond: null mp", LABEL_RETURN);
fps = ijkmp_get_video_decode_frames_per_second(mp);
LABEL_RETURN:
ijkmp_dec_ref_p(&mp);
return fps;
}
static void
IjkMediaPlayer_setVolume(JNIEnv *env, jobject thiz, jfloat leftVolume, jfloat rightVolume)
{
......@@ -921,6 +951,8 @@ static JNINativeMethod g_methods[] = {
{ "_getMediaMeta", "()Landroid/os/Bundle;", (void *) IjkMediaPlayer_getMediaMeta },
{ "_setLoopCount", "(I)V", (void *) IjkMediaPlayer_setLoopCount },
{ "_getLoopCount", "()I", (void *) IjkMediaPlayer_getLoopCount },
{ "_getVideoOutputFramesPerSecond", "()F", (void *) ijkMediaPlayer_getVideoOutputFramesPerSecond },
{ "_getVideoDecodeFramesPerSecond", "()F", (void *) ijkMediaPlayer_getVideoDecodeFramesPerSecond },
{ "native_profileBegin", "(Ljava/lang/String;)V", (void *) IjkMediaPlayer_native_profileBegin },
{ "native_profileEnd", "()V", (void *) IjkMediaPlayer_native_profileEnd },
......
......@@ -3850,6 +3850,20 @@ int ffp_get_video_rotate_degrees(FFPlayer *ffp)
return theta;
}
float ffp_get_video_output_frames_per_second(FFPlayer *ffp)
{
if (!ffp)
return 0.0f;
return ffp->vfps;
}
float ffp_get_video_decode_frames_per_second(FFPlayer *ffp)
{
if (!ffp)
return 0.0f;
return ffp->vdps;
}
IjkMediaMeta *ffp_get_meta_l(FFPlayer *ffp)
{
if (!ffp)
......
......@@ -96,6 +96,8 @@ void ffp_set_video_codec_info(FFPlayer *ffp, const char *module, const char
void ffp_set_audio_codec_info(FFPlayer *ffp, const char *module, const char *codec);
int ffp_get_video_rotate_degrees(FFPlayer *ffp);
float ffp_get_video_output_frames_per_second(FFPlayer *ffp);
float ffp_get_video_decode_frames_per_second(FFPlayer *ffp);
// must be freed with free();
struct IjkMediaMeta *ffp_get_meta_l(FFPlayer *ffp);
......
......@@ -25,7 +25,7 @@
#define FFP_XPS_PERIOD (3)
#define FFP_SHOW_VPS_DPS (0
#define FFP_SHOW_VPS_DPS (0)
#define FFP_SHOW_VFPS_FFPLAY (FFP_SHOW_VPS_DPS)
#define FFP_SHOW_VDPS_AVCODEC (FFP_SHOW_VPS_DPS)
#define FFP_SHOW_VDPS_VIDEOTOOLBOX (FFP_SHOW_VPS_DPS)
......
......@@ -198,6 +198,30 @@ int ijkmp_get_audio_codec_info(IjkMediaPlayer *mp, char **codec_info)
return ret;
}
float ijkmp_get_video_output_frames_per_second(IjkMediaPlayer *mp)
{
assert(mp);
MPTRACE("%s\n", __func__);
pthread_mutex_lock(&mp->mutex);
float ret = ffp_get_video_output_frames_per_second(mp->ffplayer);
pthread_mutex_unlock(&mp->mutex);
MPTRACE("%s()=void\n", __func__);
return ret;
}
float ijkmp_get_video_decode_frames_per_second(IjkMediaPlayer *mp)
{
assert(mp);
MPTRACE("%s\n", __func__);
pthread_mutex_lock(&mp->mutex);
float ret = ffp_get_video_decode_frames_per_second(mp->ffplayer);
pthread_mutex_unlock(&mp->mutex);
MPTRACE("%s()=void\n", __func__);
return ret;
}
IjkMediaMeta *ijkmp_get_meta_l(IjkMediaPlayer *mp)
{
assert(mp);
......
......@@ -171,6 +171,9 @@ void ijkmp_set_option_int(IjkMediaPlayer *mp, int opt_category, const
int ijkmp_get_video_codec_info(IjkMediaPlayer *mp, char **codec_info);
int ijkmp_get_audio_codec_info(IjkMediaPlayer *mp, char **codec_info);
float ijkmp_get_video_output_frames_per_second(IjkMediaPlayer *mp);
float ijkmp_get_video_decode_frames_per_second(IjkMediaPlayer *mp);
// must be freed with free();
IjkMediaMeta *ijkmp_get_meta_l(IjkMediaPlayer *mp);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册