Commit 646f7c46 authored by Sam Hocevar's avatar Sam Hocevar

  * compilation fixes for the BeOS DVD ioctls
  * XVideo plugin enhancements by Shane Harper <shanegh@optusnet.com.au>
parent 57801bcb
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
***************************************************************************** *****************************************************************************
* Copyright (C) 1998-2000 Apple Computer, Inc. All rights reserved. * Copyright (C) 1998-2000 Apple Computer, Inc. All rights reserved.
* Copyright (C) 2001 VideoLAN * Copyright (C) 2001 VideoLAN
* $Id: DVDioctl.cpp,v 1.2 2001/04/04 02:49:18 sam Exp $ * $Id: DVDioctl.cpp,v 1.3 2001/04/04 16:33:07 sam Exp $
* *
* Authors: Samuel Hocevar <sam@zoy.org> * Authors: Samuel Hocevar <sam@zoy.org>
* *
...@@ -80,10 +80,10 @@ OSDefineMetaClassAndStructors( DVDioctl, IOService ) ...@@ -80,10 +80,10 @@ OSDefineMetaClassAndStructors( DVDioctl, IOService )
/***************************************************************************** /*****************************************************************************
* Variable typedefs * Variable typedefs
*****************************************************************************/ *****************************************************************************/
typedef void * dkr_t; typedef enum { DKRTYPE_BUF, DKRTYPE_DIO } dkrtype_t;
typedef enum { DKRTYPE_BUF, DKRTYPE_DIO } dkrtype_t; typedef struct dio { dev_t dev; struct uio * uio; } dio_t;
typedef struct dio { dev_t dev; struct uio * uio; } dio_t; typedef struct buf buf_t;
typedef struct buf buf_t; typedef void * dkr_t;
/***************************************************************************** /*****************************************************************************
* Local prototypes * Local prototypes
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* dvd_ioctl.c: DVD ioctl replacement function * dvd_ioctl.c: DVD ioctl replacement function
***************************************************************************** *****************************************************************************
* Copyright (C) 1999-2001 VideoLAN * Copyright (C) 1999-2001 VideoLAN
* $Id: dvd_ioctl.c,v 1.5 2001/04/04 02:49:18 sam Exp $ * $Id: dvd_ioctl.c,v 1.6 2001/04/04 16:33:07 sam Exp $
* *
* Authors: Markus Kuespert <ltlBeBoy@beosmail.com> * Authors: Markus Kuespert <ltlBeBoy@beosmail.com>
* Samuel Hocevar <sam@zoy.org> * Samuel Hocevar <sam@zoy.org>
...@@ -232,7 +232,7 @@ int ioctl_LUSendChallenge( css_t *p_css, u8 *p_challenge ) ...@@ -232,7 +232,7 @@ int ioctl_LUSendChallenge( css_t *p_css, u8 *p_challenge )
i_ret = ioctl( p_css->i_fd, B_RAW_DEVICE_COMMAND, &rdc, sizeof(rdc) ); i_ret = ioctl( p_css->i_fd, B_RAW_DEVICE_COMMAND, &rdc, sizeof(rdc) );
memcpy( p_challenge, p_buffer + 4, sizeof(dvd_challenge) ); memcpy( p_challenge, p_buffer + 4, 12 );
#else #else
/* DVD ioctls unavailable - do as if the ioctl failed */ /* DVD ioctls unavailable - do as if the ioctl failed */
...@@ -325,7 +325,7 @@ int ioctl_LUSendKey1( css_t *p_css, u8 *p_key ) ...@@ -325,7 +325,7 @@ int ioctl_LUSendKey1( css_t *p_css, u8 *p_key )
i_ret = ioctl( p_css->i_fd, B_RAW_DEVICE_COMMAND, &rdc, sizeof(rdc) ); i_ret = ioctl( p_css->i_fd, B_RAW_DEVICE_COMMAND, &rdc, sizeof(rdc) );
memcpy( p_key, p_buffer + 4, sizeof(dvd_key) ); memcpy( p_key, p_buffer + 4, 8 );
#else #else
/* DVD ioctls unavailable - do as if the ioctl failed */ /* DVD ioctls unavailable - do as if the ioctl failed */
...@@ -396,7 +396,7 @@ int ioctl_HostSendChallenge( css_t *p_css, u8 *p_challenge ) ...@@ -396,7 +396,7 @@ int ioctl_HostSendChallenge( css_t *p_css, u8 *p_challenge )
rdc.command[ 10 ] = 0x01 | (p_css->i_agid << 6); rdc.command[ 10 ] = 0x01 | (p_css->i_agid << 6);
p_buffer[ 1 ] = 0xe; p_buffer[ 1 ] = 0xe;
memcpy( p_buffer + 4, p_challenge, sizeof(dvd_challenge) ); memcpy( p_buffer + 4, p_challenge, 12 );
return ioctl( p_css->i_fd, B_RAW_DEVICE_COMMAND, &rdc, sizeof(rdc) ); return ioctl( p_css->i_fd, B_RAW_DEVICE_COMMAND, &rdc, sizeof(rdc) );
...@@ -432,7 +432,7 @@ int ioctl_HostSendKey2( css_t *p_css, u8 *p_key ) ...@@ -432,7 +432,7 @@ int ioctl_HostSendKey2( css_t *p_css, u8 *p_key )
rdc.command[ 10 ] = 0x3 | (p_css->i_agid << 6); rdc.command[ 10 ] = 0x3 | (p_css->i_agid << 6);
p_buffer[ 1 ] = 0xa; p_buffer[ 1 ] = 0xa;
memcpy( p_buffer + 4, p_key, sizeof(dvd_key) ); memcpy( p_buffer + 4, p_key, 8 );
return ioctl( p_css->i_fd, B_RAW_DEVICE_COMMAND, &rdc, sizeof(rdc) ); return ioctl( p_css->i_fd, B_RAW_DEVICE_COMMAND, &rdc, sizeof(rdc) );
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* vout_xvideo.c: Xvideo video output display method * vout_xvideo.c: Xvideo video output display method
***************************************************************************** *****************************************************************************
* Copyright (C) 1998, 1999, 2000, 2001 VideoLAN * Copyright (C) 1998, 1999, 2000, 2001 VideoLAN
* $Id: vout_xvideo.c,v 1.2 2001/04/01 06:42:05 sam Exp $ * $Id: vout_xvideo.c,v 1.3 2001/04/04 16:33:07 sam Exp $
* *
* Authors: Shane Harper <shanegh@optusnet.com.au> * Authors: Shane Harper <shanegh@optusnet.com.au>
* Vincent Seguin <seguin@via.ecp.fr> * Vincent Seguin <seguin@via.ecp.fr>
...@@ -131,8 +131,10 @@ static void XVideoDestroyShmImage ( vout_thread_t *, XvImage *, ...@@ -131,8 +131,10 @@ static void XVideoDestroyShmImage ( vout_thread_t *, XvImage *,
static void XVideoTogglePointer ( vout_thread_t * ); static void XVideoTogglePointer ( vout_thread_t * );
static void XVideoEnableScreenSaver ( vout_thread_t * ); static void XVideoEnableScreenSaver ( vout_thread_t * );
static void XVideoDisableScreenSaver ( vout_thread_t * ); static void XVideoDisableScreenSaver ( vout_thread_t * );
static void XVideoSetAttribute ( vout_thread_t *, char *, float );
static int XVideoCheckForXv ( Display * ); static int XVideoCheckForXv ( Display * );
static int XVideoGetPort ( Display * );
static void XVideoOutputCoords ( const picture_t *, const boolean_t, static void XVideoOutputCoords ( const picture_t *, const boolean_t,
const int, const int, const int, const int,
int *, int *, int *, int * ); int *, int *, int *, int * );
...@@ -218,6 +220,14 @@ static int vout_Create( vout_thread_t *p_vout ) ...@@ -218,6 +220,14 @@ static int vout_Create( vout_thread_t *p_vout )
return( 1 ); return( 1 );
} }
if( (p_vout->p_sys->xv_port = XVideoGetPort( p_vout->p_sys->p_display ))<0 )
return 1;
/* XXX The brightness and contrast values should be read from environment
* XXX variables... */
XVideoSetAttribute( p_vout, "XV_BRIGHTNESS", 0.5 );
XVideoSetAttribute( p_vout, "XV_CONTRAST", 0.5 );
p_vout->p_sys->b_mouse = 1; p_vout->p_sys->b_mouse = 1;
/* Disable screen saver and return */ /* Disable screen saver and return */
...@@ -229,7 +239,7 @@ static int vout_Create( vout_thread_t *p_vout ) ...@@ -229,7 +239,7 @@ static int vout_Create( vout_thread_t *p_vout )
/***************************************************************************** /*****************************************************************************
* vout_Init: initialize XVideo video thread output method * vout_Init: initialize XVideo video thread output method
***************************************************************************** *****************************************************************************
* This function create the XImages needed by the output thread. It is called * This function creates the XvImage needed by the output thread. It is called
* at the beginning of the thread, but also each time the window is resized. * at the beginning of the thread, but also each time the window is resized.
*****************************************************************************/ *****************************************************************************/
static int vout_Init( vout_thread_t *p_vout ) static int vout_Init( vout_thread_t *p_vout )
...@@ -241,7 +251,7 @@ static int vout_Init( vout_thread_t *p_vout ) ...@@ -241,7 +251,7 @@ static int vout_Init( vout_thread_t *p_vout )
p_vout->p_sys->b_shm = 0; p_vout->p_sys->b_shm = 0;
#endif #endif
/* Create XImages using XShm extension */ /* Create XvImage using XShm extension */
i_err = XVideoCreateShmImage( p_vout, &p_vout->p_sys->p_xvimage, i_err = XVideoCreateShmImage( p_vout, &p_vout->p_sys->p_xvimage,
&p_vout->p_sys->shm_info ); &p_vout->p_sys->shm_info );
if( i_err ) if( i_err )
...@@ -249,7 +259,7 @@ static int vout_Init( vout_thread_t *p_vout ) ...@@ -249,7 +259,7 @@ static int vout_Init( vout_thread_t *p_vout )
intf_Msg( "vout: XShm video extension unavailable" ); intf_Msg( "vout: XShm video extension unavailable" );
/* p_vout->p_sys->b_shm = 0; */ /* p_vout->p_sys->b_shm = 0; */
} }
p_vout->b_need_render = 0; /* = 1 if not using Xv extension. */ p_vout->b_need_render = 0;
/* Set bytes per line and initialize buffers */ /* Set bytes per line and initialize buffers */
p_vout->i_bytes_per_line = p_vout->i_bytes_per_line =
...@@ -682,9 +692,9 @@ static int XVideoCreateWindow( vout_thread_t *p_vout ) ...@@ -682,9 +692,9 @@ static int XVideoCreateWindow( vout_thread_t *p_vout )
} }
/***************************************************************************** /*****************************************************************************
* XVideoCreateShmImage: create an XImage using shared memory extension * XVideoCreateShmImage: create an XvImage using shared memory extension
***************************************************************************** *****************************************************************************
* Prepare an XImage for DisplayX11ShmImage function. * Prepare an XvImage for display function.
* The order of the operations respects the recommandations of the mit-shm * The order of the operations respects the recommandations of the mit-shm
* document by J.Corbet and K.Packard. Most of the parameters were copied from * document by J.Corbet and K.Packard. Most of the parameters were copied from
* there. * there.
...@@ -692,33 +702,6 @@ static int XVideoCreateWindow( vout_thread_t *p_vout ) ...@@ -692,33 +702,6 @@ static int XVideoCreateWindow( vout_thread_t *p_vout )
static int XVideoCreateShmImage( vout_thread_t *p_vout, XvImage **pp_xvimage, static int XVideoCreateShmImage( vout_thread_t *p_vout, XvImage **pp_xvimage,
XShmSegmentInfo *p_shm_info) XShmSegmentInfo *p_shm_info)
{ {
int i_adaptors;
XvAdaptorInfo *adaptor_info;
/* find xv_port... */
switch( XvQueryAdaptors( p_vout->p_sys->p_display,
DefaultRootWindow( p_vout->p_sys->p_display ),
&i_adaptors, &adaptor_info ) )
{
case Success:
break;
case XvBadExtension:
intf_ErrMsg( "vout error: XvBadExtension for XvQueryAdaptors" );
return( -1 );
case XvBadAlloc:
intf_ErrMsg( "vout error: XvBadAlloc for XvQueryAdaptors" );
return( -1 );
default:
intf_ErrMsg( "vout error: XvQueryAdaptors failed" );
return( -1 );
}
/* XXX is this right? */
p_vout->p_sys->xv_port = adaptor_info[ i_adaptors - 1 ].base_id;
#define GUID_YUV12_PLANAR 0x32315659 #define GUID_YUV12_PLANAR 0x32315659
*pp_xvimage = XvShmCreateImage( p_vout->p_sys->p_display, *pp_xvimage = XvShmCreateImage( p_vout->p_sys->p_display,
...@@ -907,3 +890,74 @@ static void XVideoOutputCoords( const picture_t *p_pic, const boolean_t scale, ...@@ -907,3 +890,74 @@ static void XVideoOutputCoords( const picture_t *p_pic, const boolean_t scale,
*dy = (win_h - *h) / 2; *dy = (win_h - *h) / 2;
} }
static int XVideoGetPort( Display *dpy )
{
int i, i_adaptors;
XvAdaptorInfo *adaptor_info;
switch( XvQueryAdaptors( dpy, DefaultRootWindow( dpy ),
&i_adaptors, &adaptor_info ) )
{
case Success:
break;
case XvBadExtension:
intf_ErrMsg( "vout error: XvBadExtension for XvQueryAdaptors" );
return( -1 );
case XvBadAlloc:
intf_ErrMsg( "vout error: XvBadAlloc for XvQueryAdaptors" );
return( -1 );
default:
intf_ErrMsg( "vout error: XvQueryAdaptors failed" );
return( -1 );
}
for( i=0; i < i_adaptors; ++i )
if( ( adaptor_info[ i ].type & XvInputMask ) &&
( adaptor_info[ i ].type & XvImageMask ) )
{
return adaptor_info[ i ].base_id;
}
intf_ErrMsg( "vout error: didn't find an Xvideo image input port." );
return( -1 );
}
/*****************************************************************************
* XVideoSetAttribute
*****************************************************************************
* This function can be used to set attributes, e.g. XV_BRIGHTNESS and
* XV_CONTRAST. "value" should be in the range of 0 to 1.
*****************************************************************************/
static void XVideoSetAttribute( vout_thread_t *p_vout,
char *attr_name, float f_value )
{
int i_attrib;
XvAttribute *p_attrib;
Display *p_dpy = p_vout->p_sys->p_display;
int xv_port = p_vout->p_sys->xv_port;
p_attrib = XvQueryPortAttributes( p_dpy, xv_port, &i_attrib );
do
{
i_attrib--;
if( !strcmp( p_attrib[ i_attrib ].name, attr_name ) )
{
int i_sv = f_value * ( p_attrib[ i_attrib ].max_value
- p_attrib[ i_attrib ].min_value + 1 )
+ p_attrib[ i_attrib ].min_value;
XvSetPortAttribute( p_dpy, xv_port,
XInternAtom( p_dpy, attr_name, False ), i_sv );
return;
}
} while( i_attrib > 0 );
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment