[Mplayerxp-cvslog] SF.net SVN: mplayerxp:[446] mplayerxp
Brought to you by:
olov
From: <nic...@us...> - 2012-11-24 09:41:59
|
Revision: 446 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=446&view=rev Author: nickols_k Date: 2012-11-24 09:41:49 +0000 (Sat, 24 Nov 2012) Log Message: ----------- more non-POD objects Modified Paths: -------------- mplayerxp/libvo/video_out.cpp mplayerxp/libvo/video_out.h mplayerxp/libvo/vo_dga.cpp mplayerxp/libvo/vo_fbdev.cpp mplayerxp/libvo/vo_null.cpp mplayerxp/libvo/vo_opengl.cpp mplayerxp/libvo/vo_sdl.cpp mplayerxp/libvo/vo_vesa.cpp mplayerxp/libvo/vo_x11.cpp mplayerxp/libvo/vo_xv.cpp mplayerxp/libvo/vosub_vidix.cpp mplayerxp/libvo/x11_common.cpp mplayerxp/mplayerxp.cpp mplayerxp/mplayerxp.h mplayerxp/osdep/mplib.h Modified: mplayerxp/libvo/video_out.cpp =================================================================== --- mplayerxp/libvo/video_out.cpp 2012-11-24 07:35:40 UTC (rev 445) +++ mplayerxp/libvo/video_out.cpp 2012-11-24 09:41:49 UTC (rev 446) @@ -47,7 +47,14 @@ #include "sub.h" #include "vo_msg.h" -vo_conf_t vo_conf; +VO_Config::VO_Config() { + memset(&subdevice,0,reinterpret_cast<long>(&dbpp) - reinterpret_cast<long>(&subdevice)); + movie_aspect=-1.0; + flip=-1; + xp_buffs=64; + dbpp=0; +} +VO_Config vo_conf; // // Externally visible list of all vo drivers @@ -116,7 +123,10 @@ unsigned off[4]; /* offsets for y,u,v if DR on non fully fitted surface */ }dri_priv_t; -typedef struct vo_priv_s { +struct vo_priv_t : public video_private { + vo_priv_t(); + virtual ~vo_priv_t(); + char antiviral_hole[RND_CHAR8]; uint32_t srcFourcc,image_format,image_width,image_height; uint32_t org_width,org_height; @@ -127,8 +137,20 @@ dri_priv_t dri; const vo_functions_t * video_out; draw_alpha_f draw_alpha; -}vo_priv_t; +}; +vo_priv_t::vo_priv_t() { + pthread_mutexattr_t attr; + rnd_fill(antiviral_hole,reinterpret_cast<long>(&srcFourcc)-reinterpret_cast<long>(antiviral_hole)); + pthread_mutexattr_init(&attr); + pthread_mutex_init(&surfaces_mutex,&attr); + dri.num_xp_frames=1; +} + +vo_priv_t::~vo_priv_t() { + pthread_mutex_destroy(&surfaces_mutex); +} + void vo_print_help(vo_data_t*vo) { unsigned i; @@ -143,56 +165,48 @@ const vo_functions_t* vo_register(vo_data_t*vo,const char *driver_name) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); unsigned i; - if(!driver_name) priv->video_out=video_out_drivers[0]; + if(!driver_name) priv.video_out=video_out_drivers[0]; else for (i=0; video_out_drivers[i] != &video_out_null; i++){ const vo_info_t *info = video_out_drivers[i]->get_info (vo); if(strcmp(info->short_name,driver_name) == 0){ - priv->video_out = video_out_drivers[i];break; + priv.video_out = video_out_drivers[i]; + break; } } - return priv->video_out; + return priv.video_out; } const vo_info_t* vo_get_info(vo_data_t*vo) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; - return priv->video_out->get_info(vo); + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + return priv.video_out->get_info(vo); } vo_data_t* __FASTCALL__ vo_preinit_structs( void ) { vo_data_t* vo; - pthread_mutexattr_t attr; - memset(&vo_conf,0,sizeof(vo_conf_t)); - vo_conf.movie_aspect=-1.0; - vo_conf.flip=-1; - vo_conf.xp_buffs=64; - vo=new(zeromem) vo_data_t; vo->window = None; vo->osd_progbar_type=-1; vo->osd_progbar_value=100; // 0..256 - vo->vo_priv=new(zeromem) vo_priv_t; - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; - rnd_fill(priv->antiviral_hole,offsetof(vo_priv_t,srcFourcc)-offsetof(vo_priv_t,antiviral_hole)); - pthread_mutexattr_init(&attr); - pthread_mutex_init(&priv->surfaces_mutex,&attr); - priv->dri.num_xp_frames=1; + vo_priv_t* priv; + priv=new(zeromem) vo_priv_t; + vo->vo_priv=priv; rnd_fill(vo->antiviral_hole,offsetof(vo_data_t,mScreen)-offsetof(vo_data_t,antiviral_hole)); return vo; } MPXP_Rc __FASTCALL__ vo_init(vo_data_t*vo,const char *subdevice) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); MSG_DBG3("dri_vo_dbg: vo_init(%s)\n",subdevice); - priv->frame_counter=0; - return priv->video_out->preinit(vo,subdevice); + priv.frame_counter=0; + return priv.video_out->preinit(vo,subdevice); } int __FASTCALL__ vo_describe_fourcc(uint32_t fourcc,vo_format_desc *vd) @@ -262,132 +276,132 @@ static void __FASTCALL__ dri_config(vo_data_t*vo,uint32_t fourcc) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); unsigned i; - priv->dri.is_planar = vo_describe_fourcc(fourcc,&priv->vod); - priv->dri.bpp=priv->vod.bpp; - if(!priv->dri.bpp) priv->dri.has_dri=0; /*unknown fourcc*/ - if(priv->dri.has_dri) + priv.dri.is_planar = vo_describe_fourcc(fourcc,&priv.vod); + priv.dri.bpp=priv.vod.bpp; + if(!priv.dri.bpp) priv.dri.has_dri=0; /*unknown fourcc*/ + if(priv.dri.has_dri) { - priv->video_out->control(vo,VOCTRL_GET_NUM_FRAMES,&priv->dri.num_xp_frames); - priv->dri.num_xp_frames=std::min(priv->dri.num_xp_frames,unsigned(MAX_DRI_BUFFERS)); - for(i=0;i<priv->dri.num_xp_frames;i++) + priv.video_out->control(vo,VOCTRL_GET_NUM_FRAMES,&priv.dri.num_xp_frames); + priv.dri.num_xp_frames=std::min(priv.dri.num_xp_frames,unsigned(MAX_DRI_BUFFERS)); + for(i=0;i<priv.dri.num_xp_frames;i++) { - priv->dri.surf[i].idx=i; - priv->video_out->control(vo,DRI_GET_SURFACE,&priv->dri.surf[i]); + priv.dri.surf[i].idx=i; + priv.video_out->control(vo,DRI_GET_SURFACE,&priv.dri.surf[i]); } } } static void __FASTCALL__ ps_tune(vo_data_t*vo,unsigned width,unsigned height) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); int src_is_planar; unsigned src_stride,ps_x,ps_y; vo_format_desc vd; - ps_x = (priv->org_width - width)/2; - ps_y = (priv->org_height - height)/2; - src_is_planar = vo_describe_fourcc(priv->srcFourcc,&vd); - src_stride=src_is_planar?priv->org_width:priv->org_width*((vd.bpp+7)/8); - priv->ps_off[0] = priv->ps_off[1] = priv->ps_off[2] = priv->ps_off[3] = 0; + ps_x = (priv.org_width - width)/2; + ps_y = (priv.org_height - height)/2; + src_is_planar = vo_describe_fourcc(priv.srcFourcc,&vd); + src_stride=src_is_planar?priv.org_width:priv.org_width*((vd.bpp+7)/8); + priv.ps_off[0] = priv.ps_off[1] = priv.ps_off[2] = priv.ps_off[3] = 0; if(!src_is_planar) - priv->ps_off[0] = ps_y*src_stride+ps_x*((vd.bpp+7)/8); + priv.ps_off[0] = ps_y*src_stride+ps_x*((vd.bpp+7)/8); else { - priv->ps_off[0] = ps_y*src_stride+ps_x; + priv.ps_off[0] = ps_y*src_stride+ps_x; if(vd.bpp==12) /*YV12 series*/ { - priv->ps_off[1] = (ps_y/2)*(src_stride/2)+ps_x/2; - priv->ps_off[2] = (ps_y/2)*(src_stride/2)+ps_x/2; + priv.ps_off[1] = (ps_y/2)*(src_stride/2)+ps_x/2; + priv.ps_off[2] = (ps_y/2)*(src_stride/2)+ps_x/2; } else if(vd.bpp==9) /*YVU9 series*/ { - priv->ps_off[1] = (ps_y/4)*(src_stride/4)+ps_x/4; - priv->ps_off[2] = (ps_y/4)*(src_stride/4)+ps_x/4; + priv.ps_off[1] = (ps_y/4)*(src_stride/4)+ps_x/4; + priv.ps_off[2] = (ps_y/4)*(src_stride/4)+ps_x/4; } } } static void __FASTCALL__ dri_tune(vo_data_t*vo,unsigned width,unsigned height) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; - priv->dri.sstride=priv->dri.is_planar?width:width*((priv->dri.bpp+7)/8); - priv->dri.off[0] = priv->dri.off[1] = priv->dri.off[2] = priv->dri.off[3] = 0; - if(!priv->dri.is_planar) + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + priv.dri.sstride=priv.dri.is_planar?width:width*((priv.dri.bpp+7)/8); + priv.dri.off[0] = priv.dri.off[1] = priv.dri.off[2] = priv.dri.off[3] = 0; + if(!priv.dri.is_planar) { - priv->dri.planes_eq = priv->dri.sstride == priv->dri.cap.strides[0]; - priv->dri.off[0] = priv->dri.cap.y*priv->dri.cap.strides[0]+priv->dri.cap.x*((priv->dri.bpp+7)/8); + priv.dri.planes_eq = priv.dri.sstride == priv.dri.cap.strides[0]; + priv.dri.off[0] = priv.dri.cap.y*priv.dri.cap.strides[0]+priv.dri.cap.x*((priv.dri.bpp+7)/8); } else { unsigned long y_off,u_off,v_off; - y_off = (unsigned long)priv->dri.surf[0].planes[0]; - u_off = (unsigned long)std::min(priv->dri.surf[0].planes[1],priv->dri.surf[0].planes[2]); - v_off = (unsigned long)std::max(priv->dri.surf[0].planes[1],priv->dri.surf[0].planes[2]); - priv->dri.off[0] = priv->dri.cap.y*priv->dri.cap.strides[0]+priv->dri.cap.x; - if(priv->dri.bpp==12) /*YV12 series*/ + y_off = (unsigned long)priv.dri.surf[0].planes[0]; + u_off = (unsigned long)std::min(priv.dri.surf[0].planes[1],priv.dri.surf[0].planes[2]); + v_off = (unsigned long)std::max(priv.dri.surf[0].planes[1],priv.dri.surf[0].planes[2]); + priv.dri.off[0] = priv.dri.cap.y*priv.dri.cap.strides[0]+priv.dri.cap.x; + if(priv.dri.bpp==12) /*YV12 series*/ { - priv->dri.planes_eq = width == priv->dri.cap.strides[0] && + priv.dri.planes_eq = width == priv.dri.cap.strides[0] && width*height == u_off - y_off && width*height*5/4 == v_off - y_off && - priv->dri.cap.strides[0]/2 == priv->dri.cap.strides[1] && - priv->dri.cap.strides[0]/2 == priv->dri.cap.strides[2]; - priv->dri.off[1] = (priv->dri.cap.y/2)*priv->dri.cap.strides[1]+priv->dri.cap.x/2; - priv->dri.off[2] = (priv->dri.cap.y/2)*priv->dri.cap.strides[2]+priv->dri.cap.x/2; + priv.dri.cap.strides[0]/2 == priv.dri.cap.strides[1] && + priv.dri.cap.strides[0]/2 == priv.dri.cap.strides[2]; + priv.dri.off[1] = (priv.dri.cap.y/2)*priv.dri.cap.strides[1]+priv.dri.cap.x/2; + priv.dri.off[2] = (priv.dri.cap.y/2)*priv.dri.cap.strides[2]+priv.dri.cap.x/2; } else - if(priv->dri.bpp==9) /*YVU9 series*/ + if(priv.dri.bpp==9) /*YVU9 series*/ { - priv->dri.planes_eq = width == priv->dri.cap.strides[0] && + priv.dri.planes_eq = width == priv.dri.cap.strides[0] && width*height == u_off - y_off && width*height*17/16 == v_off - y_off && - priv->dri.cap.strides[0]/4 == priv->dri.cap.strides[1] && - priv->dri.cap.strides[0]/4 == priv->dri.cap.strides[2]; - priv->dri.off[1] = (priv->dri.cap.y/4)*priv->dri.cap.strides[1]+priv->dri.cap.x/4; - priv->dri.off[2] = (priv->dri.cap.y/4)*priv->dri.cap.strides[2]+priv->dri.cap.x/4; + priv.dri.cap.strides[0]/4 == priv.dri.cap.strides[1] && + priv.dri.cap.strides[0]/4 == priv.dri.cap.strides[2]; + priv.dri.off[1] = (priv.dri.cap.y/4)*priv.dri.cap.strides[1]+priv.dri.cap.x/4; + priv.dri.off[2] = (priv.dri.cap.y/4)*priv.dri.cap.strides[2]+priv.dri.cap.x/4; } else - if(priv->dri.bpp==8) /*Y800 series*/ - priv->dri.planes_eq = width == priv->dri.cap.strides[0]; + if(priv.dri.bpp==8) /*Y800 series*/ + priv.dri.planes_eq = width == priv.dri.cap.strides[0]; } - priv->dri.accel=(priv->dri.cap.caps&(DRI_CAP_DOWNSCALER|DRI_CAP_HORZSCALER| + priv.dri.accel=(priv.dri.cap.caps&(DRI_CAP_DOWNSCALER|DRI_CAP_HORZSCALER| DRI_CAP_UPSCALER|DRI_CAP_VERTSCALER))== (DRI_CAP_DOWNSCALER|DRI_CAP_HORZSCALER| DRI_CAP_UPSCALER|DRI_CAP_VERTSCALER); - priv->dri.dr = priv->srcFourcc == priv->dri.cap.fourcc && !(priv->dri.flags & VOFLG_FLIP) && - !priv->ps_off[0] && !priv->ps_off[1] && !priv->ps_off[2] && !priv->ps_off[3]; - if(priv->dri.dr && priv->dri.cap.w < width) - priv->dri.dr = priv->dri.cap.caps&(DRI_CAP_DOWNSCALER|DRI_CAP_HORZSCALER)?1:0; - if(priv->dri.dr && priv->dri.cap.w > width) - priv->dri.dr = priv->dri.cap.caps&(DRI_CAP_UPSCALER|DRI_CAP_HORZSCALER)?1:0; - if(priv->dri.dr && priv->dri.cap.h < height) - priv->dri.dr = priv->dri.cap.caps&(DRI_CAP_DOWNSCALER|DRI_CAP_VERTSCALER)?1:0; - if(priv->dri.dr && priv->dri.cap.h > height) - priv->dri.dr = priv->dri.cap.caps&(DRI_CAP_UPSCALER|DRI_CAP_VERTSCALER)?1:0; + priv.dri.dr = priv.srcFourcc == priv.dri.cap.fourcc && !(priv.dri.flags & VOFLG_FLIP) && + !priv.ps_off[0] && !priv.ps_off[1] && !priv.ps_off[2] && !priv.ps_off[3]; + if(priv.dri.dr && priv.dri.cap.w < width) + priv.dri.dr = priv.dri.cap.caps&(DRI_CAP_DOWNSCALER|DRI_CAP_HORZSCALER)?1:0; + if(priv.dri.dr && priv.dri.cap.w > width) + priv.dri.dr = priv.dri.cap.caps&(DRI_CAP_UPSCALER|DRI_CAP_HORZSCALER)?1:0; + if(priv.dri.dr && priv.dri.cap.h < height) + priv.dri.dr = priv.dri.cap.caps&(DRI_CAP_DOWNSCALER|DRI_CAP_VERTSCALER)?1:0; + if(priv.dri.dr && priv.dri.cap.h > height) + priv.dri.dr = priv.dri.cap.caps&(DRI_CAP_UPSCALER|DRI_CAP_VERTSCALER)?1:0; } static void __FASTCALL__ dri_reconfig(vo_data_t*vo,uint32_t event ) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; - priv->dri.has_dri = 1; - priv->video_out->control(vo,DRI_GET_SURFACE_CAPS,&priv->dri.cap); - dri_config(vo,priv->dri.cap.fourcc); + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + priv.dri.has_dri = 1; + priv.video_out->control(vo,DRI_GET_SURFACE_CAPS,&priv.dri.cap); + dri_config(vo,priv.dri.cap.fourcc); /* ugly workaround of swapped BGR-fourccs. Should be removed in the future */ - if(!priv->dri.has_dri) + if(!priv.dri.has_dri) { - priv->dri.has_dri=1; - priv->dri.cap.fourcc = bswap_32(priv->dri.cap.fourcc); - dri_config(vo,priv->dri.cap.fourcc); + priv.dri.has_dri=1; + priv.dri.cap.fourcc = bswap_32(priv.dri.cap.fourcc); + dri_config(vo,priv.dri.cap.fourcc); } - dri_tune(vo,priv->image_width,priv->image_height); + dri_tune(vo,priv.image_width,priv.image_height); /* TODO: smart analizer of scaling possibilities of vo_driver */ if((event & VO_EVENT_RESIZE) == VO_EVENT_RESIZE) { xp_core->in_resize=1; - vf_reinit_vo(priv->dri.cap.w,priv->dri.cap.h,priv->dri.cap.fourcc,1); + vf_reinit_vo(priv.dri.cap.w,priv.dri.cap.h,priv.dri.cap.fourcc,1); } - vf_reinit_vo(priv->dri.cap.w,priv->dri.cap.h,priv->dri.cap.fourcc,0); + vf_reinit_vo(priv.dri.cap.w,priv.dri.cap.h,priv.dri.cap.fourcc,0); } static int vo_inited=0; @@ -395,49 +409,49 @@ uint32_t d_height, uint32_t fullscreen, char *title, uint32_t format) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); MPXP_Rc retval; unsigned dest_fourcc,w,d_w,h,d_h; MSG_DBG3("dri_vo_dbg: vo_config\n"); if(vo_inited) { - MSG_FATAL("!!!priv->video_out internal fatal error: priv->video_out is initialized more than once!!!\n"); + MSG_FATAL("!!!priv.video_out internal fatal error: priv.video_out is initialized more than once!!!\n"); return MPXP_False; } vo_inited++; dest_fourcc = format; - priv->org_width = width; - priv->org_height = height; + priv.org_width = width; + priv.org_height = height; w = width; d_w = d_width; h = height; d_h = d_height; - priv->dri.d_width = d_w; - priv->dri.d_height = d_h; - MSG_V("priv->video_out->config(%u,%u,%u,%u,0x%x,'%s',%s)\n" + priv.dri.d_width = d_w; + priv.dri.d_height = d_h; + MSG_V("priv.video_out->config(%u,%u,%u,%u,0x%x,'%s',%s)\n" ,w,h,d_w,d_h,fullscreen,title,vo_format_name(dest_fourcc)); - retval = priv->video_out->config(vo,w,h,d_w,d_h,fullscreen,title,dest_fourcc); - priv->srcFourcc=format; + retval = priv.video_out->config(vo,w,h,d_w,d_h,fullscreen,title,dest_fourcc); + priv.srcFourcc=format; if(retval == MPXP_Ok) { int dri_retv; - dri_retv = priv->video_out->control(vo,DRI_GET_SURFACE_CAPS,&priv->dri.cap); - priv->image_format = format; - priv->image_width = w; - priv->image_height = h; - ps_tune(vo,priv->image_width,priv->org_height); + dri_retv = priv.video_out->control(vo,DRI_GET_SURFACE_CAPS,&priv.dri.cap); + priv.image_format = format; + priv.image_width = w; + priv.image_height = h; + ps_tune(vo,priv.image_width,priv.org_height); if(dri_retv == MPXP_True) dri_reconfig(vo,0); - MSG_V("dri_vo_caps: driver does %s support DRI\n",priv->dri.has_dri?"":"not"); + MSG_V("dri_vo_caps: driver does %s support DRI\n",priv.dri.has_dri?"":"not"); MSG_V("dri_vo_caps: caps=%08X fourcc=%08X(%s) x,y,w,h(%u %u %u %u)\n" - "dri_vo_caps: width_height(%u %u) strides(%u %u %u %u) priv->dri.bpp=%u\n" - ,priv->dri.cap.caps - ,priv->dri.cap.fourcc - ,vo_format_name(priv->dri.cap.fourcc) - ,priv->dri.cap.x,priv->dri.cap.y,priv->dri.cap.w,priv->dri.cap.h - ,priv->dri.cap.width,priv->dri.cap.height - ,priv->dri.cap.strides[0],priv->dri.cap.strides[1] - ,priv->dri.cap.strides[2],priv->dri.cap.strides[3] - ,priv->dri.bpp); + "dri_vo_caps: width_height(%u %u) strides(%u %u %u %u) priv.dri.bpp=%u\n" + ,priv.dri.cap.caps + ,priv.dri.cap.fourcc + ,vo_format_name(priv.dri.cap.fourcc) + ,priv.dri.cap.x,priv.dri.cap.y,priv.dri.cap.w,priv.dri.cap.h + ,priv.dri.cap.width,priv.dri.cap.height + ,priv.dri.cap.strides[0],priv.dri.cap.strides[1] + ,priv.dri.cap.strides[2],priv.dri.cap.strides[3] + ,priv.dri.bpp); MSG_V("dri_vo_src: w,h(%u %u) d_w,d_h(%u %u)\n" "dri_vo_src: flags=%08X fourcc=%08X(%s)\n" ,width,height @@ -445,7 +459,7 @@ ,fullscreen ,format ,vo_format_name(format)); - priv->dri.flags = fullscreen; + priv.dri.flags = fullscreen; } return retval; } @@ -453,7 +467,7 @@ /* if vo_driver doesn't support dri then it won't work with this logic */ uint32_t __FASTCALL__ vo_query_format(vo_data_t*vo,uint32_t* fourcc, unsigned src_w, unsigned src_h) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); uint32_t dri_forced_fourcc; MPXP_Rc retval; vo_query_fourcc_t qfourcc; @@ -461,7 +475,7 @@ qfourcc.fourcc = *fourcc; qfourcc.w = src_w; qfourcc.h = src_h; - if(priv->video_out->control(vo,VOCTRL_QUERY_FORMAT,&qfourcc)==MPXP_False) + if(priv.video_out->control(vo,VOCTRL_QUERY_FORMAT,&qfourcc)==MPXP_False) qfourcc.flags=VOCAP_NA; MSG_V("dri_vo: request for %s fourcc: %i\n",vo_format_name(*fourcc),qfourcc.flags); dri_forced_fourcc = *fourcc; @@ -470,98 +484,98 @@ MPXP_Rc vo_reset(vo_data_t*vo) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); MSG_DBG3("dri_vo_dbg: vo_reset\n"); - return priv->video_out->control(vo,VOCTRL_RESET,NULL); + return priv.video_out->control(vo,VOCTRL_RESET,NULL); } MPXP_Rc vo_screenshot(vo_data_t*vo,unsigned idx ) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); char buf[256]; MSG_DBG3("dri_vo_dbg: vo_screenshot\n"); - sprintf(buf,"%llu",priv->frame_counter); - return gr_screenshot(buf,const_cast<const uint8_t**>(priv->dri.surf[idx].planes),priv->dri.cap.strides,priv->dri.cap.fourcc,priv->dri.cap.width,priv->dri.cap.height); + sprintf(buf,"%llu",priv.frame_counter); + return gr_screenshot(buf,const_cast<const uint8_t**>(priv.dri.surf[idx].planes),priv.dri.cap.strides,priv.dri.cap.fourcc,priv.dri.cap.width,priv.dri.cap.height); } MPXP_Rc vo_pause(vo_data_t*vo) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); MSG_DBG3("dri_vo_dbg: vo_pause\n"); - return priv->video_out->control(vo,VOCTRL_PAUSE,0); + return priv.video_out->control(vo,VOCTRL_PAUSE,0); } MPXP_Rc vo_resume(vo_data_t*vo) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); MSG_DBG3("dri_vo_dbg: vo_resume\n"); - return priv->video_out->control(vo,VOCTRL_RESUME,0); + return priv.video_out->control(vo,VOCTRL_RESUME,0); } void vo_lock_surfaces(vo_data_t*vo) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; - pthread_mutex_lock(&priv->surfaces_mutex); + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + pthread_mutex_lock(&priv.surfaces_mutex); } void vo_unlock_surfaces(vo_data_t*vo) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; - pthread_mutex_unlock(&priv->surfaces_mutex); + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + pthread_mutex_unlock(&priv.surfaces_mutex); } MPXP_Rc __FASTCALL__ vo_get_surface(vo_data_t*vo,mp_image_t* mpi) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); int width_less_stride; MSG_DBG2("dri_vo_dbg: vo_get_surface type=%X flg=%X\n",mpi->type,mpi->flags); width_less_stride = 0; if(mpi->flags & MP_IMGFLAG_PLANAR) { - width_less_stride = mpi->w <= priv->dri.cap.strides[0] && - (mpi->w>>mpi->chroma_x_shift) <= priv->dri.cap.strides[1] && - (mpi->w>>mpi->chroma_x_shift) <= priv->dri.cap.strides[2]; + width_less_stride = mpi->w <= priv.dri.cap.strides[0] && + (mpi->w>>mpi->chroma_x_shift) <= priv.dri.cap.strides[1] && + (mpi->w>>mpi->chroma_x_shift) <= priv.dri.cap.strides[2]; } - else width_less_stride = mpi->w*mpi->bpp <= priv->dri.cap.strides[0]; - if(priv->dri.has_dri) + else width_less_stride = mpi->w*mpi->bpp <= priv.dri.cap.strides[0]; + if(priv.dri.has_dri) { /* static is singlebuffered decoding */ - if(mpi->type==MP_IMGTYPE_STATIC && priv->dri.num_xp_frames>1) + if(mpi->type==MP_IMGTYPE_STATIC && priv.dri.num_xp_frames>1) { - MSG_DBG2("dri_vo_dbg: vo_get_surface FAIL mpi->type==MP_IMGTYPE_STATIC && priv->dri.num_xp_frames>1\n"); + MSG_DBG2("dri_vo_dbg: vo_get_surface FAIL mpi->type==MP_IMGTYPE_STATIC && priv.dri.num_xp_frames>1\n"); return MPXP_False; } /*I+P requires 2+ static buffers for R/W */ - if(mpi->type==MP_IMGTYPE_IP && (priv->dri.num_xp_frames < 2 || (priv->dri.cap.caps&DRI_CAP_VIDEO_MMAPED)==DRI_CAP_VIDEO_MMAPED)) + if(mpi->type==MP_IMGTYPE_IP && (priv.dri.num_xp_frames < 2 || (priv.dri.cap.caps&DRI_CAP_VIDEO_MMAPED)==DRI_CAP_VIDEO_MMAPED)) { - MSG_DBG2("dri_vo_dbg: vo_get_surface FAIL (mpi->type==MP_IMGTYPE_IP && priv->dri.num_xp_frames < 2) || (priv->dri.cap.caps&DRI_CAP_VIDEO_MMAPED)==DRI_CAP_VIDEO_MMAPED\n"); + MSG_DBG2("dri_vo_dbg: vo_get_surface FAIL (mpi->type==MP_IMGTYPE_IP && priv.dri.num_xp_frames < 2) || (priv.dri.cap.caps&DRI_CAP_VIDEO_MMAPED)==DRI_CAP_VIDEO_MMAPED\n"); return MPXP_False; } /*I+P+B requires 3+ static buffers for R/W */ - if(mpi->type==MP_IMGTYPE_IPB && (priv->dri.num_xp_frames != 3 || (priv->dri.cap.caps&DRI_CAP_VIDEO_MMAPED)==DRI_CAP_VIDEO_MMAPED)) + if(mpi->type==MP_IMGTYPE_IPB && (priv.dri.num_xp_frames != 3 || (priv.dri.cap.caps&DRI_CAP_VIDEO_MMAPED)==DRI_CAP_VIDEO_MMAPED)) { - MSG_DBG2("dri_vo_dbg: vo_get_surface FAIL (mpi->type==MP_IMGTYPE_IPB && priv->dri.num_xp_frames != 3) || (priv->dri.cap.caps&DRI_CAP_VIDEO_MMAPED)==DRI_CAP_VIDEO_MMAPED\n"); + MSG_DBG2("dri_vo_dbg: vo_get_surface FAIL (mpi->type==MP_IMGTYPE_IPB && priv.dri.num_xp_frames != 3) || (priv.dri.cap.caps&DRI_CAP_VIDEO_MMAPED)==DRI_CAP_VIDEO_MMAPED\n"); return MPXP_False; } /* video surface is bad thing for reading */ - if(((mpi->flags&MP_IMGFLAG_READABLE)||(mpi->type==MP_IMGTYPE_TEMP)) && (priv->dri.cap.caps&DRI_CAP_VIDEO_MMAPED)==DRI_CAP_VIDEO_MMAPED) + if(((mpi->flags&MP_IMGFLAG_READABLE)||(mpi->type==MP_IMGTYPE_TEMP)) && (priv.dri.cap.caps&DRI_CAP_VIDEO_MMAPED)==DRI_CAP_VIDEO_MMAPED) { - MSG_DBG2("dri_vo_dbg: vo_get_surface FAIL mpi->flags&MP_IMGFLAG_READABLE && (priv->dri.cap.caps&DRI_CAP_VIDEO_MMAPED)==DRI_CAP_VIDEO_MMAPED\n"); + MSG_DBG2("dri_vo_dbg: vo_get_surface FAIL mpi->flags&MP_IMGFLAG_READABLE && (priv.dri.cap.caps&DRI_CAP_VIDEO_MMAPED)==DRI_CAP_VIDEO_MMAPED\n"); return MPXP_False; } /* it seems that surfaces are equal */ - if((((mpi->flags&MP_IMGFLAG_ACCEPT_STRIDE) && width_less_stride) || priv->dri.planes_eq) && priv->dri.dr) + if((((mpi->flags&MP_IMGFLAG_ACCEPT_STRIDE) && width_less_stride) || priv.dri.planes_eq) && priv.dri.dr) { vo_lock_surfaces(vo); - mpi->planes[0]=priv->dri.surf[mpi->xp_idx].planes[0]+priv->dri.off[0]; - mpi->planes[1]=priv->dri.surf[mpi->xp_idx].planes[1]+priv->dri.off[1]; - mpi->planes[2]=priv->dri.surf[mpi->xp_idx].planes[2]+priv->dri.off[2]; - mpi->stride[0]=priv->dri.cap.strides[0]; - mpi->stride[1]=priv->dri.cap.strides[1]; - mpi->stride[2]=priv->dri.cap.strides[2]; + mpi->planes[0]=priv.dri.surf[mpi->xp_idx].planes[0]+priv.dri.off[0]; + mpi->planes[1]=priv.dri.surf[mpi->xp_idx].planes[1]+priv.dri.off[1]; + mpi->planes[2]=priv.dri.surf[mpi->xp_idx].planes[2]+priv.dri.off[2]; + mpi->stride[0]=priv.dri.cap.strides[0]; + mpi->stride[1]=priv.dri.cap.strides[1]; + mpi->stride[2]=priv.dri.cap.strides[2]; mpi->flags|=MP_IMGFLAG_DIRECT; vo_unlock_surfaces(vo); MSG_DBG2("dri_vo_dbg: vo_get_surface OK\n"); return MPXP_True; } - MSG_DBG2("dri_vo_dbg: vo_get_surface FAIL (mpi->flags&MP_IMGFLAG_ACCEPT_STRIDE && width_less_stride) || priv->dri.planes_eq) && priv->dri.dr\n"); + MSG_DBG2("dri_vo_dbg: vo_get_surface FAIL (mpi->flags&MP_IMGFLAG_ACCEPT_STRIDE && width_less_stride) || priv.dri.planes_eq) && priv.dri.dr\n"); return MPXP_False; } else return MPXP_False; @@ -569,12 +583,12 @@ static int __FASTCALL__ adjust_size(any_t*vo,unsigned cw,unsigned ch,unsigned *nw,unsigned *nh) { - vo_priv_t* priv=(vo_priv_t*)((vo_data_t*)vo)->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(((vo_data_t*)vo)->vo_priv); MSG_DBG3("dri_vo_dbg: adjust_size was called %u %u %u %u\n",cw,ch,*nw,*nh); - if((priv->dri.flags & VOFLG_ZOOM) && (cw != *nw || ch != *nh) && !(priv->dri.flags & VOFLG_FS)) + if((priv.dri.flags & VOFLG_ZOOM) && (cw != *nw || ch != *nh) && !(priv.dri.flags & VOFLG_FS)) { float aspect,newv; - aspect = (float)priv->dri.d_width / (float)priv->dri.d_height; + aspect = (float)priv.dri.d_width / (float)priv.dri.d_height; if(abs(cw-*nw) > abs(ch-*nh)) { newv = ((float)(*nw))/aspect; @@ -595,66 +609,66 @@ int vo_check_events(vo_data_t*vo) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); uint32_t retval; int need_repaint; vo_resize_t vrest; MSG_DBG3("dri_vo_dbg: vo_check_events\n"); vrest.event_type = 0; vrest.adjust_size = adjust_size; - retval = priv->video_out->control(vo,VOCTRL_CHECK_EVENTS,&vrest); + retval = priv.video_out->control(vo,VOCTRL_CHECK_EVENTS,&vrest); /* it's ok since accelerated drivers doesn't touch surfaces but there is only one driver (vo_x11) which changes surfaces on 'fullscreen' key */ need_repaint=0; - if(priv->dri.has_dri && retval == MPXP_True && (vrest.event_type & VO_EVENT_RESIZE) == VO_EVENT_RESIZE) + if(priv.dri.has_dri && retval == MPXP_True && (vrest.event_type & VO_EVENT_RESIZE) == VO_EVENT_RESIZE) { need_repaint=1; dri_reconfig(vo,vrest.event_type); } - return (need_repaint && !priv->dri.accel) || (vrest.event_type&VO_EVENT_FORCE_UPDATE); + return (need_repaint && !priv.dri.accel) || (vrest.event_type&VO_EVENT_FORCE_UPDATE); } MPXP_Rc vo_fullscreen(vo_data_t*vo) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); uint32_t etype; MPXP_Rc retval; MSG_DBG3("dri_vo_dbg: vo_fullscreen\n"); etype = 0; - retval = priv->video_out->control(vo,VOCTRL_FULLSCREEN,&etype); - if(priv->dri.has_dri && retval == MPXP_True && (etype & VO_EVENT_RESIZE) == VO_EVENT_RESIZE) + retval = priv.video_out->control(vo,VOCTRL_FULLSCREEN,&etype); + if(priv.dri.has_dri && retval == MPXP_True && (etype & VO_EVENT_RESIZE) == VO_EVENT_RESIZE) dri_reconfig(vo,etype); - if(retval == MPXP_True) priv->dri.flags ^= VOFLG_FS; + if(retval == MPXP_True) priv.dri.flags ^= VOFLG_FS; return retval; } unsigned __FASTCALL__ vo_get_num_frames(vo_data_t*vo) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; - return priv->dri.num_xp_frames; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + return priv.dri.num_xp_frames; } MPXP_Rc __FASTCALL__ vo_draw_slice(vo_data_t*vo,const mp_image_t *mpi) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); unsigned i,_w[4],_h[4],x,y; MSG_DBG3("dri_vo_dbg: vo_draw_slice xywh=%i %i %i %i\n",mpi->x,mpi->y,mpi->w,mpi->h); - if(priv->dri.has_dri) { + if(priv.dri.has_dri) { uint8_t *dst[4]; const uint8_t *ps_src[4]; int dstStride[4]; int finalize=vo_is_final(vo); unsigned idx = mpi->xp_idx; for(i=0;i<4;i++) { - dst[i]=priv->dri.surf[idx].planes[i]+priv->dri.off[i]; - dstStride[i]=priv->dri.cap.strides[i]; - dst[i]+=((mpi->y*dstStride[i])*priv->vod.y_mul[i])/priv->vod.y_div[i]; - dst[i]+=(mpi->x*priv->vod.x_mul[i])/priv->vod.x_div[i]; - _w[i]=(mpi->w*priv->vod.x_mul[i])/priv->vod.x_div[i]; - _h[i]=(mpi->h*priv->vod.y_mul[i])/priv->vod.y_div[i]; + dst[i]=priv.dri.surf[idx].planes[i]+priv.dri.off[i]; + dstStride[i]=priv.dri.cap.strides[i]; + dst[i]+=((mpi->y*dstStride[i])*priv.vod.y_mul[i])/priv.vod.y_div[i]; + dst[i]+=(mpi->x*priv.vod.x_mul[i])/priv.vod.x_div[i]; + _w[i]=(mpi->w*priv.vod.x_mul[i])/priv.vod.x_div[i]; + _h[i]=(mpi->h*priv.vod.y_mul[i])/priv.vod.y_div[i]; y = i?(mpi->y>>mpi->chroma_y_shift):mpi->y; x = i?(mpi->x>>mpi->chroma_x_shift):mpi->x; - ps_src[i] = mpi->planes[i]+(y*mpi->stride[i])+x+priv->ps_off[i]; + ps_src[i] = mpi->planes[i]+(y*mpi->stride[i])+x+priv.ps_off[i]; } for(i=0;i<4;i++) { if(mpi->stride[i]) { @@ -671,38 +685,38 @@ void vo_select_frame(vo_data_t*vo,unsigned play_idx) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); MSG_DBG2("dri_vo_dbg: vo_select_frame(play_idx=%u)\n",play_idx); - priv->video_out->select_frame(vo,play_idx); + priv.video_out->select_frame(vo,play_idx); } void vo_flush_page(vo_data_t*vo,unsigned decoder_idx) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); MSG_DBG3("dri_vo_dbg: vo_flush_pages [idx=%u]\n",decoder_idx); - priv->frame_counter++; - if((priv->dri.cap.caps & DRI_CAP_VIDEO_MMAPED)!=DRI_CAP_VIDEO_MMAPED) - priv->video_out->control(vo,VOCTRL_FLUSH_PAGES,&decoder_idx); + priv.frame_counter++; + if((priv.dri.cap.caps & DRI_CAP_VIDEO_MMAPED)!=DRI_CAP_VIDEO_MMAPED) + priv.video_out->control(vo,VOCTRL_FLUSH_PAGES,&decoder_idx); } /* DRAW OSD */ static void __FASTCALL__ clear_rect(vo_data_t*vo,unsigned _y0,unsigned h,uint8_t *dest,unsigned stride,unsigned dstride,uint8_t filler) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); unsigned i; for(i=0;i<h;i++) { - if(_y0+i<priv->dri.cap.y||_y0+i>=priv->dri.cap.y+priv->dri.cap.h) memset(dest,filler,stride); + if(_y0+i<priv.dri.cap.y||_y0+i>=priv.dri.cap.y+priv.dri.cap.h) memset(dest,filler,stride); dest += dstride; } } static void __FASTCALL__ clear_rect2(vo_data_t*vo,unsigned _y0,unsigned h,uint8_t *dest,unsigned stride,unsigned dstride,uint8_t filler) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); unsigned i; - unsigned _y1 = priv->dri.cap.y/2; - unsigned _y2 = (priv->dri.cap.y+priv->dri.cap.h)/2; + unsigned _y1 = priv.dri.cap.y/2; + unsigned _y2 = (priv.dri.cap.y+priv.dri.cap.h)/2; for(i=0;i<h;i++) { if(_y0+i<_y1||_y0+i>=_y2) memset(dest,filler,stride); @@ -712,10 +726,10 @@ static void __FASTCALL__ clear_rect4(vo_data_t*vo,unsigned _y0,unsigned h,uint8_t *dest,unsigned stride,unsigned dstride,uint8_t filler) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); unsigned i; - unsigned _y1 = priv->dri.cap.y/4; - unsigned _y2 = (priv->dri.cap.y+priv->dri.cap.h)/4; + unsigned _y1 = priv.dri.cap.y/4; + unsigned _y2 = (priv.dri.cap.y+priv.dri.cap.h)/4; for(i=0;i<h;i++) { if(_y0+i<_y1||_y0+i>=_y2) memset(dest,filler,stride); @@ -725,22 +739,22 @@ static void __FASTCALL__ clear_rect_rgb(vo_data_t*vo,unsigned _y0,unsigned h,uint8_t *dest,unsigned stride,unsigned dstride) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); unsigned i; for(i=0;i<h;i++) { - if(_y0+i<priv->dri.cap.y||_y0+i>=priv->dri.cap.y+priv->dri.cap.h) memset(dest,0,stride); + if(_y0+i<priv.dri.cap.y||_y0+i>=priv.dri.cap.y+priv.dri.cap.h) memset(dest,0,stride); dest += dstride; } } static void __FASTCALL__ clear_rect_yuy2(vo_data_t*vo,unsigned _y0,unsigned h,uint8_t *dest,unsigned stride,unsigned dstride) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); unsigned i; for(i=0;i<h;i++) { - if(_y0+i<priv->dri.cap.y||_y0+i>=priv->dri.cap.y+priv->dri.cap.h) + if(_y0+i<priv.dri.cap.y||_y0+i>=priv.dri.cap.y+priv.dri.cap.h) { uint32_t *dst32; unsigned j,size32; @@ -758,9 +772,9 @@ static void __FASTCALL__ dri_remove_osd(any_t*_vo,unsigned idx,int x0,int _y0, int w,int h) { vo_data_t* vo=reinterpret_cast<vo_data_t*>(_vo); - vo_priv_t* priv=reinterpret_cast<vo_priv_t*>(vo->vo_priv); - if(x0+w<=priv->dri.cap.width&&_y0+h<=priv->dri.cap.height) - switch(priv->dri.cap.fourcc) + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + if(x0+w<=priv.dri.cap.width&&_y0+h<=priv.dri.cap.height) + switch(priv.dri.cap.fourcc) { case IMGFMT_RGB15: case IMGFMT_BGR15: @@ -770,40 +784,40 @@ case IMGFMT_BGR24: case IMGFMT_RGB32: case IMGFMT_BGR32: - clear_rect_rgb(vo,_y0,h,priv->dri.surf[idx].planes[0]+_y0*priv->dri.cap.strides[0]+x0*((priv->dri.bpp+7)/8), - w*(priv->dri.bpp+7)/8,priv->dri.cap.strides[0]); + clear_rect_rgb(vo,_y0,h,priv.dri.surf[idx].planes[0]+_y0*priv.dri.cap.strides[0]+x0*((priv.dri.bpp+7)/8), + w*(priv.dri.bpp+7)/8,priv.dri.cap.strides[0]); break; case IMGFMT_YVYU: case IMGFMT_YUY2: - clear_rect_yuy2(vo,_y0,h,priv->dri.surf[idx].planes[0]+_y0*priv->dri.cap.strides[0]+x0*2, - w*2,priv->dri.cap.strides[0]); + clear_rect_yuy2(vo,_y0,h,priv.dri.surf[idx].planes[0]+_y0*priv.dri.cap.strides[0]+x0*2, + w*2,priv.dri.cap.strides[0]); break; case IMGFMT_UYVY: - clear_rect_yuy2(vo,_y0,h,priv->dri.surf[idx].planes[0]+_y0*priv->dri.cap.strides[0]+x0*2+1, - w*2,priv->dri.cap.strides[0]); + clear_rect_yuy2(vo,_y0,h,priv.dri.surf[idx].planes[0]+_y0*priv.dri.cap.strides[0]+x0*2+1, + w*2,priv.dri.cap.strides[0]); break; case IMGFMT_Y800: - clear_rect(vo,_y0,h,priv->dri.surf[idx].planes[0]+_y0*priv->dri.cap.strides[0]+x0, - w,priv->dri.cap.strides[0],0x10); + clear_rect(vo,_y0,h,priv.dri.surf[idx].planes[0]+_y0*priv.dri.cap.strides[0]+x0, + w,priv.dri.cap.strides[0],0x10); break; case IMGFMT_YV12: case IMGFMT_I420: case IMGFMT_IYUV: - clear_rect(vo,_y0,h,priv->dri.surf[idx].planes[0]+_y0*priv->dri.cap.strides[0]+x0, - w,priv->dri.cap.strides[0],0x10); - clear_rect2(vo,_y0/2,h/2,priv->dri.surf[idx].planes[1]+_y0/2*priv->dri.cap.strides[1]+x0/2, - w/2,priv->dri.cap.strides[1],0x80); - clear_rect2(vo,_y0/2,h/2,priv->dri.surf[idx].planes[2]+_y0/2*priv->dri.cap.strides[2]+x0/2, - w/2,priv->dri.cap.strides[2],0x80); + clear_rect(vo,_y0,h,priv.dri.surf[idx].planes[0]+_y0*priv.dri.cap.strides[0]+x0, + w,priv.dri.cap.strides[0],0x10); + clear_rect2(vo,_y0/2,h/2,priv.dri.surf[idx].planes[1]+_y0/2*priv.dri.cap.strides[1]+x0/2, + w/2,priv.dri.cap.strides[1],0x80); + clear_rect2(vo,_y0/2,h/2,priv.dri.surf[idx].planes[2]+_y0/2*priv.dri.cap.strides[2]+x0/2, + w/2,priv.dri.cap.strides[2],0x80); break; case IMGFMT_YVU9: case IMGFMT_IF09: - clear_rect(vo,_y0,h,priv->dri.surf[idx].planes[0]+_y0*priv->dri.cap.strides[0]+x0, - w,priv->dri.cap.strides[0],0x10); - clear_rect4(vo,_y0/4,h/4,priv->dri.surf[idx].planes[1]+_y0/4*priv->dri.cap.strides[1]+x0/4, - w/4,priv->dri.cap.strides[1],0x80); - clear_rect4(vo,_y0/4,h/4,priv->dri.surf[idx].planes[2]+_y0/4*priv->dri.cap.strides[2]+x0/4, - w/4,priv->dri.cap.strides[2],0x80); + clear_rect(vo,_y0,h,priv.dri.surf[idx].planes[0]+_y0*priv.dri.cap.strides[0]+x0, + w,priv.dri.cap.strides[0],0x10); + clear_rect4(vo,_y0/4,h/4,priv.dri.surf[idx].planes[1]+_y0/4*priv.dri.cap.strides[1]+x0/4, + w/4,priv.dri.cap.strides[1],0x80); + clear_rect4(vo,_y0/4,h/4,priv.dri.surf[idx].planes[2]+_y0/4*priv.dri.cap.strides[2]+x0/4, + w/4,priv.dri.cap.strides[2],0x80); break; } } @@ -842,67 +856,66 @@ static void __FASTCALL__ dri_draw_osd(any_t*vo,unsigned idx,int x0,int _y0, int w,int h,const unsigned char* src,const unsigned char *srca, int stride) { - vo_priv_t* priv=reinterpret_cast<vo_priv_t*>(reinterpret_cast<vo_data_t*>(vo)->vo_priv); + vo_priv_t& priv=*static_cast<vo_priv_t*>(reinterpret_cast<vo_data_t*>(vo)->vo_priv); int finalize=vo_is_final(reinterpret_cast<vo_data_t*>(vo)); - if(x0+w<=priv->dri.cap.width&&_y0+h<=priv->dri.cap.height) + if(x0+w<=priv.dri.cap.width&&_y0+h<=priv.dri.cap.height) { - if(!priv->draw_alpha) priv->draw_alpha=get_draw_alpha(priv->dri.cap.fourcc); - if(priv->draw_alpha) - (*priv->draw_alpha)(w,h,src,srca,stride, - priv->dri.surf[idx].planes[0]+priv->dri.cap.strides[0]*_y0+x0*((priv->dri.bpp+7)/8), - priv->dri.cap.strides[0],finalize); + if(!priv.draw_alpha) priv.draw_alpha=get_draw_alpha(priv.dri.cap.fourcc); + if(priv.draw_alpha) + (*priv.draw_alpha)(w,h,src,srca,stride, + priv.dri.surf[idx].planes[0]+priv.dri.cap.strides[0]*_y0+x0*((priv.dri.bpp+7)/8), + priv.dri.cap.strides[0],finalize); } } void vo_draw_osd(vo_data_t*vo,unsigned idx) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); MSG_DBG3("dri_vo_dbg: vo_draw_osd\n"); - if(priv->dri.has_dri && !(priv->dri.cap.caps & DRI_CAP_HWOSD)) + if(priv.dri.has_dri && !(priv.dri.cap.caps & DRI_CAP_HWOSD)) { - if( priv->dri.cap.x || priv->dri.cap.y || - priv->dri.cap.w != priv->dri.cap.width || priv->dri.cap.h != priv->dri.cap.height) - vo_remove_text(vo,idx,priv->dri.cap.width,priv->dri.cap.height,dri_remove_osd); - vo_draw_text(vo,idx,priv->dri.cap.width,priv->dri.cap.height,dri_draw_osd); + if( priv.dri.cap.x || priv.dri.cap.y || + priv.dri.cap.w != priv.dri.cap.width || priv.dri.cap.h != priv.dri.cap.height) + vo_remove_text(vo,idx,priv.dri.cap.width,priv.dri.cap.height,dri_remove_osd); + vo_draw_text(vo,idx,priv.dri.cap.width,priv.dri.cap.height,dri_draw_osd); } } void vo_draw_spudec_direct(vo_data_t*vo,unsigned idx) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); MSG_DBG3("dri_vo_dbg: vo_draw_osd\n"); - if(priv->dri.has_dri && !(priv->dri.cap.caps & DRI_CAP_HWOSD)) + if(priv.dri.has_dri && !(priv.dri.cap.caps & DRI_CAP_HWOSD)) { -// if( priv->dri.cap.x || priv->dri.cap.y || -// priv->dri.cap.w != priv->dri.cap.width || priv->dri.cap.h != priv->dri.cap.height) -// vo_remove_text(idx,priv->dri.cap.width,priv->dri.cap.height,dri_remove_osd); - vo_draw_spudec(vo,idx,priv->dri.cap.width,priv->dri.cap.height,dri_draw_osd); +// if( priv.dri.cap.x || priv.dri.cap.y || +// priv.dri.cap.w != priv.dri.cap.width || priv.dri.cap.h != priv.dri.cap.height) +// vo_remove_text(idx,priv.dri.cap.width,priv.dri.cap.height,dri_remove_osd); + vo_draw_spudec(vo,idx,priv.dri.cap.width,priv.dri.cap.height,dri_draw_osd); } } void vo_uninit(vo_data_t*vo) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; + vo_priv_t* priv=static_cast<vo_priv_t*>(vo->vo_priv); MSG_DBG3("dri_vo_dbg: vo_uninit\n"); vo_inited--; priv->video_out->uninit(vo); - pthread_mutex_destroy(&priv->surfaces_mutex); delete priv; } MPXP_Rc __FASTCALL__ vo_control(vo_data_t*vo,uint32_t request, any_t*data) { MPXP_Rc rval; - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; - rval=priv->video_out->control(vo,request,data); + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + rval=priv.video_out->control(vo,request,data); MSG_DBG3("dri_vo_dbg: %u=vo_control( %u, %p )\n",rval,request,data); return rval; } int __FASTCALL__ vo_is_final(vo_data_t*vo) { - vo_priv_t* priv=(vo_priv_t*)vo->vo_priv; - int mmaped=priv->dri.cap.caps&DRI_CAP_VIDEO_MMAPED; - int busmaster=priv->dri.cap.caps&DRI_CAP_BUSMASTERING; - return mmaped||busmaster||(priv->dri.num_xp_frames>1); + vo_priv_t& priv=*static_cast<vo_priv_t*>(vo->vo_priv); + int mmaped=priv.dri.cap.caps&DRI_CAP_VIDEO_MMAPED; + int busmaster=priv.dri.cap.caps&DRI_CAP_BUSMASTERING; + return mmaped||busmaster||(priv.dri.num_xp_frames>1); } Modified: mplayerxp/libvo/video_out.h =================================================================== --- mplayerxp/libvo/video_out.h 2012-11-24 07:35:40 UTC (rev 445) +++ mplayerxp/libvo/video_out.h 2012-11-24 09:41:49 UTC (rev 446) @@ -10,6 +10,9 @@ #define __VIDEO_OUT_H 1 #include "mp_config.h" +#include "osdep/mplib.h" +using namespace mpxp; + #include <inttypes.h> #include <stdarg.h> @@ -127,7 +130,10 @@ int left, right, top, bottom, width, height; }; -typedef struct vo_conf_s { +struct VO_Config { + VO_Config(); + ~VO_Config() {} + char * subdevice; // currently unused char* mDisplayName; @@ -152,9 +158,15 @@ int softzoom; int flip; unsigned dbpp; -}vo_conf_t; -extern vo_conf_t vo_conf; +}; +extern VO_Config vo_conf; +class video_private : public Opaque { + public: + video_private() {} + virtual ~video_private() {} +}; + typedef struct vo_data_s { Display* mDisplay; char antiviral_hole[RND_CHAR4]; @@ -169,10 +181,10 @@ // requested resolution/bpp: (-x -y -bpp options) vo_rect_t dest; - any_t* vo_priv;/* private data of vo structure */ - any_t* priv; /* private data of video driver */ - any_t* priv2; /* private data of X11 commons */ - any_t* priv3; /* private data of vidix commons */ + video_private* vo_priv;/* private data of vo structure */ + video_private* priv; /* private data of video driver */ + video_private* priv2; /* private data of X11 commons */ + video_private* priv3; /* private data of vidix commons */ /* subtitle support */ char* osd_text; Modified: mplayerxp/libvo/vo_dga.cpp =================================================================== --- mplayerxp/libvo/vo_dga.cpp 2012-11-24 07:35:40 UTC (rev 445) +++ mplayerxp/libvo/vo_dga.cpp 2012-11-24 09:41:49 UTC (rev 446) @@ -55,7 +55,10 @@ "" }; -typedef struct priv_s { +struct dga_priv_t : public video_private { + dga_priv_t(); + virtual ~dga_priv_t() {} + int is_running; #ifdef HAVE_XF86VM XF86VidModeModeInfo **vidmodes; @@ -80,21 +83,17 @@ /* XP-specific data */ unsigned num_buffers; // 1 - default int x_off, y_off, dstFourcc; -}priv_t; +}; + +dga_priv_t::dga_priv_t() { + num_buffers=1; +} //----------------------------------------------------------------- //------------------------------------------------------------------ - - -//#define BITSPP (vo_dga_modes[vo_dga_active_mode].vdm_bitspp) -//#define BYTESPP (vo_dga_modes[vo_dga_active_mode].vdm_bytespp) - #define VO_DGA_INVALID_RES 100000 -#define HW_MODE (vo_dga_modes[priv->hw_mode]) -#define SRC_MODE (vo_dga_modes[priv->src_mode]) - struct vd_modes { unsigned vdm_mplayer_depth; int vdm_supported; @@ -126,9 +125,11 @@ { 24, 0, 24, 24, 3, 0xff0000, 0x00ff00, 0x0000ff, 4, VDM_CONV_24TO32}, { 32, 0, 24, 32, 4, 0x00ff0000, 0x0000ff00, 0x000000ff, 4, VDM_CONV_NATIVE} }; - static unsigned vo_dga_mode_num = sizeof(vo_dga_modes)/sizeof(struct vd_modes); +inline struct vd_modes HW_MODE(dga_priv_t& priv) { return vo_dga_modes[priv.hw_mode]; } +inline struct vd_modes SRC_MODE(dga_priv_t& priv) { return vo_dga_modes[priv.src_mode]; } + // enable a HW mode (by description) static int __FASTCALL__ vd_EnableMode( unsigned depth, unsigned bitspp, int rmask, int gmask, int bmask){ @@ -216,8 +217,8 @@ #if 0 static void __FASTCALL__ fillblock(char *strt, int yoff, int lines, int val){ char *i; - for(i = strt + yoff * priv->width *HW_MODE.vdm_bytespp; - i< strt + (lines+yoff) * priv->width *HW_MODE.vdm_bytespp; ){ + for(i = strt + yoff * priv.width *HW_MODE.vdm_bytespp; + i< strt + (lines+yoff) * priv.width *HW_MODE.vdm_bytespp; ){ *i++ = val; } } @@ -235,14 +236,14 @@ static void __FASTCALL__ select_frame(vo_data_t*vo, unsigned idx ) { - priv_t*priv=reinterpret_cast<priv_t*>(vo->priv); + dga_priv_t& priv = *static_cast<dga_priv_t*>(vo->priv); #ifdef HAVE_DGA2 XDGASetViewport (vo->mDisplay, XDefaultScreen(vo->mDisplay), - 0, priv->dbf_y_offset[idx], + 0, priv.dbf_y_offset[idx], XDGAFlipRetrace); #else XF86DGASetViewPort (vo->mDisplay, XDefaultScreen(vo->mDisplay), - 0, priv->dbf_y_offset[idx]); + 0, priv.dbf_y_offset[idx]); #endif } @@ -258,7 +259,7 @@ static MPXP_Rc __FASTCALL__ query_format(vo_data_t*vo, vo_query_fourcc_t *fourcc ) { - priv_t*priv=reinterpret_cast<priv_t*>(vo->priv); + dga_priv_t& priv = *static_cast<dga_priv_t*>(vo->priv); #ifdef HAVE_DGA2 XDGAMode *modelines; int modecount; @@ -273,15 +274,15 @@ MSG_ERR( "vo_dga: Can't open display!\n"); return MPXP_False; } - priv->udf_screenw = vo_conf.screenwidth; - priv->udf_screenh = vo_conf.screenheight; + priv.udf_screenw = vo_conf.screenwidth; + priv.udf_screenh = vo_conf.screenheight; if(vo_x11_init(vo)!=MPXP_Ok){ MSG_ERR( "vo_dga: vo_x11_init() failed!\n"); return MPXP_False; } - priv->XServer_mode = vd_ValidateMode(vo->depthonscreen); + priv.XServer_mode = vd_ValidateMode(vo->depthonscreen); - if(priv->XServer_mode ==0){ + if(priv.XServer_mode ==0){ #ifndef HAVE_DGA2 MSG_ERR( "vo_dga: Your X-Server is not running in a "); MSG_ERR( "resolution supported by DGA driver!\n"); @@ -346,13 +347,13 @@ static void uninit(vo_data_t*vo) { - priv_t*priv=reinterpret_cast<priv_t*>(vo->priv); + dga_priv_t& priv = *static_cast<dga_priv_t*>(vo->priv); #ifdef HAVE_DGA2 XDGADevice *dgadevice; #endif - if(priv->is_running) { - priv->is_running = 0; + if(priv.is_running) { + priv.is_running = 0; MSG_DBG2( "vo_dga: in uninit\n"); XUngrabPointer (vo->mDisplay, CurrentTime); XUngrabKeyboard (vo->mDisplay, CurrentTime); @@ -366,16 +367,16 @@ XF86DGADirectVideo (vo->mDisplay, XDefaultScreen(vo->mDisplay), 0); // first disable DirectVideo and then switch mode back! #ifdef HAVE_XF86VM - if (priv->vidmodes != NULL ){ + if (priv.vidmodes != NULL ){ int screen; screen=XDefaultScreen( vo->mDisplay ); MSG_DBG2( "vo_dga: VidModeExt: Switching back..\n"); // seems some graphics adaptors need this more than once ... - XF86VidModeSwitchToMode(vo->mDisplay,screen,priv->vidmodes[0]); - XF86VidModeSwitchToMode(vo->mDisplay,screen,priv->vidmodes[0]); - XF86VidModeSwitchToMode(vo->mDisplay,screen,priv->vidmodes[0]); - XF86VidModeSwitchToMode(vo->mDisplay,screen,priv->vidmodes[0]); - XFree(priv->vidmodes); + XF86VidModeSwitchToMode(vo->mDisplay,screen,priv.vidmodes[0]); + XF86VidModeSwitchToMode(vo->mDisplay,screen,priv.vidmodes[0]); + XF86VidModeSwitchToMode(vo->mDisplay,screen,priv.vidmodes[0]); + XF86VidModeSwitchToMode(vo->mDisplay,screen,priv.vidmodes[0]); + XFree(priv.vidmodes); } #endif #endif @@ -416,7 +417,7 @@ #ifdef HAVE_DGA2 static int __FASTCALL__ dga2_find_best_mode(vo_data_t*vo,unsigned wanted_width,unsigned wanted_height) { - priv_t*priv=reinterpret_cast<priv_t*>(vo->priv); + dga_priv_t& priv = *static_cast<dga_priv_t*>(vo->priv); XDGAMode *modelines=NULL; unsigned i,j=0; int mVBI=100000, mMaxY=0,mX=VO_DGA_INVALID_RES, mY=VO_DGA_INVALID_RES,modecount; @@ -448,7 +449,7 @@ modelines[i].redMask, modelines[i].greenMask, modelines[i].blueMask, - priv->hw_mode)) { + priv.hw_mode)) { MSG_DBG2( "maxy: %4d, depth: %2d, %4dx%4d, ", modelines[i].maxViewportY, modelines[i].depth, modelines[i].imageWidth, modelines[i].imageHeight ); @@ -469,10 +470,10 @@ ,modelines[j].verticalRefresh ,modelines[j].bytesPerScanline/((modelines[j].bitsPerPixel+7)/8)); - priv->vp_width = mX; - priv->vp_height = mY; + priv.vp_width = mX; + priv.vp_height = mY; - priv->width = modelines[j].bytesPerScanline / HW_MODE.vdm_bytespp ; + priv.width = modelines[j].bytesPerScanline / HW_MODE(priv).vdm_bytespp ; dga_modenum = modelines[j].num; XFree(modelines); @@ -481,7 +482,7 @@ static int __FASTCALL__ dga2_select_mode(vo_data_t*vo, int dga_modenum ) { - priv_t*priv=reinterpret_cast<priv_t*>(vo->priv); + dga_priv_t& priv = *static_cast<dga_priv_t*>(vo->priv); XDGADevice *dgadevice; int bank, ram_size; if (!XDGAOpenFramebuffer(vo->mDisplay, XDefaultScreen(vo->mDisplay))){ @@ -492,11 +493,11 @@ if(dga_modenum != -1) { dgadevice=XDGASetMode(vo->mDisplay, XDefaultScreen(vo->mDisplay), dga_modenum); XDGASync(vo->mDisplay, XDefaultScreen(vo->mDisplay)); - priv->base = dgadevice->data; + priv.base = dgadevice->data; XFree(dgadevice); } else XF86DGAGetVideo (vo->mDisplay, XDefaultScreen(vo->mDisplay), - (char **)&priv->base, reinterpret_cast<int*>(&priv->width), + (char **)&priv.base, reinterpret_cast<int*>(&priv.width), &bank, &ram_size); XDGASetViewport (vo->mDisplay, XDefaultScreen(vo->mDisplay), 0, 0, XDGAFlipRetrace); return 0; @@ -506,7 +507,7 @@ #ifdef HAVE_XF86VM static int __FASTCALL__ xf86vm_find_best_mode(vo_data_t*vo,unsigned wanted_width,unsigned wanted_height) { - priv_t*priv=reinterpret_cast<priv_t*>(vo->priv); + dga_priv_t& priv = *static_cast<dga_priv_t*>(vo->priv); unsigned vm_event, vm_error; unsigned vm_ver, vm_rev; int i, j=0, have_vm=0; @@ -528,30 +529,30 @@ if (have_vm) { int screen; screen=XDefaultScreen(vo->mDisplay); - XF86VidModeGetAllModeLines(vo->mDisplay,screen,&modecount,&priv->vidmodes); + XF86VidModeGetAllModeLines(vo->mDisplay,screen,&modecount,&priv.vidmodes); - if(priv->vidmodes != NULL ){ + if(priv.vidmodes != NULL ){ for (i=0; i<modecount; i++){ if ( check_res( i, wanted_width, wanted_height, - vo_dga_modes[priv->hw_mode].vdm_depth, - priv->vidmodes[i]->hdisplay, - priv->vidmodes[i]->vdisplay, - GET_VREFRESH(priv->vidmodes[i]->dotclock, - priv->vidmodes[i]->htotal, - priv->vidmodes[i]->vtotal), + vo_dga_modes[priv.hw_mode].vdm_depth, + priv.vidmodes[i]->hdisplay, + priv.vidmodes[i]->vdisplay, + GET_VREFRESH(priv.vidmodes[i]->dotclock, + priv.vidmodes[i]->htotal, + priv.vidmodes[i]->vtotal), 0, &mX, &mY, &mVBI, &mMaxY )) j = i; } MSG_V("vo_dga: Selected video mode %4d x %4d @ %3d Hz @ depth %2d, bitspp %2d\n", mX, mY, mVBI, - vo_dga_modes[priv->hw_mode].vdm_depth, - vo_dga_modes[priv->hw_mode].vdm_bitspp); + vo_dga_modes[priv.hw_mode].vdm_depth, + vo_dga_modes[priv.hw_mode].vdm_bitspp); } else { MSG_V( "vo_dga: XF86VidMode returned no screens - using current resolution.\n"); } dga_modenum = j; - priv->vp_width = mX; - priv->vp_height = mY; + priv.vp_width = mX; + priv.vp_height = mY; } return dga_modenum; } @@ -562,8 +563,8 @@ XF86VidModeLockModeSwitch(vo->mDisplay,XDefaultScreen(vo->mDisplay),0); /* Two calls are needed to switch modes on my ATI Rage 128. Why? for riva128 one call is enough! */ - XF86VidModeSwitchToMode(vo->mDisplay,XDefaultScreen(vo->mDisplay),priv->vidmodes[dga_modenum]); - XF86VidModeSwitchToMode(vo->mDisplay,XDefaultScreen(vo->mDisplay),priv->vidmodes[dga_modenum]); + XF86VidModeSwitchToMode(vo->mDisplay,XDefaultScreen(vo->mDisplay),priv.vidmodes[dga_modenum]); + XF86VidModeSwitchToMode(vo->mDisplay,XDefaultScreen(vo->mDisplay),priv.vidmodes[dga_modenum]); } } #endif @@ -573,7 +574,7 @@ uint32_t d_width,uint32_t d_height, uint32_t flags,char *title,uint32_t format) { - priv_t*priv=reinterpret_cast<priv_t*>(vo->priv); + dga_priv_t& priv = *static_cast<dga_priv_t*>(vo->priv); unsigned wanted_width, wanted_height; int dga_modenum; int bank,ram_size; @@ -581,11 +582,11 @@ int mX,mY; UNUSED(title); - if( priv->is_running ) return MPXP_False; + if( priv.is_running ) return MPXP_False; - priv->src_format = format; - priv->src_width = priv->dest_width = width; - priv->src_height = priv->dest_height = height; + priv.src_format = format; + priv.src_width = priv.dest_width = width; + priv.src_height = priv.dest_height = height; wanted_width = d_width; wanted_height = d_height; @@ -593,26 +594,27 @@ if(!wanted_height) wanted_height = height; if(!wanted_width) wanted_width = width; - if(priv->udf_screenw) wanted_width = priv->udf_screenw; - if(priv->udf_screenh) wanted_height = priv->udf_screenh; + if(priv.udf_screenw) wanted_width = priv.udf_screenw; + if(priv.udf_screenh) wanted_height = priv.udf_screenh; if(vo_x11_init(vo)!=MPXP_Ok) { MSG_ERR( "vo_dga: vo_x11_init() failed!\n"); return MPXP_False; } - if(!vo_conf.dbpp ) priv->src_mode = priv->XServer_mode; - else priv->src_mode = vd_ModeValid(vo_conf.dbpp); - priv->hw_mode = SRC_MODE.vdm_hw_mode; + if(!vo_conf.dbpp ) priv.src_mode = priv.XServer_mode; + else priv.src_mode = vd_ModeValid(vo_conf.dbpp); - if(priv->src_mode != priv->hw_mode ){ + priv.hw_mode = SRC_MODE(priv).vdm_hw_mode; + + if(priv.src_mode != priv.hw_mode ){ MSG_ERR("vo_dga: swScaler supports native modes only. Using %d instead of selected %d.\n", - HW_MODE.vdm_mplayer_depth, - SRC_MODE.vdm_mplayer_depth ); - priv->src_mode = priv->hw_mode; + HW_MODE(priv).vdm_mplayer_depth, + SRC_MODE(priv).vdm_mplayer_depth ); + priv.src_mode = priv.hw_mode; } - if(!priv->src_mode) { + if(!priv.src_mode) { MSG_ERR( "vo_dga: unsupported video format!\n"); return MPXP_False; } @@ -637,8 +639,8 @@ #endif MSG_V("vo_dga: Video parameters by codec: %3d x %3d, depth %2d, bitspp %2d.\n", width, height, - SRC_MODE.vdm_depth, - SRC_MODE.vdm_bitspp); + SRC_MODE(priv).vdm_depth, + SRC_MODE(priv).vdm_bitspp); /* now lets start the DGA thing */ #ifdef HAVE_DGA2 if(dga2_select_mode(vo,dga_modenum)) return MPXP_False; @@ -655,24 +657,24 @@ #endif /* for both DGA1 and DGA2 we need to know ram_size */ XF86DGAGetVideo (vo->mDisplay, XDefaultScreen(vo->mDisplay), - (char **)&priv->base, reinterpret_cast<int*>(&priv->vp_width), + (char **)&priv.base, reinterpret_cast<int*>(&priv.vp_width), &bank, &ram_size); XF86DGAGetViewPortSize(vo->mDisplay,DefaultScreen(vo->mDisplay),&mX,&mY); - priv->vp_width = mX; - priv->vp_height = mY; + priv.vp_width = mX; + priv.vp_height = mY; MSG_DBG2( "vo_dga: XServer res: %dx%d\n", - priv->vp_width, priv->vp_height); + priv.vp_width, priv.vp_height); - if(priv->dest_width > priv->vp_width || priv->dest_height > priv->vp_height) { + if(priv.dest_width > priv.vp_width || priv.dest_height > priv.vp_height) { MSG_ERR( "vo_dga: Sorry, video larger than viewport is not yet supported!\n"); // ugly, do something nicer in the future ... #ifndef HAVE_DGA2 #ifdef HAVE_XF86VM - if(priv->vidmodes){ - XFree(priv->vidmodes); - priv->vidmodes = NULL; + if(priv.vidmodes){ + XFree(priv.vidmodes); + priv.vidmodes = NULL; } #endif #endif @@ -680,40 +682,40 @@ } if((flags&0x04)||(flags&0x01)) { /* -zoom or -fs */ - priv->dest_width = d_width; - priv->dest_height = d_height; + priv.dest_width = d_width; + priv.dest_height = d_height; - aspect_save_orig(priv->src_width,priv->src_height); + aspect_save_orig(priv.src_width,priv.src_height); aspect_save_screenres(mX,mY); - aspect_save_prescale(priv->dest_width,priv->dest_height); + aspect_save_prescale(priv.dest_width,priv.dest_height); if((flags&0x05)==0x05) /* -fs -zoom */ - aspect(&priv->dest_width,&priv->dest_height,A_ZOOM); + aspect(&priv.dest_width,&priv.dest_height,A_ZOOM); else if(flags&0x04)/* -zoom */ - aspect(&priv->dest_width,&priv->dest_height,A_NOZOOM); + aspect(&priv.dest_width,&priv.dest_height,A_NOZOOM); else { /* -fs */ - priv->dest_width = mX; - priv->dest_height = mY; + priv.dest_width = mX; + priv.dest_height = mY; } MSG_V("vo_dga: Aspect corrected size for SwScaler: %4d x %4d.\n", - priv->dest_width, priv->dest_height); + priv.dest_width, priv.dest_height); } - switch(HW_MODE.vdm_bitspp) { - case 32: priv->dstFourcc = IMGFMT_BGR32; break; - case 24: priv->dstFourcc = IMGFMT_BGR24; break; - case 15: priv->dstFourcc = IMGFMT_BGR15; break; - default: priv->dstFourcc = IMGFMT_BGR16; break; + switch(HW_MODE(priv).vdm_bitspp) { + case 32: priv.dstFourcc = IMGFMT_BGR32; break; + case 24: priv.dstFourcc = IMGFMT_BGR24; break; + case 15: priv.dstFourcc = IMGFMT_BGR15; break; + default: priv.dstFourcc = IMGFMT_BGR16; break; } MSG_DBG2( "vo_dga: bytes/line: %d, screen res: %dx%d, depth: %d, base: %08x, bpp: %d\n", - priv->width, priv->vp_width, - priv->vp_height, HW_MODE.vdm_bytespp, priv->base, - HW_MODE.vdm_bitspp); + priv.width, priv.vp_width, + priv.vp_height, HW_MODE(priv).vdm_bytespp, priv.base, + HW_MODE(priv).vdm_bitspp); - priv->x_off = (priv->vp_width - priv->dest_width)>>1; - priv->y_offset = priv->y_off = (priv->vp_height - priv->dest_height)>>1; - priv->vp_offset = (priv->y_off * priv->width + priv->x_off ) * HW_MODE.vdm_bytespp; + priv.x_off = (priv.vp_width - priv.dest_width)>>1; + priv.y_offset = priv.y_off = (priv.vp_height - priv.dest_height)>>1; + priv.vp_offset = (priv.y_off * priv.width + priv.x_off ) * HW_MODE(priv).vdm_bytespp; - MSG_DBG2( "vo_dga: vp_off=%d\n", priv->vp_offset); + MSG_DBG2( "vo_dga: vp_off=%d\n", priv.vp_offset); XGrabKeyboard (vo->mDisplay, DefaultRootWindow(vo->mDisplay), True, GrabModeAsync,GrabModeAsync, CurrentTime); @@ -723,27 +725,27 @@ // TODO: check if mem of graphics adaptor is large enough for dbf // set up variables for double buffering ... - priv->dbf_y_offset[0] = 0; - priv->dbf_mem_offset[0] = 0; - dest_frame_size = priv->width*HW_MODE.vdm_bytespp*priv->vp_height; + priv.dbf_y_offset[0] = 0; + priv.dbf_mem_offset[0] = 0; + dest_frame_size = priv.width*HW_MODE(priv).vdm_bytespp*priv.vp_height; - priv->num_buffers = (ram_size*1024)/dest_frame_size; - if(priv->num_buffers > vo_conf.xp_buffs) priv->num_buffers = vo_conf.xp_buffs; - if(priv->num_buffers > MAX_DRI_BUFFERS) priv->num_buffers = MAX_DRI_BUFFERS; + priv.num_buffers = (ram_size*1024)/dest_frame_size; + if(priv.num_buffers > vo_conf.xp_buffs) priv.num_buffers = vo_conf.xp_buffs; + if(priv.num_buffers > MAX_DRI_BUFFERS) priv.num_buffers = MAX_DRI_BUFFERS; - for(freq=1;freq<priv->num_buffers;freq++) { - priv->dbf_y_offset[freq] = priv->dbf_y_offset[freq-1] + priv->vp_height; - priv->dbf_mem_offset[freq] = priv->dbf_mem_offset[freq-1] + dest_frame_size; + for(freq=1;freq<priv.num_buffers;freq++) { + priv.dbf_y_offset[freq] = priv.dbf_y_offset[freq-1] + priv.vp_height; + priv.dbf_mem_offset[freq] = priv.dbf_mem_offset[freq-1] + dest_frame_size; } /* clear screen */ - for(freq=0;freq<priv->num_buffers;freq++) { + for(freq=0;freq<priv.num_buffers;freq++) { any_t*d; - d=(&((char*)priv->base)[priv->dbf_mem_offset[freq]]); + d=(&((char*)priv.base)[priv.dbf_mem_offset[freq]]); memset(d,0,dest_frame_size); } - MSG_V("vo_dga: Doublebuffering is %s.\n",priv->num_buffers>1?"enabled":"disabled"); - priv->is_running = 1; + MSG_V("vo_dga: Doublebuffering is %s.\n",priv.num_buffers>1?"enabled":"disabled"); + priv.is_running = 1; return MPXP_Ok; } @@ -753,25 +755,23 @@ MSG_V( "vo_dga: Unknown subdevice: %s\n",arg); return MPXP_False; } - priv_t*priv; - priv=new(zeromem) priv_t; + dga_priv_t*priv=new(zeromem) dga_priv_t; vo->priv=priv; - priv->num_buffers=1; return MPXP_Ok; } static void __FASTCALL__ dga_dri_get_surface_caps(vo_data_t*vo,dri_surface_cap_t *caps) { - priv_t*priv=reinterpret_cast<priv_t*>(vo->priv); + dga_priv_t& priv = *static_cast<dga_priv_t*>(vo->priv); caps->caps = DRI_CAP_VIDEO_MMAPED; - caps->fourcc=priv->dstFourcc; - caps->width=priv->vp_width; - caps->height=p... [truncated message content] |