вторник, 28 января 2014 г., 1:56:01 UTC+4 пользователь Phil Scull написал:
> Video playback in linaro using cedar and libhybris stutters and sometimes the 
> frame rate drops very low.
> 
> There may be an issue in disp_video.c as the included changes sort the issue 
> for me. 
> 
> My possibly flawed reasoning goes something like...
> Its not a good idea to update display_cnt in Hal_Set_Frame called during 
> blanking and BSP_disp_video_set_fb which is called from an IOCTL. The value 
> is incremented in Hal_Set_Frame and may have been updated (to 0) by a call to 
> BSP_disp_video_set_fb. The result is calls to ioctl(fd, 
> DISP_CMD_VIDEO_GET_FRAME_ID, args) never returning the updated frame number 
> (this I have observed).
> 
> Hope this is of some help.
> 
> Any thoughts appreciated.
> 
> Kind regards,
> 
> Phil
> 
> 
> diff --git a/drivers/video/sunxi/disp/disp_video.c 
> b/drivers/video/sunxi/disp/disp_video.c
> index aa07364..460def8 100644
> --- a/drivers/video/sunxi/disp/disp_video.c
> +++ b/drivers/video/sunxi/disp/disp_video.c
> @@ -144,11 +144,19 @@ static inline __s32 Hal_Set_Frame(__u32 sel, __u32 
> tcon_index, __u32 id)
>               return DIS_FAIL;
>       }
>  
> -     if (g_video[sel][id].display_cnt == 0) {
> +  __u32 new_id = g_video[sel][id].video_new.id;
> +  __u32 cur_id = g_video[sel][id].video_cur.id;
> +  
> +//   if (g_video[sel][id].display_cnt == 0) {
> +     if (cur_id != new_id) {
>               g_video[sel][id].pre_frame_addr0 =
>                   g_video[sel][id].video_cur.addr[0];
> +    
> +    g_video[sel][id].video_new.id = cur_id;
> +    
>               memcpy(&g_video[sel][id].video_cur, &g_video[sel][id].video_new,
>                      sizeof(__disp_video_fb_t));
> +             g_video[sel][id].display_cnt = 0;
>       }
>  
>       if (gdisp.screen[sel].layer_manage[id].para.mode ==
> @@ -382,6 +390,9 @@ static inline __s32 Hal_Set_Frame(__u32 sel, __u32 
> tcon_index, __u32 id)
>               g_video[sel][id].video_cur.addr_right[1];
>       gdisp.screen[sel].layer_manage[id].para.fb.trd_right_addr[2] =
>               g_video[sel][id].video_cur.addr_right[2];
> +    
> +  g_video[sel][id].video_cur.id = new_id;
> +  
>       return DIS_SUCCESS;
>  }
>  
> @@ -408,7 +419,7 @@ __s32 BSP_disp_video_set_fb(__u32 sel, __u32 hid, 
> __disp_video_fb_t *in_addr)
>               memcpy(&g_video[sel][hid].video_new, in_addr,
>                      sizeof(__disp_video_fb_t));
>               g_video[sel][hid].have_got_frame = TRUE;
> -             g_video[sel][hid].display_cnt = 0;
> +//           g_video[sel][hid].display_cnt = 0;
>  
>               return DIS_SUCCESS;
>       } else
> @@ -462,6 +473,7 @@ __s32 BSP_disp_video_start(__u32 sel, __u32 hid)
>       if (gdisp.screen[sel].layer_manage[hid].status & LAYER_USED) {
>               memset(&g_video[sel][hid], 0, sizeof(frame_para_t));
>               g_video[sel][hid].video_cur.id = -1;
> +             g_video[sel][hid].video_new.id = -1;
>               g_video[sel][hid].enable = TRUE;
>  
>               video_enhancement_start(sel, hid);

Try sunxi-vdpau for video playback - http://linux-sunxi.org/Cedrus .
mpv player works perfect .

-- 
You received this message because you are subscribed to the Google Groups 
"linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to