diff options
-rw-r--r-- | libmpcodecs/dec_video.c | 9 | ||||
-rw-r--r-- | libmpcodecs/dec_video.h | 3 | ||||
-rw-r--r-- | mencoder.c | 14 | ||||
-rw-r--r-- | mplayer.c | 12 |
4 files changed, 21 insertions, 17 deletions
diff --git a/libmpcodecs/dec_video.c b/libmpcodecs/dec_video.c index 8cdc3e7b1d..ef44399e82 100644 --- a/libmpcodecs/dec_video.c +++ b/libmpcodecs/dec_video.c @@ -455,20 +455,13 @@ void *decode_video(sh_video_t *sh_video, unsigned char *start, int in_size, return mpi; } -int filter_video(sh_video_t *sh_video, void *frame, double pts, - struct osd_state *osd) +int filter_video(sh_video_t *sh_video, void *frame, double pts) { mp_image_t *mpi = frame; unsigned int t2 = GetTimer(); vf_instance_t *vf = sh_video->vfilter; // apply video filters and call the leaf vo/ve int ret = vf->put_image(vf, mpi, pts); - if (ret > 0) { -#ifdef CONFIG_ASS - vf->control(vf, VFCTRL_DRAW_EOSD, NULL); -#endif - vf->control(vf, VFCTRL_DRAW_OSD, osd); - } t2 = GetTimer() - t2; vout_time_usage += t2 * 0.000001; diff --git a/libmpcodecs/dec_video.h b/libmpcodecs/dec_video.h index 463304bde5..606fbe946e 100644 --- a/libmpcodecs/dec_video.h +++ b/libmpcodecs/dec_video.h @@ -12,8 +12,7 @@ int init_best_video_codec(sh_video_t *sh_video, char** video_codec_list, char** void uninit_video(sh_video_t *sh_video); void *decode_video(sh_video_t *sh_video, unsigned char *start, int in_size, int drop_frame, double pts); -int filter_video(sh_video_t *sh_video, void *frame, double pts, - struct osd_state *osd); +int filter_video(sh_video_t *sh_video, void *frame, double pts); int get_video_quality_max(sh_video_t *sh_video); void set_video_quality(sh_video_t *sh_video, int quality); diff --git a/mencoder.c b/mencoder.c index 52edeeac88..600afd1276 100644 --- a/mencoder.c +++ b/mencoder.c @@ -1346,7 +1346,13 @@ default: sh_video->vfilter->control(sh_video->vfilter, VFCTRL_SET_OSD_OBJ, osd); {void *decoded_frame = decode_video(sh_video,frame_data.start,frame_data.in_size, skip_flag>0 && (!sh_video->vfilter || sh_video->vfilter->control(sh_video->vfilter, VFCTRL_SKIP_NEXT_FRAME, 0) != CONTROL_TRUE), MP_NOPTS_VALUE); - blit_frame = decoded_frame && filter_video(sh_video, decoded_frame, MP_NOPTS_VALUE, osd);} + blit_frame = decoded_frame && filter_video(sh_video, decoded_frame, MP_NOPTS_VALUE); + if (blit_frame) { + struct vf_instance *vf = sh_video->vfilter; + vf->control(vf, VFCTRL_DRAW_EOSD, NULL); + vf->control(vf, VFCTRL_DRAW_OSD, osd); + } + } if (sh_video->vf_initialized < 0) mencoder_exit(1, NULL); @@ -1711,7 +1717,11 @@ static int slowseek(float end_pts, demux_stream_t *d_video, demux_stream_t *d_au int softskip = (vfilter->control(vfilter, VFCTRL_SKIP_NEXT_FRAME, 0) == CONTROL_TRUE); void *decoded_frame = decode_video(sh_video, frame_data->start, frame_data->in_size, !softskip, MP_NOPTS_VALUE); if (decoded_frame) - filter_video(sh_video, decoded_frame, MP_NOPTS_VALUE, osd); + if (filter_video(sh_video, decoded_frame, MP_NOPTS_VALUE)) { + struct vf_instance *vf = sh_video->vfilter; + vf->control(vf, VFCTRL_DRAW_EOSD, NULL); + vf->control(vf, VFCTRL_DRAW_OSD, osd); + } } if (print_info) mp_msg(MSGT_MENCODER, MSGL_STATUS, @@ -2223,8 +2223,7 @@ static double update_video_nocorrect_pts(struct MPContext *mpctx, update_teletext(sh_video, mpctx->demuxer, 0); update_osd_msg(mpctx); current_module = "filter video"; - if (filter_video(sh_video, decoded_frame, sh_video->pts, - mpctx->osd)) + if (filter_video(sh_video, decoded_frame, sh_video->pts)) break; } } @@ -2270,8 +2269,7 @@ static double update_video(struct MPContext *mpctx, int *blit_frame) update_teletext(sh_video, mpctx->demuxer, 0); update_osd_msg(mpctx); current_module = "filter video"; - if (filter_video(sh_video, decoded_frame, sh_video->pts, - mpctx->osd)) + if (filter_video(sh_video, decoded_frame, sh_video->pts)) break; } else if (hit_eof) return -1; @@ -3786,8 +3784,12 @@ if(!mpctx->sh_video) { mpctx->stop_play = PT_NEXT_ENTRY; goto goto_next_file; } - if (blit_frame) + if (blit_frame) { + struct vf_instance *vf = mpctx->sh_video->vfilter; + vf->control(vf, VFCTRL_DRAW_EOSD, NULL); + vf->control(vf, VFCTRL_DRAW_OSD, mpctx->osd); vo_osd_changed(0); + } if (frame_time < 0) mpctx->stop_play = AT_END_OF_FILE; else { |