aboutsummaryrefslogtreecommitdiffstats
path: root/xinebrowser.h
blob: 029ae4c616fcb6b78d63c95418183b32365a94fe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <regex.h>

#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/cdrom.h>


#include <X11/X.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/keysym.h>
#include <X11/Xatom.h>
#include <X11/Xutil.h>
#include <X11/extensions/XShm.h>

#include <libmb/mb.h>
#include <mbdesktop_module.h>

#include <xine.h>
#include <xine/xineutils.h>

#ifndef XShmGetEventBase
extern int XShmGetEventBase(Display *);
#endif

enum {
  WINDOW_STATE = 0,
  WINDOW_STATE_FULLSCREEN,
  WINDOW_STATE_MODAL,
  WINDOW_TYPE_DIALOG,
  WINDOW_TYPE,    
  _NET_WM_NAME,
  UTF8_STRING,
  ATOM_CNT
};

/* XXX add MBX prefix */
enum {
  MBX_MODE_UNKNOWN        = 0,
  MBX_MODE_MUSIC_FILE     = (1<<1),
  MBX_MODE_MUSIC_CD       = (1<<2),
  MBX_MODE_MUSIC_RADIO    = (1<<3),
  MBX_MODE_MUSIC_PLAYLIST = (1<<6),
  MBX_MODE_MOVIE_FILE     = (1<<4),
  MBX_MODE_MOVIE_DVD      = (1<<5),
};

#define MBX_MODE_MOVIE (MBX_MODE_MOVIE_FILE|MBX_MODE_MOVIE_DVD)
#define MBX_MODE_MUSIC (MBX_MODE_MUSIC_FILE|MBX_MODE_MUSIC_CD|MBX_MODE_MUSIC_RADIO|MBX_MODE_MUSIC_PLAYLIST)


/* XXX add MBX prefix */
enum {
  PLAY_STATE_NORMAL,
  PLAY_STATE_FFORWARD,
  PLAY_STATE_REWIND,
  PLAY_STATE_PAUSED,
};

enum {
  CD_TYPE_ERROR = -1,
  CD_TYPE_NO_DISC = 0,
  CD_TYPE_UNKNOWN,
  CD_TYPE_AUDIO,
  CD_TYPE_DATA,
  CD_TYPE_VCD,
  CD_TYPE_DVD,
} ;

enum {
  MBX_INFO_DPY_TIME = (1<<1),
  MBX_INFO_TIMEOUT  = (1<<2),
};

enum {
  MBX_VOLUME_INC,
  MBX_VOLUME_DEC,
  MBX_VOLUME_TOGGLE_MUTE,
};

typedef struct BrowserData 
{ 
  char                *BrowserCurrentPath;
  char                *BrowserFolderName;
  char                *BrowserPath;
  char                *BrowserMusicPath;
  char                *BrowserMusicFolderName;
  char                *BrowserDrivePath;
  char                *BrowserVizPlugin;
  char                *BrowserVideoDriver;
  char                *BrowserAudioDriver;
  char                *BrowserRadioPath ;
  char                *BrowserRadioFolderName;
  char                *BrowserPlaylistsPath;

  Bool                 use_xshm_for_vis_hack;
  Bool                 use_video_thumbnails;
  Bool                 use_osd_locked_for_music;

  /* various state stuff */
  int                  current_mode;
  int                  play_state;
  MBDesktopItem       *current_item;
  Bool                 showing_info;
  int                  last_osd_show_time;
  int                  running;
  int                  volume;
  int                  is_muted;

  /* For CD's */
  char               **cd_mrls;
  int                  cd_num_mrls;
  int                  cd_idx;

  Window               win;
  Atom                 atoms[ATOM_CNT];
  Display             *display;
  MBDesktop           *mb;  /* for xine callbacks  */
  int                  display_width;

  /* Xine */
  xine_t              *xine;
  xine_stream_t       *stream;
  xine_video_port_t   *vo_port;
  xine_audio_port_t   *ao_port;
  xine_event_queue_t  *event_queue;
  xine_osd_t          *osd;
  xine_post_t         *vis;

  int                  completion_event;
  int                  xpos, ypos, width, height, fullscreen;
  double               pixel_aspect;


} BrowserData;

void
xinebrowser_win_open (MBDesktop *mb, BrowserData *data, Bool force_shm);

void
xinebrowser_win_close (MBDesktop *mb, BrowserData *data);

void
xinebrowser_win_event_loop (MBDesktop *mb, BrowserData *data);

void
xinebrowser_show_info (MBDesktop   *mb, 
		       BrowserData *data,
		       int          info_flags);

Bool
xinebrowser_play(MBDesktop     *mb, 
		 BrowserData   *data, 
		 char          *mrl);

MBPixbufImage *
xinebrowser_make_thumbnail (MBDesktop   *mb, 
			    BrowserData *data, 
			    char        *mrl);




/* xinebrowser callbacks */

void
xinebrowser_file_activate_cb (void *data1, void *data2);

void
xinebrowser_radio_activate_cb (void *data1, void *data2);

void 			
xinebrowser_movie_open_cb (void *data1, void *data2);

void 			
xinebrowser_music_open_cb (void *data1, void *data2);

void
xinebrowser_playlists_open_cb (void *data1, void *data2);

void 			
xinebrowser_radio_open_cb (void *data1, void *data2);

void
xinebrowser_disc_activate_cb (void *data1, void *data2);


/* Utils */

int
error_handler (Display     *display,
               XErrorEvent *error);

void
trap_errors (void);
 
int
untrap_errors (void);

Bool 
file_exists (char *filename);

int
xinebrowser_cd_get_disc_type(char *device);

void 
yuy2toyv12 (unsigned char *y, 
	    unsigned char *u, 
	    unsigned char *v, 
	    unsigned char *input,
	    int            width, 
	    int            height);

unsigned char* 
yv12torgb (unsigned char *src_y, 
	   unsigned char *src_u, 
	   unsigned char *src_v,
	   int            width, 
	   int            height);