VLC
2.1.0-git
Main Page
Related Pages
Modules
Data Structures
Files
File List
Globals
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
vlc_video_splitter.h
Go to the documentation of this file.
1
/*****************************************************************************
2
* vlc_video_splitter.h: "video splitter" related structures and functions
3
*****************************************************************************
4
* Copyright (C) 2009 Laurent Aimar
5
* $Id: eb2bf00f85a3ee2df1c35a90f12da4099a95a463 $
6
*
7
* Authors: Laurent Aimar <fenrir _AT_ videolan _DOT_ org>
8
*
9
* This program is free software; you can redistribute it and/or modify it
10
* under the terms of the GNU Lesser General Public License as published by
11
* the Free Software Foundation; either version 2.1 of the License, or
12
* (at your option) any later version.
13
*
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 Lesser General Public License for more details.
18
*
19
* You should have received a copy of the GNU Lesser General Public License
20
* along with this program; if not, write to the Free Software Foundation,
21
* Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
22
*****************************************************************************/
23
24
#ifndef VLC_VIDEO_SPLITTER_H
25
#define VLC_VIDEO_SPLITTER_H 1
26
27
#include <
vlc_es.h
>
28
#include <
vlc_picture.h
>
29
#include <
vlc_mouse.h
>
30
31
/**
32
* \file
33
* This file defines the structure and types used by video splitter filters.
34
*/
35
36
typedef
struct
video_splitter_t
video_splitter_t
;
37
typedef
struct
video_splitter_sys_t
video_splitter_sys_t
;
38
typedef
struct
video_splitter_owner_t
video_splitter_owner_t
;
39
40
/** Structure describing a video splitter output properties
41
*/
42
typedef
struct
43
{
44
/* Video format of the output */
45
video_format_t
fmt;
46
47
/* Window hints */
48
struct
49
{
50
/* Relative position.
51
* (0,0) is equal to the default position.
52
*/
53
int
i_x;
54
int
i_y;
55
56
/* Alignment inside the window
57
*/
58
int
i_align;
59
} window;
60
61
/* Video output module
62
* Use NULL for default
63
*/
64
char
*psz_module;
65
66
}
video_splitter_output_t
;
67
68
/** Structure describing a video splitter
69
*/
70
struct
video_splitter_t
71
{
72
VLC_COMMON_MEMBERS
73
74
/* Module properties */
75
module_t
*
p_module
;
76
77
/* configuration */
78
config_chain_t
*
p_cfg
;
79
80
/* Input format
81
* It is filled by the creator and cannot be modified.
82
*/
83
video_format_t
fmt
;
84
85
/* Output formats
86
*
87
* It can only be set in the open() function and must remain
88
* constant.
89
* The module is responsible for the allocation and deallocation.
90
*/
91
int
i_output
;
92
video_splitter_output_t
*
p_output
;
93
94
int (*
pf_filter
)(
video_splitter_t
*,
picture_t
*pp_dst[],
95
picture_t
*p_src );
96
int (*
pf_mouse
) (
video_splitter_t
*,
vlc_mouse_t
*,
97
int
i_index,
98
const
vlc_mouse_t
*p_old,
const
vlc_mouse_t
*p_new );
99
100
video_splitter_sys_t
*
p_sys
;
101
102
/* Buffer allocation */
103
int (*
pf_picture_new
) (
video_splitter_t
*,
picture_t
*pp_picture[] );
104
void (*
pf_picture_del
) (
video_splitter_t
*,
picture_t
*pp_picture[] );
105
video_splitter_owner_t
*
p_owner
;
106
};
107
108
/**
109
* It will create an array of pictures suitable as output.
110
*
111
* You must either returned them through pf_filter or by calling
112
* video_splitter_DeletePicture.
113
*
114
* If VLC_SUCCESS is not returned, pp_picture values are undefined.
115
*/
116
static
inline
int
video_splitter_NewPicture
(
video_splitter_t
*p_splitter,
117
picture_t
*pp_picture[] )
118
{
119
int
i_ret = p_splitter->
pf_picture_new
( p_splitter, pp_picture );
120
if
( i_ret )
121
msg_Warn
( p_splitter,
"can't get output pictures"
);
122
return
i_ret;
123
}
124
125
/**
126
* It will release an array of pictures created by video_splitter_NewPicture.
127
* Provided for convenience.
128
*/
129
static
inline
void
video_splitter_DeletePicture
(
video_splitter_t
*p_splitter,
130
picture_t
*pp_picture[] )
131
{
132
p_splitter->
pf_picture_del
( p_splitter, pp_picture );
133
}
134
135
/* */
136
VLC_API
video_splitter_t
*
video_splitter_New
(
vlc_object_t
*,
const
char
*
psz_name
,
const
video_format_t
* );
137
VLC_API
void
video_splitter_Delete
(
video_splitter_t
* );
138
139
static
inline
int
video_splitter_Filter
(
video_splitter_t
*p_splitter,
140
picture_t
*pp_dst[],
picture_t
*p_src )
141
{
142
return
p_splitter->
pf_filter
( p_splitter, pp_dst, p_src );
143
}
144
static
inline
int
video_splitter_Mouse
(
video_splitter_t
*p_splitter,
145
vlc_mouse_t
*p_mouse,
146
int
i_index,
147
const
vlc_mouse_t
*p_old,
const
vlc_mouse_t
*p_new )
148
{
149
if
( !p_splitter->
pf_mouse
)
150
{
151
*p_mouse = *p_new;
152
return
VLC_SUCCESS
;
153
}
154
return
p_splitter->
pf_mouse
( p_splitter, p_mouse, i_index, p_old, p_new );
155
}
156
157
#endif
/* VLC_VIDEO_SPLITTER_H */
158
Generated by
1.8.1.2