vlc_demux.h 5.14 KB
 Laurent Aimar committed Jun 22, 2004 1 2 3 4 ``````/***************************************************************************** * vlc_demux.h ***************************************************************************** * Copyright (C) 1999-2004 VideoLAN `````` Laurent Aimar committed Aug 25, 2004 5 `````` * \$Id\$ `````` Laurent Aimar committed Jun 22, 2004 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 `````` * * Authors: Laurent Aimar * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. *****************************************************************************/ #ifndef _VLC_DEMUX_H #define _VLC_DEMUX_H 1 /** * \defgroup demux Demux * @{ */ struct demux_t { VLC_COMMON_MEMBERS /* Module properties */ module_t *p_module; /* eg informative but needed (we can have access+demux) */ char *psz_access; char *psz_demux; char *psz_path; /* input stream */ stream_t *s; /* NULL in case of a access+demux in one */ /* es output */ es_out_t *out; /* ou p_es_out */ /* set by demuxer */ int (*pf_demux) ( demux_t * ); /* demux one frame only */ int (*pf_control)( demux_t *, int i_query, va_list args); /* Demux has to maintain them uptodate * when it is responsible of seekpoint/title */ struct { unsigned int i_update; /* Demux sets them on change, Input removes them once take into account*/ /* Seekpoint/Title at demux level */ int i_title; /* idem, start from 0 (could be menu) */ int i_seekpoint; /* idem, start from 0 */ } info; demux_sys_t *p_sys; }; enum demux_query_e { /* I. Common queries to access_demux and demux */ /* POSITION double between 0.0 and 1.0 */ DEMUX_GET_POSITION, /* arg1= double * res= */ DEMUX_SET_POSITION, /* arg1= double res=can fail */ /* LENGTH/TIME in microsecond, 0 if unknown */ DEMUX_GET_LENGTH, /* arg1= int64_t * res= */ DEMUX_GET_TIME, /* arg1= int64_t * res= */ DEMUX_SET_TIME, /* arg1= int64_t res=can fail */ /* TITLE_INFO only if more than 1 title or 1 chapter */ DEMUX_GET_TITLE_INFO, /* arg1=input_title_t*** arg2=int* can fail */ /* TITLE/SEEKPOINT, only when TITLE_INFO succeed */ DEMUX_SET_TITLE, /* arg1= int can fail */ DEMUX_SET_SEEKPOINT, /* arg1= int can fail */ `````` Laurent Aimar committed Aug 25, 2004 86 87 88 89 90 91 `````` /* DEMUX_SET_GROUP only a hit for demuxer (mainly DVB) to allow not * reading everything (you should not use this to call es_out_Control) * if you don't know what to do with it, just IGNORE it, it is safe(r) * -1 means all group, 0 default group (first es added) */ DEMUX_SET_GROUP, /* arg1= int can fail */ `````` Laurent Aimar committed Jun 22, 2004 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 `````` /* Ask the demux to demux until the given date at the next pf_demux call * but not more (and not less, at the precision avaiable of course). * XXX: not mandatory (except for subtitle demux) but I will help a lot * for multi-input */ DEMUX_SET_NEXT_DEMUX_TIME, /* arg1= int64_t * can fail */ /* FPS for correct subtitles handling */ DEMUX_GET_FPS, /* arg1= float * res=can fail */ /* Meta data */ DEMUX_GET_META, /* arg1= vlc_meta_t ** res=can fail */ /* II. Specific access_demux queries */ DEMUX_CAN_PAUSE, /* arg1= vlc_bool_t* cannot fail */ DEMUX_CAN_CONTROL_PACE, /* arg1= vlc_bool_t* cannot fail */ DEMUX_GET_PTS_DELAY, /* arg1= int64_t* cannot fail */ DEMUX_SET_PAUSE_STATE, /* arg1= vlc_bool_t can fail */ }; /* stream_t *s could be null and then it mean a access+demux in one */ #define demux2_New( a, b, c, d, e, f ) __demux2_New(VLC_OBJECT(a),b,c,d,e,f) VLC_EXPORT( demux_t *, __demux2_New, ( vlc_object_t *p_obj, char *psz_access, char *psz_demux, char *psz_path, stream_t *s, es_out_t *out ) ); VLC_EXPORT( void, demux2_Delete, ( demux_t * ) ); VLC_EXPORT( int, demux2_vaControlHelper, ( stream_t *, int64_t i_start, int64_t i_end, int i_bitrate, int i_align, int i_query, va_list args ) ); static inline int demux2_Demux( demux_t *p_demux ) { return p_demux->pf_demux( p_demux ); } static inline int demux2_vaControl( demux_t *p_demux, int i_query, va_list args ) { return p_demux->pf_control( p_demux, i_query, args ); } static inline int demux2_Control( demux_t *p_demux, int i_query, ... ) { va_list args; int i_result; va_start( args, i_query ); i_result = demux2_vaControl( p_demux, i_query, args ); va_end( args ); return i_result; } /** * @} */ #endif``````