xine-lib  1.2.10
demux.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2000-2019 the xine project
3  *
4  * This file is part of xine, a free video player.
5  *
6  * xine is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * xine is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
19  */
20 
21 #ifndef HAVE_DEMUX_H
22 #define HAVE_DEMUX_H
23 
24 #include <xine/attributes.h>
25 #include <xine/input_plugin.h>
26 #include <xine/buffer.h>
27 #include <xine/xine_internal.h>
28 
29 struct plugin_node_s;
30 
31 #define DEMUXER_PLUGIN_IFACE_VERSION 27
32 
33 #define DEMUX_OK 0
34 #define DEMUX_FINISHED 1
35 
36 #define DEMUX_CANNOT_HANDLE 0
37 #define DEMUX_CAN_HANDLE 1
38 
39 #define METHOD_BY_CONTENT 1
40 #define METHOD_BY_MRL 2
41 #define METHOD_EXPLICIT 3
42 
43 typedef struct demux_class_s demux_class_t ;
45 
46 struct demux_class_s {
47 
48  /*
49  * open a new instance of this plugin class
50  */
51  demux_plugin_t* (*open_plugin) (demux_class_t *this_gen, xine_stream_t *stream, input_plugin_t *input);
52 
56  const char *identifier;
57 
63  const char *description;
64 
68  const char *text_domain;
69 
74  const char* mimetypes;
75 
82  const char* extensions;
83 
84  /*
85  * close down, free all resources
86  */
87  void (*dispose) (demux_class_t *this_gen);
88 };
89 
90 #define default_demux_class_dispose (void (*) (demux_class_t *this_gen))free
91 
92 /*
93  * any demux plugin must implement these functions
94  */
95 
97 
98  /*
99  * send headers, followed by BUF_CONTROL_HEADERS_DONE down the
100  * fifos, then return. do not start demux thread (yet)
101  */
102 
103  void (*send_headers) (demux_plugin_t *this_gen);
104 
105  /*
106  * ask demux to seek
107  *
108  * for seekable streams, a start position can be specified
109  *
110  * start_pos : position in input source (0..65535)
111  * this is defined as most convenient to demuxer, can be
112  * either time or offset based.
113  * start_time : position measured in miliseconds from stream start
114  * playing : true if this is a new seek within an already playing stream
115  * false if playback of this stream has not started yet
116  *
117  * if both parameters are !=0 start_pos will be used
118  * for non-seekable streams both values will be ignored
119  *
120  * returns the demux status (like get_status, but immediately after
121  * starting the demuxer)
122  */
123 
124  int (*seek) (demux_plugin_t *this_gen,
125  off_t start_pos, int start_time, int playing );
126 
127  /*
128  * send a chunk of data down to decoder fifos
129  *
130  * the meaning of "chunk" is specific to every demux, usually
131  * it involves parsing one unit of data from stream.
132  *
133  * this function will be called from demux loop and should return
134  * the demux current status
135  */
136 
137  int (*send_chunk) (demux_plugin_t *this_gen);
138 
139  /*
140  * free resources
141  */
142 
143  void (*dispose) (demux_plugin_t *this_gen) ;
144 
145  /*
146  * returns DEMUX_OK or DEMUX_FINISHED
147  */
148 
149  int (*get_status) (demux_plugin_t *this_gen) ;
150 
151  /*
152  * gets stream length in miliseconds (might be estimated)
153  * may return 0 for non-seekable streams
154  */
155 
156  int (*get_stream_length) (demux_plugin_t *this_gen);
157 
158  /*
159  * return capabilities of demuxed stream
160  */
161 
162  uint32_t (*get_capabilities) (demux_plugin_t *this_gen);
163 
164  /*
165  * request optional data from input plugin.
166  */
167  int (*get_optional_data) (demux_plugin_t *this_gen, void *data, int data_type);
168 
169  /*
170  * "backwards" link to plugin class
171  */
172 
174 
182 };
183 
184 #define default_demux_plugin_dispose (void (*) (demux_plugin_t *this_gen))free
185 
186 /*
187  * possible capabilites a demux plugin can have:
188  */
189 #define DEMUX_CAP_NOCAP 0x00000000
190 
191 /*
192  * DEMUX_CAP_AUDIOLANG:
193  * DEMUX_CAP_SPULANG:
194  * demux plugin knows something about audio/spu languages,
195  * e.g. knows that audio stream #0 is english,
196  * audio stream #1 is german, ... Same bits as INPUT
197  * capabilities .
198  */
199 
200 #define DEMUX_CAP_AUDIOLANG 0x00000008
201 #define DEMUX_CAP_SPULANG 0x00000010
202 
203 /*
204  * DEMUX_CAP_CHAPTERS:
205  * The media streams provided by this plugin have an internal
206  * structure dividing it into segments usable for navigation.
207  * For those plugins, the behaviour of the skip button in UIs
208  * should be changed from "next MRL" to "next chapter" by
209  * sending XINE_EVENT_INPUT_NEXT.
210  * Same bits as INPUT capabilities.
211  */
212 
213 #define DEMUX_CAP_CHAPTERS 0x00000080
214 
215 /*
216  * DEMUX_CAP_STOP:
217  * demux plugin needs to do some cleanup work _before_ end buffers
218  * when the stream is stopped (eg flushing a pending discontinuity).
219  * This shall be done by calling
220  * demux_plugin->get_optional_data (demux_plugin, NULL, DEMUX_OPTIONAL_DATA_STOP).
221  */
222 
223 #define DEMUX_CAP_STOP 0x00000100
224 
225 /*
226  * DEMUX_CAP_VIDEO_TIME:
227  * demux plugin has video, and it can tell its current video time in milliseconds.
228  * It can do that especially after a seek by normpos and/or to nearest keyframe.
229  * This shall be done by calling
230  * demux_plugin->get_optional_data (demux_plugin, (int32_t *)(&msec), DEMUX_OPTIONAL_DATA_VIDEO_TIME).
231  */
232 
233 #define DEMUX_CAP_VIDEO_TIME 0x00000200
234 
235 
236 #define DEMUX_OPTIONAL_UNSUPPORTED 0
237 #define DEMUX_OPTIONAL_SUCCESS 1
238 
239 #define DEMUX_OPTIONAL_DATA_AUDIOLANG 2
240 #define DEMUX_OPTIONAL_DATA_SPULANG 3
241 #define DEMUX_OPTIONAL_DATA_STOP 4
242 #define DEMUX_OPTIONAL_DATA_VIDEO_TIME 5
243 
244 #endif
demux_class_s::dispose
void(* dispose)(demux_class_t *this_gen)
Definition: demux.h:87
demux_plugin_s::get_optional_data
int(* get_optional_data)(demux_plugin_t *this_gen, void *data, int data_type)
Definition: demux.h:167
demux_class_s::identifier
const char * identifier
short human readable identifier for this plugin class
Definition: demux.h:56
xine_stream_s
Definition: xine_internal.h:123
demux_class_s::description
const char * description
human readable (verbose = 1 line) description for this plugin class
Definition: demux.h:63
demux_plugin_s::XINE_PRIVATE_FIELD
struct plugin_node_s *node XINE_PRIVATE_FIELD
Pointer to the loaded plugin node.
Definition: demux.h:181
demux_plugin_s::demux_class
demux_class_t * demux_class
Definition: demux.h:173
demux_plugin_s::send_headers
void(* send_headers)(demux_plugin_t *this_gen)
Definition: demux.h:103
demux_class_s::mimetypes
const char * mimetypes
MIME types supported for this plugin.
Definition: demux.h:74
demux_plugin_s::seek
int(* seek)(demux_plugin_t *this_gen, off_t start_pos, int start_time, int playing)
Definition: demux.h:124
attributes.h
demux_plugin_s::get_status
int(* get_status)(demux_plugin_t *this_gen)
Definition: demux.h:149
input_plugin_s
Definition: input_plugin.h:90
demux_plugin_s::send_chunk
int(* send_chunk)(demux_plugin_t *this_gen)
Definition: demux.h:137
demux_plugin_s::get_stream_length
int(* get_stream_length)(demux_plugin_t *this_gen)
Definition: demux.h:156
input_plugin.h
demux_class_s::extensions
const char * extensions
space separated list of file extensions this demuxer is likely to handle
Definition: demux.h:82
demux_plugin_s
Definition: demux.h:96
buffer.h
demux_plugin_s::get_capabilities
uint32_t(* get_capabilities)(demux_plugin_t *this_gen)
Definition: demux.h:162
demux_class_s
Definition: demux.h:46
demux_class_s::text_domain
const char * text_domain
Optional non-standard catalog to use with dgettext() for description.
Definition: demux.h:68
demux_plugin_s::dispose
void(* dispose)(demux_plugin_t *this_gen)
Definition: demux.h:143
xine_internal.h
plugin_node_s
Definition: plugin_catalog.h:44
input
static int input(void)
Definition: goomsl_lex.c:1495