X-Git-Url: https://hackdaworld.org/gitweb/?a=blobdiff_plain;f=dfb_api.c;h=c530831a7b63115d54f9ec8e7ed9acb583a6a10d;hb=00aca7d3f73b593d2b08b0849ca7eb51574de507;hp=00bc88c0bd1cb51c1c8f233f1dd9a29cc730e0fd;hpb=01a4f2c8c28af1fd4bd973c430c087f1b9a25a22;p=my-code%2Fivac.git diff --git a/dfb_api.c b/dfb_api.c index 00bc88c..c530831 100644 --- a/dfb_api.c +++ b/dfb_api.c @@ -10,6 +10,8 @@ /* dfb includes */ #include +#include "dfb_api.h" + #define MY_FONT_HEIGHT 18 /* global stuff */ @@ -28,12 +30,16 @@ IDirectFBVideoProvider *video_provider = NULL; int screen_width = 0; int screen_height = 0; -char dfb_video_dev[]="/dev/v4l/video0"; +char dfb_video_dev[]=VIDEO_DEV; char text_top[]="Internet Video / Audio Conferencing"; char dfb_image[]="./images/ivac_logo.png"; char dfb_font[]="./fonts/decker.ttf"; -/* small api - directfb usage kinda sux: foo->bar(foo,...) wtf?!?!?! */ +/* variable definitions */ +// struct user_info { + + +/* functions */ int dfb_init(int *argc,char **argv) { DirectFBInit(argc,&argv); @@ -52,7 +58,7 @@ int create_primary_surface(void) { DFBSurfaceDescription desc; memset(&desc,0,sizeof(DFBSurfaceDescription)); desc.flags=DSDESC_CAPS; - desc.caps=DSCAPS_PRIMARY; + desc.caps=DSCAPS_PRIMARY|DSCAPS_FLIPPING; dfb->CreateSurface(dfb,&desc,&primary); return 1; } @@ -82,7 +88,7 @@ int create_logo_surface(void) { image_provider->Release(image_provider); return 1; } - + int create_video_surface(void) { DFBSurfaceDescription desc; DFBVideoProviderCapabilities caps; @@ -91,7 +97,7 @@ int create_video_surface(void) { video_provider->GetCapabilities(video_provider,&caps); printf("video capabilities: %x\n",caps); dfb->CreateSurface(dfb,&desc,&video); - video_provider->PlayTo(video_provider,video,NULL,NULL,NULL); + video_provider->PlayTo(video_provider,video,NULL,video_callback,NULL); video_provider->Release(video_provider); return 1; } @@ -111,6 +117,38 @@ int release_dfb(void) { return 1; } +int blit_surface(IDirectFBSurface *source,int x,int y) { + primary->Blit(primary,source,NULL,x,y); + return 1; +} + +int blit_logo(void) { + int x,y; + get_surface_size(logo,&x,&y); + printf("size of logo width/height: %d/%d\n",x,y); + blit_surface(logo,((screen_width-x)/2),((screen_height-y)/2)); + return 1; +} + +int blit_video(void) { + int x,y; + get_surface_size(video,&x,&y); + printf("size of logo width/height: %d/%d\n",x,y); + // blit_surface(video,((screen_width-x)/2),((screen_height-y)/2)); + blit_surface(video,0,0); + return 1; +} + +int flip_it(void) { + primary->Flip(primary,NULL,DSFLIP_WAITFORSYNC); + return 1; +} + +DVFrameCallback video_callback(void) { + primary->StretchBlit(primary,video,NULL,NULL); + // flip_it; + return DFENUM_OK; +} /* test api app */ int main (int argc, char **argv) { @@ -120,20 +158,29 @@ int main (int argc, char **argv) { check_accel(); create_primary_surface(); - printf("primary surface created\n"); - // create_video_surface(); - create_logo_surface(); + create_video_surface(); + // create_logo_surface(); get_primary_surface_size(); + printf("primary surface width/height: %d/%d\n",screen_width,screen_height); clear_screen(primary); - // primary->Flip(primary,NULL,DSFLIP_WAITFORSYNC); + puts("main: blit video"); + blit_video(); + // blit_logo(); + + // puts("main: flip"); + // flip_it(); - sleep(5); + sleep(10); + + release_surface(logo); release_surface(primary); + release_dfb(); + return 1; }