ephyr: Remove the host/server split of the actual XV video operations.
I suspect there's more cleanup possible in ephyrHostXVPutImage() by sticking a bunch of the args in the port priv earlier. Signed-off-by: Eric Anholt <eric@anholt.net> Reviewed-by: Julien Cristau <jcristau@debian.org>
This commit is contained in:
parent
0b7ce74315
commit
2f994dfe9d
|
@ -128,192 +128,3 @@ ephyrHostGetAtomName(int a_atom)
|
||||||
free(reply);
|
free(reply);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
Bool
|
|
||||||
ephyrHostXVPutImage(int a_screen_num,
|
|
||||||
int a_port_id,
|
|
||||||
int a_image_id,
|
|
||||||
int a_drw_x,
|
|
||||||
int a_drw_y,
|
|
||||||
int a_drw_w,
|
|
||||||
int a_drw_h,
|
|
||||||
int a_src_x,
|
|
||||||
int a_src_y,
|
|
||||||
int a_src_w,
|
|
||||||
int a_src_h,
|
|
||||||
int a_image_width,
|
|
||||||
int a_image_height,
|
|
||||||
unsigned char *a_buf,
|
|
||||||
EphyrHostBox * a_clip_rects, int a_clip_rect_nums)
|
|
||||||
{
|
|
||||||
Bool is_ok = TRUE;
|
|
||||||
xcb_connection_t *conn = hostx_get_xcbconn ();
|
|
||||||
xcb_gcontext_t gc;
|
|
||||||
xcb_rectangle_t *rects = NULL;
|
|
||||||
int data_len, width, height;
|
|
||||||
xcb_xv_query_image_attributes_cookie_t image_attr_cookie;
|
|
||||||
xcb_xv_query_image_attributes_reply_t *image_attr_reply;
|
|
||||||
|
|
||||||
EPHYR_RETURN_VAL_IF_FAIL(a_buf, FALSE);
|
|
||||||
|
|
||||||
EPHYR_LOG("enter, num_clip_rects: %d\n", a_clip_rect_nums);
|
|
||||||
|
|
||||||
gc = xcb_generate_id(conn);
|
|
||||||
xcb_create_gc(conn, gc, hostx_get_window(a_screen_num), 0, NULL);
|
|
||||||
|
|
||||||
image_attr_cookie = xcb_xv_query_image_attributes(conn,
|
|
||||||
a_port_id,
|
|
||||||
a_image_id,
|
|
||||||
a_image_width,
|
|
||||||
a_image_height);
|
|
||||||
image_attr_reply = xcb_xv_query_image_attributes_reply(conn,
|
|
||||||
image_attr_cookie,
|
|
||||||
NULL);
|
|
||||||
if (!image_attr_reply)
|
|
||||||
goto out;
|
|
||||||
data_len = image_attr_reply->data_size;
|
|
||||||
width = image_attr_reply->width;
|
|
||||||
height = image_attr_reply->height;
|
|
||||||
free(image_attr_reply);
|
|
||||||
|
|
||||||
if (a_clip_rect_nums) {
|
|
||||||
int i = 0;
|
|
||||||
rects = calloc(a_clip_rect_nums, sizeof(xcb_rectangle_t));
|
|
||||||
for (i=0; i < a_clip_rect_nums; i++) {
|
|
||||||
rects[i].x = a_clip_rects[i].x1;
|
|
||||||
rects[i].y = a_clip_rects[i].y1;
|
|
||||||
rects[i].width = a_clip_rects[i].x2 - a_clip_rects[i].x1;
|
|
||||||
rects[i].height = a_clip_rects[i].y2 - a_clip_rects[i].y1;
|
|
||||||
EPHYR_LOG("(x,y,w,h): (%d,%d,%d,%d)\n",
|
|
||||||
rects[i].x, rects[i].y, rects[i].width, rects[i].height);
|
|
||||||
}
|
|
||||||
xcb_set_clip_rectangles(conn,
|
|
||||||
XCB_CLIP_ORDERING_YX_BANDED,
|
|
||||||
gc,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
a_clip_rect_nums,
|
|
||||||
rects);
|
|
||||||
free(rects);
|
|
||||||
}
|
|
||||||
xcb_xv_put_image(conn,
|
|
||||||
a_port_id,
|
|
||||||
hostx_get_window (a_screen_num),
|
|
||||||
gc,
|
|
||||||
a_image_id,
|
|
||||||
a_src_x, a_src_y, a_src_w, a_src_h,
|
|
||||||
a_drw_x, a_drw_y, a_drw_w, a_drw_h,
|
|
||||||
width, height,
|
|
||||||
data_len, a_buf);
|
|
||||||
is_ok = TRUE;
|
|
||||||
|
|
||||||
out:
|
|
||||||
xcb_free_gc(conn, gc);
|
|
||||||
EPHYR_LOG("leave\n");
|
|
||||||
return is_ok;
|
|
||||||
}
|
|
||||||
|
|
||||||
Bool
|
|
||||||
ephyrHostXVPutVideo(int a_screen_num, int a_port_id,
|
|
||||||
int a_vid_x, int a_vid_y, int a_vid_w, int a_vid_h,
|
|
||||||
int a_drw_x, int a_drw_y, int a_drw_w, int a_drw_h)
|
|
||||||
{
|
|
||||||
Bool is_ok = FALSE;
|
|
||||||
xcb_gcontext_t gc;
|
|
||||||
xcb_connection_t *conn = hostx_get_xcbconn();
|
|
||||||
|
|
||||||
EPHYR_RETURN_VAL_IF_FAIL(conn, FALSE);
|
|
||||||
|
|
||||||
gc = xcb_generate_id(conn);
|
|
||||||
xcb_create_gc(conn, gc, hostx_get_window (a_screen_num), 0, NULL);
|
|
||||||
xcb_xv_put_video(conn,
|
|
||||||
a_port_id,
|
|
||||||
hostx_get_window (a_screen_num), gc,
|
|
||||||
a_vid_x, a_vid_y, a_vid_w, a_vid_h,
|
|
||||||
a_drw_x, a_drw_y, a_drw_w, a_drw_h);
|
|
||||||
is_ok = TRUE;
|
|
||||||
|
|
||||||
xcb_free_gc(conn, gc);
|
|
||||||
|
|
||||||
return is_ok;
|
|
||||||
}
|
|
||||||
|
|
||||||
Bool
|
|
||||||
ephyrHostXVGetVideo(int a_screen_num, int a_port_id,
|
|
||||||
int a_vid_x, int a_vid_y, int a_vid_w, int a_vid_h,
|
|
||||||
int a_drw_x, int a_drw_y, int a_drw_w, int a_drw_h)
|
|
||||||
{
|
|
||||||
xcb_gcontext_t gc;
|
|
||||||
xcb_connection_t *conn = hostx_get_xcbconn();
|
|
||||||
|
|
||||||
EPHYR_RETURN_VAL_IF_FAIL(conn, FALSE);
|
|
||||||
|
|
||||||
gc = xcb_generate_id(conn);
|
|
||||||
xcb_create_gc(conn,
|
|
||||||
gc,
|
|
||||||
hostx_get_window (a_screen_num),
|
|
||||||
0, NULL);
|
|
||||||
xcb_xv_get_video(conn,
|
|
||||||
a_port_id,
|
|
||||||
hostx_get_window (a_screen_num),
|
|
||||||
gc,
|
|
||||||
a_vid_x, a_vid_y, a_vid_w, a_vid_h,
|
|
||||||
a_drw_x, a_drw_y, a_drw_w, a_drw_h);
|
|
||||||
|
|
||||||
xcb_free_gc(conn, gc);
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
Bool
|
|
||||||
ephyrHostXVPutStill(int a_screen_num, int a_port_id,
|
|
||||||
int a_vid_x, int a_vid_y, int a_vid_w, int a_vid_h,
|
|
||||||
int a_drw_x, int a_drw_y, int a_drw_w, int a_drw_h)
|
|
||||||
{
|
|
||||||
xcb_connection_t *conn = hostx_get_xcbconn();
|
|
||||||
xcb_gcontext_t gc;
|
|
||||||
|
|
||||||
EPHYR_RETURN_VAL_IF_FAIL(conn, FALSE);
|
|
||||||
|
|
||||||
gc = xcb_generate_id(conn);
|
|
||||||
xcb_create_gc(conn,
|
|
||||||
gc,
|
|
||||||
hostx_get_window (a_screen_num),
|
|
||||||
0, NULL);
|
|
||||||
xcb_xv_put_still(conn,
|
|
||||||
a_port_id,
|
|
||||||
hostx_get_window (a_screen_num),
|
|
||||||
gc,
|
|
||||||
a_vid_x, a_vid_y, a_vid_w, a_vid_h,
|
|
||||||
a_drw_x, a_drw_y, a_drw_w, a_drw_h);
|
|
||||||
|
|
||||||
xcb_free_gc(conn, gc);
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
Bool
|
|
||||||
ephyrHostXVGetStill(int a_screen_num, int a_port_id,
|
|
||||||
int a_vid_x, int a_vid_y, int a_vid_w, int a_vid_h,
|
|
||||||
int a_drw_x, int a_drw_y, int a_drw_w, int a_drw_h)
|
|
||||||
{
|
|
||||||
xcb_gcontext_t gc;
|
|
||||||
xcb_connection_t *conn = hostx_get_xcbconn();
|
|
||||||
|
|
||||||
EPHYR_RETURN_VAL_IF_FAIL(conn, FALSE);
|
|
||||||
|
|
||||||
gc = xcb_generate_id(conn);
|
|
||||||
xcb_create_gc(conn,
|
|
||||||
gc,
|
|
||||||
hostx_get_window (a_screen_num),
|
|
||||||
0, NULL);
|
|
||||||
xcb_xv_get_still(conn,
|
|
||||||
a_port_id,
|
|
||||||
hostx_get_window (a_screen_num),
|
|
||||||
gc,
|
|
||||||
a_vid_x, a_vid_y, a_vid_w, a_vid_h,
|
|
||||||
a_drw_x, a_drw_y, a_drw_w, a_drw_h);
|
|
||||||
xcb_free_gc(conn, gc);
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
|
@ -31,10 +31,6 @@
|
||||||
#include <xcb/xv.h>
|
#include <xcb/xv.h>
|
||||||
#include <X11/Xdefs.h>
|
#include <X11/Xdefs.h>
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
unsigned short x1, y1, x2, y2;
|
|
||||||
} EphyrHostBox;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*size query
|
*size query
|
||||||
*/
|
*/
|
||||||
|
@ -54,47 +50,4 @@ Bool ephyrHostGetAtom(const char *a_name,
|
||||||
Bool a_create_if_not_exists, int *a_atom);
|
Bool a_create_if_not_exists, int *a_atom);
|
||||||
char *ephyrHostGetAtomName(int a_atom);
|
char *ephyrHostGetAtomName(int a_atom);
|
||||||
|
|
||||||
/*
|
|
||||||
*PutImage
|
|
||||||
* (ignore clipping for now)
|
|
||||||
*/
|
|
||||||
Bool ephyrHostXVPutImage(int a_screen_num,
|
|
||||||
int a_port_id,
|
|
||||||
int a_image_id,
|
|
||||||
int a_drw_x,
|
|
||||||
int a_drw_y,
|
|
||||||
int a_drw_w,
|
|
||||||
int a_drw_h,
|
|
||||||
int a_src_x,
|
|
||||||
int a_src_y,
|
|
||||||
int a_src_w,
|
|
||||||
int a_src_h,
|
|
||||||
int a_image_width,
|
|
||||||
int a_image_height,
|
|
||||||
unsigned char *a_buf,
|
|
||||||
EphyrHostBox * a_clip_rects, int a_clip_rect_nums);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Putvideo/PutStill/GetVideo
|
|
||||||
*/
|
|
||||||
Bool ephyrHostXVPutVideo(int a_screen_num,
|
|
||||||
int a_port_id,
|
|
||||||
int a_vid_x, int a_vid_y, int a_vid_w, int a_vid_h,
|
|
||||||
int a_drw_x, int a_drw_y, int a_drw_w, int a_drw_h);
|
|
||||||
|
|
||||||
Bool ephyrHostXVGetVideo(int a_screen_num,
|
|
||||||
int a_port_id,
|
|
||||||
int a_vid_x, int a_vid_y, int a_vid_w, int a_vid_h,
|
|
||||||
int a_drw_x, int a_drw_y, int a_drw_w, int a_drw_h);
|
|
||||||
|
|
||||||
Bool ephyrHostXVPutStill(int a_screen_num,
|
|
||||||
int a_port_id,
|
|
||||||
int a_vid_x, int a_vid_y, int a_vid_w, int a_vid_h,
|
|
||||||
int a_drw_x, int a_drw_y, int a_drw_w, int a_drw_h);
|
|
||||||
|
|
||||||
Bool ephyrHostXVGetStill(int a_screen_num,
|
|
||||||
int a_port_id,
|
|
||||||
int a_vid_x, int a_vid_y, int a_vid_w, int a_vid_h,
|
|
||||||
int a_drw_x, int a_drw_y, int a_drw_w, int a_drw_h);
|
|
||||||
|
|
||||||
#endif /*__EPHYRHOSTVIDEO_H__*/
|
#endif /*__EPHYRHOSTVIDEO_H__*/
|
||||||
|
|
|
@ -919,6 +919,93 @@ ephyrQueryBestSize(KdScreenInfo * a_info,
|
||||||
EPHYR_LOG("leave\n");
|
EPHYR_LOG("leave\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static Bool
|
||||||
|
ephyrHostXVPutImage(KdScreenInfo * a_info,
|
||||||
|
EphyrPortPriv *port_priv,
|
||||||
|
int a_image_id,
|
||||||
|
int a_drw_x,
|
||||||
|
int a_drw_y,
|
||||||
|
int a_drw_w,
|
||||||
|
int a_drw_h,
|
||||||
|
int a_src_x,
|
||||||
|
int a_src_y,
|
||||||
|
int a_src_w,
|
||||||
|
int a_src_h,
|
||||||
|
int a_image_width,
|
||||||
|
int a_image_height,
|
||||||
|
unsigned char *a_buf,
|
||||||
|
BoxPtr a_clip_rects, int a_clip_rect_nums)
|
||||||
|
{
|
||||||
|
EphyrScrPriv *scrpriv = a_info->driver;
|
||||||
|
xcb_connection_t *conn = hostx_get_xcbconn();
|
||||||
|
xcb_gcontext_t gc;
|
||||||
|
Bool is_ok = TRUE;
|
||||||
|
xcb_rectangle_t *rects = NULL;
|
||||||
|
int data_len, width, height;
|
||||||
|
xcb_xv_query_image_attributes_cookie_t image_attr_cookie;
|
||||||
|
xcb_xv_query_image_attributes_reply_t *image_attr_reply;
|
||||||
|
|
||||||
|
EPHYR_RETURN_VAL_IF_FAIL(a_buf, FALSE);
|
||||||
|
|
||||||
|
EPHYR_LOG("enter, num_clip_rects: %d\n", a_clip_rect_nums);
|
||||||
|
|
||||||
|
image_attr_cookie = xcb_xv_query_image_attributes(conn,
|
||||||
|
port_priv->port_number,
|
||||||
|
a_image_id,
|
||||||
|
a_image_width,
|
||||||
|
a_image_height);
|
||||||
|
image_attr_reply = xcb_xv_query_image_attributes_reply(conn,
|
||||||
|
image_attr_cookie,
|
||||||
|
NULL);
|
||||||
|
if (!image_attr_reply)
|
||||||
|
goto out;
|
||||||
|
data_len = image_attr_reply->data_size;
|
||||||
|
width = image_attr_reply->width;
|
||||||
|
height = image_attr_reply->height;
|
||||||
|
free(image_attr_reply);
|
||||||
|
|
||||||
|
gc = xcb_generate_id(conn);
|
||||||
|
xcb_create_gc(conn, gc, scrpriv->win, 0, NULL);
|
||||||
|
|
||||||
|
if (a_clip_rect_nums) {
|
||||||
|
int i = 0;
|
||||||
|
rects = calloc(a_clip_rect_nums, sizeof(xcb_rectangle_t));
|
||||||
|
for (i=0; i < a_clip_rect_nums; i++) {
|
||||||
|
rects[i].x = a_clip_rects[i].x1;
|
||||||
|
rects[i].y = a_clip_rects[i].y1;
|
||||||
|
rects[i].width = a_clip_rects[i].x2 - a_clip_rects[i].x1;
|
||||||
|
rects[i].height = a_clip_rects[i].y2 - a_clip_rects[i].y1;
|
||||||
|
EPHYR_LOG("(x,y,w,h): (%d,%d,%d,%d)\n",
|
||||||
|
rects[i].x, rects[i].y, rects[i].width, rects[i].height);
|
||||||
|
}
|
||||||
|
xcb_set_clip_rectangles(conn,
|
||||||
|
XCB_CLIP_ORDERING_YX_BANDED,
|
||||||
|
gc,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
a_clip_rect_nums,
|
||||||
|
rects);
|
||||||
|
free(rects);
|
||||||
|
}
|
||||||
|
xcb_xv_put_image(conn,
|
||||||
|
port_priv->port_number,
|
||||||
|
scrpriv->win,
|
||||||
|
gc,
|
||||||
|
a_image_id,
|
||||||
|
a_src_x, a_src_y, a_src_w, a_src_h,
|
||||||
|
a_drw_x, a_drw_y, a_drw_w, a_drw_h,
|
||||||
|
width, height,
|
||||||
|
data_len, a_buf);
|
||||||
|
xcb_free_gc(conn, gc);
|
||||||
|
|
||||||
|
is_ok = TRUE;
|
||||||
|
|
||||||
|
out:
|
||||||
|
EPHYR_LOG("leave\n");
|
||||||
|
return is_ok;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
ephyrPutImage(KdScreenInfo * a_info,
|
ephyrPutImage(KdScreenInfo * a_info,
|
||||||
DrawablePtr a_drawable,
|
DrawablePtr a_drawable,
|
||||||
|
@ -945,13 +1032,12 @@ ephyrPutImage(KdScreenInfo * a_info,
|
||||||
|
|
||||||
EPHYR_LOG("enter\n");
|
EPHYR_LOG("enter\n");
|
||||||
|
|
||||||
if (!ephyrHostXVPutImage(a_info->pScreen->myNum,
|
if (!ephyrHostXVPutImage(a_info, port_priv,
|
||||||
port_priv->port_number,
|
|
||||||
a_id,
|
a_id,
|
||||||
a_drw_x, a_drw_y, a_drw_w, a_drw_h,
|
a_drw_x, a_drw_y, a_drw_w, a_drw_h,
|
||||||
a_src_x, a_src_y, a_src_w, a_src_h,
|
a_src_x, a_src_y, a_src_w, a_src_h,
|
||||||
a_width, a_height, a_buf,
|
a_width, a_height, a_buf,
|
||||||
(EphyrHostBox *) RegionRects(a_clipping_region),
|
RegionRects(a_clipping_region),
|
||||||
RegionNumRects(a_clipping_region))) {
|
RegionNumRects(a_clipping_region))) {
|
||||||
EPHYR_LOG_ERROR("EphyrHostXVPutImage() failed\n");
|
EPHYR_LOG_ERROR("EphyrHostXVPutImage() failed\n");
|
||||||
goto out;
|
goto out;
|
||||||
|
@ -1021,8 +1107,8 @@ ephyrReputImage(KdScreenInfo * a_info,
|
||||||
EPHYR_LOG_ERROR("has null image buf in cache\n");
|
EPHYR_LOG_ERROR("has null image buf in cache\n");
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
if (!ephyrHostXVPutImage(a_info->pScreen->myNum,
|
if (!ephyrHostXVPutImage(a_info,
|
||||||
port_priv->port_number,
|
port_priv,
|
||||||
port_priv->image_id,
|
port_priv->image_id,
|
||||||
a_drw_x, a_drw_y,
|
a_drw_x, a_drw_y,
|
||||||
port_priv->drw_w, port_priv->drw_h,
|
port_priv->drw_w, port_priv->drw_h,
|
||||||
|
@ -1030,7 +1116,7 @@ ephyrReputImage(KdScreenInfo * a_info,
|
||||||
port_priv->src_w, port_priv->src_h,
|
port_priv->src_w, port_priv->src_h,
|
||||||
port_priv->image_width, port_priv->image_height,
|
port_priv->image_width, port_priv->image_height,
|
||||||
port_priv->image_buf,
|
port_priv->image_buf,
|
||||||
(EphyrHostBox *) RegionRects(a_clipping_region),
|
RegionRects(a_clipping_region),
|
||||||
RegionNumRects(a_clipping_region))) {
|
RegionNumRects(a_clipping_region))) {
|
||||||
EPHYR_LOG_ERROR("ephyrHostXVPutImage() failed\n");
|
EPHYR_LOG_ERROR("ephyrHostXVPutImage() failed\n");
|
||||||
goto out;
|
goto out;
|
||||||
|
@ -1052,6 +1138,9 @@ ephyrPutVideo(KdScreenInfo * a_info,
|
||||||
short a_drw_w, short a_drw_h,
|
short a_drw_w, short a_drw_h,
|
||||||
RegionPtr a_clipping_region, pointer a_port_priv)
|
RegionPtr a_clipping_region, pointer a_port_priv)
|
||||||
{
|
{
|
||||||
|
EphyrScrPriv *scrpriv = a_info->driver;
|
||||||
|
xcb_connection_t *conn = hostx_get_xcbconn();
|
||||||
|
xcb_gcontext_t gc;
|
||||||
EphyrPortPriv *port_priv = a_port_priv;
|
EphyrPortPriv *port_priv = a_port_priv;
|
||||||
BoxRec clipped_area, dst_box;
|
BoxRec clipped_area, dst_box;
|
||||||
int result = BadImplementation;
|
int result = BadImplementation;
|
||||||
|
@ -1072,13 +1161,14 @@ ephyrPutVideo(KdScreenInfo * a_info,
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ephyrHostXVPutVideo(a_info->pScreen->myNum,
|
gc = xcb_generate_id(conn);
|
||||||
port_priv->port_number,
|
xcb_create_gc(conn, gc, scrpriv->win, 0, NULL);
|
||||||
a_vid_x, a_vid_y, a_vid_w, a_vid_h,
|
xcb_xv_put_video(conn, port_priv->port_number,
|
||||||
a_drw_x, a_drw_y, a_drw_w, a_drw_h)) {
|
scrpriv->win, gc,
|
||||||
EPHYR_LOG_ERROR("ephyrHostXVPutVideo() failed\n");
|
a_vid_x, a_vid_y, a_vid_w, a_vid_h,
|
||||||
goto out;
|
a_drw_x, a_drw_y, a_drw_w, a_drw_h);
|
||||||
}
|
xcb_free_gc(conn, gc);
|
||||||
|
|
||||||
result = Success;
|
result = Success;
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
@ -1095,6 +1185,9 @@ ephyrGetVideo(KdScreenInfo * a_info,
|
||||||
short a_drw_w, short a_drw_h,
|
short a_drw_w, short a_drw_h,
|
||||||
RegionPtr a_clipping_region, pointer a_port_priv)
|
RegionPtr a_clipping_region, pointer a_port_priv)
|
||||||
{
|
{
|
||||||
|
EphyrScrPriv *scrpriv = a_info->driver;
|
||||||
|
xcb_connection_t *conn = hostx_get_xcbconn();
|
||||||
|
xcb_gcontext_t gc;
|
||||||
EphyrPortPriv *port_priv = a_port_priv;
|
EphyrPortPriv *port_priv = a_port_priv;
|
||||||
BoxRec clipped_area, dst_box;
|
BoxRec clipped_area, dst_box;
|
||||||
int result = BadImplementation;
|
int result = BadImplementation;
|
||||||
|
@ -1115,13 +1208,15 @@ ephyrGetVideo(KdScreenInfo * a_info,
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ephyrHostXVGetVideo(a_info->pScreen->myNum,
|
gc = xcb_generate_id(conn);
|
||||||
port_priv->port_number,
|
xcb_create_gc(conn, gc, scrpriv->win, 0, NULL);
|
||||||
a_vid_x, a_vid_y, a_vid_w, a_vid_h,
|
xcb_xv_get_video(conn, port_priv->port_number,
|
||||||
a_drw_x, a_drw_y, a_drw_w, a_drw_h)) {
|
scrpriv->win, gc,
|
||||||
EPHYR_LOG_ERROR("ephyrHostXVGetVideo() failed\n");
|
a_vid_x, a_vid_y, a_vid_w, a_vid_h,
|
||||||
goto out;
|
a_drw_x, a_drw_y, a_drw_w, a_drw_h);
|
||||||
}
|
|
||||||
|
xcb_free_gc(conn, gc);
|
||||||
|
|
||||||
result = Success;
|
result = Success;
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
@ -1138,6 +1233,9 @@ ephyrPutStill(KdScreenInfo * a_info,
|
||||||
short a_drw_w, short a_drw_h,
|
short a_drw_w, short a_drw_h,
|
||||||
RegionPtr a_clipping_region, pointer a_port_priv)
|
RegionPtr a_clipping_region, pointer a_port_priv)
|
||||||
{
|
{
|
||||||
|
EphyrScrPriv *scrpriv = a_info->driver;
|
||||||
|
xcb_connection_t *conn = hostx_get_xcbconn();
|
||||||
|
xcb_gcontext_t gc;
|
||||||
EphyrPortPriv *port_priv = a_port_priv;
|
EphyrPortPriv *port_priv = a_port_priv;
|
||||||
BoxRec clipped_area, dst_box;
|
BoxRec clipped_area, dst_box;
|
||||||
int result = BadImplementation;
|
int result = BadImplementation;
|
||||||
|
@ -1158,13 +1256,14 @@ ephyrPutStill(KdScreenInfo * a_info,
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ephyrHostXVPutStill(a_info->pScreen->myNum,
|
gc = xcb_generate_id(conn);
|
||||||
port_priv->port_number,
|
xcb_create_gc(conn, gc, scrpriv->win, 0, NULL);
|
||||||
a_vid_x, a_vid_y, a_vid_w, a_vid_h,
|
xcb_xv_put_still(conn, port_priv->port_number,
|
||||||
a_drw_x, a_drw_y, a_drw_w, a_drw_h)) {
|
scrpriv->win, gc,
|
||||||
EPHYR_LOG_ERROR("ephyrHostXVPutStill() failed\n");
|
a_vid_x, a_vid_y, a_vid_w, a_vid_h,
|
||||||
goto out;
|
a_drw_x, a_drw_y, a_drw_w, a_drw_h);
|
||||||
}
|
xcb_free_gc(conn, gc);
|
||||||
|
|
||||||
result = Success;
|
result = Success;
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
@ -1181,6 +1280,9 @@ ephyrGetStill(KdScreenInfo * a_info,
|
||||||
short a_drw_w, short a_drw_h,
|
short a_drw_w, short a_drw_h,
|
||||||
RegionPtr a_clipping_region, pointer a_port_priv)
|
RegionPtr a_clipping_region, pointer a_port_priv)
|
||||||
{
|
{
|
||||||
|
EphyrScrPriv *scrpriv = a_info->driver;
|
||||||
|
xcb_connection_t *conn = hostx_get_xcbconn();
|
||||||
|
xcb_gcontext_t gc;
|
||||||
EphyrPortPriv *port_priv = a_port_priv;
|
EphyrPortPriv *port_priv = a_port_priv;
|
||||||
BoxRec clipped_area, dst_box;
|
BoxRec clipped_area, dst_box;
|
||||||
int result = BadImplementation;
|
int result = BadImplementation;
|
||||||
|
@ -1201,13 +1303,14 @@ ephyrGetStill(KdScreenInfo * a_info,
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ephyrHostXVGetStill(a_info->pScreen->myNum,
|
gc = xcb_generate_id(conn);
|
||||||
port_priv->port_number,
|
xcb_create_gc(conn, gc, scrpriv->win, 0, NULL);
|
||||||
a_vid_x, a_vid_y, a_vid_w, a_vid_h,
|
xcb_xv_get_still(conn, port_priv->port_number,
|
||||||
a_drw_x, a_drw_y, a_drw_w, a_drw_h)) {
|
scrpriv->win, gc,
|
||||||
EPHYR_LOG_ERROR("ephyrHostXVGetStill() failed\n");
|
a_vid_x, a_vid_y, a_vid_w, a_vid_h,
|
||||||
goto out;
|
a_drw_x, a_drw_y, a_drw_w, a_drw_h);
|
||||||
}
|
xcb_free_gc(conn, gc);
|
||||||
|
|
||||||
result = Success;
|
result = Success;
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
|
Loading…
Reference in New Issue