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_es_out.h
Go to the documentation of this file.
1
/*****************************************************************************
2
* vlc_es_out.h: es_out (demuxer output) descriptor, queries and methods
3
*****************************************************************************
4
* Copyright (C) 1999-2004 VLC authors and VideoLAN
5
* $Id: cf1abcec08467eb495ad62474e055c1500f358b6 $
6
*
7
* Authors: Laurent Aimar <fenrir@via.ecp.fr>
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_ES_OUT_H
25
#define VLC_ES_OUT_H 1
26
27
/**
28
* \file
29
* This file defines functions and structures for handling es_out in stream output
30
*/
31
32
/**
33
* \defgroup es out Es Out
34
* @{
35
*/
36
37
enum
es_out_query_e
38
{
39
/* set ES selected for the es category (audio/video/spu) */
40
ES_OUT_SET_ES
,
/* arg1= es_out_id_t* */
41
ES_OUT_RESTART_ES
,
/* arg1= es_out_id_t* */
42
43
/* set 'default' tag on ES (copied across from container) */
44
ES_OUT_SET_ES_DEFAULT
,
/* arg1= es_out_id_t* */
45
46
/* force selection/unselection of the ES (bypass current mode) */
47
ES_OUT_SET_ES_STATE
,
/* arg1= es_out_id_t* arg2=bool */
48
ES_OUT_GET_ES_STATE
,
/* arg1= es_out_id_t* arg2=bool* */
49
50
/* */
51
ES_OUT_SET_GROUP
,
/* arg1= int */
52
53
/* PCR handling, DTS/PTS will be automatically computed using thoses PCR
54
* XXX: SET_PCR(_GROUP) are in charge of the pace control. They will wait
55
* to slow down the demuxer so that it reads at the right speed.
56
* XXX: if you want PREROLL just call ES_OUT_SET_NEXT_DISPLAY_TIME and send
57
* as you would normally do.
58
*/
59
ES_OUT_SET_PCR
,
/* arg1=int64_t i_pcr(microsecond!) (using default group 0)*/
60
ES_OUT_SET_GROUP_PCR
,
/* arg1= int i_group, arg2=int64_t i_pcr(microsecond!)*/
61
ES_OUT_RESET_PCR
,
/* no arg */
62
63
/* Try not to use this one as it is a bit hacky */
64
ES_OUT_SET_ES_FMT
,
/* arg1= es_out_id_t* arg2=es_format_t* */
65
66
/* Allow preroll of data (data with dts/pts < i_pts for all ES will be decoded but not displayed */
67
ES_OUT_SET_NEXT_DISPLAY_TIME
,
/* arg1=int64_t i_pts(microsecond) */
68
/* Set meta data for group (dynamic) (The vlc_meta_t is not modified nor released) */
69
ES_OUT_SET_GROUP_META
,
/* arg1=int i_group arg2=const vlc_meta_t */
70
/* Set epg for group (dynamic) (The vlc_epg_t is not modified nor released) */
71
ES_OUT_SET_GROUP_EPG
,
/* arg1=int i_group arg2=const vlc_epg_t */
72
/* */
73
ES_OUT_DEL_GROUP
,
/* arg1=int i_group */
74
75
/* Set scrambled state for one es */
76
ES_OUT_SET_ES_SCRAMBLED_STATE
,
/* arg1=int i_group arg2=es_out_id_t* */
77
78
/* Stop any buffering being done, and ask if es_out has no more data to
79
* play.
80
* It will not block and so MUST be used carrefully. The only good reason
81
* is for interactive playback (like for DVD menu).
82
* XXX You SHALL call ES_OUT_RESET_PCR before any other es_out_Control/Send calls. */
83
ES_OUT_GET_EMPTY
,
/* arg1=bool* res=cannot fail */
84
85
/* Set global meta data (The vlc_meta_t is not modified nor released) */
86
ES_OUT_SET_META
,
/* arg1=const vlc_meta_t * */
87
88
/* PCR system clock manipulation for external clock synchronization */
89
ES_OUT_GET_PCR_SYSTEM
,
/* arg1=mtime_t *, arg2=mtime_t * res=can fail */
90
ES_OUT_MODIFY_PCR_SYSTEM
,
/* arg1=int is_absolute, arg2=mtime_t, res=can fail */
91
92
/* First value usable for private control */
93
ES_OUT_PRIVATE_START
= 0x10000,
94
};
95
96
struct
es_out_t
97
{
98
es_out_id_t
*(*pf_add) (
es_out_t
*,
const
es_format_t
* );
99
int (*
pf_send
) (
es_out_t
*,
es_out_id_t
*,
block_t
* );
100
void (*
pf_del
) (
es_out_t
*,
es_out_id_t
* );
101
int (*
pf_control
)(
es_out_t
*,
int
i_query, va_list );
102
void (*
pf_destroy
)(
es_out_t
* );
103
104
es_out_sys_t
*
p_sys
;
105
};
106
107
VLC_USED
108
static
inline
es_out_id_t
*
es_out_Add
(
es_out_t
*out,
const
es_format_t
*fmt )
109
{
110
return
out->
pf_add
( out, fmt );
111
}
112
113
static
inline
void
es_out_Del
(
es_out_t
*out,
es_out_id_t
*
id
)
114
{
115
out->
pf_del
( out,
id
);
116
}
117
118
static
inline
int
es_out_Send
(
es_out_t
*out,
es_out_id_t
*
id
,
119
block_t
*p_block )
120
{
121
return
out->
pf_send
( out,
id
, p_block );
122
}
123
124
static
inline
int
es_out_vaControl
(
es_out_t
*out,
int
i_query, va_list args )
125
{
126
return
out->
pf_control
( out, i_query, args );
127
}
128
129
static
inline
int
es_out_Control
(
es_out_t
*out,
int
i_query, ... )
130
{
131
va_list args;
132
int
i_result;
133
134
va_start( args, i_query );
135
i_result =
es_out_vaControl
( out, i_query, args );
136
va_end( args );
137
return
i_result;
138
}
139
140
static
inline
void
es_out_Delete
(
es_out_t
*p_out )
141
{
142
p_out->
pf_destroy
( p_out );
143
}
144
145
static
inline
int
es_out_ControlSetMeta
(
es_out_t
*out,
const
vlc_meta_t
*p_meta )
146
{
147
return
es_out_Control
( out,
ES_OUT_SET_META
, p_meta );
148
}
149
150
static
inline
int
es_out_ControlGetPcrSystem
(
es_out_t
*out,
mtime_t
*pi_system,
mtime_t
*pi_delay )
151
{
152
return
es_out_Control
( out,
ES_OUT_GET_PCR_SYSTEM
, pi_system, pi_delay );
153
}
154
static
inline
int
es_out_ControlModifyPcrSystem
(
es_out_t
*out,
bool
b_absolute,
mtime_t
i_system )
155
{
156
return
es_out_Control
( out,
ES_OUT_MODIFY_PCR_SYSTEM
, b_absolute, i_system );
157
}
158
159
/**
160
* @}
161
*/
162
163
#endif
Generated by
1.8.1.2