From 0a4d826c09da8a6444fab2c6f6ff8f652b4ef450 Mon Sep 17 00:00:00 2001 From: Zhang Rui Date: Tue, 29 Sep 2015 13:44:51 +0800 Subject: [PATCH] ff_ffplay: remember fps/dps --- .../android/pipeline/ffpipenode_android_mediacodec_vdec.c | 3 ++- ijkmedia/ijkplayer/ff_ffplay.c | 4 ++-- ijkmedia/ijkplayer/ff_ffplay_def.h | 6 ++++++ .../ijkmedia/ijkplayer/ios/pipeline/IJKVideoToolBox.m | 2 +- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/ijkmedia/ijkplayer/android/pipeline/ffpipenode_android_mediacodec_vdec.c b/ijkmedia/ijkplayer/android/pipeline/ffpipenode_android_mediacodec_vdec.c index f5b78290..4be2fe17 100644 --- a/ijkmedia/ijkplayer/android/pipeline/ffpipenode_android_mediacodec_vdec.c +++ b/ijkmedia/ijkplayer/android/pipeline/ffpipenode_android_mediacodec_vdec.c @@ -699,6 +699,7 @@ static void sort_amc_buf_out(AMC_Buf_Out *buf_out, int size) { static int drain_output_buffer_l(JNIEnv *env, IJKFF_Pipenode *node, int64_t timeUs, int *dequeue_count) { IJKFF_Pipenode_Opaque *opaque = node->opaque; + FFPlayer *ffp = opaque->ffp; int ret = 0; SDL_AMediaCodecBufferInfo bufferInfo; ssize_t output_buffer_index = 0; @@ -794,7 +795,7 @@ static int drain_output_buffer_l(JNIEnv *env, IJKFF_Pipenode *node, int64_t time } } } else if (output_buffer_index >= 0) { - SDL_SpeedSamplerAdd(&opaque->sampler, FFP_SHOW_VDPS_MEDIACODEC, "vdps[MediaCodec]"); + ffp->vdps = SDL_SpeedSamplerAdd(&opaque->sampler, FFP_SHOW_VDPS_MEDIACODEC, "vdps[MediaCodec]"); if (dequeue_count) ++*dequeue_count; diff --git a/ijkmedia/ijkplayer/ff_ffplay.c b/ijkmedia/ijkplayer/ff_ffplay.c index b7d3cb19..1e25084d 100644 --- a/ijkmedia/ijkplayer/ff_ffplay.c +++ b/ijkmedia/ijkplayer/ff_ffplay.c @@ -499,7 +499,7 @@ static int decoder_decode_frame(FFPlayer *ffp, Decoder *d, AVFrame *frame, AVSub case AVMEDIA_TYPE_VIDEO: { ret = avcodec_decode_video2(d->avctx, frame, &got_frame, &d->pkt_temp); if (got_frame) { - SDL_SpeedSamplerAdd(&ffp->vdps_sampler, FFP_SHOW_VDPS_AVCODEC, "vdps[avcodec]"); + ffp->vdps = SDL_SpeedSamplerAdd(&ffp->vdps_sampler, FFP_SHOW_VDPS_AVCODEC, "vdps[avcodec]"); if (ffp->decoder_reorder_pts == -1) { frame->pts = av_frame_get_best_effort_timestamp(frame); } else if (ffp->decoder_reorder_pts) { @@ -740,7 +740,7 @@ static void video_image_display2(FFPlayer *ffp) vp = frame_queue_peek(&is->pictq); if (vp->bmp) { SDL_VoutDisplayYUVOverlay(ffp->vout, vp->bmp); - SDL_SpeedSamplerAdd(&ffp->vfps_sampler, FFP_SHOW_VFPS_FFPLAY, "vfps[ffplay]"); + ffp->vfps = SDL_SpeedSamplerAdd(&ffp->vfps_sampler, FFP_SHOW_VFPS_FFPLAY, "vfps[ffplay]"); if (!ffp->first_video_frame_rendered) { ffp->first_video_frame_rendered = 1; ffp_notify_msg1(ffp, FFP_MSG_VIDEO_RENDERING_START); diff --git a/ijkmedia/ijkplayer/ff_ffplay_def.h b/ijkmedia/ijkplayer/ff_ffplay_def.h index ca4cb99b..09bb1063 100644 --- a/ijkmedia/ijkplayer/ff_ffplay_def.h +++ b/ijkmedia/ijkplayer/ff_ffplay_def.h @@ -580,6 +580,9 @@ typedef struct FFPlayer { SDL_SpeedSampler vfps_sampler; SDL_SpeedSampler vdps_sampler; + + float vfps; + float vdps; } FFPlayer; #define fftime_to_milliseconds(ts) (av_rescale(ts, 1000, AV_TIME_BASE)); @@ -685,6 +688,9 @@ inline static void ffp_reset_internal(FFPlayer *ffp) SDL_SpeedSamplerReset(&ffp->vfps_sampler); SDL_SpeedSamplerReset(&ffp->vdps_sampler); + ffp->vfps = 0.0f; + ffp->vdps = 0.0f; + msg_queue_flush(&ffp->msg_queue); } diff --git a/ios/IJKMediaPlayer/IJKMediaPlayer/ijkmedia/ijkplayer/ios/pipeline/IJKVideoToolBox.m b/ios/IJKMediaPlayer/IJKMediaPlayer/ijkmedia/ijkplayer/ios/pipeline/IJKVideoToolBox.m index 07655ea6..14d455a5 100644 --- a/ios/IJKMediaPlayer/IJKMediaPlayer/ijkmedia/ijkplayer/ios/pipeline/IJKVideoToolBox.m +++ b/ios/IJKMediaPlayer/IJKMediaPlayer/ijkmedia/ijkplayer/ios/pipeline/IJKVideoToolBox.m @@ -414,7 +414,7 @@ void VTDecoderCallback(void *decompressionOutputRefCon, goto failed; } - SDL_SpeedSamplerAdd(&ctx->sampler, FFP_SHOW_VDPS_VIDEOTOOLBOX, "vdps[VideoToolbox]"); + ffp->vdps = SDL_SpeedSamplerAdd(&ctx->sampler, FFP_SHOW_VDPS_VIDEOTOOLBOX, "vdps[VideoToolbox]"); #ifdef FFP_VTB_DISABLE_OUTPUT goto failed; #endif -- GitLab