xserver-multidpi/hw/kdrive/ephyr/ephyrhostvideo.h
Dodji Seketeli 4ba76a7e2b Xephyr: port XV/GL stuff of the new multiscreen architecture
We can now launch GL or XV apps in any of the
        Xephyr screens we want.

	* hw/kdrive/ephyr/hostx.c,h:
	 (hostx_get_window):
	 (hostx_create_window): make these functions be screen
	 number aware.
	* hw/kdrive/ephyr/XF86dri.c : fix some compiler warnings.
	* hw/kdrive/ephyr/ephyrdri.c:
	 (ephyrDRIQueryDirectRenderingCapable),
	 (ephyrDRIOpenConnection),
	 (ephyrDRIAuthConnection),
	 (ephyrDRICloseConnection),
	 (ephyrDRIGetClientDriverName),
	 (ephyrDRICreateContext),
	 (ephyrDRIDestroyContext),
	 (ephyrDRICreateDrawable),
	 (ephyrDRIGetDrawableInfo),
	 (ephyrDRIGetDeviceInfo): in all those functions, don't forward
	 the screen number we receive - from the client - to the host X.
	 We (Xephyr) are always targetting the same X display screen, which is
	 the one Xephyr got launched against. So we enforce that in the code.
	* hw/kdrive/ephyr/ephyrdriext.c:
	 (EphyrMirrorHostVisuals): make this duplicate the visuals of the host X
	  default screen into a given Xephyr screen. This way we have a chance
	  to update the visuals of all Xephyr screen to make them mirror those
	  of the host X.
	 (many other places): specify screen number where required by the api
	 change in hostx.h.
	* hw/kdrive/ephyr/ephyrglxext.c: specify screen number where required
	 by the api change in hostx.h
	* hw/kdrive/ephyr/ephyrhostglx.c: don't forward the screen number we
	  receive - from the client - to the host X.
	  We (Xephyr) are always targetting the same
	  X display screen, which is
	 the one Xephyr got launched against. So we enforce that in the code.
	* hw/kdrive/ephyr/ephyrhostvideo.c,h: take in account the screen number received
	  from the client app. This is useful to know on which Xephyr screen we
	  need to display video stuff.
	* hw/kdrive/ephyr/ephyrvideo.c: update this to reflect the API change
	  in hw/kdrive/ephyr/ephyrhostvideo.h.
	  (ephyrSetPortAttribute): when parameters are not valid
	   - they exceed their validity range - send them to the host anyway
	   and do not return an error to clients.
	  Some host expose buggy validity range, so rejecting client for that
	  is too harsh.
2007-10-03 13:03:34 +02:00

239 lines
8.5 KiB
C

/*
* Xephyr - A kdrive X server thats runs in a host X window.
* Authored by Matthew Allum <mallum@openedhand.com>
*
* Copyright © 2007 OpenedHand Ltd
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
* the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of OpenedHand Ltd not be used in
* advertising or publicity pertaining to distribution of the software without
* specific, written prior permission. OpenedHand Ltd makes no
* representations about the suitability of this software for any purpose. It
* is provided "as is" without express or implied warranty.
*
* OpenedHand Ltd DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
* EVENT SHALL OpenedHand Ltd BE LIABLE FOR ANY SPECIAL, INDIRECT OR
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*
* Authors:
* Dodji Seketeli <dodji@openedhand.com>
*/
#ifndef __EPHYRHOSTVIDEO_H__
#define __EPHYRHOSTVIDEO_H__
typedef void* EphyrHostXVAdaptor ;
typedef struct _EphyrHostXVAdaptorArray EphyrHostXVAdaptorArray ;
typedef struct _EphyrHostVideoFormat {
char depth ;
short visual_class;
} EphyrHostVideoFormat ;
typedef struct _EphyrHostRational {
int numerator ;
int denominator ;
} EphyrHostRational;
typedef struct _EphyrHostEncoding {
int id ;
char *name ;
unsigned short width, height ;
EphyrHostRational rate ;
} EphyrHostEncoding ;
typedef struct _EphyrHostAttribute {
int flags;
int min_value;
int max_value;
char *name;
} EphyrHostAttribute ;
typedef struct _EphyrHostImageFormat {
int id; /* Unique descriptor for the format */
int type; /* XvRGB, XvYUV */
int byte_order; /* LSBFirst, MSBFirst */
char guid[16]; /* Globally Unique IDentifier */
int bits_per_pixel;
int format; /* XvPacked, XvPlanar */
int num_planes;
/* for RGB formats only */
int depth;
unsigned int red_mask;
unsigned int green_mask;
unsigned int blue_mask;
/* for YUV formats only */
unsigned int y_sample_bits;
unsigned int u_sample_bits;
unsigned int v_sample_bits;
unsigned int horz_y_period;
unsigned int horz_u_period;
unsigned int horz_v_period;
unsigned int vert_y_period;
unsigned int vert_u_period;
unsigned int vert_v_period;
char component_order[32]; /* eg. UYVY */
int scanline_order; /* XvTopToBottom, XvBottomToTop */
} EphyrHostImageFormat ;
typedef struct {
unsigned short x1, y1, x2, y2 ;
} EphyrHostBox ;
void ephyrHostXVInit (void) ;
void ephyrHostFree (void *a_pointer) ;
/*
* host adaptor array
*/
Bool ephyrHostXVQueryAdaptors (EphyrHostXVAdaptorArray **a_adaptors) ;
void ephyrHostXVAdaptorArrayDelete (EphyrHostXVAdaptorArray *a_adaptors) ;
int ephyrHostXVAdaptorArrayGetSize (const EphyrHostXVAdaptorArray *a_this) ;
EphyrHostXVAdaptor* ephyrHostXVAdaptorArrayAt (const EphyrHostXVAdaptorArray *a_this,
int a_index) ;
/*
* host adaptor
*/
char ephyrHostXVAdaptorGetType (const EphyrHostXVAdaptor *a_this) ;
const char* ephyrHostXVAdaptorGetName (const EphyrHostXVAdaptor *a_this) ;
EphyrHostVideoFormat* ephyrHostXVAdaptorGetVideoFormats
(const EphyrHostXVAdaptor *a_this,
int *a_nb_formats) ;
int ephyrHostXVAdaptorGetNbPorts (const EphyrHostXVAdaptor *a_this) ;
int ephyrHostXVAdaptorGetFirstPortID (const EphyrHostXVAdaptor *a_this) ;
Bool ephyrHostXVAdaptorHasPutVideo (const EphyrHostXVAdaptor *a_this,
Bool *a_result) ;
Bool ephyrHostXVAdaptorHasGetVideo (const EphyrHostXVAdaptor *a_this,
Bool *a_result) ;
Bool ephyrHostXVAdaptorHasPutStill (const EphyrHostXVAdaptor *a_this,
Bool *a_result) ;
Bool ephyrHostXVAdaptorHasGetStill (const EphyrHostXVAdaptor *a_this,
Bool *a_result) ;
Bool ephyrHostXVAdaptorHasPutImage (const EphyrHostXVAdaptor *a_this,
Bool *a_result) ;
/*
* encoding
*/
Bool ephyrHostXVQueryEncodings (int a_port_id,
EphyrHostEncoding **a_encodings,
unsigned int *a_num_encodings) ;
void ephyrHostEncodingsDelete (EphyrHostEncoding *a_encodings,
int a_num_encodings) ;
/*
* attribute
*/
Bool ephyrHostXVQueryPortAttributes (int a_port_id,
EphyrHostAttribute **a_attributes,
int *a_num_attributes) ;
void ephyrHostAttributesDelete (EphyrHostAttribute *a_attributes) ;
/*
* image format
*/
Bool ephyrHostXVQueryImageFormats (int a_port_id,
EphyrHostImageFormat **a_formats,
int *a_num_format) ;
/*
* Port Attribute Get/Set
*/
Bool ephyrHostXVSetPortAttribute (int a_port_id,
int a_atom,
int a_attr_value) ;
Bool ephyrHostXVGetPortAttribute (int a_port_id,
int a_atom,
int *a_attr_value) ;
/*
*size query
*/
Bool ephyrHostXVQueryBestSize (int a_port_id,
Bool a_motion,
unsigned int a_frame_w,
unsigned int a_frame_h,
unsigned int a_drw_w,
unsigned int a_drw_h,
unsigned int *a_actual_w,
unsigned int *a_actual_h) ;
Bool ephyrHostXVQueryImageAttributes (int a_port_id,
int a_image_id /*image fourcc code*/,
unsigned short *a_width,
unsigned short *a_height,
int *a_image_size,
int *a_pitches,
int *a_offsets) ;
/*
* atom
*/
Bool ephyrHostGetAtom (const char* a_name,
Bool a_create_if_not_exists,
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) ;
/*
* StopVideo
*/
Bool ephyrHostXVStopVideo (int a_screen_num, int a_port_id) ;
#endif /*__EPHYRHOSTVIDEO_H__*/