static int xcbgrab_reposition(AVFormatContext *s,

                              xcb_query_pointer_reply_t *p,

                              xcb_get_geometry_reply_t *geo)

{

    XCBGrabContext *c = s->priv_data;

    int x = c->x, y = c->y, p_x = p->win_x, p_y = p->win_y;

    int w = c->width, h = c->height, f = c->follow_mouse;



    if (!p || !geo)

        return AVERROR(EIO);



    if (f == FOLLOW_CENTER) {

        x = p_x - w / 2;

        y = p_y - h / 2;

    } else {

        int left   = x + f;

        int right  = x + w - f;

        int top    = y + f;

        int bottom = y + h + f;

        if (p_x > right) {

            x += p_x - right;

        } else if (p_x < left) {

            x -= left - p_x;

        }

        if (p_y > bottom) {

            y += p_y - bottom;

        } else if (p_y < top) {

            y -= top - p_y;

        }

    }



    c->x = FFMIN(FFMAX(0, x), geo->width  - w);

    c->y = FFMIN(FFMAX(0, y), geo->height - h);



    return 0;

}

static int xcbgrab_reposition(AVFormatContext *s,

                              xcb_query_pointer_reply_t *p,

                              xcb_get_geometry_reply_t *geo)

{

    XCBGrabContext *c = s->priv_data;

    int x = c->x, y = c->y, p_x = p->win_x, p_y = p->win_y;

    int w = c->width, h = c->height, f = c->follow_mouse;



    if (!p || !geo)

        return AVERROR(EIO);



    if (f == FOLLOW_CENTER) {

        x = p_x - w / 2;

        y = p_y - h / 2;

    } else {

        int left   = x + f;

        int right  = x + w - f;

        int top    = y + f;

        int bottom = y + h + f;

        if (p_x > right) {

            x += p_x - right;

        } else if (p_x < left) {

            x -= left - p_x;

        }

        if (p_y > bottom) {

            y += p_y - bottom;

        } else if (p_y < top) {

            y -= top - p_y;

        }

    }



    c->x = FFMIN(FFMAX(0, x), geo->width  - w);

    c->y = FFMIN(FFMAX(0, y), geo->height - h);



    return 0;

}

static int FUNC_0(AVFormatContext *VAR_0,

                              xcb_query_pointer_reply_t *VAR_1,

                              xcb_get_geometry_reply_t *VAR_2)

{

    XCBGrabContext *c = VAR_0->priv_data;

    int VAR_3 = c->VAR_3, VAR_4 = c->VAR_4, VAR_5 = VAR_1->win_x, VAR_6 = VAR_1->win_y;

    int VAR_7 = c->width, VAR_8 = c->height, VAR_9 = c->follow_mouse;



    if (!VAR_1 || !VAR_2)

        return AVERROR(EIO);



    if (VAR_9 == FOLLOW_CENTER) {

        VAR_3 = VAR_5 - VAR_7 / 2;

        VAR_4 = VAR_6 - VAR_8 / 2;

    } else {

        int VAR_10   = VAR_3 + VAR_9;

        int VAR_11  = VAR_3 + VAR_7 - VAR_9;

        int VAR_12    = VAR_4 + VAR_9;

        int VAR_13 = VAR_4 + VAR_8 + VAR_9;

        if (VAR_5 > VAR_11) {

            VAR_3 += VAR_5 - VAR_11;

        } else if (VAR_5 < VAR_10) {

            VAR_3 -= VAR_10 - VAR_5;

        }

        if (VAR_6 > VAR_13) {

            VAR_4 += VAR_6 - VAR_13;

        } else if (VAR_6 < VAR_12) {

            VAR_4 -= VAR_12 - VAR_6;

        }

    }



    c->VAR_3 = FFMIN(FFMAX(0, VAR_3), VAR_2->width  - VAR_7);

    c->VAR_4 = FFMIN(FFMAX(0, VAR_4), VAR_2->height - VAR_8);



    return 0;

}

static int FUNC_0(AVFormatContext *VAR_0,
xcb_query_pointer_reply_t *VAR_1,
xcb_get_geometry_reply_t *VAR_2)
{ XCBGrabContext *c = VAR_0->priv_data; int VAR_3 = c->VAR_3, VAR_4 = c->VAR_4, VAR_5 = VAR_1->win_x, VAR_6 = VAR_1->win_y; int VAR_7 = c->width, VAR_8 = c->height, VAR_9 = c->follow_mouse; if (!VAR_1 || !VAR_2)
return AVERROR(EIO); if (VAR_9 == FOLLOW_CENTER) { VAR_3 = VAR_5 - VAR_7 / 2; VAR_4 = VAR_6 - VAR_8 / 2; } else { int VAR_10   = VAR_3 + VAR_9; int VAR_11  = VAR_3 + VAR_7 - VAR_9; int VAR_12    = VAR_4 + VAR_9; int VAR_13 = VAR_4 + VAR_8 + VAR_9; if (VAR_5 > VAR_11) { VAR_3 += VAR_5 - VAR_11; } else if (VAR_5 < VAR_10) { VAR_3 -= VAR_10 - VAR_5; } if (VAR_6 > VAR_13) { VAR_4 += VAR_6 - VAR_13; } else if (VAR_6 < VAR_12) { VAR_4 -= VAR_12 - VAR_6; } } c->VAR_3 = FFMIN(FFMAX(0, VAR_3), VAR_2->width  - VAR_7); c->VAR_4 = FFMIN(FFMAX(0, VAR_4), VAR_2->height - VAR_8); return 0; }