コード例 #1
0
ファイル: display.c プロジェクト: mstorsjo/vlc
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;
}
コード例 #2
0
ファイル: display.c プロジェクト: mstorsjo/vlc
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);
}
コード例 #3
0
ファイル: display.c プロジェクト: mstorsjo/vlc
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);
}
コード例 #4
0
ファイル: display.c プロジェクト: mstorsjo/vlc
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;
}
コード例 #5
0
ファイル: android_window.c プロジェクト: mark5242/vlc
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);
}
コード例 #6
0
ファイル: android_window.c プロジェクト: khavnu/VLCLIB
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);
}
コード例 #7
0
ファイル: android_window.c プロジェクト: khavnu/VLCLIB
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;
    }
}
コード例 #8
0
ファイル: android_window.c プロジェクト: mark5242/vlc
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);
}
コード例 #9
0
ファイル: android_window.c プロジェクト: mark5242/vlc
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;
}