static void dump_mixers( IDirectFBScreen *screen, int num ) { int i, n; DFBResult ret; DFBScreenMixerDescription descs[num]; ret = screen->GetMixerDescriptions( screen, descs ); if (ret) { DirectFBError( "IDirectFBScreen::GetMixerDescriptions", ret ); return; } for (i=0; i<num; i++) { printf( " Mixer (%d) %s\n", i, descs[i].name ); /* Caps */ printf( " Caps: " ); for (n=0; mixer_caps[n].capability; n++) { if (descs[i].caps & mixer_caps[n].capability) printf( "%s ", mixer_caps[n].name ); } printf( "\n" ); /* Full mode layers */ if (descs[i].caps & DSMCAPS_FULL) { printf( " Layers (full mode): " ); for (n=0; n<DFB_DISPLAYLAYER_IDS_MAX; n++) { if (DFB_DISPLAYLAYER_IDS_HAVE( descs[i].layers, n )) printf( "(%02x) ", n ); } printf( "\n" ); } /* Sub mode layers */ if (descs[i].caps & DSMCAPS_SUB_LAYERS) { printf( " Layers (sub mode): %2d of ", descs[i].sub_num ); for (n=0; n<DFB_DISPLAYLAYER_IDS_MAX; n++) { if (DFB_DISPLAYLAYER_IDS_HAVE( descs[i].sub_layers, n )) printf( "(%02x) ", n ); } printf( "\n" ); } printf( "\n" ); } printf( "\n" ); }
static void dump_mixer_config( const DFBScreenMixerConfig *config ) { int n; printf( "\n" ); if (config->flags & DSMCONF_TREE) printf( "Tree: %s\n", tree_name( config->tree ) ); if (config->flags & DSMCONF_LEVEL) printf( "Level: %d\n", config->level ); if (config->flags & DSMCONF_LAYERS) { printf( "Layers: " ); for (n=0; n<DFB_DISPLAYLAYER_IDS_MAX; n++) { if (DFB_DISPLAYLAYER_IDS_HAVE( config->layers, n )) printf( "(%02x) ", n ); } printf( "\n" ); } if (config->flags & DSMCONF_BACKGROUND) printf( "Background: 0x%02x, 0x%02x, 0x%02x, 0x%02x (ARGB)\n", config->background.a, config->background.r, config->background.g, config->background.b ); printf( "\n" ); }
DFBResult dfb_screen_get_layer_dimension( CoreScreen *screen, CoreLayer *layer, int *ret_width, int *ret_height ) { int i; DFBResult ret = DFB_UNSUPPORTED; CoreScreenShared *shared; ScreenFuncs *funcs; D_ASSERT( screen != NULL ); D_ASSERT( screen->shared != NULL ); D_ASSERT( screen->funcs != NULL ); D_ASSERT( layer != NULL ); D_ASSERT( ret_width != NULL ); D_ASSERT( ret_height != NULL ); shared = screen->shared; funcs = screen->funcs; if (funcs->GetMixerState) { for (i=0; i<shared->description.mixers; i++) { const DFBScreenMixerConfig *config = &shared->mixers[i].configuration; if ((config->flags & DSMCONF_LAYERS) && DFB_DISPLAYLAYER_IDS_HAVE( config->layers, dfb_layer_id(layer) )) { CoreMixerState state; ret = funcs->GetMixerState( screen, screen->driver_data, screen->screen_data, i, &state ); if (ret == DFB_OK) { if (state.flags & CMSF_DIMENSION) { *ret_width = state.dimension.w; *ret_height = state.dimension.h; return DFB_OK; } ret = DFB_UNSUPPORTED; } } } for (i=0; i<shared->description.mixers; i++) { const DFBScreenMixerDescription *desc = &shared->mixers[i].description; if ((desc->caps & DSMCAPS_SUB_LAYERS) && DFB_DISPLAYLAYER_IDS_HAVE( desc->sub_layers, dfb_layer_id(layer) )) { CoreMixerState state; ret = funcs->GetMixerState( screen, screen->driver_data, screen->screen_data, i, &state ); if (ret == DFB_OK) { if (state.flags & CMSF_DIMENSION) { *ret_width = state.dimension.w; *ret_height = state.dimension.h; return DFB_OK; } ret = DFB_UNSUPPORTED; } } } } if (funcs->GetScreenSize) ret = funcs->GetScreenSize( screen, screen->driver_data, screen->screen_data, ret_width, ret_height ); return ret; }