simple video subtitles support, defined in external text files, added a couple of...
[xonotic/darkplaces.git] / cl_video.h
1
2 #ifndef CL_VIDEO_H
3 #define CL_VIDEO_H
4
5 #include "cl_dyntexture.h"
6
7 // yields DYNAMIC_TEXTURE_PATH_PREFIX CLVIDEOPREFIX video name for a path
8 #define CLVIDEOPREFIX   CLDYNTEXTUREPREFIX "video/"
9 #define CLTHRESHOLD             2.0
10
11 #define MENUOWNER               1
12
13 typedef enum clvideostate_e
14 {
15         CLVIDEO_UNUSED,
16         CLVIDEO_PLAY,
17         CLVIDEO_LOOP,
18         CLVIDEO_PAUSE,
19         CLVIDEO_FIRSTFRAME,
20         CLVIDEO_RESETONWAKEUP,
21         CLVIDEO_STATECOUNT
22 } clvideostate_t;
23
24 #define CLVIDEO_MAX_SUBTITLES 512
25
26 extern cvar_t cl_video_subtitles;
27 extern cvar_t cl_video_subtitles_lines;
28 extern cvar_t cl_video_subtitles_textsize;
29 extern cvar_t cl_video_scale;
30 extern cvar_t cl_video_brightness;
31
32 typedef struct clvideo_s
33 {
34         int             ownertag;
35         clvideostate_t state;
36
37         // private stuff
38         void    *stream;
39
40         double  starttime;
41         int             framenum;
42         double  framerate;
43
44         void    *imagedata;
45
46         cachepic_t cpif;
47
48         // VorteX: subtitles array
49         int             subtitles;
50         char    *subtitle_text[CLVIDEO_MAX_SUBTITLES];
51         float   subtitle_start[CLVIDEO_MAX_SUBTITLES];
52         float   subtitle_end[CLVIDEO_MAX_SUBTITLES];
53
54         // if a video is suspended, it is automatically paused (else we'd still have to process the frames)
55
56         // used to determine whether the video's resources should be freed or not
57     double  lasttime;
58         // when lasttime - realtime > THRESHOLD, all but the stream is freed
59         qboolean suspended;
60
61         char    filename[MAX_QPATH];
62 } clvideo_t;
63
64 clvideo_t*      CL_OpenVideo( const char *filename, const char *name, int owner, const char *subtitlesfile );
65 clvideo_t*      CL_GetVideoByName( const char *name );
66 void            CL_SetVideoState( clvideo_t *video, clvideostate_t state );
67 void            CL_RestartVideo( clvideo_t *video );
68
69 void            CL_CloseVideo( clvideo_t * video );
70 void            CL_PurgeOwner( int owner );
71
72 void            CL_Video_Frame( void ); // update all videos
73 void            CL_Video_Init( void );
74 void            CL_Video_Shutdown( void );
75
76 // old interface
77 extern int cl_videoplaying;
78
79 void CL_DrawVideo( void );
80 void CL_VideoStart( char *filename, const char *subtitlesfile );
81 void CL_VideoStop( void );
82
83 // new function used for fullscreen videos
84 // TODO: Andreas Kirsch: move this subsystem somewhere else (preferably host) since the cl_video system shouldnt do such work like managing key events..
85 void CL_Video_KeyEvent( int key, int ascii, qboolean down );
86
87 #endif