-
[my-code/ivac.git] / dfbapi.c
1 /* dfb functions
2  *
3  * author: hackbard@hackdaworld.dyndns.org
4  *
5  */
6
7 #include <stdio.h>
8 #include <directfb.h>
9 #include "ivac.h"
10
11 // do
12 // int flip_blit_callback()
13 // int dfb_play_video()
14 // int dfb_stop_video()
15
16 int flip_blit_callback(void *ctx) {
17         struct ivac *ivac=ctx;
18
19         ivac->dfb_stuff.v_surface->Flip(ivac->dfb_stuff.v_surface,NULL,0);
20
21         return 1;
22 }
23
24 int dfb_play_video(struct ivac *ivac) {
25
26         ivac->dfb_stuff.v_provider->PlayTo(ivac->dfb_stuff.v_provider,ivac->dfb_stuff.v_surface,NULL,flip_blit_callback,(void *)ivac);
27
28         return 1;
29 }
30         
31 int dfb_stop_video(struct ivac *ivac) {
32
33         ivac->dfb_stuff.v_provider->Stop(ivac->dfb_stuff.v_provider);
34         
35         return 1;
36 }
37
38 int dfb_init(int arg_c,char **arg_v,struct ivac *ivac) {
39         DFBSurfaceDescription sdsc;
40         // DFBFontDescription fdsc;
41         DFBWindowDescription wdsc;
42
43         /* init */      
44         DirectFBInit(&arg_c,&arg_v);
45         DirectFBCreate(&(ivac->dfb_stuff.dfb));
46
47         /* input devices and event stuff */
48         ivac->dfb_stuff.dfb->GetInputDevice(ivac->dfb_stuff.dfb,DIDID_MOUSE,&(ivac->dfb_stuff.mouse));
49         ivac->dfb_stuff.dfb->GetInputDevice(ivac->dfb_stuff.dfb,DIDID_KEYBOARD,&(ivac->dfb_stuff.keyboard));
50         ivac->dfb_stuff.mouse->CreateEventBuffer(ivac->dfb_stuff.mouse,&(ivac->dfb_stuff.buffer));
51
52         /* first window -- video window */
53         ivac->dfb_stuff.dfb->GetDisplayLayer(ivac->dfb_stuff.dfb,DLID_PRIMARY,&(ivac->dfb_stuff.layer));
54         ivac->dfb_stuff.dfb->CreateVideoProvider(ivac->dfb_stuff.dfb,ivac->video_dev,&(ivac->dfb_stuff.v_provider));
55         ivac->dfb_stuff.v_provider->GetSurfaceDescription(ivac->dfb_stuff.v_provider,&sdsc);
56
57         wdsc.flags=DWDESC_POSX|DWDESC_POSY|DWDESC_WIDTH|DWDESC_HEIGHT;
58         wdsc.posx=0;
59         wdsc.posy=0;
60         wdsc.width=sdsc.width;
61         wdsc.height=sdsc.height;
62
63         ivac->dfb_stuff.layer->CreateWindow(ivac->dfb_stuff.layer,&wdsc,&(ivac->dfb_stuff.v_window));
64         ivac->dfb_stuff.v_window->GetSurface(ivac->dfb_stuff.v_window,&(ivac->dfb_stuff.v_surface));
65         ivac->dfb_stuff.v_window->SetOpacity(ivac->dfb_stuff.v_window,0xff);
66
67         return 1;
68 }
69
70 int dfb_tini(struct ivac *ivac) {
71         ivac->dfb_stuff.v_provider->Release(ivac->dfb_stuff.v_provider);
72         ivac->dfb_stuff.v_window->Release(ivac->dfb_stuff.v_window);
73         ivac->dfb_stuff.layer->Release(ivac->dfb_stuff.layer);
74         ivac->dfb_stuff.dfb->Release(ivac->dfb_stuff.dfb);
75         
76         return 1;
77 }