xorg: minor change to capture

ulab-next
Jay Sorg 11 years ago
parent e65c237503
commit 30375962d6

@ -33,6 +33,7 @@
#include "rdpDraw.h" #include "rdpDraw.h"
#include "rdpClientCon.h" #include "rdpClientCon.h"
#include "rdpReg.h" #include "rdpReg.h"
#include "rdpMisc.h"
#define LOG_LEVEL 1 #define LOG_LEVEL 1
#define LLOGLN(_level, _args) \ #define LLOGLN(_level, _args) \
@ -40,13 +41,13 @@
/******************************************************************************/ /******************************************************************************/
static Bool static Bool
rdpCapture0(RegionPtr in_reg, RegionPtr out_reg, rdpCapture0(RegionPtr in_reg, BoxPtr *out_rects, int *num_out_rects,
void *src, int src_width, int src_height, void *src, int src_width, int src_height,
int src_stride, int src_format, int src_stride, int src_format,
void *dst, int dst_width, int dst_height, void *dst, int dst_width, int dst_height,
int dst_stride, int dst_format, int max_rects) int dst_stride, int dst_format, int max_rects)
{ {
BoxPtr prects; BoxPtr psrc_rects;
BoxRec rect; BoxRec rect;
RegionRec reg; RegionRec reg;
char *src_rect; char *src_rect;
@ -88,14 +89,25 @@ rdpCapture0(RegionPtr in_reg, RegionPtr out_reg,
if (num_regions > max_rects) if (num_regions > max_rects)
{ {
num_regions = 1; num_regions = 1;
prects = rdpRegionExtents(&reg); psrc_rects = rdpRegionExtents(&reg);
rdpRegionUninit(out_reg);
rdpRegionInit(out_reg, prects, 0);
} }
else else
{ {
prects = REGION_RECTS(&reg); psrc_rects = REGION_RECTS(&reg);
rdpRegionCopy(out_reg, &reg); }
if (num_regions < 1)
{
return FALSE;
}
*num_out_rects = num_regions;
*out_rects = (BoxPtr) g_malloc(sizeof(BoxRec) * num_regions, 0);
for (i = 0; i < num_regions; i++)
{
rect = psrc_rects[i];
(*out_rects)[i] = rect;
} }
if ((src_format == XRDP_a8r8g8b8) && (dst_format == XRDP_a8r8g8b8)) if ((src_format == XRDP_a8r8g8b8) && (dst_format == XRDP_a8r8g8b8))
@ -105,7 +117,7 @@ rdpCapture0(RegionPtr in_reg, RegionPtr out_reg,
for (i = 0; i < num_regions; i++) for (i = 0; i < num_regions; i++)
{ {
/* get rect to copy */ /* get rect to copy */
rect = prects[i]; rect = (*out_rects)[i];
/* get rect dimensions */ /* get rect dimensions */
width = rect.x2 - rect.x1; width = rect.x2 - rect.x1;
@ -137,7 +149,7 @@ rdpCapture0(RegionPtr in_reg, RegionPtr out_reg,
for (i = 0; i < num_regions; i++) for (i = 0; i < num_regions; i++)
{ {
/* get rect to copy */ /* get rect to copy */
rect = prects[i]; rect = (*out_rects)[i];
/* get rect dimensions */ /* get rect dimensions */
width = rect.x2 - rect.x1; width = rect.x2 - rect.x1;
@ -174,7 +186,7 @@ rdpCapture0(RegionPtr in_reg, RegionPtr out_reg,
for (i = 0; i < num_regions; i++) for (i = 0; i < num_regions; i++)
{ {
/* get rect to copy */ /* get rect to copy */
rect = prects[i]; rect = (*out_rects)[i];
/* get rect dimensions */ /* get rect dimensions */
width = rect.x2 - rect.x1; width = rect.x2 - rect.x1;
@ -211,7 +223,7 @@ rdpCapture0(RegionPtr in_reg, RegionPtr out_reg,
for (i = 0; i < num_regions; i++) for (i = 0; i < num_regions; i++)
{ {
/* get rect to copy */ /* get rect to copy */
rect = prects[i]; rect = (*out_rects)[i];
/* get rect dimensions */ /* get rect dimensions */
width = rect.x2 - rect.x1; width = rect.x2 - rect.x1;
@ -248,7 +260,7 @@ rdpCapture0(RegionPtr in_reg, RegionPtr out_reg,
for (i = 0; i < num_regions; i++) for (i = 0; i < num_regions; i++)
{ {
/* get rect to copy */ /* get rect to copy */
rect = prects[i]; rect = (*out_rects)[i];
/* get rect dimensions */ /* get rect dimensions */
width = rect.x2 - rect.x1; width = rect.x2 - rect.x1;
@ -285,11 +297,22 @@ rdpCapture0(RegionPtr in_reg, RegionPtr out_reg,
return rv; return rv;
} }
/******************************************************************************/
static Bool
rdpCapture1(RegionPtr in_reg, BoxPtr *out_rects, int *num_out_rects,
void *src, int src_width, int src_height,
int src_stride, int src_format,
void *dst, int dst_width, int dst_height,
int dst_stride, int dst_format, int max_rects)
{
return FALSE;
}
/** /**
* Copy an array of rectangles from one memory area to another * Copy an array of rectangles from one memory area to another
*****************************************************************************/ *****************************************************************************/
Bool Bool
rdpCapture(RegionPtr in_reg, RegionPtr out_reg, rdpCapture(RegionPtr in_reg, BoxPtr *out_rects, int *num_out_rects,
void *src, int src_width, int src_height, void *src, int src_width, int src_height,
int src_stride, int src_format, int src_stride, int src_format,
void *dst, int dst_width, int dst_height, void *dst, int dst_width, int dst_height,
@ -299,7 +322,13 @@ rdpCapture(RegionPtr in_reg, RegionPtr out_reg,
switch (mode) switch (mode)
{ {
case 0: case 0:
return rdpCapture0(in_reg, out_reg, return rdpCapture0(in_reg, out_rects, num_out_rects,
src, src_width, src_height,
src_stride, src_format,
dst, dst_width, dst_height,
dst_stride, dst_format, 15);
case 1:
return rdpCapture1(in_reg, out_rects, num_out_rects,
src, src_width, src_height, src, src_width, src_height,
src_stride, src_format, src_stride, src_format,
dst, dst_width, dst_height, dst, dst_width, dst_height,
@ -308,5 +337,5 @@ rdpCapture(RegionPtr in_reg, RegionPtr out_reg,
LLOGLN(0, ("rdpCapture: unimp mode")); LLOGLN(0, ("rdpCapture: unimp mode"));
break; break;
} }
return TRUE; return FALSE;
} }

@ -19,9 +19,8 @@
*/ */
Bool Bool
rdpCapture(RegionPtr in_reg, RegionPtr out_reg, rdpCapture(RegionPtr in_reg, BoxPtr *out_rects, int *num_out_rects,
void *src, int src_width, int src_height, void *src, int src_width, int src_height,
int src_stride, int src_format, int src_stride, int src_format,
void *dst, int dst_width, int dst_height, void *dst, int dst_width, int dst_height,
int dst_stride, int dst_format, int dst_stride, int dst_format, int mode);
int mode);

@ -1874,7 +1874,8 @@ rdpClientConCheckDirtyScreen(rdpPtr dev, rdpClientCon *clientCon)
static int static int
rdpClientConSendPaintRectShmEx(rdpPtr dev, rdpClientCon *clientCon, rdpClientConSendPaintRectShmEx(rdpPtr dev, rdpClientCon *clientCon,
struct image_data *id, struct image_data *id,
RegionPtr dirtyReg, RegionPtr copyReg) RegionPtr dirtyReg,
BoxPtr copyRects, int numCopyRects)
{ {
int index; int index;
int size; int size;
@ -1890,7 +1891,7 @@ rdpClientConSendPaintRectShmEx(rdpPtr dev, rdpClientCon *clientCon,
rdpClientConBeginUpdate(dev, clientCon); rdpClientConBeginUpdate(dev, clientCon);
num_rects_d = REGION_NUM_RECTS(dirtyReg); num_rects_d = REGION_NUM_RECTS(dirtyReg);
num_rects_c = REGION_NUM_RECTS(copyReg); num_rects_c = numCopyRects;
if ((num_rects_c < 1) || (num_rects_d < 1)) if ((num_rects_c < 1) || (num_rects_d < 1))
{ {
LLOGLN(0, ("rdpClientConSendPaintRectShmEx: nothing to send")); LLOGLN(0, ("rdpClientConSendPaintRectShmEx: nothing to send"));
@ -1922,7 +1923,7 @@ rdpClientConSendPaintRectShmEx(rdpPtr dev, rdpClientCon *clientCon,
out_uint16_le(s, num_rects_c); out_uint16_le(s, num_rects_c);
for (index = 0; index < num_rects_c; index++) for (index = 0; index < num_rects_c; index++)
{ {
box = REGION_RECTS(copyReg)[index]; box = copyRects[index];
x = box.x1; x = box.x1;
y = box.y1; y = box.y1;
cx = box.x2 - box.x1; cx = box.x2 - box.x1;
@ -1951,7 +1952,8 @@ static CARD32
rdpDeferredUpdateCallback(OsTimerPtr timer, CARD32 now, pointer arg) rdpDeferredUpdateCallback(OsTimerPtr timer, CARD32 now, pointer arg)
{ {
rdpClientCon *clientCon; rdpClientCon *clientCon;
RegionRec reg; BoxPtr rects;
int num_rects;
struct image_data id; struct image_data id;
LLOGLN(10, ("rdpDeferredUpdateCallback:")); LLOGLN(10, ("rdpDeferredUpdateCallback:"));
@ -1977,18 +1979,26 @@ rdpDeferredUpdateCallback(OsTimerPtr timer, CARD32 now, pointer arg)
clientCon->rdp_width, clientCon->rdp_height, clientCon->rdp_Bpp, clientCon->rdp_width, clientCon->rdp_height, clientCon->rdp_Bpp,
id.width, id.height)); id.width, id.height));
clientCon->updateSchedualed = FALSE; clientCon->updateSchedualed = FALSE;
rdpRegionInit(&reg, NullBox, 0); rects = 0;
rdpCapture(clientCon->dirtyRegion, &reg, num_rects = 0;
if (rdpCapture(clientCon->dirtyRegion, &rects, &num_rects,
id.pixels, id.width, id.height, id.pixels, id.width, id.height,
id.lineBytes, XRDP_a8r8g8b8, id.shmem_pixels, id.lineBytes, XRDP_a8r8g8b8, id.shmem_pixels,
clientCon->rdp_width, clientCon->rdp_height, clientCon->rdp_width, clientCon->rdp_height,
clientCon->rdp_width * clientCon->rdp_Bpp, clientCon->rdp_width * clientCon->rdp_Bpp,
clientCon->rdp_format, 0); clientCon->rdp_format, 0))
{
rdpClientConSendPaintRectShmEx(clientCon->dev, clientCon, &id, rdpClientConSendPaintRectShmEx(clientCon->dev, clientCon, &id,
clientCon->dirtyRegion, &reg); clientCon->dirtyRegion,
rects, num_rects);
g_free(rects);
}
else
{
LLOGLN(0, ("rdpDeferredUpdateCallback: rdpCapture failed"));
}
rdpRegionDestroy(clientCon->dirtyRegion); rdpRegionDestroy(clientCon->dirtyRegion);
clientCon->dirtyRegion = rdpRegionCreate(NullBox, 0); clientCon->dirtyRegion = rdpRegionCreate(NullBox, 0);
rdpRegionUninit(&reg);
return 0; return 0;
} }

Loading…
Cancel
Save