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_codec.h
Go to the documentation of this file.
1
/*****************************************************************************
2
* vlc_codec.h: Definition of the decoder and encoder structures
3
*****************************************************************************
4
* Copyright (C) 1999-2003 VLC authors and VideoLAN
5
* $Id: b9a89d4cc714e3893187bf78605f3a82d5483478 $
6
*
7
* Authors: Gildas Bazin <gbazin@netcourrier.com>
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_CODEC_H
25
#define VLC_CODEC_H 1
26
27
#include <
vlc_block.h
>
28
#include <
vlc_es.h
>
29
#include <
vlc_picture.h
>
30
#include <
vlc_subpicture.h
>
31
32
/**
33
* \file
34
* This file defines the structure and types used by decoders and encoders
35
*/
36
37
typedef
struct
decoder_owner_sys_t
decoder_owner_sys_t
;
38
39
/**
40
* \defgroup decoder Decoder
41
*
42
* The structure describing a decoder
43
*
44
* @{
45
*/
46
47
/*
48
* BIG FAT WARNING : the code relies in the first 4 members of filter_t
49
* and decoder_t to be the same, so if you have anything to add, do it
50
* at the end of the structure.
51
*/
52
struct
decoder_t
53
{
54
VLC_COMMON_MEMBERS
55
56
/* Module properties */
57
module_t
*
p_module
;
58
decoder_sys_t
*
p_sys
;
59
60
/* Input format ie from demuxer (XXX: a lot of field could be invalid) */
61
es_format_t
fmt_in
;
62
63
/* Output format of decoder/packetizer */
64
es_format_t
fmt_out
;
65
66
/* Some decoders only accept packetized data (ie. not truncated) */
67
bool
b_need_packetized
;
68
69
/* Tell the decoder if it is allowed to drop frames */
70
bool
b_pace_control
;
71
72
/* */
73
picture_t
* ( * pf_decode_video )(
decoder_t
*,
block_t
** );
74
block_t
* ( * pf_decode_audio )(
decoder_t
*,
block_t
** );
75
subpicture_t
* ( * pf_decode_sub) (
decoder_t
*,
block_t
** );
76
block_t
* ( * pf_packetize ) (
decoder_t
*,
block_t
** );
77
78
/* Closed Caption (CEA 608/708) extraction.
79
* If set, it *may* be called after pf_decode_video/pf_packetize
80
* returned data. It should return CC for the pictures returned by the
81
* last pf_packetize/pf_decode_video call only,
82
* pb_present will be used to known which cc channel are present (but
83
* globaly, not necessary for the current packet */
84
block_t
* ( * pf_get_cc ) (
decoder_t
*,
bool
pb_present[4] );
85
86
/* Meta data at codec level
87
* The decoder owner set it back to NULL once it has retreived what it needs.
88
* The decoder owner is responsible of its release except when you overwrite it.
89
*/
90
vlc_meta_t
*
p_description
;
91
92
/*
93
* Owner fields
94
* XXX You MUST not use them directly.
95
*/
96
97
/* Video output callbacks
98
* XXX use decoder_NewPicture/decoder_DeletePicture
99
* and decoder_LinkPicture/decoder_UnlinkPicture */
100
picture_t
*(*pf_vout_buffer_new)(
decoder_t
* );
101
void (*
pf_vout_buffer_del
)(
decoder_t
*,
picture_t
* );
102
void (*
pf_picture_link
) (
decoder_t
*,
picture_t
* );
103
void (*
pf_picture_unlink
) (
decoder_t
*,
picture_t
* );
104
105
/**
106
* Number of extra (ie in addition to the DPB) picture buffers
107
* needed for decoding.
108
*/
109
int
i_extra_picture_buffers
;
110
111
/* Audio output callbacks
112
* XXX use decoder_NewAudioBuffer/decoder_DeleteAudioBuffer */
113
block_t
*(*pf_aout_buffer_new)(
decoder_t
*, int );
114
115
/* SPU output callbacks
116
* XXX use decoder_NewSubpicture and decoder_DeleteSubpicture */
117
subpicture_t
*(*pf_spu_buffer_new)(
decoder_t
*,
const
subpicture_updater_t
* );
118
void (*
pf_spu_buffer_del
)(
decoder_t
*,
subpicture_t
* );
119
120
/* Input attachments
121
* XXX use decoder_GetInputAttachments */
122
int (*
pf_get_attachments
)(
decoder_t
*p_dec,
input_attachment_t
***ppp_attachment,
int
*pi_attachment );
123
124
/* Display date
125
* XXX use decoder_GetDisplayDate */
126
mtime_t
(*
pf_get_display_date
)(
decoder_t
*,
mtime_t
);
127
128
/* Display rate
129
* XXX use decoder_GetDisplayRate */
130
int (*
pf_get_display_rate
)(
decoder_t
* );
131
132
/* Private structure for the owner of the decoder */
133
decoder_owner_sys_t
*
p_owner
;
134
135
bool
b_error
;
136
};
137
138
/**
139
* @}
140
*/
141
142
/**
143
* \defgroup encoder Encoder
144
*
145
* The structure describing a Encoder
146
*
147
* @{
148
*/
149
150
struct
encoder_t
151
{
152
VLC_COMMON_MEMBERS
153
154
/* Module properties */
155
module_t
*
p_module
;
156
encoder_sys_t
*
p_sys
;
157
158
/* Properties of the input data fed to the encoder */
159
es_format_t
fmt_in
;
160
161
/* Properties of the output of the encoder */
162
es_format_t
fmt_out
;
163
164
block_t
* ( * pf_encode_video )(
encoder_t
*,
picture_t
* );
165
block_t
* ( * pf_encode_audio )(
encoder_t
*,
block_t
* );
166
block_t
* ( * pf_encode_sub )(
encoder_t
*,
subpicture_t
* );
167
168
/* Common encoder options */
169
int
i_threads
;
/* Number of threads to use during encoding */
170
int
i_iframes
;
/* One I frame per i_iframes */
171
int
i_bframes
;
/* One B frame per i_bframes */
172
int
i_tolerance
;
/* Bitrate tolerance */
173
174
/* Encoder config */
175
config_chain_t
*
p_cfg
;
176
};
177
178
/**
179
* @}
180
*/
181
182
183
/**
184
* This function will return a new picture usable by a decoder as an output
185
* buffer. You have to release it using decoder_DeletePicture or by returning
186
* it to the caller as a pf_decode_video return value.
187
*/
188
VLC_API
picture_t
*
decoder_NewPicture
(
decoder_t
* )
VLC_USED
;
189
190
/**
191
* This function will release a picture create by decoder_NewPicture.
192
*/
193
VLC_API
void
decoder_DeletePicture
(
decoder_t
*,
picture_t
*p_picture );
194
195
/**
196
* This function will increase the picture reference count.
197
* (picture_Hold is not usable.)
198
*/
199
VLC_API
void
decoder_LinkPicture
( decoder_t *,
picture_t
* );
200
201
/**
202
* This function will decrease the picture reference count.
203
* (picture_Release is not usable.)
204
*/
205
VLC_API
void
decoder_UnlinkPicture
( decoder_t *, picture_t * );
206
207
/**
208
* This function will return a new audio buffer usable by a decoder as an
209
* output buffer. You have to release it using decoder_DeleteAudioBuffer
210
* or by returning it to the caller as a pf_decode_audio return value.
211
*/
212
VLC_API
block_t
*
decoder_NewAudioBuffer
( decoder_t *,
int
i_size )
VLC_USED
;
213
214
/**
215
* This function will return a new subpicture usable by a decoder as an output
216
* buffer. You have to release it using decoder_DeleteSubpicture or by returning
217
* it to the caller as a pf_decode_sub return value.
218
*/
219
VLC_API
subpicture_t
*
decoder_NewSubpicture
( decoder_t *, const
subpicture_updater_t
* ) VLC_USED;
220
221
/**
222
* This function will release a subpicture created by decoder_NewSubicture.
223
*/
224
VLC_API
void
decoder_DeleteSubpicture
( decoder_t *,
subpicture_t
*p_subpicture );
225
226
/**
227
* This function gives all input attachments at once.
228
*
229
* You MUST release the returned values
230
*/
231
VLC_API
int
decoder_GetInputAttachments
( decoder_t *,
input_attachment_t
***ppp_attachment,
int
*pi_attachment );
232
233
/**
234
* This function converts a decoder timestamp into a display date comparable
235
* to mdate().
236
* You MUST use it *only* for gathering statistics about speed.
237
*/
238
VLC_API
mtime_t
decoder_GetDisplayDate
( decoder_t *,
mtime_t
) VLC_USED;
239
240
/**
241
* This function returns the current input rate.
242
* You MUST use it *only* for gathering statistics about speed.
243
*/
244
VLC_API
int
decoder_GetDisplayRate
( decoder_t * ) VLC_USED;
245
246
#endif
/* _VLC_CODEC_H */
Generated by
1.8.1.2