vlc_access.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef VLC_ACCESS_H
00025 #define VLC_ACCESS_H 1
00026
00027
00028
00029
00030
00031
00032 #include <vlc_block.h>
00033
00034
00035
00036
00037
00038
00039 enum access_query_e
00040 {
00041
00042 ACCESS_CAN_SEEK,
00043 ACCESS_CAN_FASTSEEK,
00044 ACCESS_CAN_PAUSE,
00045 ACCESS_CAN_CONTROL_PACE,
00046
00047
00048 ACCESS_GET_PTS_DELAY = 0x101,
00049
00050 ACCESS_GET_TITLE_INFO,
00051
00052 ACCESS_GET_META,
00053
00054
00055 ACCESS_GET_CONTENT_TYPE,
00056
00057
00058 ACCESS_GET_SIGNAL,
00059
00060
00061 ACCESS_SET_PAUSE_STATE = 0x200,
00062
00063
00064 ACCESS_SET_TITLE,
00065 ACCESS_SET_SEEKPOINT,
00066
00067
00068
00069 ACCESS_SET_PRIVATE_ID_STATE = 0x1000,
00070 ACCESS_SET_PRIVATE_ID_CA,
00071 ACCESS_GET_PRIVATE_ID_STATE,
00072 };
00073
00074 struct access_t
00075 {
00076 VLC_COMMON_MEMBERS
00077
00078
00079 module_t *p_module;
00080
00081
00082 char *psz_access;
00083 char *psz_location;
00084 char *psz_filepath;
00085
00086
00087
00088
00089 char *psz_demux;
00090
00091
00092
00093 ssize_t (*pf_read) ( access_t *, uint8_t *, size_t );
00094 block_t *(*pf_block)( access_t * );
00095
00096
00097
00098 int (*pf_seek) ( access_t *, uint64_t );
00099
00100
00101
00102 int (*pf_control)( access_t *, int i_query, va_list args);
00103
00104
00105 struct
00106 {
00107 unsigned int i_update;
00108
00109
00110 uint64_t i_size;
00111 uint64_t i_pos;
00112 bool b_eof;
00113
00114 int i_title;
00115 int i_seekpoint;
00116 } info;
00117 access_sys_t *p_sys;
00118
00119
00120 input_thread_t *p_input;
00121 };
00122
00123 static inline int access_vaControl( access_t *p_access, int i_query, va_list args )
00124 {
00125 if( !p_access ) return VLC_EGENERIC;
00126 return p_access->pf_control( p_access, i_query, args );
00127 }
00128
00129 static inline int access_Control( access_t *p_access, int i_query, ... )
00130 {
00131 va_list args;
00132 int i_result;
00133
00134 va_start( args, i_query );
00135 i_result = access_vaControl( p_access, i_query, args );
00136 va_end( args );
00137 return i_result;
00138 }
00139
00140 static inline void access_InitFields( access_t *p_a )
00141 {
00142 p_a->info.i_update = 0;
00143 p_a->info.i_size = 0;
00144 p_a->info.i_pos = 0;
00145 p_a->info.b_eof = false;
00146 p_a->info.i_title = 0;
00147 p_a->info.i_seekpoint = 0;
00148 }
00149
00150
00151
00152
00153
00154 VLC_EXPORT( input_thread_t *, access_GetParentInput, ( access_t *p_access ) LIBVLC_USED );
00155
00156 #define ACCESS_SET_CALLBACKS( read, block, control, seek ) \
00157 p_access->pf_read = read; \
00158 p_access->pf_block = block; \
00159 p_access->pf_control = control; \
00160 p_access->pf_seek = seek;
00161
00162 #define STANDARD_READ_ACCESS_INIT \
00163 access_InitFields( p_access ); \
00164 ACCESS_SET_CALLBACKS( Read, NULL, Control, Seek ); \
00165 p_sys = p_access->p_sys = calloc( 1, sizeof( access_sys_t )); \
00166 if( !p_sys ) return VLC_ENOMEM;
00167
00168 #define STANDARD_BLOCK_ACCESS_INIT \
00169 access_InitFields( p_access ); \
00170 ACCESS_SET_CALLBACKS( NULL, Block, Control, Seek ); \
00171 p_sys = p_access->p_sys = calloc( 1, sizeof( access_sys_t ) ); \
00172 if( !p_sys ) return VLC_ENOMEM;
00173
00174
00175
00176
00177
00178 #endif