VLC 4.0.0-dev
Loading...
Searching...
No Matches
vout_internal.h
Go to the documentation of this file.
1/*****************************************************************************
2 * vout_internal.h : Internal vout definitions
3 *****************************************************************************
4 * Copyright (C) 2008-2018 VLC authors and VideoLAN
5 * Copyright (C) 2008 Laurent Aimar
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 LIBVLC_VOUT_INTERNAL_H
25#define LIBVLC_VOUT_INTERNAL_H 1
26
27#include <vlc_vout_display.h>
28#include <vlc_clock.h>
29
32
33///< Use the aspect ratio from the source video format
34#define VLC_DAR_FROM_SOURCE ((vlc_rational_t){0, 0})
35
36/**
37 * Vout configuration
38 */
47
48/**
49 * Creates a video output.
50 */
52
54
55/**
56 * Setup the vout for the given configuration and get an associated decoder device.
57 *
58 * \param vout the video configuration requested.
59 * \return pointer to a decoder device reference to use with the vout or NULL
60 */
62
63/**
64 * Returns a suitable vout or release the given one.
65 *
66 * If cfg->fmt is non NULL and valid, a vout will be returned, reusing cfg->vout
67 * is possible, otherwise it returns NULL.
68 * If cfg->vout is not used, it will be closed and released.
69 *
70 * You can release the returned value either by vout_Request() or vout_Close().
71 *
72 * \param cfg the video configuration requested.
73 * \param input used to get attachments for spu filters
74 * \param vctx pointer to the video context to use with the vout or NULL
75 * \retval 0 on success
76 * \retval -1 on error
77 */
79
80/**
81 * Disables a vout.
82 *
83 * This disables a vout, but keeps it for later reuse.
84 */
86
87/**
88 * Stop the display plugin, but keep its window plugin for later reuse.
89 */
91
92/**
93 * Set the new source format for a started vout
94 *
95 * \retval 0 on success
96 * \retval -1 on error, the vout needs to be restarted to handle the format
97 */
98int vout_ChangeSource( vout_thread_t *p_vout, const video_format_t *fmt,
99 const vlc_video_context * );
100
104
105struct vout_crop {
107 union {
109 struct {
110 unsigned x;
111 unsigned y;
112 unsigned width;
113 unsigned height;
115 struct {
116 unsigned left;
117 unsigned right;
118 unsigned top;
119 unsigned bottom;
121 };
122};
123
124static inline bool vout_CropEqual(const struct vout_crop *a,
125 const struct vout_crop *b)
126{
127 if (a->mode != b->mode)
128 return false;
129
130 switch (a->mode) {
131 case VOUT_CROP_NONE:
132 return true;
133 case VOUT_CROP_RATIO:
134 return a->ratio.num * b->ratio.den == b->ratio.num * a->ratio.den;
135 case VOUT_CROP_WINDOW:
136 return memcmp(&a->window, &b->window, sizeof (a->window)) == 0;
137 case VOUT_CROP_BORDER:
138 return memcmp(&a->border, &b->border, sizeof (a->border)) == 0;
139 default:
141 }
142}
143
144bool vout_ParseCrop(struct vout_crop *, const char *crop_str);
145bool GetAspectRatio(const char *ar_str, unsigned *num, unsigned *den);
146
147/* TODO to move them to vlc_vout.h */
148void vout_ChangeFullscreen(vout_thread_t *, const char *id);
151void vout_ChangeDisplaySize(vout_thread_t *, unsigned width, unsigned height,
152 void (*ack_cb)(void *), void *opaque);
154void vout_ChangeZoom(vout_thread_t *, unsigned num, unsigned den);
155void vout_ChangeDisplayAspectRatio(vout_thread_t *, unsigned num, unsigned den);
157void vout_ControlChangeFilters(vout_thread_t *, const char *);
159void vout_ControlChangeSubSources(vout_thread_t *, const char *);
160void vout_ControlChangeSubFilters(vout_thread_t *, const char *);
166void vout_ToggleProjection(vout_thread_t *, bool enabled);
168
169void vout_FilterMouse(vout_thread_t *vout, vlc_mouse_t *mouse);
170
171/* */
177
178/* */
180 vlc_clock_t *clock,
181 enum vlc_vout_order *out_order );
183void spu_Attach( spu_t *, input_thread_t *input );
184void spu_Detach( spu_t * );
185void spu_SetClockDelay(spu_t *spu, size_t channel_id, vlc_tick_t delay);
186void spu_SetClockRate(spu_t *spu, size_t channel_id, float rate);
189
190/**
191 * This function will (un)pause the display of pictures.
192 * It is thread safe
193 */
194void vout_ChangePause( vout_thread_t *, bool b_paused, vlc_tick_t i_date );
195
196/**
197 * This function will change the rate of the vout
198 * It is thread safe
199 */
200void vout_ChangeRate( vout_thread_t *, float rate );
201
202/**
203 * This function will change the delay of the vout
204 * It is thread safe
205 */
207
208/**
209 * This function will change the rate of the spu channel
210 * It is thread safe
211 */
212void vout_ChangeSpuRate( vout_thread_t *, size_t channel_id, float rate );
213/**
214 * This function will change the delay of the spu channel
215 * It is thread safe
216 */
217void vout_ChangeSpuDelay( vout_thread_t *, size_t channel_id, vlc_tick_t delay );
218
219
220/**
221 * This function will return and reset internal statistics.
222 */
223void vout_GetResetStatistic( vout_thread_t *p_vout, unsigned *pi_displayed,
224 unsigned *pi_lost, unsigned *pi_late );
225
226/**
227 * This function will force to display the next picture while paused
228 */
229void vout_NextPicture( vout_thread_t *p_vout );
230
231/**
232 * This function will ask the display of the input title
233 */
234void vout_DisplayTitle( vout_thread_t *p_vout, const char *psz_title );
235
236/**
237 * This function will return true if no more pictures are to be displayed.
238 */
239bool vout_IsEmpty( vout_thread_t *p_vout );
240
242
243#endif // LIBVLC_VOUT_INTERNAL_H
#define VLC_USED
Definition fourcc_gen.c:32
#define vlc_assert_unreachable()
Impossible branch assertion.
Definition vlc_common.h:272
vlc_video_fitting
Video automatic scale fitting.
Definition vlc_vout_display.h:84
vlc_stereoscopic_mode_t
Stereoscopic display mode.
Definition vlc_vout.h:92
vlc_vout_order
vout or spu_channel order
Definition vlc_vout.h:70
static thread_local struct @82 state
Main structure representing an input thread.
Definition input_internal.h:44
Subpicture unit descriptor.
Definition vlc_spu.h:51
video format description
Definition vlc_es.h:356
Definition clock.c:105
Decoder context struct.
Definition vlc_codec.h:606
Definition vlc_ancillary.h:216
Mouse state.
Definition vlc_mouse.h:46
VLC object common members.
Definition vlc_objects.h:53
Definition fourcc_gen.c:34
unsigned num
Definition fourcc_gen.c:34
unsigned den
Definition fourcc_gen.c:34
Definition vlc_subpicture.h:108
Definition decoder_device.c:98
Viewpoints.
Definition vlc_viewpoint.h:41
Vout configuration.
Definition vout_internal.h:39
vout_thread_t * vout
Definition vout_internal.h:40
vlc_mouse_event mouse_event
Definition vout_internal.h:44
const video_format_t * fmt
Definition vout_internal.h:43
vlc_clock_t * clock
Definition vout_internal.h:41
const char * str_id
Definition vout_internal.h:42
void * mouse_opaque
Definition vout_internal.h:45
Definition vout_internal.h:105
unsigned width
Definition vout_internal.h:112
struct vout_crop::@128::@130 window
unsigned right
Definition vout_internal.h:117
unsigned y
Definition vout_internal.h:111
unsigned x
Definition vout_internal.h:110
unsigned left
Definition vout_internal.h:116
enum vout_crop_mode mode
Definition vout_internal.h:106
vlc_rational_t ratio
Definition vout_internal.h:108
unsigned bottom
Definition vout_internal.h:119
unsigned height
Definition vout_internal.h:113
unsigned top
Definition vout_internal.h:118
struct vout_crop::@128::@131 border
Video output thread descriptor.
Definition vlc_vout.h:54
video_projection_mode_t
Video projection mode.
Definition vlc_es.h:261
void(* vlc_mouse_event)(const vlc_mouse_t *mouse, void *user_data)
Mouse event callback.
Definition vlc_mouse.h:64
int64_t vlc_tick_t
High precision date or time interval.
Definition vlc_tick.h:48
Video output display modules interface.
ssize_t spu_RegisterChannelInternal(spu_t *, vlc_clock_t *, enum vlc_vout_order *)
Definition vout_subpictures.c:2348
static bool vout_CropEqual(const struct vout_crop *a, const struct vout_crop *b)
Definition vout_internal.h:124
ssize_t vout_RegisterSubpictureChannelInternal(vout_thread_t *, vlc_clock_t *clock, enum vlc_vout_order *out_order)
Definition video_output.c:354
void vout_IntfInit(vout_thread_t *)
Definition vout_intf.c:368
void vout_ResetProjection(vout_thread_t *)
Definition video_output.c:700
void vout_ToggleProjection(vout_thread_t *, bool enabled)
Definition video_output.c:681
void vout_ChangeSpuDelay(vout_thread_t *, size_t channel_id, vlc_tick_t delay)
This function will change the delay of the spu channel It is thread safe.
Definition video_output.c:1789
void vout_ChangeSpuChannelMargin(vout_thread_t *, enum vlc_vout_order order, int)
Definition video_output.c:640
bool vout_ParseCrop(struct vout_crop *, const char *crop_str)
void vout_DisplayTitle(vout_thread_t *p_vout, const char *psz_title)
This function will ask the display of the input title.
Definition video_output.c:292
bool GetAspectRatio(const char *ar_str, unsigned *num, unsigned *den)
Definition vout_intf.c:613
void vout_ControlChangeSubFilters(vout_thread_t *, const char *)
Definition video_output.c:632
void vout_CreateVars(vout_thread_t *)
Definition vout_intf.c:204
void vout_FilterMouse(vout_thread_t *vout, vlc_mouse_t *mouse)
Definition video_output.c:305
void vout_ControlChangeStereo(vout_thread_t *vout, vlc_stereoscopic_mode_t)
Definition video_output.c:725
void vout_GetResetStatistic(vout_thread_t *p_vout, unsigned *pi_displayed, unsigned *pi_lost, unsigned *pi_late)
This function will return and reset internal statistics.
void vout_ChangePause(vout_thread_t *, bool b_paused, vlc_tick_t i_date)
This function will (un)pause the display of pictures.
Definition video_output.c:1675
vout_crop_mode
Definition vout_internal.h:101
@ VOUT_CROP_RATIO
Definition vout_internal.h:102
@ VOUT_CROP_NONE
Definition vout_internal.h:102
@ VOUT_CROP_BORDER
Definition vout_internal.h:102
@ VOUT_CROP_WINDOW
Definition vout_internal.h:102
void vout_ControlChangeFilters(vout_thread_t *, const char *)
Definition video_output.c:593
enum vlc_video_fitting var_InheritFit(vlc_object_t *)
Definition vout_intf.c:189
void vout_ChangeZoom(vout_thread_t *, unsigned num, unsigned den)
Definition video_output.c:515
void vout_ChangeDelay(vout_thread_t *, vlc_tick_t delay)
This function will change the delay of the vout It is thread safe.
Definition video_output.c:1765
void vout_ChangeFullscreen(vout_thread_t *, const char *id)
Definition video_output.c:445
void vout_ChangeViewpoint(vout_thread_t *, const vlc_viewpoint_t *)
Definition video_output.c:649
void vout_ChangeRate(vout_thread_t *, float rate)
This function will change the rate of the vout It is thread safe.
Definition video_output.c:1779
bool vout_IsEmpty(vout_thread_t *p_vout)
This function will return true if no more pictures are to be displayed.
Definition video_output.c:282
void spu_ChangeChannelOrderMargin(spu_t *, enum vlc_vout_order, int)
Definition vout_subpictures.c:2446
vlc_decoder_device * vout_GetDevice(vout_thread_t *vout)
Setup the vout for the given configuration and get an associated decoder device.
Definition video_output.c:2441
void vout_ChangeWindowed(vout_thread_t *)
Definition video_output.c:454
void vout_ControlChangeInterlacing(vout_thread_t *, bool)
Definition video_output.c:615
void vout_ChangeWindowState(vout_thread_t *, unsigned state)
Definition video_output.c:465
int vout_Request(const vout_configuration_t *cfg, vlc_video_context *vctx, input_thread_t *input)
Returns a suitable vout or release the given one.
Definition video_output.c:2347
void vout_ChangeDisplayFitting(vout_thread_t *, enum vlc_video_fitting)
Definition video_output.c:498
void vout_Stop(vout_thread_t *)
Disables a vout.
Definition video_output.c:2080
void spu_SetClockDelay(spu_t *spu, size_t channel_id, vlc_tick_t delay)
Definition vout_subpictures.c:2023
vout_thread_t * vout_Create(vlc_object_t *obj)
Creates a video output.
Definition video_output.c:2168
void spu_SetHighlight(spu_t *, const vlc_spu_highlight_t *)
Definition vout_subpictures.c:2466
void spu_SetClockRate(spu_t *spu, size_t channel_id, float rate)
Definition vout_subpictures.c:2037
void vout_IntfReinit(vout_thread_t *)
Definition vout_intf.c:393
void vout_ChangeProjection(vout_thread_t *, video_projection_mode_t projection)
Definition video_output.c:709
void vout_ControlChangeSubSources(vout_thread_t *, const char *)
Definition video_output.c:624
void spu_Attach(spu_t *, input_thread_t *input)
Attach the SPU to an input.
Definition vout_subpictures.c:1993
void vout_ChangeIccProfile(vout_thread_t *, vlc_icc_profile_t *)
Definition video_output.c:667
vout_thread_t * vout_CreateDummy(vlc_object_t *obj)
Definition video_output.c:2157
void vout_NextPicture(vout_thread_t *p_vout)
This function will force to display the next picture while paused.
Definition video_output.c:1753
void vout_IntfDeinit(vlc_object_t *)
Definition vout_intf.c:410
void vout_ChangeDisplayAspectRatio(vout_thread_t *, unsigned num, unsigned den)
Definition video_output.c:556
int vout_ChangeSource(vout_thread_t *p_vout, const video_format_t *fmt, const vlc_video_context *)
Set the new source format for a started vout.
Definition video_output.c:2271
void vout_ChangeSpuRate(vout_thread_t *, size_t channel_id, float rate)
This function will change the rate of the spu channel It is thread safe.
Definition video_output.c:1798
void spu_Detach(spu_t *)
Detach the SPU from its attached input.
Definition vout_subpictures.c:2014
void vout_ChangeDisplaySize(vout_thread_t *, unsigned width, unsigned height, void(*ack_cb)(void *), void *opaque)
Definition video_output.c:474
void vout_StopDisplay(vout_thread_t *)
Stop the display plugin, but keep its window plugin for later reuse.
Definition video_output.c:2058
void vout_ChangeCrop(vout_thread_t *, const struct vout_crop *)
void vout_SetSpuHighlight(vout_thread_t *p_vout, const vlc_spu_highlight_t *)
Definition video_output.c:384