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 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 Prepare(vout_display_t *vd, picture_t *picture, subpicture_t *subpicture, vlc_tick_t date) { vout_display_sys_t *sys = vd->sys; VLC_UNUSED(picture); if (subpicture && sys->p_sub_window) { if (sys->b_sub_invalid) { sys->b_sub_invalid = false; if (sys->p_sub_pic) { picture_Release(sys->p_sub_pic); sys->p_sub_pic = NULL; } if (sys->p_spu_blend) { filter_DeleteBlend(sys->p_spu_blend); sys->p_spu_blend = NULL; } free(sys->p_sub_buffer_bounds); sys->p_sub_buffer_bounds = NULL; } if (!sys->p_sub_pic && AndroidWindow_Setup(sys, sys->p_sub_window, 1) == 0) sys->p_sub_pic = PictureAlloc(sys, &sys->p_sub_window->fmt, false); if (!sys->p_spu_blend && sys->p_sub_pic) sys->p_spu_blend = filter_NewBlend(VLC_OBJECT(vd), &sys->p_sub_pic->format); if (sys->p_sub_pic && sys->p_spu_blend) sys->b_has_subpictures = true; } /* As long as no subpicture was received, do not call SubpictureDisplay since JNI calls and clearing the subtitles surface are expensive operations. */ if (sys->b_has_subpictures) { SubpicturePrepare(vd, subpicture); if (!subpicture) { /* The surface has been cleared and there is no new subpicture to upload, do not clear again until a new subpicture is received. */ sys->b_has_subpictures = false; } } if (sys->p_window->b_opaque && AndroidOpaquePicture_CanReleaseAtTime(picture->p_sys)) { vlc_tick_t now = vlc_tick_now(); if (date > now) { if (date - now <= VLC_TICK_FROM_SEC(1)) AndroidOpaquePicture_ReleaseAtTime(picture->p_sys, date); else /* The picture will be displayed from the Display callback */ msg_Warn(vd, "picture way too early to release at time"); } } }
static void Prepare(vout_display_t *vd, picture_t *picture, subpicture_t *subpicture) { vout_display_sys_t *sys = vd->sys; VLC_UNUSED(picture); SendEventDisplaySize(vd); if (subpicture && sys->p_sub_window) { if (sys->b_sub_invalid) { sys->b_sub_invalid = false; if (sys->p_sub_pic) { picture_Release(sys->p_sub_pic); sys->p_sub_pic = NULL; } if (sys->p_spu_blend) { filter_DeleteBlend(sys->p_spu_blend); sys->p_spu_blend = NULL; } free(sys->p_sub_buffer_bounds); sys->p_sub_buffer_bounds = NULL; } if (!sys->p_sub_pic && AndroidWindow_Setup(sys, sys->p_sub_window, 1) == 0) sys->p_sub_pic = PictureAlloc(sys, &sys->p_sub_window->fmt, false); if (!sys->p_spu_blend && sys->p_sub_pic) sys->p_spu_blend = filter_NewBlend(VLC_OBJECT(vd), &sys->p_sub_pic->format); if (sys->p_sub_pic && sys->p_spu_blend) sys->b_has_subpictures = true; } /* As long as no subpicture was received, do not call SubpictureDisplay since JNI calls and clearing the subtitles surface are expensive operations. */ if (sys->b_has_subpictures) { SubpicturePrepare(vd, subpicture); if (!subpicture) { /* The surface has been cleared and there is no new subpicture to upload, do not clear again until a new subpicture is received. */ sys->b_has_subpictures = false; } } }