static void SubpicturePrepare(vout_display_t *vd, subpicture_t *subpicture) { vout_display_sys_t *sys = vd->sys; ARect memset_bounds; SubtitleRegionToBounds(subpicture, &memset_bounds); if( subpicture ) { if( subpicture->i_order == sys->i_sub_last_order && memcmp( &memset_bounds, &sys->sub_last_region, sizeof(ARect) ) == 0 ) return; sys->i_sub_last_order = subpicture->i_order; sys->sub_last_region = memset_bounds; } if (AndroidWindow_LockPicture(sys, sys->p_sub_window, sys->p_sub_pic) != 0) return; /* Clear the subtitles surface. */ SubtitleGetDirtyBounds(vd, subpicture, &memset_bounds); const int x_pixels_offset = memset_bounds.left * sys->p_sub_pic->p[0].i_pixel_pitch; const int i_line_size = (memset_bounds.right - memset_bounds.left) * sys->p_sub_pic->p->i_pixel_pitch; for (int y = memset_bounds.top; y < memset_bounds.bottom; y++) memset(&sys->p_sub_pic->p[0].p_pixels[y * sys->p_sub_pic->p[0].i_pitch + x_pixels_offset], 0, i_line_size); if (subpicture) picture_BlendSubpicture(sys->p_sub_pic, sys->p_spu_blend, subpicture); }
static int DefaultLockPicture(picture_t *p_pic) { picture_sys_t *p_picsys = p_pic->p_sys; vout_display_sys_t *sys = p_picsys->p_vd_sys; return AndroidWindow_LockPicture(sys, sys->p_window, p_pic); }
static int PoolLockPicture(picture_t *p_pic) { picture_sys_t *p_picsys = p_pic->p_sys; vout_display_sys_t *sys = p_picsys->sw.p_vd_sys; if (AndroidWindow_LockPicture(sys, sys->p_window, p_pic) != 0) return -1; return 0; }
static int PoolLockPicture(picture_t *p_pic) { picture_sys_t *p_picsys = p_pic->p_sys; vout_display_sys_t *sys = p_picsys->p_vd_sys; if (!sys->p_window->b_opaque && AndroidWindow_LockPicture(sys, sys->p_window, p_pic) != 0) return -1; p_picsys->b_locked = true; return 0; }