1 /*****************************************************************************
2 * beos.cpp: Screen capture module.
3 *****************************************************************************
4 * Copyright (C) 2004 the VideoLAN team
7 * Authors: Eric Petit <titer@m0k.org>
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
22 *****************************************************************************/
29 #include <vlc_common.h>
45 int screen_InitCapture( demux_t
*p_demux
)
47 demux_sys_t
*p_sys
= p_demux
->p_sys
;
48 screen_data_t
*p_data
;
53 p_sys
->p_data
= p_data
=
54 (screen_data_t
*)malloc( sizeof( screen_data_t
) );
56 p_data
->p_screen
= new BScreen();
57 rect
= p_data
->p_screen
->Frame();
59 p_data
->p_bitmap
= new BBitmap( rect
, p_data
->p_screen
->ColorSpace() );
61 switch( p_data
->p_screen
->ColorSpace() )
64 i_chroma
= VLC_CODEC_RGB32
;
65 i_bits_per_pixel
= 32;
68 i_chroma
= VLC_CODEC_RGB16
;
69 i_bits_per_pixel
= 16;
72 msg_Err( p_demux
, "screen depth %i unsupported",
73 p_data
->p_screen
->ColorSpace() );
74 delete p_data
->p_bitmap
;
75 delete p_data
->p_screen
;
79 es_format_Init( &p_sys
->fmt
, VIDEO_ES
, i_chroma
);
80 p_sys
->fmt
.video
.i_width
= (int)rect
.Width();
81 p_sys
->fmt
.video
.i_height
= (int)rect
.Height();
82 p_sys
->fmt
.video
.i_bits_per_pixel
= i_bits_per_pixel
;
87 int screen_CloseCapture( demux_t
*p_demux
)
89 demux_sys_t
*p_sys
= p_demux
->p_sys
;
90 screen_data_t
*p_data
= p_sys
->p_data
;
92 delete p_data
->p_bitmap
;
93 delete p_data
->p_screen
;
99 block_t
*screen_Capture( demux_t
*p_demux
)
101 demux_sys_t
*p_sys
= p_demux
->p_sys
;
102 screen_data_t
*p_data
= p_sys
->p_data
;
105 p_block
= block_New( p_demux
, p_sys
->fmt
.video
.i_width
*
106 p_sys
->fmt
.video
.i_height
*
107 p_sys
->fmt
.video
.i_bits_per_pixel
/ 8 );
109 p_data
->p_screen
->ReadBitmap( p_data
->p_bitmap
);
111 for( unsigned i
= 0; i
< p_sys
->fmt
.video
.i_height
; i
++ )
113 memcpy( p_block
->p_buffer
+ i
* p_sys
->fmt
.video
.i_width
*
114 p_sys
->fmt
.video
.i_bits_per_pixel
/ 8,
115 (uint8_t *) p_data
->p_bitmap
->Bits() +
116 i
* p_data
->p_bitmap
->BytesPerRow(),
117 p_sys
->fmt
.video
.i_width
*
118 p_sys
->fmt
.video
.i_bits_per_pixel
/ 8 );