add [Get/Put]Video and [Get/Put]Still support
* hw/kdrive/ephyr/ephyrhostvideo.c,h: (ephyrHostXVAdaptorHasXXX): fix these. (ephyrHostXVAdaptorHasGetVideo): added this (ephyrHostXVAdaptorHasGetStill): ditto (ephyrHostXVPutVideo): added this (ephyrHostXVGetVideo): ditto (ephyrHostXVPutStill): ditto (ephyrHostXVGetStill): ditto * hw/kdrive/ephyr/ephyrvideo.c: (ephyrPutVideo): implement this (ephyrGetVideo): ditto (ephyrPutStill): ditto (ephyrGetStill): ditto (ephyrXVPrivSetAdaptorsHooks): advertise GetVideo and GetStill when the host X supports it.
This commit is contained in:
parent
6f7961bc21
commit
4ed083095a
|
@ -370,7 +370,18 @@ ephyrHostXVAdaptorHasPutVideo (const EphyrHostXVAdaptor *a_this,
|
||||||
{
|
{
|
||||||
EPHYR_RETURN_VAL_IF_FAIL (a_this && a_result, FALSE) ;
|
EPHYR_RETURN_VAL_IF_FAIL (a_this && a_result, FALSE) ;
|
||||||
|
|
||||||
if (((XvAdaptorInfo*)a_this)->type & XvVideoMask)
|
if (((XvAdaptorInfo*)a_this)->type & XvVideoMask & XvInputMask)
|
||||||
|
*a_result = TRUE ;
|
||||||
|
else
|
||||||
|
*a_result = FALSE ;
|
||||||
|
return TRUE ;
|
||||||
|
}
|
||||||
|
|
||||||
|
Bool
|
||||||
|
ephyrHostXVAdaptorHasGetVideo (const EphyrHostXVAdaptor *a_this,
|
||||||
|
Bool *a_result)
|
||||||
|
{
|
||||||
|
if (((XvAdaptorInfo*)a_this)->type & XvVideoMask & XvOutputMask)
|
||||||
*a_result = TRUE ;
|
*a_result = TRUE ;
|
||||||
else
|
else
|
||||||
*a_result = FALSE ;
|
*a_result = FALSE ;
|
||||||
|
@ -383,7 +394,20 @@ ephyrHostXVAdaptorHasPutStill (const EphyrHostXVAdaptor *a_this,
|
||||||
{
|
{
|
||||||
EPHYR_RETURN_VAL_IF_FAIL (a_this && a_result, FALSE) ;
|
EPHYR_RETURN_VAL_IF_FAIL (a_this && a_result, FALSE) ;
|
||||||
|
|
||||||
if (((XvAdaptorInfo*)a_this)->type & XvStillMask)
|
if (((XvAdaptorInfo*)a_this)->type & XvStillMask && XvInputMask)
|
||||||
|
*a_result = TRUE ;
|
||||||
|
else
|
||||||
|
*a_result = FALSE ;
|
||||||
|
return TRUE ;
|
||||||
|
}
|
||||||
|
|
||||||
|
Bool
|
||||||
|
ephyrHostXVAdaptorHasGetStill (const EphyrHostXVAdaptor *a_this,
|
||||||
|
Bool *a_result)
|
||||||
|
{
|
||||||
|
EPHYR_RETURN_VAL_IF_FAIL (a_this && a_result, FALSE) ;
|
||||||
|
|
||||||
|
if (((XvAdaptorInfo*)a_this)->type & XvStillMask && XvOutputMask)
|
||||||
*a_result = TRUE ;
|
*a_result = TRUE ;
|
||||||
else
|
else
|
||||||
*a_result = FALSE ;
|
*a_result = FALSE ;
|
||||||
|
@ -396,7 +420,7 @@ ephyrHostXVAdaptorHasPutImage (const EphyrHostXVAdaptor *a_this,
|
||||||
{
|
{
|
||||||
EPHYR_RETURN_VAL_IF_FAIL (a_this && a_result, FALSE) ;
|
EPHYR_RETURN_VAL_IF_FAIL (a_this && a_result, FALSE) ;
|
||||||
|
|
||||||
if (((XvAdaptorInfo*)a_this)->type & XvImageMask)
|
if (((XvAdaptorInfo*)a_this)->type & XvImageMask && XvInputMask)
|
||||||
*a_result = TRUE ;
|
*a_result = TRUE ;
|
||||||
else
|
else
|
||||||
*a_result = FALSE ;
|
*a_result = FALSE ;
|
||||||
|
@ -739,12 +763,13 @@ ephyrHostXVPutImage (int a_port_id,
|
||||||
XvImage *xv_image=NULL ;
|
XvImage *xv_image=NULL ;
|
||||||
GC gc=0 ;
|
GC gc=0 ;
|
||||||
XGCValues gc_values;
|
XGCValues gc_values;
|
||||||
|
Display *dpy = hostx_get_display () ;
|
||||||
|
|
||||||
EPHYR_RETURN_VAL_IF_FAIL (a_buf, FALSE) ;
|
EPHYR_RETURN_VAL_IF_FAIL (a_buf, FALSE) ;
|
||||||
|
|
||||||
EPHYR_LOG ("enter\n") ;
|
EPHYR_LOG ("enter\n") ;
|
||||||
|
|
||||||
gc = XCreateGC (hostx_get_display (), hostx_get_window (), 0L, &gc_values);
|
gc = XCreateGC (dpy, hostx_get_window (), 0L, &gc_values);
|
||||||
if (!gc) {
|
if (!gc) {
|
||||||
EPHYR_LOG_ERROR ("failed to create gc \n") ;
|
EPHYR_LOG_ERROR ("failed to create gc \n") ;
|
||||||
goto out ;
|
goto out ;
|
||||||
|
@ -757,11 +782,11 @@ ephyrHostXVPutImage (int a_port_id,
|
||||||
goto out ;
|
goto out ;
|
||||||
}
|
}
|
||||||
xv_image->data = (char*)a_buf ;
|
xv_image->data = (char*)a_buf ;
|
||||||
XvPutImage (hostx_get_display (), a_port_id, hostx_get_window (),
|
XvPutImage (dpy, a_port_id, hostx_get_window (),
|
||||||
gc, xv_image,
|
gc, xv_image,
|
||||||
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_drw_x, a_drw_y, a_drw_w, a_drw_h) ;
|
a_drw_x, a_drw_y, a_drw_w, a_drw_h) ;
|
||||||
XFlush (hostx_get_display ()) ;
|
XFlush (dpy) ;
|
||||||
is_ok = TRUE ;
|
is_ok = TRUE ;
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
@ -771,5 +796,158 @@ out:
|
||||||
XFree (xv_image) ;
|
XFree (xv_image) ;
|
||||||
xv_image = NULL ;
|
xv_image = NULL ;
|
||||||
}
|
}
|
||||||
|
if (gc) {
|
||||||
|
XFreeGC (dpy, gc) ;
|
||||||
|
gc = NULL ;
|
||||||
|
}
|
||||||
return is_ok ;
|
return is_ok ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Bool
|
||||||
|
ephyrHostXVPutVideo (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 ;
|
||||||
|
int res=FALSE ;
|
||||||
|
GC gc=0 ;
|
||||||
|
XGCValues gc_values;
|
||||||
|
Display *dpy=hostx_get_display () ;
|
||||||
|
|
||||||
|
EPHYR_RETURN_VAL_IF_FAIL (dpy, FALSE) ;
|
||||||
|
|
||||||
|
gc = XCreateGC (dpy, hostx_get_window (), 0L, &gc_values);
|
||||||
|
if (!gc) {
|
||||||
|
EPHYR_LOG_ERROR ("failed to create gc \n") ;
|
||||||
|
goto out ;
|
||||||
|
}
|
||||||
|
res = XvPutVideo (dpy, a_port_id, hostx_get_window (), 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) ;
|
||||||
|
|
||||||
|
if (res != Success) {
|
||||||
|
EPHYR_LOG_ERROR ("XvPutVideo() failed: %d\n", res) ;
|
||||||
|
goto out ;
|
||||||
|
}
|
||||||
|
|
||||||
|
is_ok = TRUE ;
|
||||||
|
|
||||||
|
out:
|
||||||
|
if (gc) {
|
||||||
|
XFreeGC (dpy, gc) ;
|
||||||
|
gc = NULL ;
|
||||||
|
}
|
||||||
|
return is_ok ;
|
||||||
|
}
|
||||||
|
|
||||||
|
Bool
|
||||||
|
ephyrHostXVGetVideo (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 ;
|
||||||
|
int res=FALSE ;
|
||||||
|
GC gc=0 ;
|
||||||
|
XGCValues gc_values;
|
||||||
|
Display *dpy=hostx_get_display () ;
|
||||||
|
|
||||||
|
EPHYR_RETURN_VAL_IF_FAIL (dpy, FALSE) ;
|
||||||
|
|
||||||
|
gc = XCreateGC (dpy, hostx_get_window (), 0L, &gc_values);
|
||||||
|
if (!gc) {
|
||||||
|
EPHYR_LOG_ERROR ("failed to create gc \n") ;
|
||||||
|
goto out ;
|
||||||
|
}
|
||||||
|
res = XvGetVideo (dpy, a_port_id, hostx_get_window (), 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) ;
|
||||||
|
|
||||||
|
if (res != Success) {
|
||||||
|
EPHYR_LOG_ERROR ("XvGetVideo() failed: %d\n", res) ;
|
||||||
|
goto out ;
|
||||||
|
}
|
||||||
|
|
||||||
|
is_ok = TRUE ;
|
||||||
|
|
||||||
|
out:
|
||||||
|
if (gc) {
|
||||||
|
XFreeGC (dpy, gc) ;
|
||||||
|
gc = NULL ;
|
||||||
|
}
|
||||||
|
return is_ok ;
|
||||||
|
}
|
||||||
|
|
||||||
|
Bool
|
||||||
|
ephyrHostXVPutStill (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 ;
|
||||||
|
int res=FALSE ;
|
||||||
|
GC gc=0 ;
|
||||||
|
XGCValues gc_values;
|
||||||
|
Display *dpy=hostx_get_display () ;
|
||||||
|
|
||||||
|
EPHYR_RETURN_VAL_IF_FAIL (dpy, FALSE) ;
|
||||||
|
|
||||||
|
gc = XCreateGC (dpy, hostx_get_window (), 0L, &gc_values);
|
||||||
|
if (!gc) {
|
||||||
|
EPHYR_LOG_ERROR ("failed to create gc \n") ;
|
||||||
|
goto out ;
|
||||||
|
}
|
||||||
|
res = XvPutStill (dpy, a_port_id, hostx_get_window (), 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) ;
|
||||||
|
|
||||||
|
if (res != Success) {
|
||||||
|
EPHYR_LOG_ERROR ("XvPutStill() failed: %d\n", res) ;
|
||||||
|
goto out ;
|
||||||
|
}
|
||||||
|
|
||||||
|
is_ok = TRUE ;
|
||||||
|
|
||||||
|
out:
|
||||||
|
if (gc) {
|
||||||
|
XFreeGC (dpy, gc) ;
|
||||||
|
gc = NULL ;
|
||||||
|
}
|
||||||
|
return is_ok ;
|
||||||
|
}
|
||||||
|
|
||||||
|
Bool
|
||||||
|
ephyrHostXVGetStill (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 ;
|
||||||
|
int res=FALSE ;
|
||||||
|
GC gc=0 ;
|
||||||
|
XGCValues gc_values;
|
||||||
|
Display *dpy=hostx_get_display () ;
|
||||||
|
|
||||||
|
EPHYR_RETURN_VAL_IF_FAIL (dpy, FALSE) ;
|
||||||
|
|
||||||
|
gc = XCreateGC (dpy, hostx_get_window (), 0L, &gc_values);
|
||||||
|
if (!gc) {
|
||||||
|
EPHYR_LOG_ERROR ("failed to create gc \n") ;
|
||||||
|
goto out ;
|
||||||
|
}
|
||||||
|
res = XvGetStill (dpy, a_port_id, hostx_get_window (), 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) ;
|
||||||
|
|
||||||
|
if (res != Success) {
|
||||||
|
EPHYR_LOG_ERROR ("XvGetStill() failed: %d\n", res) ;
|
||||||
|
goto out ;
|
||||||
|
}
|
||||||
|
|
||||||
|
is_ok = TRUE ;
|
||||||
|
|
||||||
|
out:
|
||||||
|
if (gc) {
|
||||||
|
XFreeGC (dpy, gc) ;
|
||||||
|
gc = NULL ;
|
||||||
|
}
|
||||||
|
return is_ok ;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -111,8 +111,12 @@ int ephyrHostXVAdaptorGetFirstPortID (const EphyrHostXVAdaptor *a_this) ;
|
||||||
|
|
||||||
Bool ephyrHostXVAdaptorHasPutVideo (const EphyrHostXVAdaptor *a_this,
|
Bool ephyrHostXVAdaptorHasPutVideo (const EphyrHostXVAdaptor *a_this,
|
||||||
Bool *a_result) ;
|
Bool *a_result) ;
|
||||||
|
Bool ephyrHostXVAdaptorHasGetVideo (const EphyrHostXVAdaptor *a_this,
|
||||||
|
Bool *a_result) ;
|
||||||
Bool ephyrHostXVAdaptorHasPutStill (const EphyrHostXVAdaptor *a_this,
|
Bool ephyrHostXVAdaptorHasPutStill (const EphyrHostXVAdaptor *a_this,
|
||||||
Bool *a_result) ;
|
Bool *a_result) ;
|
||||||
|
Bool ephyrHostXVAdaptorHasGetStill (const EphyrHostXVAdaptor *a_this,
|
||||||
|
Bool *a_result) ;
|
||||||
Bool ephyrHostXVAdaptorHasPutImage (const EphyrHostXVAdaptor *a_this,
|
Bool ephyrHostXVAdaptorHasPutImage (const EphyrHostXVAdaptor *a_this,
|
||||||
Bool *a_result) ;
|
Bool *a_result) ;
|
||||||
|
|
||||||
|
@ -195,5 +199,23 @@ Bool ephyrHostXVPutImage (int a_port_id,
|
||||||
int a_image_height,
|
int a_image_height,
|
||||||
unsigned char *a_buf) ;
|
unsigned char *a_buf) ;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Putvideo/PutStill/GetVideo
|
||||||
|
*/
|
||||||
|
Bool ephyrHostXVPutVideo (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_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_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_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__*/
|
||||||
|
|
||||||
|
|
|
@ -97,24 +97,6 @@ static void ephyrQueryBestSize (KdScreenInfo *a_info,
|
||||||
unsigned int *a_prefered_h,
|
unsigned int *a_prefered_h,
|
||||||
pointer a_port_priv);
|
pointer a_port_priv);
|
||||||
|
|
||||||
static int ephyrPutVideo (KdScreenInfo *a_screen,
|
|
||||||
DrawablePtr a_drw,
|
|
||||||
short a_vid_x, short a_vid_y,
|
|
||||||
short a_drw_x, short a_drw_y,
|
|
||||||
short a_vid_w, short a_vid_h,
|
|
||||||
short a_drw_w, short a_drw_h,
|
|
||||||
RegionPtr a_clip_region,
|
|
||||||
pointer a_port_priv) ;
|
|
||||||
|
|
||||||
static int ephyrPutStill (KdScreenInfo *a_screen,
|
|
||||||
DrawablePtr a_drw,
|
|
||||||
short a_vid_x, short a_vid_y,
|
|
||||||
short a_drw_x, short a_drw_y,
|
|
||||||
short a_vid_w, short a_vid_h,
|
|
||||||
short a_drw_w, short a_drw_h,
|
|
||||||
RegionPtr a_clip_region,
|
|
||||||
pointer a_port_priv) ;
|
|
||||||
|
|
||||||
static int ephyrPutImage (KdScreenInfo *a_info,
|
static int ephyrPutImage (KdScreenInfo *a_info,
|
||||||
DrawablePtr a_drawable,
|
DrawablePtr a_drawable,
|
||||||
short a_src_x,
|
short a_src_x,
|
||||||
|
@ -133,6 +115,42 @@ static int ephyrPutImage (KdScreenInfo *a_info,
|
||||||
RegionPtr a_clipping_region,
|
RegionPtr a_clipping_region,
|
||||||
pointer a_port_priv);
|
pointer a_port_priv);
|
||||||
|
|
||||||
|
static int ephyrPutVideo (KdScreenInfo *a_info,
|
||||||
|
DrawablePtr a_drawable,
|
||||||
|
short a_vid_x, short a_vid_y,
|
||||||
|
short a_drw_x, short a_drw_y,
|
||||||
|
short a_vid_w, short a_vid_h,
|
||||||
|
short a_drw_w, short a_drw_h,
|
||||||
|
RegionPtr a_clip_region,
|
||||||
|
pointer a_port_priv) ;
|
||||||
|
|
||||||
|
static int ephyrGetVideo (KdScreenInfo *a_info,
|
||||||
|
DrawablePtr a_drawable,
|
||||||
|
short a_vid_x, short a_vid_y,
|
||||||
|
short a_drw_x, short a_drw_y,
|
||||||
|
short a_vid_w, short a_vid_h,
|
||||||
|
short a_drw_w, short a_drw_h,
|
||||||
|
RegionPtr a_clip_region,
|
||||||
|
pointer a_port_priv) ;
|
||||||
|
|
||||||
|
static int ephyrPutStill (KdScreenInfo *a_info,
|
||||||
|
DrawablePtr a_drawable,
|
||||||
|
short a_vid_x, short a_vid_y,
|
||||||
|
short a_drw_x, short a_drw_y,
|
||||||
|
short a_vid_w, short a_vid_h,
|
||||||
|
short a_drw_w, short a_drw_h,
|
||||||
|
RegionPtr a_clip_region,
|
||||||
|
pointer a_port_priv) ;
|
||||||
|
|
||||||
|
static int ephyrGetStill (KdScreenInfo *a_info,
|
||||||
|
DrawablePtr a_drawable,
|
||||||
|
short a_vid_x, short a_vid_y,
|
||||||
|
short a_drw_x, short a_drw_y,
|
||||||
|
short a_vid_w, short a_vid_h,
|
||||||
|
short a_drw_w, short a_drw_h,
|
||||||
|
RegionPtr a_clip_region,
|
||||||
|
pointer a_port_priv) ;
|
||||||
|
|
||||||
static int ephyrQueryImageAttributes (KdScreenInfo *a_info,
|
static int ephyrQueryImageAttributes (KdScreenInfo *a_info,
|
||||||
int a_id,
|
int a_id,
|
||||||
unsigned short *a_w,
|
unsigned short *a_w,
|
||||||
|
@ -546,12 +564,26 @@ ephyrXVPrivSetAdaptorsHooks (EphyrXVPriv *a_this)
|
||||||
if (has_it)
|
if (has_it)
|
||||||
a_this->adaptors[i].PutVideo = ephyrPutVideo;
|
a_this->adaptors[i].PutVideo = ephyrPutVideo;
|
||||||
|
|
||||||
|
has_it = FALSE ;
|
||||||
|
if (!ephyrHostXVAdaptorHasGetVideo (cur_host_adaptor, &has_it)) {
|
||||||
|
EPHYR_LOG_ERROR ("error\n") ;
|
||||||
|
}
|
||||||
|
if (has_it)
|
||||||
|
a_this->adaptors[i].GetVideo = ephyrGetVideo;
|
||||||
|
|
||||||
has_it = FALSE ;
|
has_it = FALSE ;
|
||||||
if (!ephyrHostXVAdaptorHasPutStill (cur_host_adaptor, &has_it)) {
|
if (!ephyrHostXVAdaptorHasPutStill (cur_host_adaptor, &has_it)) {
|
||||||
EPHYR_LOG_ERROR ("error\n") ;
|
EPHYR_LOG_ERROR ("error\n") ;
|
||||||
}
|
}
|
||||||
if (has_it)
|
if (has_it)
|
||||||
a_this->adaptors[i].PutStill = ephyrPutStill;
|
a_this->adaptors[i].PutStill = ephyrPutStill;
|
||||||
|
|
||||||
|
has_it = FALSE ;
|
||||||
|
if (!ephyrHostXVAdaptorHasGetStill (cur_host_adaptor, &has_it)) {
|
||||||
|
EPHYR_LOG_ERROR ("error\n") ;
|
||||||
|
}
|
||||||
|
if (has_it)
|
||||||
|
a_this->adaptors[i].GetStill = ephyrGetStill;
|
||||||
}
|
}
|
||||||
EPHYR_LOG ("leave\n") ;
|
EPHYR_LOG ("leave\n") ;
|
||||||
return TRUE ;
|
return TRUE ;
|
||||||
|
@ -764,36 +796,6 @@ ephyrQueryBestSize (KdScreenInfo *a_info,
|
||||||
EPHYR_LOG ("leave\n") ;
|
EPHYR_LOG ("leave\n") ;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
ephyrPutVideo (KdScreenInfo *a_screen,
|
|
||||||
DrawablePtr a_drw,
|
|
||||||
short a_vid_x, short a_vid_y,
|
|
||||||
short a_drw_x, short a_drw_y,
|
|
||||||
short a_vid_w, short a_vid_h,
|
|
||||||
short a_drw_w, short a_drw_h,
|
|
||||||
RegionPtr a_clip_region,
|
|
||||||
pointer a_port_priv)
|
|
||||||
{
|
|
||||||
EPHYR_LOG ("enter\n") ;
|
|
||||||
return Success ;
|
|
||||||
EPHYR_LOG ("leave\n") ;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
ephyrPutStill (KdScreenInfo *a_screen,
|
|
||||||
DrawablePtr a_drw,
|
|
||||||
short a_vid_x, short a_vid_y,
|
|
||||||
short a_drw_x, short a_drw_y,
|
|
||||||
short a_vid_w, short a_vid_h,
|
|
||||||
short a_drw_w, short a_drw_h,
|
|
||||||
RegionPtr a_clip_region,
|
|
||||||
pointer a_port_priv)
|
|
||||||
{
|
|
||||||
EPHYR_LOG ("enter\n") ;
|
|
||||||
return Success ;
|
|
||||||
EPHYR_LOG ("leave\n") ;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
ephyrPutImage (KdScreenInfo *a_info,
|
ephyrPutImage (KdScreenInfo *a_info,
|
||||||
DrawablePtr a_drawable,
|
DrawablePtr a_drawable,
|
||||||
|
@ -855,6 +857,202 @@ out:
|
||||||
return result ;
|
return result ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
ephyrPutVideo (KdScreenInfo *a_info,
|
||||||
|
DrawablePtr a_drawable,
|
||||||
|
short a_vid_x, short a_vid_y,
|
||||||
|
short a_drw_x, short a_drw_y,
|
||||||
|
short a_vid_w, short a_vid_h,
|
||||||
|
short a_drw_w, short a_drw_h,
|
||||||
|
RegionPtr a_clipping_region,
|
||||||
|
pointer a_port_priv)
|
||||||
|
{
|
||||||
|
EphyrPortPriv *port_priv = a_port_priv ;
|
||||||
|
BoxRec clipped_area, dst_box ;
|
||||||
|
int result=BadImplementation ;
|
||||||
|
int drw_x=0, drw_y=0, drw_w=0, drw_h=0 ;
|
||||||
|
|
||||||
|
EPHYR_RETURN_VAL_IF_FAIL (a_drawable && port_priv, BadValue) ;
|
||||||
|
|
||||||
|
EPHYR_LOG ("enter\n") ;
|
||||||
|
|
||||||
|
dst_box.x1 = a_drw_x ;
|
||||||
|
dst_box.x2 = a_drw_x + a_drw_w;
|
||||||
|
dst_box.y1 = a_drw_y ;
|
||||||
|
dst_box.y2 = a_drw_y + a_drw_h;
|
||||||
|
|
||||||
|
if (!DoSimpleClip (&dst_box,
|
||||||
|
REGION_EXTENTS (pScreen->pScreen, a_clipping_region),
|
||||||
|
&clipped_area)) {
|
||||||
|
EPHYR_LOG_ERROR ("failed to simple clip\n") ;
|
||||||
|
goto out ;
|
||||||
|
}
|
||||||
|
|
||||||
|
drw_x = clipped_area.x1 ;
|
||||||
|
drw_y = clipped_area.y1 ;
|
||||||
|
drw_w = clipped_area.x2 - clipped_area.x1 ;
|
||||||
|
drw_h = clipped_area.y2 - clipped_area.y1 ;
|
||||||
|
|
||||||
|
if (!ephyrHostXVPutVideo (port_priv->port_number,
|
||||||
|
a_vid_x, a_vid_y, a_vid_w, a_vid_h,
|
||||||
|
a_drw_x, a_drw_y, a_drw_w, a_drw_h)) {
|
||||||
|
EPHYR_LOG_ERROR ("ephyrHostXVPutVideo() failed\n") ;
|
||||||
|
goto out ;
|
||||||
|
}
|
||||||
|
result = Success ;
|
||||||
|
|
||||||
|
out:
|
||||||
|
EPHYR_LOG ("leave\n") ;
|
||||||
|
return result ;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
ephyrGetVideo (KdScreenInfo *a_info,
|
||||||
|
DrawablePtr a_drawable,
|
||||||
|
short a_vid_x, short a_vid_y,
|
||||||
|
short a_drw_x, short a_drw_y,
|
||||||
|
short a_vid_w, short a_vid_h,
|
||||||
|
short a_drw_w, short a_drw_h,
|
||||||
|
RegionPtr a_clipping_region,
|
||||||
|
pointer a_port_priv)
|
||||||
|
{
|
||||||
|
EphyrPortPriv *port_priv = a_port_priv ;
|
||||||
|
BoxRec clipped_area, dst_box ;
|
||||||
|
int result=BadImplementation ;
|
||||||
|
int drw_x=0, drw_y=0, drw_w=0, drw_h=0 ;
|
||||||
|
|
||||||
|
EPHYR_RETURN_VAL_IF_FAIL (a_drawable && port_priv, BadValue) ;
|
||||||
|
|
||||||
|
EPHYR_LOG ("enter\n") ;
|
||||||
|
|
||||||
|
dst_box.x1 = a_drw_x ;
|
||||||
|
dst_box.x2 = a_drw_x + a_drw_w;
|
||||||
|
dst_box.y1 = a_drw_y ;
|
||||||
|
dst_box.y2 = a_drw_y + a_drw_h;
|
||||||
|
|
||||||
|
if (!DoSimpleClip (&dst_box,
|
||||||
|
REGION_EXTENTS (pScreen->pScreen, a_clipping_region),
|
||||||
|
&clipped_area)) {
|
||||||
|
EPHYR_LOG_ERROR ("failed to simple clip\n") ;
|
||||||
|
goto out ;
|
||||||
|
}
|
||||||
|
|
||||||
|
drw_x = clipped_area.x1 ;
|
||||||
|
drw_y = clipped_area.y1 ;
|
||||||
|
drw_w = clipped_area.x2 - clipped_area.x1 ;
|
||||||
|
drw_h = clipped_area.y2 - clipped_area.y1 ;
|
||||||
|
|
||||||
|
if (!ephyrHostXVGetVideo (port_priv->port_number,
|
||||||
|
a_vid_x, a_vid_y, a_vid_w, a_vid_h,
|
||||||
|
a_drw_x, a_drw_y, a_drw_w, a_drw_h)) {
|
||||||
|
EPHYR_LOG_ERROR ("ephyrHostXVGetVideo() failed\n") ;
|
||||||
|
goto out ;
|
||||||
|
}
|
||||||
|
result = Success ;
|
||||||
|
|
||||||
|
out:
|
||||||
|
EPHYR_LOG ("leave\n") ;
|
||||||
|
return result ;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
ephyrPutStill (KdScreenInfo *a_info,
|
||||||
|
DrawablePtr a_drawable,
|
||||||
|
short a_vid_x, short a_vid_y,
|
||||||
|
short a_drw_x, short a_drw_y,
|
||||||
|
short a_vid_w, short a_vid_h,
|
||||||
|
short a_drw_w, short a_drw_h,
|
||||||
|
RegionPtr a_clipping_region,
|
||||||
|
pointer a_port_priv)
|
||||||
|
{
|
||||||
|
EphyrPortPriv *port_priv = a_port_priv ;
|
||||||
|
BoxRec clipped_area, dst_box ;
|
||||||
|
int result=BadImplementation ;
|
||||||
|
int drw_x=0, drw_y=0, drw_w=0, drw_h=0 ;
|
||||||
|
|
||||||
|
EPHYR_RETURN_VAL_IF_FAIL (a_drawable && port_priv, BadValue) ;
|
||||||
|
|
||||||
|
EPHYR_LOG ("enter\n") ;
|
||||||
|
|
||||||
|
dst_box.x1 = a_drw_x ;
|
||||||
|
dst_box.x2 = a_drw_x + a_drw_w;
|
||||||
|
dst_box.y1 = a_drw_y ;
|
||||||
|
dst_box.y2 = a_drw_y + a_drw_h;
|
||||||
|
|
||||||
|
if (!DoSimpleClip (&dst_box,
|
||||||
|
REGION_EXTENTS (pScreen->pScreen, a_clipping_region),
|
||||||
|
&clipped_area)) {
|
||||||
|
EPHYR_LOG_ERROR ("failed to simple clip\n") ;
|
||||||
|
goto out ;
|
||||||
|
}
|
||||||
|
|
||||||
|
drw_x = clipped_area.x1 ;
|
||||||
|
drw_y = clipped_area.y1 ;
|
||||||
|
drw_w = clipped_area.x2 - clipped_area.x1 ;
|
||||||
|
drw_h = clipped_area.y2 - clipped_area.y1 ;
|
||||||
|
|
||||||
|
if (!ephyrHostXVPutStill (port_priv->port_number,
|
||||||
|
a_vid_x, a_vid_y, a_vid_w, a_vid_h,
|
||||||
|
a_drw_x, a_drw_y, a_drw_w, a_drw_h)) {
|
||||||
|
EPHYR_LOG_ERROR ("ephyrHostXVPutStill() failed\n") ;
|
||||||
|
goto out ;
|
||||||
|
}
|
||||||
|
result = Success ;
|
||||||
|
|
||||||
|
out:
|
||||||
|
EPHYR_LOG ("leave\n") ;
|
||||||
|
return result ;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
ephyrGetStill (KdScreenInfo *a_info,
|
||||||
|
DrawablePtr a_drawable,
|
||||||
|
short a_vid_x, short a_vid_y,
|
||||||
|
short a_drw_x, short a_drw_y,
|
||||||
|
short a_vid_w, short a_vid_h,
|
||||||
|
short a_drw_w, short a_drw_h,
|
||||||
|
RegionPtr a_clipping_region,
|
||||||
|
pointer a_port_priv)
|
||||||
|
{
|
||||||
|
EphyrPortPriv *port_priv = a_port_priv ;
|
||||||
|
BoxRec clipped_area, dst_box ;
|
||||||
|
int result=BadImplementation ;
|
||||||
|
int drw_x=0, drw_y=0, drw_w=0, drw_h=0 ;
|
||||||
|
|
||||||
|
EPHYR_RETURN_VAL_IF_FAIL (a_drawable && port_priv, BadValue) ;
|
||||||
|
|
||||||
|
EPHYR_LOG ("enter\n") ;
|
||||||
|
|
||||||
|
dst_box.x1 = a_drw_x ;
|
||||||
|
dst_box.x2 = a_drw_x + a_drw_w;
|
||||||
|
dst_box.y1 = a_drw_y ;
|
||||||
|
dst_box.y2 = a_drw_y + a_drw_h;
|
||||||
|
|
||||||
|
if (!DoSimpleClip (&dst_box,
|
||||||
|
REGION_EXTENTS (pScreen->pScreen, a_clipping_region),
|
||||||
|
&clipped_area)) {
|
||||||
|
EPHYR_LOG_ERROR ("failed to simple clip\n") ;
|
||||||
|
goto out ;
|
||||||
|
}
|
||||||
|
|
||||||
|
drw_x = clipped_area.x1 ;
|
||||||
|
drw_y = clipped_area.y1 ;
|
||||||
|
drw_w = clipped_area.x2 - clipped_area.x1 ;
|
||||||
|
drw_h = clipped_area.y2 - clipped_area.y1 ;
|
||||||
|
|
||||||
|
if (!ephyrHostXVGetStill (port_priv->port_number,
|
||||||
|
a_vid_x, a_vid_y, a_vid_w, a_vid_h,
|
||||||
|
a_drw_x, a_drw_y, a_drw_w, a_drw_h)) {
|
||||||
|
EPHYR_LOG_ERROR ("ephyrHostXVGetStill() failed\n") ;
|
||||||
|
goto out ;
|
||||||
|
}
|
||||||
|
result = Success ;
|
||||||
|
|
||||||
|
out:
|
||||||
|
EPHYR_LOG ("leave\n") ;
|
||||||
|
return result ;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
ephyrQueryImageAttributes (KdScreenInfo *a_info,
|
ephyrQueryImageAttributes (KdScreenInfo *a_info,
|
||||||
int a_id,
|
int a_id,
|
||||||
|
|
Loading…
Reference in New Issue