~ubuntu-branches/ubuntu/maverick/vlc/maverick

« back to all changes in this revision

Viewing changes to modules/video_output/x11/xcommon.h

  • Committer: Bazaar Package Importer
  • Author(s): Reinhard Tartler
  • Date: 2008-09-17 21:56:14 UTC
  • mfrom: (1.1.17 upstream)
  • Revision ID: james.westby@ubuntu.com-20080917215614-tj0vx8xzd57e52t8
Tags: 0.9.2-1ubuntu1
* New Upstream Release, exception granted by
    - dktrkranz, norsetto, Hobbsee (via irc). LP: #270404

Changes done in ubuntu:

* add libxul-dev to build-depends
* make sure that vlc is build against libxul in configure. This doesn't
  change anything in the package, but makes it more robust if building
  in an 'unclean' chroot or when modifying the package.
* debian/control: make Vcs-* fields point to the motumedia branch
* add libx264-dev and libass-dev to build-depends
  LP: #210354, #199870
* actually enable libass support by passing --enable-libass to configure
* enable libdca: add libdca-dev to build depends and --enable-libdca
* install the x264 plugin.

Changes already in the pkg-multimedia branch in debian:

* don't install usr/share/vlc/mozilla in debian/mozilla-plugin-vlc.install  
* new upstream .desktop file now registers flash video mimetype LP: #261567
* add Xb-Npp-Applications to mozilla-plugin-vlc
* remove duplicate entries in debian/vlc-nox.install

Show diffs side-by-side

added added

removed removed

Lines of Context:
2
2
 * xcommon.h: Defines common to the X11 and XVideo plugins
3
3
 *****************************************************************************
4
4
 * Copyright (C) 1998-2001 the VideoLAN team
5
 
 * $Id: daa67ac8181f2e6c540247aa894b1aefed59ebad $
 
5
 * $Id$
6
6
 *
7
7
 * Authors: Vincent Seguin <seguin@via.ecp.fr>
8
8
 *          Samuel Hocevar <sam@zoy.org>
27
27
/*****************************************************************************
28
28
 * Defines
29
29
 *****************************************************************************/
30
 
#ifdef MODULE_NAME_IS_xvideo
 
30
#if defined(MODULE_NAME_IS_xvideo) || defined(MODULE_NAME_IS_xvmc)
31
31
#   define IMAGE_TYPE     XvImage
32
32
#   define EXTRA_ARGS     int i_xvport, int i_chroma, int i_bits_per_pixel
33
33
#   define EXTRA_ARGS_SHM int i_xvport, int i_chroma, XShmSegmentInfo *p_shm
51
51
        VLC_FOURCC( i & 0xff, (i >> 8) & 0xff, (i >> 16) & 0xff, \
52
52
                    (i >> 24) & 0xff )
53
53
 
 
54
#ifdef HAVE_OSSO
 
55
#include <libosso.h>
 
56
#endif
 
57
 
 
58
 
54
59
/*****************************************************************************
55
60
 * x11_window_t: X11 window descriptor
56
61
 *****************************************************************************
78
83
} x11_window_t;
79
84
 
80
85
/*****************************************************************************
 
86
 * Xxmc defines
 
87
 *****************************************************************************/
 
88
 
 
89
#ifdef MODULE_NAME_IS_xvmc
 
90
 
 
91
typedef struct
 
92
{         /* CLUT == Color LookUp Table */
 
93
    uint8_t cb;
 
94
    uint8_t cr;
 
95
    uint8_t y;
 
96
    uint8_t foo;
 
97
} clut_t;
 
98
 
 
99
#define XX44_PALETTE_SIZE 32
 
100
#define OVL_PALETTE_SIZE 256
 
101
#define XVMC_MAX_SURFACES 16
 
102
#define XVMC_MAX_SUBPICTURES 4
 
103
#define FOURCC_IA44 0x34344149
 
104
#define FOURCC_AI44 0x34344941
 
105
 
 
106
typedef struct
 
107
{
 
108
    unsigned size;
 
109
    unsigned max_used;
 
110
    uint32_t cluts[XX44_PALETTE_SIZE];
 
111
    /* cache palette entries for both colors and clip_colors */
 
112
    int lookup_cache[OVL_PALETTE_SIZE*2];
 
113
} xx44_palette_t;
 
114
 
 
115
/*
 
116
 * Functions to handle the vlc-specific palette.
 
117
 */
 
118
 
 
119
void clear_xx44_palette( xx44_palette_t *p );
 
120
 
 
121
/*
 
122
 * Convert the xine-specific palette to something useful.
 
123
 */
 
124
 
 
125
void xx44_to_xvmc_palette( const xx44_palette_t *p,unsigned char *xvmc_palette,
 
126
             unsigned first_xx44_entry, unsigned num_xx44_entries,
 
127
             unsigned num_xvmc_components, char *xvmc_components );
 
128
 
 
129
typedef struct
 
130
{
 
131
    vlc_macroblocks_t   vlc_mc;
 
132
    XvMCBlockArray      blocks;            /* pointer to memory for dct block array  */
 
133
    int                 num_blocks;
 
134
    XvMCMacroBlock      *macroblockptr;     /* pointer to current macro block         */
 
135
    XvMCMacroBlock      *macroblockbaseptr; /* pointer to base MacroBlock in MB array */
 
136
    XvMCMacroBlockArray macro_blocks;      /* pointer to memory for macroblock array */
 
137
    int                 slices;
 
138
} xvmc_macroblocks_t;
 
139
 
 
140
typedef struct
 
141
{
 
142
    unsigned int        mpeg_flags;
 
143
    unsigned int        accel_flags;
 
144
    unsigned int        max_width;
 
145
    unsigned int        max_height;
 
146
    unsigned int        sub_max_width;
 
147
    unsigned int        sub_max_height;
 
148
    int                 type_id;
 
149
    XvImageFormatValues subPicType;
 
150
    int                 flags;
 
151
} xvmc_capabilities_t;
 
152
 
 
153
typedef struct xvmc_surface_handler_s
 
154
{
 
155
    XvMCSurface         surfaces[XVMC_MAX_SURFACES];
 
156
    int                 surfInUse[XVMC_MAX_SURFACES];
 
157
    int                 surfValid[XVMC_MAX_SURFACES];
 
158
    XvMCSubpicture      subpictures[XVMC_MAX_SUBPICTURES];
 
159
    int                 subInUse[XVMC_MAX_SUBPICTURES];
 
160
    int                 subValid[XVMC_MAX_SUBPICTURES];
 
161
    pthread_mutex_t     mutex;
 
162
} xvmc_surface_handler_t;
 
163
 
 
164
typedef struct context_lock_s
 
165
{
 
166
    pthread_mutex_t     mutex;
 
167
    pthread_cond_t      cond;
 
168
    int                 num_readers;
 
169
} context_lock_t;
 
170
 
 
171
#define XVMCLOCKDISPLAY(display) XLockDisplay(display);
 
172
#define XVMCUNLOCKDISPLAY(display) XUnlockDisplay(display);
 
173
 
 
174
void xvmc_context_reader_unlock( context_lock_t *c );
 
175
void xvmc_context_reader_lock( context_lock_t *c );
 
176
void xvmc_context_writer_lock( context_lock_t *c );
 
177
void xvmc_context_writer_unlock( context_lock_t *c );
 
178
void free_context_lock( context_lock_t *c );
 
179
void xxmc_dispose_context( vout_thread_t *p_vout );
 
180
 
 
181
int xxmc_xvmc_surface_valid( vout_thread_t *p_vout, XvMCSurface *surf );
 
182
void xxmc_xvmc_free_surface( vout_thread_t *p_vout, XvMCSurface *surf );
 
183
 
 
184
void xvmc_vld_slice( picture_t *picture );
 
185
void xvmc_vld_frame( picture_t *picture );
 
186
 
 
187
void xxmc_do_update_frame( picture_t *picture, uint32_t width, uint32_t height,
 
188
        double ratio, int format, int flags);
 
189
 
 
190
int checkXvMCCap( vout_thread_t *p_vout);
 
191
 
 
192
XvMCSubpicture *xxmc_xvmc_alloc_subpicture( vout_thread_t *p_vout,
 
193
        XvMCContext *context, unsigned short width, unsigned short height,
 
194
        int xvimage_id );
 
195
 
 
196
void xxmc_xvmc_free_subpicture( vout_thread_t *p_vout, XvMCSubpicture *sub );
 
197
void blend_xx44( uint8_t *dst_img, subpicture_t *sub_img, int dst_width,
 
198
        int dst_height, int dst_pitch, xx44_palette_t *palette,int ia44);
 
199
 
 
200
#endif /* XvMC defines */
 
201
 
 
202
/*****************************************************************************
81
203
 * vout_sys_t: video output method descriptor
82
204
 *****************************************************************************
83
205
 * This structure is part of the video output thread descriptor.
101
223
    x11_window_t        fullscreen_window;
102
224
 
103
225
    /* X11 generic properties */
104
 
    vlc_bool_t          b_altfullscreen;          /* which fullscreen method */
 
226
    bool          b_altfullscreen;          /* which fullscreen method */
105
227
#ifdef HAVE_SYS_SHM_H
106
228
    int                 i_shm_opcode;      /* shared memory extension opcode */
107
229
#endif
108
230
 
109
 
#ifdef MODULE_NAME_IS_xvideo
 
231
#if defined(MODULE_NAME_IS_xvideo) || defined(MODULE_NAME_IS_xvmc)
110
232
    int                 i_xvport;
 
233
    bool          b_paint_colourkey;
 
234
    int                 i_colourkey;
111
235
#else
112
236
    Colormap            colormap;               /* colormap used (8bpp only) */
113
237
 
126
250
#endif
127
251
 
128
252
    /* Mouse pointer properties */
129
 
    vlc_bool_t          b_mouse_pointer_visible;
 
253
    bool          b_mouse_pointer_visible;
130
254
    mtime_t             i_time_mouse_last_moved; /* used to auto-hide pointer*/
 
255
    mtime_t             i_mouse_hide_timeout;      /* after time hide cursor */
131
256
    Cursor              blank_cursor;                   /* the hidden cursor */
132
257
    mtime_t             i_time_button_last_pressed;   /* to track dbl-clicks */
133
258
    Pixmap              cursor_pixmap;
135
260
    /* Window manager properties */
136
261
    Atom                net_wm_state;
137
262
    Atom                net_wm_state_fullscreen;
138
 
    vlc_bool_t          b_net_wm_state_fullscreen;
 
263
    bool          b_net_wm_state_fullscreen;
139
264
    Atom                net_wm_state_above;
140
 
    vlc_bool_t          b_net_wm_state_above;
 
265
    bool          b_net_wm_state_above;
141
266
    Atom                net_wm_state_stays_on_top;
142
 
    vlc_bool_t          b_net_wm_state_stays_on_top;
 
267
    bool          b_net_wm_state_stays_on_top;
143
268
    Atom                net_wm_state_below;
144
 
    vlc_bool_t          b_net_wm_state_below;
 
269
    bool          b_net_wm_state_below;
145
270
 
146
271
#ifdef MODULE_NAME_IS_glx
147
272
    /* GLX properties */
149
274
    GLXContext          gwctx;
150
275
    GLXWindow           gwnd;
151
276
#endif
 
277
 
 
278
#ifdef MODULE_NAME_IS_xvmc
 
279
    /* XvMC related stuff here */
 
280
    xvmc_macroblocks_t  macroblocks;
 
281
    xvmc_capabilities_t *xvmc_cap;
 
282
    unsigned int        xvmc_num_cap;
 
283
    unsigned int        xvmc_max_subpic_x;
 
284
    unsigned int        xvmc_max_subpic_y;
 
285
    int                 xvmc_eventbase;
 
286
    int                 xvmc_errbase;
 
287
    int                 hwSubpictures;
 
288
    XvMCSubpicture      *old_subpic;
 
289
    XvMCSubpicture      *new_subpic;
 
290
    xx44_palette_t      palette;
 
291
    int                 first_overlay;
 
292
    float               cpu_saver;
 
293
    int                 cpu_save_enabled;
 
294
    int                 reverse_nvidia_palette;
 
295
    int                 context_flags;
 
296
 
 
297
    /*
 
298
     * These variables are protected by the context lock:
 
299
     */
 
300
    unsigned            xvmc_cur_cap;
 
301
    int                 xvmc_backend_subpic;
 
302
    XvMCContext         context;
 
303
    int                 contextActive;
 
304
    xvmc_surface_handler_t xvmc_surf_handler;
 
305
    unsigned            xvmc_mpeg;
 
306
    unsigned            xvmc_accel;
 
307
    unsigned            last_accel_request;
 
308
    unsigned            xvmc_width;
 
309
    unsigned            xvmc_height;
 
310
    int                 have_xvmc_autopaint;
 
311
    int                 xvmc_xoverlay_type;
 
312
    int                 unsigned_intra;
 
313
 
 
314
    /*
 
315
     * Only creation and destruction of the below.
 
316
     */
 
317
    char                *xvmc_palette;
 
318
    XvImage             *subImage;
 
319
    XShmSegmentInfo     subShmInfo;
 
320
 
 
321
    /*
 
322
     * The mutex below is needed since XlockDisplay wasn't really enough
 
323
     * to protect the XvMC Calls.
 
324
     */
 
325
    context_lock_t      xvmc_lock;
 
326
    subpicture_t *      p_last_subtitle_save;
 
327
    int                 xvmc_deinterlace_method;
 
328
    int                 xvmc_crop_style;
 
329
    mtime_t             last_date;
 
330
 
 
331
    //alphablend_t       alphablend_extra_data;
 
332
#endif
 
333
 
 
334
#ifdef HAVE_XSP
 
335
    int                 i_hw_scale;
 
336
#endif
 
337
 
 
338
#ifdef HAVE_OSSO
 
339
    osso_context_t      *p_octx;
 
340
    int                 i_backlight_on_counter;
 
341
#endif
152
342
};
153
343
 
154
344
/*****************************************************************************
164
354
#ifdef HAVE_SYS_SHM_H
165
355
    XShmSegmentInfo     shminfo;       /* shared memory zone information */
166
356
#endif
 
357
 
 
358
#ifdef MODULE_NAME_IS_xvmc
 
359
    XvMCSurface         *xvmc_surf;
 
360
    vlc_xxmc_t           xxmc_data;
 
361
    int                  last_sw_format;
 
362
    vout_thread_t        *p_vout;
 
363
    int                  nb_display;
 
364
#endif
167
365
};
168
366
 
169
367
/*****************************************************************************
174
372
 *****************************************************************************/
175
373
#define MWM_HINTS_DECORATIONS   (1L << 1)
176
374
#define PROP_MWM_HINTS_ELEMENTS 5
 
375
 
177
376
typedef struct mwmhints_t
178
377
{
179
378
    unsigned long flags;
181
380
    unsigned long decorations;
182
381
    signed   long input_mode;
183
382
    unsigned long status;
184
 
 
185
383
} mwmhints_t;
186
384
 
187
385
/*****************************************************************************
189
387
 *****************************************************************************/
190
388
#ifdef MODULE_NAME_IS_xvideo
191
389
#   define MAX_DIRECTBUFFERS 10
 
390
#elif defined(MODULE_NAME_IS_xvmc)
 
391
#   define MAX_DIRECTBUFFERS 12
192
392
#else
193
393
#   define MAX_DIRECTBUFFERS 2
194
394
#endif
195
395
 
 
396