mirror of
https://github.com/mpv-player/mpv
synced 2025-04-01 23:00:41 +00:00
mode detection && vo_init() moved to preinit()
NOTE: this driver needs some cleanup, and should use mDisplay/mScreen git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@7931 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
290a98a9cc
commit
5a473a4ffc
148
libvo/vo_dga.c
148
libvo/vo_dga.c
@ -470,82 +470,6 @@ static const vo_info_t* get_info( void )
|
|||||||
static uint32_t query_format( uint32_t format )
|
static uint32_t query_format( uint32_t format )
|
||||||
{
|
{
|
||||||
|
|
||||||
#ifdef HAVE_DGA2
|
|
||||||
XDGAMode *modelines;
|
|
||||||
int modecount;
|
|
||||||
#endif
|
|
||||||
Display *qdisp;
|
|
||||||
|
|
||||||
int i;
|
|
||||||
static int dga_depths_init = 0;
|
|
||||||
|
|
||||||
if(dga_depths_init == 0){
|
|
||||||
|
|
||||||
if((qdisp = XOpenDisplay(0))==NULL){
|
|
||||||
mp_msg(MSGT_VO, MSGL_ERR, "vo_dga: Can't open display!\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if( !vo_init() ){
|
|
||||||
mp_msg(MSGT_VO, MSGL_ERR, "vo_dga: vo_init() failed!\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
vo_dga_XServer_mode = vd_ValidateMode(vo_depthonscreen);
|
|
||||||
|
|
||||||
if(vo_dga_XServer_mode ==0){
|
|
||||||
#ifndef HAVE_DGA2
|
|
||||||
mp_msg(MSGT_VO, MSGL_ERR, "vo_dga: Your X-Server is not running in a ");
|
|
||||||
mp_msg(MSGT_VO, MSGL_ERR, "resolution supported by DGA driver!\n");
|
|
||||||
#endif
|
|
||||||
}//else{
|
|
||||||
// mp_msg(MSGT_VO, MSGL_INFO, "vo_dga: X running at: %s\n",
|
|
||||||
// vd_GetModeString(vo_dga_XServer_mode));
|
|
||||||
//}
|
|
||||||
|
|
||||||
#ifdef HAVE_DGA2
|
|
||||||
modelines=XDGAQueryModes(qdisp, XDefaultScreen(qdisp),&modecount);
|
|
||||||
if(modelines){
|
|
||||||
for(i=0; i< modecount; i++){
|
|
||||||
mp_msg(MSGT_VO, MSGL_V, "vo_dga: (%03d) depth=%d, bpp=%d, r=%08x, g=%08x, b=%08x, %d x %d\n",
|
|
||||||
i,
|
|
||||||
modelines[i].depth,
|
|
||||||
modelines[i].bitsPerPixel,
|
|
||||||
modelines[i].redMask,
|
|
||||||
modelines[i].greenMask,
|
|
||||||
modelines[i].blueMask,
|
|
||||||
modelines[i].viewportWidth,
|
|
||||||
modelines[i].viewportHeight);
|
|
||||||
vd_EnableMode(
|
|
||||||
modelines[i].depth,
|
|
||||||
modelines[i].bitsPerPixel,
|
|
||||||
modelines[i].redMask,
|
|
||||||
modelines[i].greenMask,
|
|
||||||
modelines[i].blueMask);
|
|
||||||
}
|
|
||||||
XFree(modelines);
|
|
||||||
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
dga_depths_init = 1;
|
|
||||||
XCloseDisplay(qdisp);
|
|
||||||
|
|
||||||
if( !vo_dga_modes[1].vdm_supported && vo_dga_modes[2].vdm_supported ){
|
|
||||||
vo_dga_modes[1].vdm_supported = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( !vo_dga_modes[3].vdm_supported && vo_dga_modes[4].vdm_supported ){
|
|
||||||
vo_dga_modes[3].vdm_supported = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(i=1; i<vo_dga_mode_num; i++){
|
|
||||||
mp_msg(MSGT_VO, MSGL_INFO, "vo_dga: Mode: %s", vd_GetModeString(i));
|
|
||||||
if(vo_dbpp && vo_dbpp != vo_dga_modes[i].vdm_mplayer_depth){
|
|
||||||
vo_dga_modes[i].vdm_supported = 0;
|
|
||||||
mp_msg(MSGT_VO, MSGL_INFO, " ...disabled by -bpp %d", vo_dbpp );
|
|
||||||
}
|
|
||||||
mp_msg(MSGT_VO, MSGL_INFO, "\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if( format==IMGFMT_YV12 ) return VFCAP_CSP_SUPPORTED;
|
if( format==IMGFMT_YV12 ) return VFCAP_CSP_SUPPORTED;
|
||||||
|
|
||||||
if( (format&IMGFMT_BGR_MASK) == IMGFMT_BGR &&
|
if( (format&IMGFMT_BGR_MASK) == IMGFMT_BGR &&
|
||||||
@ -745,11 +669,6 @@ static uint32_t config( uint32_t width, uint32_t height,
|
|||||||
if(!wanted_height) wanted_height = height;
|
if(!wanted_height) wanted_height = height;
|
||||||
if(!wanted_width) wanted_width = width;
|
if(!wanted_width) wanted_width = width;
|
||||||
|
|
||||||
if( !vo_init() ){
|
|
||||||
mp_msg(MSGT_VO, MSGL_ERR, "vo_dga: vo_init() failed!\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( !vo_dbpp ){
|
if( !vo_dbpp ){
|
||||||
|
|
||||||
if (format == IMGFMT_YV12){
|
if (format == IMGFMT_YV12){
|
||||||
@ -1054,6 +973,8 @@ static uint32_t config( uint32_t width, uint32_t height,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int dga_depths_init = 0;
|
||||||
|
|
||||||
static uint32_t preinit(const char *arg)
|
static uint32_t preinit(const char *arg)
|
||||||
{
|
{
|
||||||
if(arg)
|
if(arg)
|
||||||
@ -1061,6 +982,71 @@ static uint32_t preinit(const char *arg)
|
|||||||
mp_msg(MSGT_VO, MSGL_INFO, "vo_dga: Unknown subdevice: %s\n",arg);
|
mp_msg(MSGT_VO, MSGL_INFO, "vo_dga: Unknown subdevice: %s\n",arg);
|
||||||
return ENOSYS;
|
return ENOSYS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( !vo_init() ) return -1; // Can't open X11
|
||||||
|
|
||||||
|
if(dga_depths_init == 0){ // FIXME!?
|
||||||
|
int i;
|
||||||
|
#ifdef HAVE_DGA2
|
||||||
|
XDGAMode *modelines;
|
||||||
|
int modecount;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
vo_dga_XServer_mode = vd_ValidateMode(vo_depthonscreen);
|
||||||
|
|
||||||
|
if(vo_dga_XServer_mode ==0){
|
||||||
|
#ifndef HAVE_DGA2
|
||||||
|
mp_msg(MSGT_VO, MSGL_ERR, "vo_dga: Your X-Server is not running in a ");
|
||||||
|
mp_msg(MSGT_VO, MSGL_ERR, "resolution supported by DGA driver!\n");
|
||||||
|
#endif
|
||||||
|
}//else{
|
||||||
|
// mp_msg(MSGT_VO, MSGL_INFO, "vo_dga: X running at: %s\n",
|
||||||
|
// vd_GetModeString(vo_dga_XServer_mode));
|
||||||
|
//}
|
||||||
|
|
||||||
|
#ifdef HAVE_DGA2
|
||||||
|
modelines=XDGAQueryModes(mDisplay, mScreen, &modecount);
|
||||||
|
if(modelines){
|
||||||
|
for(i=0; i< modecount; i++){
|
||||||
|
mp_msg(MSGT_VO, MSGL_V, "vo_dga: (%03d) depth=%d, bpp=%d, r=%08x, g=%08x, b=%08x, %d x %d\n",
|
||||||
|
i,
|
||||||
|
modelines[i].depth,
|
||||||
|
modelines[i].bitsPerPixel,
|
||||||
|
modelines[i].redMask,
|
||||||
|
modelines[i].greenMask,
|
||||||
|
modelines[i].blueMask,
|
||||||
|
modelines[i].viewportWidth,
|
||||||
|
modelines[i].viewportHeight);
|
||||||
|
vd_EnableMode(
|
||||||
|
modelines[i].depth,
|
||||||
|
modelines[i].bitsPerPixel,
|
||||||
|
modelines[i].redMask,
|
||||||
|
modelines[i].greenMask,
|
||||||
|
modelines[i].blueMask);
|
||||||
|
}
|
||||||
|
XFree(modelines);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
dga_depths_init = 1;
|
||||||
|
|
||||||
|
if( !vo_dga_modes[1].vdm_supported && vo_dga_modes[2].vdm_supported ){
|
||||||
|
vo_dga_modes[1].vdm_supported = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( !vo_dga_modes[3].vdm_supported && vo_dga_modes[4].vdm_supported ){
|
||||||
|
vo_dga_modes[3].vdm_supported = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(i=1; i<vo_dga_mode_num; i++){
|
||||||
|
mp_msg(MSGT_VO, MSGL_INFO, "vo_dga: Mode: %s", vd_GetModeString(i));
|
||||||
|
if(vo_dbpp && vo_dbpp != vo_dga_modes[i].vdm_mplayer_depth){
|
||||||
|
vo_dga_modes[i].vdm_supported = 0;
|
||||||
|
mp_msg(MSGT_VO, MSGL_INFO, " ...disabled by -bpp %d", vo_dbpp );
|
||||||
|
}
|
||||||
|
mp_msg(MSGT_VO, MSGL_INFO, "\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user