forked from videolan/vlc
-
Notifications
You must be signed in to change notification settings - Fork 0
/
vlc_vout.h
158 lines (141 loc) · 5.1 KB
/
vlc_vout.h
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
/*****************************************************************************
* vlc_vout.h: common video definitions
*****************************************************************************
* Copyright (C) 1999 - 2008 VLC authors and VideoLAN
*
* Authors: Vincent Seguin <[email protected]>
* Samuel Hocevar <[email protected]>
* Olivier Aubert <oaubert 47 videolan d07 org>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#ifndef VLC_VOUT_H_
#define VLC_VOUT_H_ 1
#include <vlc_es.h>
#include <vlc_picture.h>
#include <vlc_subpicture.h>
/**
* \defgroup output Output
* \ingroup vlc
* \defgroup video_output Video output
* \ingroup output
* Video rendering, output and window management
*
* This module describes the programming interface for video output threads.
* It includes functions allowing to open a new thread, send pictures to a
* thread, and destroy a previously opened video output thread.
* @{
* \file
* Video output thread interface
*/
/**
* Video output thread private structure
*/
typedef struct vout_thread_sys_t vout_thread_sys_t;
/**
* Video output thread descriptor
*
* Any independent video output device, such as an X11 window or a GGI device,
* is represented by a video output thread, and described using the following
* structure.
*/
struct vout_thread_t {
struct vlc_object_t obj;
/* Private vout_thread data */
vout_thread_sys_t *p;
};
/* Alignment flags */
#define VOUT_ALIGN_LEFT 0x0001
#define VOUT_ALIGN_RIGHT 0x0002
#define VOUT_ALIGN_HMASK 0x0003
#define VOUT_ALIGN_TOP 0x0004
#define VOUT_ALIGN_BOTTOM 0x0008
#define VOUT_ALIGN_VMASK 0x000C
/**
* vout or spu_channel order
*/
enum vlc_vout_order
{
VLC_VOUT_ORDER_NONE,
/**
* There is only one primary vout/spu_channel
* For vouts: this is the first vout, probably embedded in the UI.
* For spu channels: main and first SPU channel.
*/
VLC_VOUT_ORDER_PRIMARY,
/**
* There can be several secondary vouts or spu_channels
* For vouts: a secondary vout using its own window.
* For spu channels: a secondary spu channel that is placed in function of
* the primary one. See "secondary-sub-margin" and
* "secondary-sub-alignment".
*/
VLC_VOUT_ORDER_SECONDARY,
};
/*****************************************************************************
* Prototypes
*****************************************************************************/
/**
* Destroys a vout.
*
* This function closes and releases a vout created by vout_Create().
*
* \param vout the vout to close
*/
VLC_API void vout_Close(vout_thread_t *vout);
/**
* This function will handle a snapshot request.
*
* pp_image, pp_picture and p_fmt can be NULL otherwise they will be
* set with returned value in case of success.
*
* pp_image will hold an encoded picture in psz_format format.
*
* p_fmt can be NULL otherwise it will be set with the format used for the
* picture before encoding.
*
* i_timeout specifies the time the function will wait for a snapshot to be
* available.
*
*/
VLC_API int vout_GetSnapshot( vout_thread_t *p_vout,
block_t **pp_image, picture_t **pp_picture,
video_format_t *p_fmt,
const char *psz_format, vlc_tick_t i_timeout );
/* */
VLC_API picture_t * vout_GetPicture( vout_thread_t * );
VLC_API void vout_PutPicture( vout_thread_t *, picture_t * );
/* Subpictures channels ID */
#define VOUT_SPU_CHANNEL_INVALID (-1) /* Always fails in comparison */
#define VOUT_SPU_CHANNEL_OSD 0 /* OSD channel is automatically cleared */
#define VOUT_SPU_CHANNEL_OSD_HSLIDER 1
#define VOUT_SPU_CHANNEL_OSD_VSLIDER 2
#define VOUT_SPU_CHANNEL_OSD_COUNT 3
/* */
VLC_API void vout_PutSubpicture( vout_thread_t *, subpicture_t * );
VLC_API ssize_t vout_RegisterSubpictureChannel( vout_thread_t * );
VLC_API void vout_UnregisterSubpictureChannel( vout_thread_t *, size_t );
VLC_API void vout_FlushSubpictureChannel( vout_thread_t *, size_t );
/**
* This function will ensure that all ready/displayed pictures have at most
* the provided date.
*/
VLC_API void vout_Flush( vout_thread_t *p_vout, vlc_tick_t i_date );
/**
* Empty all the pending pictures in the vout
*/
#define vout_FlushAll( vout ) vout_Flush( vout, VLC_TICK_INVALID )
/**@}*/
#endif /* _VLC_VOUT_H */