vout_beos.cpp 19.1 KB
Newer Older
1
2
3
/*****************************************************************************
 * vout_beos.cpp: beos video output display method
 *****************************************************************************
Sam Hocevar's avatar
   
Sam Hocevar committed
4
 * Copyright (C) 2000, 2001 VideoLAN
gbazin's avatar
   
gbazin committed
5
 * $Id: vout_beos.cpp,v 1.38 2002/01/19 19:54:01 gbazin Exp $
6
 *
Sam Hocevar's avatar
   
Sam Hocevar committed
7
8
 * Authors: Jean-Marc Dressler <polux@via.ecp.fr>
 *          Samuel Hocevar <sam@zoy.org>
Richard Shepherd's avatar
Richard Shepherd committed
9
 *          Tony Castley <tcastley@mail.powerup.com.au>
Sam Hocevar's avatar
   
Sam Hocevar committed
10
 *          Richard Shepherd <richard@rshepherd.demon.co.uk>
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
 *****************************************************************************/

/*****************************************************************************
 * Preamble
 *****************************************************************************/
#include <errno.h>                                                 /* ENOMEM */
#include <stdlib.h>                                                /* free() */
#include <stdio.h>
#include <string.h>                                            /* strerror() */
34
35
#include <InterfaceKit.h>
#include <DirectWindow.h>
36
#include <Application.h>
37
#include <Bitmap.h>
38
39
40

extern "C"
{
Sam Hocevar's avatar
   
Sam Hocevar committed
41
#include <videolan/vlc.h>
42
43
44
45

#include "video.h"
#include "video_output.h"

Sam Hocevar's avatar
   
Sam Hocevar committed
46
#include "interface.h"
47
48
}

Sam Hocevar's avatar
   
Sam Hocevar committed
49
#include "VideoWindow.h"
50

Sam Hocevar's avatar
   
Sam Hocevar committed
51
52
#define BITS_PER_PLANE  16
#define BYTES_PER_PIXEL 2
53
54

/*****************************************************************************
Sam Hocevar's avatar
   
Sam Hocevar committed
55
 * vout_sys_t: BeOS video output method descriptor
56
57
 *****************************************************************************
 * This structure is part of the video output thread descriptor.
Sam Hocevar's avatar
   
Sam Hocevar committed
58
 * It describes the BeOS specific properties of an output thread.
59
60
61
 *****************************************************************************/
typedef struct vout_sys_s
{
Sam Hocevar's avatar
   
Sam Hocevar committed
62
    VideoWindow *  p_window;
Sam Hocevar's avatar
   
Sam Hocevar committed
63

Sam Hocevar's avatar
   
Sam Hocevar committed
64
65
    s32 i_width;
    s32 i_height;
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
} vout_sys_t;


/*****************************************************************************
 * beos_GetAppWindow : retrieve a BWindow pointer from the window name
 *****************************************************************************/
BWindow *beos_GetAppWindow(char *name)
{
    int32       index;
    BWindow     *window;
    
    for (index = 0 ; ; index++)
    {
        window = be_app->WindowAt(index);
        if (window == NULL)
            break;
82
        if (window->LockWithTimeout(20000) == B_OK)
83
84
85
86
87
88
89
90
91
92
93
94
        {
            if (strcmp(window->Name(), name) == 0)
            {
                window->Unlock();
                break;
            }
            window->Unlock();
        }
    }
    return window; 
}

95
96
/**************************************************************************** 
 * DrawingThread : thread that really does the drawing 
Sam Hocevar's avatar
   
Sam Hocevar committed
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
int32 Draw(void *data) 
{ 
    //rudolf: sync init: 
    BScreen *screen; 
    display_mode disp_mode; 
    static uint32 refresh, oldrefresh = 0; 

    screen = new BScreen(); 
    screen-> GetMode(&disp_mode); 
    refresh = 
         (disp_mode.timing.pixel_clock * 1000)/((disp_mode.timing.h_total)* 
         (disp_mode.timing.v_total)); 
    if (!(refresh == oldrefresh)) 
    { 
        printf("\nNew refreshrate is %d:Hz\n",refresh); 
        oldrefresh = refresh; 
        if (refresh  < 61) 
        { 
            printf("Enabling retrace sync.\n"); 
        } 
        else 
        { 
            printf("Disabling retrace sync.\n"); 
        } 
    } 

    VideoWindow* p_win; 
    p_win = (VideoWindow *) data; 
    if ( p_win-> voutWindow-> LockLooper() ) 
    { 
        //rudolf: sync: 
        if (refresh  < 61) 
        { 
            screen-> WaitForRetrace(22000);//set timeout for  < 45 Hz... 
        } 

        p_win-> view-> DrawBitmap( p_win-> bitmap[p_win-> i_buffer], 
                                 p_win-> bitmap[p_win-> i_buffer]-> Bounds(), 
                                 p_win-> voutWindow-> Bounds() );  
        p_win-> voutWindow-> UnlockLooper(); 
    } 
    return B_OK; 
Sam Hocevar's avatar
   
Sam Hocevar committed
140
141
}

142
/*****************************************************************************
143
 * bitmapWindow : This is the bitmap window output
144
 *****************************************************************************/
145
146
147
bitmapWindow::bitmapWindow(BRect frame, VideoWindow *theOwner)
        : BWindow( frame, NULL, B_TITLED_WINDOW, 
                   B_OUTLINE_RESIZE | B_NOT_CLOSABLE | B_NOT_MINIMIZABLE )
148
{
Sam Hocevar's avatar
   
Sam Hocevar committed
149
    is_zoomed = false;
150
151
152
153
    origRect = frame;
    owner = theOwner;
    SetTitle(VOUT_TITLE " (BBitmap output)");
}
154

155
156
157
bitmapWindow::~bitmapWindow()
{
}
Richard Shepherd's avatar
Richard Shepherd committed
158

159
160
void bitmapWindow::FrameResized( float width, float height )
{
Sam Hocevar's avatar
   
Sam Hocevar committed
161
162
163
164
165
166
167
168
169
170
    if (is_zoomed)
    {
        return;
    }
    float width_scale;
    float height_scale;

    width_scale = width / origRect.Width();
    height_scale = height / origRect.Height();
    
171
172
173
174
175
176
177
178
179
180
    /* if the width is proportionally smaller */
    if (width_scale <= height_scale)
    {
        ResizeTo(width, origRect.Height() * width_scale);
    }
    else /* if the height is proportionally smaller */
    {
        ResizeTo(origRect.Width() * height_scale, height);
    }
}
181

182
183
void bitmapWindow::Zoom(BPoint origin, float width, float height )
{
Sam Hocevar's avatar
   
Sam Hocevar committed
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
    if(is_zoomed)
    {
        MoveTo(origRect.left, origRect.top);
        ResizeTo(origRect.IntegerWidth(), origRect.IntegerHeight());
        be_app->ShowCursor();
    }
    else
    {
        BScreen *screen;
        screen = new BScreen(this);
        BRect rect = screen->Frame();
        delete screen;
        MoveTo(0,0);
        ResizeTo(rect.IntegerWidth(), rect.IntegerHeight());
        be_app->HideCursor();
    }
    is_zoomed = !is_zoomed;
201
202
}

203
204
205
206
207
208
/*****************************************************************************
 * directWindow : This is the bitmap window output
 *****************************************************************************/
directWindow::directWindow(BRect frame, VideoWindow *theOwner)
        : BDirectWindow( frame, NULL, B_TITLED_WINDOW, 
                   B_OUTLINE_RESIZE | B_NOT_CLOSABLE | B_NOT_MINIMIZABLE )
209
{
210
211
212
213
214
    is_zoomed = false;
    origRect = frame;
    owner = theOwner;
    SetTitle(VOUT_TITLE " (DirectWindow output)");
}
Sam Hocevar's avatar
   
Sam Hocevar committed
215

216
217
218
directWindow::~directWindow()
{
}
Sam Hocevar's avatar
   
Sam Hocevar committed
219

220
221
222
void directWindow::DirectConnected(direct_buffer_info *info)
{
}
223

224
void directWindow::FrameResized( float width, float height )
Sam Hocevar's avatar
   
Sam Hocevar committed
225
{
Sam Hocevar's avatar
   
Sam Hocevar committed
226
227
228
229
230
231
232
233
234
235
    if (is_zoomed)
    {
        return;
    }
    float width_scale;
    float height_scale;

    width_scale = width / origRect.Width();
    height_scale = height / origRect.Height();
    
236
237
238
    /* if the width is proportionally smaller */
    if (width_scale <= height_scale)
    {
239
        ResizeTo(width, origRect.Height() * width_scale);
240
241
242
    }
    else /* if the height is proportionally smaller */
    {
243
        ResizeTo(origRect.Width() * height_scale, height);
244
    }
Sam Hocevar's avatar
   
Sam Hocevar committed
245
246
}

247
void directWindow::Zoom(BPoint origin, float width, float height )
Sam Hocevar's avatar
   
Sam Hocevar committed
248
{
Sam Hocevar's avatar
   
Sam Hocevar committed
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
    if(is_zoomed)
    {
        SetFullScreen(false);
        MoveTo(origRect.left, origRect.top);
        ResizeTo(origRect.IntegerWidth(), origRect.IntegerHeight());
        be_app->ShowCursor();
    }
    else
    {
        SetFullScreen(true);
        BScreen *screen;
        screen = new BScreen(this);
        BRect rect = screen->Frame();
        delete screen;
        MoveTo(0,0);
        ResizeTo(rect.IntegerWidth(), rect.IntegerHeight());
        be_app->HideCursor();
    }
    is_zoomed = !is_zoomed;
Sam Hocevar's avatar
   
Sam Hocevar committed
268
269
}

270
/*****************************************************************************
271
 * VideoWindow constructor and destructor
272
 *****************************************************************************/
273
274
VideoWindow::VideoWindow( int width, int height, 
                          vout_thread_t *p_video_output )
275
{
276
277
278
    if ( BDirectWindow::SupportsWindowMode() )
    { 
        voutWindow = new directWindow( BRect( 80, 50, 
Sam Hocevar's avatar
   
Sam Hocevar committed
279
                                          80 + width, 50 + height ), this );
280
281
282
    }
    else
    {
Sam Hocevar's avatar
   
Sam Hocevar committed
283
284
285
        voutWindow = new bitmapWindow( BRect( 80, 50, 
                                          80 + width, 50 + height ), this );
    }
286

Sam Hocevar's avatar
   
Sam Hocevar committed
287
    /* set the VideoWindow variables */
288
    teardownwindow = false;
Sam Hocevar's avatar
   
Sam Hocevar committed
289
290
    
    /* create the view to do the display */
291
292
    view = new VLCView( voutWindow->Bounds() );
    voutWindow->AddChild(view);
293
    
294
    /* Bitmap mode overlay not available */
Sam Hocevar's avatar
   
Sam Hocevar committed
295
296
297
298
299
300
301
302
303
304
305
306
#if BITS_PER_PLANE == 32
    bitmap[0] = new BBitmap( voutWindow->Bounds(), B_RGB32);
    bitmap[1] = new BBitmap( voutWindow->Bounds(), B_RGB32);
#else
    bitmap[0] = new BBitmap( voutWindow->Bounds(), B_RGB32);
    bitmap[1] = new BBitmap( voutWindow->Bounds(), B_RGB32);
#endif
    memset(bitmap[0]->Bits(), 0, bitmap[0]->BitsLength());
    memset(bitmap[1]->Bits(), 0, bitmap[1]->BitsLength());

    i_width = bitmap[0]->Bounds().IntegerWidth();
    i_height = bitmap[0]->Bounds().IntegerHeight();
307
308
309
310
311
312
313
314
315
316
317
318
319
320

    voutWindow->Show();
}

VideoWindow::~VideoWindow()
{
    int32 result;

    voutWindow->Hide();
    voutWindow->Sync();
    voutWindow->Lock();
    voutWindow->Quit();
    teardownwindow = true;
    wait_for_thread(fDrawThreadID, &result);
Sam Hocevar's avatar
   
Sam Hocevar committed
321
322
    delete bitmap[0];
    delete bitmap[1];
323
324
325
326
327
328
329
}

void VideoWindow::resizeIfRequired( int newWidth, int newHeight )
{
    if (( newWidth != i_width + 1) &&
        ( newHeight != i_height + 1) &&
        ( newWidth != 0 ))
330
    {
331
        if ( voutWindow->Lock() )
332
        {
333
334
335
336
337
            view->ClearViewBitmap();
            i_width = newWidth - 1;
            i_height = newHeight -1;
            voutWindow->ResizeTo((float) i_width, (float) i_height); 
            voutWindow->Unlock();
338
339
340
341
        }
    }
}

342
void VideoWindow::drawBuffer(int bufferIndex)
343
{
Sam Hocevar's avatar
   
Sam Hocevar committed
344
345
346
347
    status_t status;
    
    i_buffer = bufferIndex; 
    
348
349
350
    fDrawThreadID = spawn_thread(Draw, "drawing_thread",
                    B_DISPLAY_PRIORITY, (void*) this);
    wait_for_thread(fDrawThreadID, &status);
351
352
}

Sam Hocevar's avatar
   
Sam Hocevar committed
353
354
355
356
357
/*****************************************************************************
 * VLCView::VLCView
 *****************************************************************************/
VLCView::VLCView(BRect bounds) : BView(bounds, "", B_FOLLOW_ALL, B_WILL_DRAW)
{
Sam Hocevar's avatar
   
Sam Hocevar committed
358
359
360
361
362
#if BITS_PER_PLANE == 32
    SetViewColor(B_TRANSPARENT_32_BIT);
#else
    SetViewColor(B_TRANSPARENT_16_BIT);
#endif
Sam Hocevar's avatar
   
Sam Hocevar committed
363
364
365
366
367
368
369
370
371
372
373
374
375
376
}

/*****************************************************************************
 * VLCView::~VLCView
 *****************************************************************************/
VLCView::~VLCView()
{
}

/*****************************************************************************
 * VLCVIew::~VLCView
 *****************************************************************************/
void VLCView::MouseDown(BPoint point)
{
Sam Hocevar's avatar
   
Sam Hocevar committed
377
378
    BWindow *win = Window();
    win->Zoom();
Sam Hocevar's avatar
   
Sam Hocevar committed
379
380
}

381
382
383
384
385
386
extern "C"
{

/*****************************************************************************
 * Local prototypes
 *****************************************************************************/
Sam Hocevar's avatar
   
Sam Hocevar committed
387
static int  vout_Probe      ( probedata_t *p_data );
Sam Hocevar's avatar
   
Sam Hocevar committed
388
389
390
391
392
393
394
static int  vout_Create     ( vout_thread_t * );
static int  vout_Init       ( vout_thread_t * );
static void vout_End        ( vout_thread_t * );
static void vout_Destroy    ( vout_thread_t * );
static int  vout_Manage     ( vout_thread_t * );
static void vout_Display    ( vout_thread_t *, picture_t * );
static void vout_Render     ( vout_thread_t *, picture_t * );
Sam Hocevar's avatar
   
Sam Hocevar committed
395
396
397
398
399
400
401
402

static int  BeosOpenDisplay ( vout_thread_t *p_vout );
static void BeosCloseDisplay( vout_thread_t *p_vout );

/*****************************************************************************
 * Functions exported as capabilities. They are declared as static so that
 * we don't pollute the namespace too much.
 *****************************************************************************/
Sam Hocevar's avatar
   
Sam Hocevar committed
403
void _M( vout_getfunctions )( function_list_t * p_function_list )
Sam Hocevar's avatar
   
Sam Hocevar committed
404
405
406
407
408
409
410
411
{
    p_function_list->pf_probe = vout_Probe;
    p_function_list->functions.vout.pf_create     = vout_Create;
    p_function_list->functions.vout.pf_init       = vout_Init;
    p_function_list->functions.vout.pf_end        = vout_End;
    p_function_list->functions.vout.pf_destroy    = vout_Destroy;
    p_function_list->functions.vout.pf_manage     = vout_Manage;
    p_function_list->functions.vout.pf_display    = vout_Display;
Sam Hocevar's avatar
   
Sam Hocevar committed
412
    p_function_list->functions.vout.pf_render     = vout_Render;
Sam Hocevar's avatar
   
Sam Hocevar committed
413
414
415
416
417
418
419
420
421
422
423
424
}

/*****************************************************************************
 * vout_Probe: probe the video driver and return a score
 *****************************************************************************
 * This function tries to initialize SDL and returns a score to the
 * plugin manager so that it can select the best plugin.
 *****************************************************************************/
static int vout_Probe( probedata_t *p_data )
{
    return( 100 );
}
425
426

/*****************************************************************************
Sam Hocevar's avatar
   
Sam Hocevar committed
427
 * vout_Create: allocates BeOS video thread output method
428
 *****************************************************************************
Sam Hocevar's avatar
   
Sam Hocevar committed
429
 * This function allocates and initializes a BeOS vout method.
430
 *****************************************************************************/
Sam Hocevar's avatar
   
Sam Hocevar committed
431
int vout_Create( vout_thread_t *p_vout )
432
433
434
435
436
{
    /* Allocate structure */
    p_vout->p_sys = (vout_sys_t*) malloc( sizeof( vout_sys_t ) );
    if( p_vout->p_sys == NULL )
    {
Sam Hocevar's avatar
   
Sam Hocevar committed
437
        intf_ErrMsg( "error: %s", strerror(ENOMEM) );
438
439
        return( 1 );
    }
Sam Hocevar's avatar
   
Sam Hocevar committed
440
441
442
443
444
445
446
447
448
449
450
451
452
453

    if( p_vout->render.i_height * p_vout->render.i_aspect
         >= p_vout->render.i_width * VOUT_ASPECT_FACTOR )
    {
        p_vout->p_sys->i_width = p_vout->render.i_height
            * p_vout->render.i_aspect / VOUT_ASPECT_FACTOR;
        p_vout->p_sys->i_height = p_vout->render.i_height;
    }
    else
    {
        p_vout->p_sys->i_width = p_vout->render.i_width;
        p_vout->p_sys->i_height = p_vout->render.i_width
            * VOUT_ASPECT_FACTOR / p_vout->render.i_aspect;
    }
454
455
456
457

    /* Open and initialize device */
    if( BeosOpenDisplay( p_vout ) )
    {
Sam Hocevar's avatar
   
Sam Hocevar committed
458
        intf_ErrMsg("vout error: can't open display");
459
460
461
462
463
464
465
466
        free( p_vout->p_sys );
        return( 1 );
    }

    return( 0 );
}

/*****************************************************************************
Sam Hocevar's avatar
   
Sam Hocevar committed
467
 * vout_Init: initialize BeOS video thread output method
468
 *****************************************************************************/
Sam Hocevar's avatar
   
Sam Hocevar committed
469
int vout_Init( vout_thread_t *p_vout )
470
471
{
    VideoWindow * p_win = p_vout->p_sys->p_window;
472

473
    if((p_win->bitmap[0] != NULL) && (p_win->bitmap[1] != NULL))
Sam Hocevar's avatar
   
Sam Hocevar committed
474
475
    {
        p_vout->pf_setbuffers( p_vout,
476
477
478
               (byte_t *)p_win->bitmap[0]->Bits(),
               (byte_t *)p_win->bitmap[1]->Bits());
    }
479
480
481
482
    return( 0 );
}

/*****************************************************************************
Sam Hocevar's avatar
   
Sam Hocevar committed
483
 * vout_End: terminate BeOS video thread output method
484
 *****************************************************************************/
Sam Hocevar's avatar
   
Sam Hocevar committed
485
void vout_End( vout_thread_t *p_vout )
486
{
Sam Hocevar's avatar
   
Sam Hocevar committed
487
    /* place code here to end the video */
488
489
490
}

/*****************************************************************************
Sam Hocevar's avatar
   
Sam Hocevar committed
491
 * vout_Destroy: destroy BeOS video thread output method
492
493
494
 *****************************************************************************
 * Terminate an output method created by DummyCreateOutputMethod
 *****************************************************************************/
Sam Hocevar's avatar
   
Sam Hocevar committed
495
void vout_Destroy( vout_thread_t *p_vout )
496
497
498
499
500
501
{
    BeosCloseDisplay( p_vout );
    free( p_vout->p_sys );
}

/*****************************************************************************
Sam Hocevar's avatar
   
Sam Hocevar committed
502
 * vout_Manage: handle BeOS events
503
504
505
506
 *****************************************************************************
 * This function should be called regularly by video output thread. It manages
 * console events. It returns a non null value on error.
 *****************************************************************************/
Sam Hocevar's avatar
   
Sam Hocevar committed
507
int vout_Manage( vout_thread_t *p_vout )
508
{
509
510
    VideoWindow * p_win = p_vout->p_sys->p_window;
    
511
512
513
    p_win->resizeIfRequired(p_vout->p_buffer[p_vout->i_buffer_index].i_pic_width,
                            p_vout->p_buffer[p_vout->i_buffer_index].i_pic_height);
                            
Sam Hocevar's avatar
   
Sam Hocevar committed
514
515
516
517
518
519
520
521
522
    return( 0 );
}

/*****************************************************************************
 * vout_Render: render previously calculated output
 *****************************************************************************/
void vout_Render( vout_thread_t *p_vout, picture_t *p_pic )
{
    ;
523
524
525
}

/*****************************************************************************
Sam Hocevar's avatar
   
Sam Hocevar committed
526
 * vout_Display: displays previously rendered output
527
 *****************************************************************************
Sam Hocevar's avatar
   
Sam Hocevar committed
528
 * This function send the currently rendered image to BeOS image, waits until
529
530
 * it is displayed and switch the two rendering buffers, preparing next frame.
 *****************************************************************************/
Sam Hocevar's avatar
   
Sam Hocevar committed
531
void vout_Display( vout_thread_t *p_vout, picture_t *p_pic )
532
{
533

534
    VideoWindow * p_win = p_vout->p_sys->p_window;
535
    /* draw buffer if required */    
Sam Hocevar's avatar
   
Sam Hocevar committed
536
537
    if (!p_win->teardownwindow)
    {
538
       p_win->drawBuffer(p_vout->i_buffer_index);
539
    }
540
    /* change buffer */
Sam Hocevar's avatar
   
Sam Hocevar committed
541
    p_vout->i_buffer_index = ++p_vout->i_buffer_index & 1;
542
543
544
545
546
}

/* following functions are local */

/*****************************************************************************
Sam Hocevar's avatar
   
Sam Hocevar committed
547
 * BeosOpenDisplay: open and initialize BeOS device
548
549
550
 *****************************************************************************/
static int BeosOpenDisplay( vout_thread_t *p_vout )
{ 
551
    
552
553
554
555
556
    VideoWindow * p_win = new VideoWindow( p_vout->i_width - 1, 
                                           p_vout->i_height - 1, 
                                           p_vout );

    if( p_win == 0 )
557
558
    {
        free( p_vout->p_sys );
Sam Hocevar's avatar
   
Sam Hocevar committed
559
        intf_ErrMsg( "error: cannot allocate memory for VideoWindow" );
560
561
562
        return( 1 );
    }   
    
563
564
565
    p_vout->p_sys->p_window = p_win;
    /* set the system to 32bits always
       let BeOS do all the work */
Sam Hocevar's avatar
   
Sam Hocevar committed
566
567
568
    p_vout->p_sys->i_width    = p_win->i_width + 1;
    p_vout->p_sys->i_height   = p_win->i_height + 1;
#if 0
569
570
    p_vout->i_screen_depth    = BITS_PER_PLANE;
    p_vout->i_bytes_per_pixel = BYTES_PER_PIXEL;
Sam Hocevar's avatar
   
Sam Hocevar committed
571
    p_vout->i_bytes_per_line  = p_vout->p_sys->i_width * BYTES_PER_PIXEL;
572

573
574
575
    p_vout->i_red_mask =        0xff0000;
    p_vout->i_green_mask =      0x00ff00;
    p_vout->i_blue_mask =       0x0000ff;
Sam Hocevar's avatar
   
Sam Hocevar committed
576
#endif
577

578
579
580
581
    return( 0 );
}

/*****************************************************************************
Sam Hocevar's avatar
   
Sam Hocevar committed
582
 * BeosDisplay: close and reset BeOS device
583
584
585
586
587
588
589
 *****************************************************************************
 * Returns all resources allocated by BeosOpenDisplay and restore the original
 * state of the device.
 *****************************************************************************/
static void BeosCloseDisplay( vout_thread_t *p_vout )
{    
    /* Destroy the video window */
590
    delete p_vout->p_sys->p_window;
591
592
593
}

} /* extern "C" */