static void Display(vout_display_t *vd, picture_t *picture) { vout_display_sys_t *sys = vd->sys; VLC_UNUSED(picture); if (sys->p_window->b_opaque) AndroidOpaquePicture_Release(picture->p_sys, true); else AndroidWindow_UnlockPicture(sys, sys->p_window, picture); if (sys->p_sub_pic) AndroidWindow_UnlockPicture(sys, sys->p_sub_window, sys->p_sub_pic); sys->b_displayed = true; }
static void PoolUnlockPicture(picture_t *p_pic) { picture_sys_t *p_picsys = p_pic->p_sys; vout_display_sys_t *sys = p_picsys->sw.p_vd_sys; AndroidWindow_UnlockPicture(sys, sys->p_window, p_pic); }
static void Close(vout_display_t *vd) { vout_display_sys_t *sys = vd->sys; /* Check if SPU regions have been properly cleared, and clear them if they * were not. */ if (sys->b_has_subpictures) { SubpicturePrepare(vd, NULL); AndroidWindow_UnlockPicture(sys, sys->p_sub_window, sys->p_sub_pic); } if (sys->pool) picture_pool_Release(sys->pool); if (sys->p_window) { if (sys->b_displayed) ClearSurface(vd); AndroidWindow_Destroy(vd, sys->p_window); } if (sys->p_sub_pic) picture_Release(sys->p_sub_pic); if (sys->p_spu_blend) filter_DeleteBlend(sys->p_spu_blend); free(sys->p_sub_buffer_bounds); if (sys->p_sub_window) AndroidWindow_Destroy(vd, sys->p_sub_window); if (sys->embed) AWindowHandler_setVideoLayout(sys->p_awh, 0, 0, 0, 0, 0, 0); free(sys); }
static int AndroidWindow_LockPicture(vout_display_sys_t *sys, android_window *p_window, picture_t *p_pic) { picture_sys_t *p_picsys = p_pic->p_sys; if (p_picsys->b_locked) return -1; if (sys->anw->winLock(p_window->p_surface, &p_picsys->sw.buf, NULL) != 0) return -1; if (p_picsys->sw.buf.width < 0 || p_picsys->sw.buf.height < 0 || (unsigned)p_picsys->sw.buf.width < p_window->fmt.i_width || (unsigned)p_picsys->sw.buf.height < p_window->fmt.i_height) { p_picsys->b_locked = true; AndroidWindow_UnlockPicture(sys, p_window, p_pic); return -1; } p_pic->p[0].p_pixels = p_picsys->sw.buf.bits; p_pic->p[0].i_lines = p_picsys->sw.buf.height; p_pic->p[0].i_pitch = p_pic->p[0].i_pixel_pitch * p_picsys->sw.buf.stride; if (p_picsys->sw.buf.format == PRIV_WINDOW_FORMAT_YV12) SetupPictureYV12(p_pic, p_picsys->sw.buf.stride); p_picsys->b_locked = true; return 0; }
static void DefaultUnlockPicture(picture_t *p_pic, bool b_render) { picture_sys_t *p_picsys = p_pic->p_sys; vout_display_sys_t *sys = p_picsys->p_vd_sys; AndroidWindow_UnlockPicture(sys, sys->p_window, p_pic, b_render); }
static void Close(vlc_object_t *p_this) { vout_display_t *vd = (vout_display_t *)p_this; vout_display_sys_t *sys = vd->sys; if (!sys) return; /* Check if SPU regions have been properly cleared, and clear them if they * were not. */ if (sys->b_has_subpictures) { SubpicturePrepare(vd, NULL); if (sys->b_sub_pic_locked) AndroidWindow_UnlockPicture(sys, sys->p_sub_window, sys->p_sub_pic, true); } if (sys->pool) picture_pool_Release(sys->pool); if (sys->p_window) AndroidWindow_Destroy(vd, sys->p_window); if (sys->p_sub_pic) picture_Release(sys->p_sub_pic); if (sys->p_spu_blend) filter_DeleteBlend(sys->p_spu_blend); free(sys->p_sub_buffer_bounds); if (sys->p_sub_window) AndroidWindow_Destroy(vd, sys->p_sub_window); if (sys->p_awh) AWindowHandler_destroy(sys->p_awh); free(sys); }
static void UnlockPicture(picture_t *p_pic, bool b_render) { picture_sys_t *p_picsys = p_pic->p_sys; vout_display_sys_t *sys = p_picsys->p_vd_sys; if (p_picsys->b_locked) { if (sys->p_window->b_opaque) AndroidOpaquePicture_Release(p_picsys, b_render); else AndroidWindow_UnlockPicture(sys, sys->p_window, p_pic, b_render); p_picsys->b_locked = false; } }
static void Display(vout_display_t *vd, picture_t *picture, subpicture_t *subpicture) { vout_display_sys_t *sys = vd->sys; /* refcount lowers to 0, and pool_cfg.unlock is called */ UnlockPicture(picture, true); picture_Release(picture); if (sys->b_sub_pic_locked) { sys->b_sub_pic_locked = false; AndroidWindow_UnlockPicture(sys, sys->p_sub_window, sys->p_sub_pic, true); } if (subpicture) subpicture_Delete(subpicture); }
static int AndroidWindow_LockPicture(vout_display_sys_t *sys, android_window *p_window, picture_t *p_pic) { picture_sys_t *p_picsys = p_pic->p_sys; if (p_window->b_use_priv) { void *p_handle; int err; err = sys->anwp.lockData(p_window->p_handle_priv, &p_handle, &p_picsys->priv.sw.buf); if (err != 0) return -1; p_picsys->priv.sw.p_handle = p_handle; } else { if (sys->anw.winLock(p_window->p_handle, &p_picsys->priv.sw.buf, NULL) != 0) return -1; } if (p_picsys->priv.sw.buf.width < 0 || p_picsys->priv.sw.buf.height < 0 || (unsigned)p_picsys->priv.sw.buf.width < p_window->fmt.i_width || (unsigned)p_picsys->priv.sw.buf.height < p_window->fmt.i_height) { AndroidWindow_UnlockPicture(sys, p_window, p_pic, false); return -1; } p_pic->p[0].p_pixels = p_picsys->priv.sw.buf.bits; p_pic->p[0].i_lines = p_picsys->priv.sw.buf.height; p_pic->p[0].i_pitch = p_pic->p[0].i_pixel_pitch * p_picsys->priv.sw.buf.stride; if (p_picsys->priv.sw.buf.format == PRIV_WINDOW_FORMAT_YV12) SetupPictureYV12(p_pic, p_picsys->priv.sw.buf.stride); return 0; }