static int ph_VideoInit(_THIS, SDL_PixelFormat *vformat) { PgHWCaps_t my_hwcaps; int i; window=NULL; desktoppal=SDLPH_PAL_NONE; #ifdef HAVE_OPENGL oglctx=NULL; oglflags=0; oglbpp=0; #endif /* HAVE_OPENGL */ old_video_mode=-1; old_refresh_rate=-1; if (NULL == (event = malloc(EVENT_SIZE))) { SDL_OutOfMemory(); return -1; } memset(event, 0x00, EVENT_SIZE); window = ph_CreateWindow(this); if (window == NULL) { SDL_SetError("ph_VideoInit(): Couldn't create video window !\n"); return -1; } /* Create the blank cursor */ SDL_BlankCursor = this->CreateWMCursor(this, blank_cdata, blank_cmask, (int)BLANK_CWIDTH, (int)BLANK_CHEIGHT, (int)BLANK_CHOTX, (int)BLANK_CHOTY); if (SDL_BlankCursor == NULL) { return -1; } if (PgGetGraphicsHWCaps(&my_hwcaps) < 0) { SDL_SetError("ph_VideoInit(): GetGraphicsHWCaps function failed !\n"); this->FreeWMCursor(this, SDL_BlankCursor); return -1; } if (PgGetVideoModeInfo(my_hwcaps.current_video_mode, &desktop_mode) < 0) { SDL_SetError("ph_VideoInit(): PgGetVideoModeInfo function failed !\n"); this->FreeWMCursor(this, SDL_BlankCursor); return -1; } /* We need to return BytesPerPixel as it in used by CreateRGBsurface */ vformat->BitsPerPixel = desktop_mode.bits_per_pixel; vformat->BytesPerPixel = desktop_mode.bytes_per_scanline/desktop_mode.width; desktopbpp = desktop_mode.bits_per_pixel; /* save current palette */ if (desktopbpp==8) { PgGetPalette(savedpal); PgGetPalette(syspalph); } else { for(i=0; i<_Pg_MAX_PALETTE; i++) { savedpal[i]=PgRGB(0, 0, 0); syspalph[i]=PgRGB(0, 0, 0); } } currently_fullscreen = 0; currently_hided = 0; current_overlay = NULL; OCImage.direct_context = NULL; OCImage.offscreen_context = NULL; OCImage.offscreen_backcontext = NULL; OCImage.oldDC = NULL; OCImage.CurrentFrameData = NULL; OCImage.FrameData0 = NULL; OCImage.FrameData1 = NULL; this->info.wm_available = 1; return 0; }
/***************************************************************************** * QNXInitDisplay: check screen resolution, depth, amount of video ram, etc *****************************************************************************/ static int QNXInitDisplay( vout_thread_t * p_vout ) { PgHWCaps_t hwcaps; PgDisplaySettings_t cfg; PgVideoModeInfo_t minfo; /* get graphics card hw capabilities */ if( PgGetGraphicsHWCaps( &hwcaps ) != 0 ) { msg_Err( p_vout, "unable to get gfx card capabilities" ); return( 1 ); } /* get current video mode */ if( PgGetVideoMode( &cfg ) != 0 ) { msg_Err( p_vout, "unable to get current video mode" ); return( 1 ); } /* get video mode info */ if( PgGetVideoModeInfo( cfg.mode, &minfo ) != 0 ) { msg_Err( p_vout, "unable to get info for video mode" ); return( 1 ); } if( p_vout->p_sys->i_mode == MODE_VIDEO_OVERLAY ) { int i = 0; PgScalerCaps_t vcaps; if( ( p_vout->p_sys->p_channel = PgCreateVideoChannel( Pg_VIDEO_CHANNEL_SCALER, 0 ) ) == NULL ) { msg_Err( p_vout, "unable to create video channel" ); printf("errno = %d\n", errno); p_vout->p_sys->i_mode = MODE_NORMAL_MEM; } else { vcaps.size = sizeof( vcaps ); while( PgGetScalerCapabilities( p_vout->p_sys->p_channel, i++, &vcaps ) == 0 ) { printf("vcaps.format = 0x%x\n", vcaps.format); if( vcaps.format == Pg_VIDEO_FORMAT_YV12 || vcaps.format == Pg_VIDEO_FORMAT_YUV420 || vcaps.format == Pg_VIDEO_FORMAT_YUY2 || vcaps.format == Pg_VIDEO_FORMAT_UYVY || vcaps.format == Pg_VIDEO_FORMAT_RGB555 || vcaps.format == Pg_VIDEO_FORMAT_RGB565 || vcaps.format == Pg_VIDEO_FORMAT_RGB8888 ) { p_vout->p_sys->i_vc_flags = vcaps.flags; p_vout->p_sys->i_vc_format = vcaps.format; } vcaps.size = sizeof( vcaps ); } if( p_vout->p_sys->i_vc_format == 0 ) { msg_Warn( p_vout, "need YV12, YUY2 or RGB8888 overlay" ); p_vout->p_sys->i_mode = MODE_NORMAL_MEM; } } } /* use video ram if we have enough available */ if( p_vout->p_sys->i_mode == MODE_NORMAL_MEM && (minfo.bits_per_pixel != 8) && hwcaps.currently_available_video_ram >= ( ( minfo.width * minfo.height * minfo.bits_per_pixel * MAX_DIRECTBUFFERS) / 8 ) ) { p_vout->p_sys->i_mode = MODE_VIDEO_MEM; printf("Using video memory...\n"); } p_vout->p_sys->i_img_type = minfo.type; p_vout->p_sys->screen_dim.w = minfo.width; p_vout->p_sys->screen_dim.h = minfo.height; p_vout->p_sys->i_screen_depth = minfo.bits_per_pixel; switch( p_vout->p_sys->i_screen_depth ) { case 8: p_vout->output.i_chroma = VLC_CODEC_RGB8; p_vout->p_sys->i_bytes_per_pixel = 1; p_vout->output.pf_setpalette = SetPalette; break; case 15: p_vout->output.i_chroma = VLC_CODEC_RGB15; p_vout->p_sys->i_bytes_per_pixel = 2; p_vout->output.i_rmask = 0x7c00; p_vout->output.i_gmask = 0x03e0; p_vout->output.i_bmask = 0x001f; break; case 16: p_vout->output.i_chroma = VLC_CODEC_RGB16; p_vout->p_sys->i_bytes_per_pixel = 2; p_vout->output.i_rmask = 0xf800; p_vout->output.i_gmask = 0x07e0; p_vout->output.i_bmask = 0x001f; break; case 24: p_vout->output.i_chroma = VLC_CODEC_RGB24; p_vout->p_sys->i_bytes_per_pixel = 3; p_vout->output.i_rmask = 0xff0000; p_vout->output.i_gmask = 0x00ff00; p_vout->output.i_bmask = 0x0000ff; break; case 32: default: p_vout->output.i_chroma = VLC_CODEC_RGB32; p_vout->p_sys->i_bytes_per_pixel = 4; p_vout->output.i_rmask = 0xff0000; p_vout->output.i_gmask = 0x00ff00; p_vout->output.i_bmask = 0x0000ff; break; } return( 0 ); }