diff --git a/drivers/amlogic/media/video_processor/ppmgr/ppmgr_vpp.c b/drivers/amlogic/media/video_processor/ppmgr/ppmgr_vpp.c index 7e1a300f92e7..30118e650989 100644 --- a/drivers/amlogic/media/video_processor/ppmgr/ppmgr_vpp.c +++ b/drivers/amlogic/media/video_processor/ppmgr/ppmgr_vpp.c @@ -701,6 +701,11 @@ void vf_ppmgr_unreg_provider(void) vf_unreg_provider(&ppmgr_vf_prov); +#ifdef PPMGR_TB_DETECT + tb_buffer_uninit(); +#endif + ppmgr_buffer_uninit(); + dec_vfp = NULL; ppmgr_device.started = 0; @@ -2977,10 +2982,6 @@ SKIP_DETECT: } destroy_ge2d_work_queue(context); -#ifdef PPMGR_TB_DETECT - tb_buffer_uninit(); -#endif - ppmgr_buffer_uninit(); while (!kthread_should_stop()) { /* may not call stop, wait.. * it is killed by SIGTERM,eixt on down_interruptible diff --git a/drivers/amlogic/media/video_sink/video_keeper.c b/drivers/amlogic/media/video_sink/video_keeper.c index f926b1cb6b61..5b7f5d58c794 100644 --- a/drivers/amlogic/media/video_sink/video_keeper.c +++ b/drivers/amlogic/media/video_sink/video_keeper.c @@ -157,7 +157,8 @@ static int ge2d_store_frame_S_YUV444(u32 cur_index) canvas_read(ydupindex, &cd); src_index = y_index; des_index = ydupindex; - + if (cs.addr == cd.addr) + return 1; pr_info("ge2d_canvas_dup ADDR srcy[0x%lx] des[0x%lx] des_index[0x%x]\n", cs.addr, cd.addr, des_index); @@ -617,6 +618,7 @@ static void ge2d_keeplastframe_block(int cur_index, int format) #ifdef CONFIG_AMLOGIC_MEDIA_VSYNC_RDMA u32 y_index2, u_index2, v_index2; #endif + int ret = -1; video_module_lock(); @@ -640,7 +642,9 @@ static void ge2d_keeplastframe_block(int cur_index, int format) switch (format) { case GE2D_FORMAT_S24_YUV444: pr_info("GE2D_FORMAT_S24_YUV444\n"); - ge2d_store_frame_S_YUV444(cur_index); + ret = ge2d_store_frame_S_YUV444(cur_index); + if (ret > 0) + break; canvas_update_addr(y_index, keep_phy_addr(keep_y_addr)); #ifdef CONFIG_AMLOGIC_MEDIA_VSYNC_RDMA canvas_update_addr(y_index2, keep_phy_addr(keep_y_addr));