Hi Karim, > I'm banging my head against the wall here
Have you grepped into the code to see what happens when the layer-rotate=<x> option is passed? Are you using a DirectFB system module that do actually support such a configuration option? -Ilyes On Wed, Sep 12, 2012 at 6:00 PM, Karim 'Kasi Mir' Senoucci <direc...@tvetc.de> wrote: > Hello all, > I'm still unable to get DirectFB to rotate by 90 or 270 degrees for a > display in portrait orientation; the program just ignores the parameter and > displays in zero degrees. > > As Chuck McManis suggested, I now wrote a small test program to illustrate > the problem. The programm vid-test opens a full-screen view and draws one > rectangle, then waits for any keyboard input to quit. > > I compiled this using the git version of DirectFB with the following > makefile: > > vid-test: vid-test.o > g++ -o vid-test -lidn -lpthread -ldirectfb -ldfb++ vid-test.o > > vid-test.o: vid-test.cpp > g++ -I /usr/include/directfb/ -I /usr/include/dfb++/ -c > vid-test.cpp > > > After that, I call the program using the following command line: > > > vid-test --dfb:layer-rotate=<x>,mode=1920x1080,depth=32,pixelformat=RGB32 > > > where <x> is replaced by 0, 90, 180, or 270. 0 and 180 work as expected, 90 > and 270 don't. > > I'm banging my head against the wall here, expecially since the DirectFB > website suggests rotation has been working in DirectFB for three years. Can > anybody tell me what exactly I am doing wrong, and more importantly, how to > fix it? Otherwise, my only alternative would be rewriting the whole > 10000-line program using another display library that really provides > portrait mode and not just claims to do so (if there even is such a thing). > > Program follows: > ------------------------------------------------------------------------------------------------------------------------------------------------------ > #define _REENTRANT > #define __USE_BSD > #include <memory> > #include <stdio.h> > #include <unistd.h> > #include <fcntl.h> > #include <sys/signal.h> > #include <sys/stat.h> > #include <sys/param.h> > #include <sys/mman.h> > #include <sys/types.h> > #include <stdlib.h> > #include <stdlib.h> > #include <string.h> > #include <dfb++.h> > > > static IDirectFB *dfb = NULL; > static IDirectFBSurface *primary = NULL; > > bool RunMe; > > static IDirectFBInputDevice *keyboard = NULL; > static IDirectFBEventBuffer *keyboard_buffer = NULL; > DFBInputEvent keyboard_event; > DFBSurfaceDescription dsc; > IDirectFBDisplayLayer *prim_layer; > IDirectFBSurface *base_surface; > > > int main (int argc, char **argv) > { > printf("**********************************************************************\n"); > > try > { > printf("Calling dfb:Init...\n"); > DirectFB::Init (&argc, &argv); > printf("Calling dfb:Create...\n"); > dfb=DirectFB::Create(); > > printf("Calling dfb:GetDisplayLayer...\n"); > prim_layer=dfb->GetDisplayLayer(DLID_PRIMARY); > if (prim_layer==NULL) > printf("Couldn't get primary layer\n"); > printf("Calling dfb:SetCoopLevel...\n"); > dfb->SetCooperativeLevel(DFSCL_EXCLUSIVE); > printf("Calling dfb:GetSurface...\n"); > base_surface=prim_layer->GetSurface(); > if (base_surface==NULL) > printf("Couldn't get base surface\n"); > > printf("Setting dfb:GetInputDevice...\n"); > keyboard=dfb->GetInputDevice(DIDID_KEYBOARD); > if (keyboard!=NULL) > keyboard_buffer=keyboard->CreateEventBuffer(); > else > printf("Keyboard input device not found...\n"); > > dsc.flags = DSDESC_CAPS; > DFB_ADD_SURFACE_CAPS( dsc.caps, DSCAPS_PRIMARY); > DFB_ADD_SURFACE_CAPS( dsc.caps, DSCAPS_SYSTEMONLY); > // DFB_ADD_SURFACE_CAPS( dsc.caps, DSCAPS_VIDEOONLY); > DFB_ADD_SURFACE_CAPS( dsc.caps, DSCAPS_DOUBLE); > DFB_ADD_SURFACE_DESC(dsc.flags, DSDESC_PIXELFORMAT); > dsc.pixelformat= DSPF_RGB32; > > printf("Create primary surface...\n"); > primary=dfb->CreateSurface(dsc); > > primary->SetColor(0xff,0xff,0xff); > primary->DrawRectangle(100,100,400,200); > > RunMe=true; > while(RunMe==true) > { > while (keyboard_buffer->HasEvent()) > { > keyboard_buffer->GetEvent(DFB_EVENT(&keyboard_event)); > if (keyboard_event.type==DIET_KEYPRESS) > { > RunMe=false; > }; > }; > primary->Flip(NULL, DSFLIP_WAITFORSYNC); > }; > } > catch (DFBException *ex) > { > std::cerr << std::endl; > std::cerr << "Caught exception!" << std::endl; > std::cerr << " -- " << ex << std::endl; > RunMe=false; > }; > > printf("Releasing input devices...\n"); > keyboard->Release(); > printf("Releasing surfaces...\n"); > primary->Release(); > printf("Releasing DirectFB...\n"); > dfb->Release(); > printf("Quitting...\n"); > exit(EXIT_SUCCESS); > printf("**********************************************************************\n"); > } > > ------------------------------------------------------------------------------------------------------------------------------------------------------ > > > Any help appreciated > Kasi Mir > > > > > _______________________________________________ > directfb-dev mailing list > directfb-dev@directfb.org > http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-dev > _______________________________________________ directfb-dev mailing list directfb-dev@directfb.org http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-dev