X-Git-Url: https://hackdaworld.org/gitweb/?a=blobdiff_plain;f=dfb_api.c;h=14c3cda5a2377d11cfd011183cf59997fa50b221;hb=2d460b330e398b02461456dae4b28a5f4522a794;hp=7435ad4dd02015d7fba6e076018879defd68a201;hpb=20861b5cbccdb9aa93b67cdf9f6222143d2df504;p=my-code%2Fivac.git diff --git a/dfb_api.c b/dfb_api.c index 7435ad4..14c3cda 100644 --- a/dfb_api.c +++ b/dfb_api.c @@ -4,81 +4,100 @@ /* std includes */ #include +#include #include /* dfb includes */ #include -#define MY_FONT_HEIGHT 48 +#define MY_FONT_HEIGHT 18 /* global stuff */ /* well ... */ -static IDirectFB *dfb = NULL; -static IDirectFBSurface *primary = NULL; +IDirectFB *dfb = NULL; + +IDirectFBSurface *primary = NULL; +IDirectFBSurface *logo = NULL; +IDirectFBSurface *subsurface = NULL; +IDirectFBSurface *window = NULL; + +IDirectFBImageProvider *image_provider = NULL; +IDirectFBVideoProvider *video_provider = NULL; + static int screen_width = 0; static int screen_height = 0; -static IDirectFBSurface *logo = NULL; +char dfb_video_dev[]="/dev/v4l/video0"; +char text_top[]="Internet Video / Audio Conferencing"; +char dfb_image[]="./images/ivac_logo.png"; +char dfb_font[]="./fonts/decker.ttf"; + +/* small api */ +int dfb_init(int *argc,char **argv) { + DirectFBInit(argc,&argv); + DirectFBCreate(&dfb); + dfb->SetCooperativeLevel(dfb,DFSCL_FULLSCREEN); + return 1; +} -static IDirectFBFont *font = NULL; -static char *text_top="Internet Video / Audio Conferencing" +int check_accel(void) { + DFBCardCapabilities caps; + dfb->GetCardCapabilities(dfb,&caps); + return (caps.acceleration_mask); +} -/* image to load */ -char dfb_image[]="./images/ivac_logo.png"; +int create_primary_surface(void) { + DFBSurfaceDescription desc; + memset(&desc,0,sizeof(DFBSurfaceDescription)); + desc.flags=DSDESC_CAPS; + desc.caps=DSCAPS_PRIMARY; + dfb->CreateSurface(dfb,&desc,&primary); + return 1; +} -int main (int argc, char **argv) { - int i; - DFBFontDescription font_desc; - DFBSurfaceDescription dsc; - /* image provider */ - IDirectFBImageProvider *provider; - - /* init */ - DirectFBInit (&argc, &argv); - DirectFBCreate (&dfb); - dfb->SetCooperativeLevel (dfb, DFSCL_FULLSCREEN); - dsc.flags=DSDESC_CAPS; - dsc.caps=DSCAPS_PRIMARY | DSCAPS_FLIPPING; - dfb->CreateSurface(dfb,&dsc,&primary); - primary->GetSize(primary,&screen_width,&screen_height); - printf("debug: w/h = %d / %d\n",screen_width,screen_height); - - /* create the imag provider */ - dfb->CreateImageProvider(dfb,dfb_image,&provider); - /* get image/provider description */ - provider->GetSurfaceDescription(provider,&dsc); - printf("debug: w/h %d / %d\n",dsc.width,dsc.height); - /* create apropriate surface */ - dfb->CreateSurface(dfb,&dsc,&logo); - /* render image */ - provider->RenderTo(provider,logo,NULL); - provider->Release(provider); - - /* create font */ - font_dsc.flags=DFDESC_HEIGHT; - font_dsc.height=MY_FONT_HEIGHT; - - - - /* slide logo */ - for(i = -dsc.width; i < screen_width; i++) { - /* clear screen */ - primary->FillRectangle(primary,0,0,screen_width,screen_height); - - /* blit image */ - primary->Blit(primary,logo,NULL,i,(screen_height-dsc.height)/2); - - /* flip */ - primary->Flip(primary,NULL,DSFLIP_WAITFORSYNC); - } - - /* release image */ - logo->Release(logo); - - primary->Release(primary); - dfb->Release(dfb); - - return 23; +int show_image(IDirectFBSurface *surface) { + dfb->CreateImageProvider(dfb,dfb_image,&image_provider); + image_provider->RenderTo(image_provider,surface,NULL); + image_provider->Release(image_provider); + return 1; +} + +int play_video(IDirectFBSurface *surface) { + dfb->CreateVideoProvider(dfb,dfb_video_dev,&video_provider); + video_provider->PlayTo(video_provider,surface,NULL,NULL,NULL); + // video_provider->Release(video_provider); + return 1; +} + +int release_surface(IDirectFBSurface *surface) { + surface->Release(surface); + return 1; } +int release_dfb(void) { + dfb->Release(dfb); + return 1; +} + + +/* test api app */ +int main (int argc, char **argv) { + + dfb_init(&argc,argv); + + check_accel(); + + create_primary_surface(); + + // play_video(primary); + show_image(primary); + + primary->Flip(primary,NULL,DSFLIP_WAITFORSYNC); + + sleep(5); + + release_surface(primary); + + return 1; +}