📄 vlc_input.h
字号:
if( !a ) return NULL; a->psz_name = strdup( psz_name ? psz_name : "" ); a->psz_mime = strdup( psz_mime ? psz_mime : "" ); a->psz_description = strdup( psz_description ? psz_description : "" ); a->i_data = i_data; a->p_data = NULL; if( i_data > 0 ) { a->p_data = malloc( i_data ); if( a->p_data && p_data ) memcpy( a->p_data, p_data, i_data ); } return a;}static inline input_attachment_t *vlc_input_attachment_Duplicate( const input_attachment_t *a ){ return vlc_input_attachment_New( a->psz_name, a->psz_mime, a->psz_description, a->p_data, a->i_data );}static inline void vlc_input_attachment_Delete( input_attachment_t *a ){ if( !a ) return; free( a->psz_name ); free( a->psz_mime ); free( a->psz_description ); free( a->p_data ); free( a );}/***************************************************************************** * input defines/constants. *****************************************************************************//* i_update field of access_t/demux_t */#define INPUT_UPDATE_NONE 0x0000#define INPUT_UPDATE_SIZE 0x0001#define INPUT_UPDATE_TITLE 0x0010#define INPUT_UPDATE_SEEKPOINT 0x0020#define INPUT_UPDATE_META 0x0040#define INPUT_UPDATE_SIGNAL 0x0080/** Get the input item for an input thread * FIXME see src/input/item.c but is is unsafe unless * you hold p_input */VLC_EXPORT(input_item_t*, input_GetItem, (input_thread_t*));typedef struct input_thread_private_t input_thread_private_t;/** * Main structure representing an input thread. This structure is mostly * private. The only public fields are READ-ONLY. You must use the helpers * to modify them */struct input_thread_t{ VLC_COMMON_MEMBERS; bool b_eof; bool b_preparsing; bool b_dead; int i_state; bool b_can_pace_control; int64_t i_time; /* Current time */ /* Internal caching common to all inputs */ mtime_t i_pts_delay; /* All other data is input_thread is PRIVATE. You can't access it * outside of src/input */ input_thread_private_t *p;};/** * Record prefix string. * TODO make it configurable. */#define INPUT_RECORD_PREFIX "vlc-record-%Y-%m-%d-%H:%M:%S-$ N-$ p"/***************************************************************************** * Input events and variables *****************************************************************************//** * \defgroup inputvariable Input variables * * The input provides multiples variable you can write to and/or read from. * * TODO complete the documentation. * The read only variables are: * - "length" * - "can-seek" (if you can seek, it doesn't say if 'bar display' has be shown * or not, for that check position != 0.0) * - "can-pause" * - "can-rate" * - "can-rewind" * - "can-record" (if a stream can be recorded while playing) * - "teletext-es" to get the index of spu track that is teletext -1 if no teletext) * - "signal-quality" * - "signal-strength" * - "cache" (level of data cached [0 .. 1]) * * The read-write variables are: * - state (\see input_state_e) * - rate, rate-slower, rate-faster * - position, position-offset * - time, time-offset * - title, next-title, prev-title * - chapter, next-chapter, next-chapter-prev * - program, audio-es, video-es, spu-es * - audio-delay, spu-delay * - bookmark (bookmark list) * - record * - frame-next * - navigation (list of "title %2i") * - "title %2i" * * The variable used for event is * - intf-event (\see input_event_type_e) *//** * Input state * * This enum is used by the variable "state" */typedef enum input_state_e{ INIT_S = 0, OPENING_S, PLAYING_S, PAUSE_S, END_S, ERROR_S,} input_state_e;/** * Input rate. * * It is an integer used by the variable "rate" in the * range [INPUT_RATE_MIN, INPUT_RATE_MAX] the default value * being INPUT_RATE_DEFAULT. * * A value lower than INPUT_RATE_DEFAULT plays faster. * A value higher than INPUT_RATE_DEFAULT plays slower. *//** * Default rate value */#define INPUT_RATE_DEFAULT 1000/** * Minimal rate value */#define INPUT_RATE_MIN 32 /* Up to 32/1 *//** * Maximal rate value */#define INPUT_RATE_MAX 32000 /* Up to 1/32 *//** * Input events * * You can catch input event by adding a callback on the variable "intf-event". * This variable is an integer that will hold a input_event_type_e value. */typedef enum input_event_type_e{ /* "state" has changed */ INPUT_EVENT_STATE, /* "rate" has changed */ INPUT_EVENT_RATE, /* At least one of "position" or "time" or "length" has changed */ INPUT_EVENT_TIMES, /* A title has been added or removed or selected. * It imply that chapter has changed (not chapter event is sent) */ INPUT_EVENT_TITLE, /* A chapter has been added or removed or selected. */ INPUT_EVENT_CHAPTER, /* A program has been added or removed or selected */ INPUT_EVENT_PROGRAM, /* A ES has been added or removed or selected */ INPUT_EVENT_ES, /* "teletext-es" has changed */ INPUT_EVENT_TELETEXT, /* "record" has changed */ INPUT_EVENT_RECORD, /* A vout has been created/deleted by *the input* */ INPUT_EVENT_VOUT, /* input_item_t media has changed */ INPUT_EVENT_ITEM_META, /* input_item_t info has changed */ INPUT_EVENT_ITEM_INFO, /* input_item_t name has changed */ INPUT_EVENT_ITEM_NAME, /* Input statistics have been updated */ INPUT_EVENT_STATISTICS, /* At least one of "signal-quality" or "signal-strength" has changed */ INPUT_EVENT_SIGNAL, /* "audio-delay" has changed */ INPUT_EVENT_AUDIO_DELAY, /* "spu-delay" has changed */ INPUT_EVENT_SUBTITLE_DELAY, /* "bookmark" has changed */ INPUT_EVENT_BOOKMARK, /* cache" has changed */ INPUT_EVENT_CACHE,} input_event_type_e;/** @}*//***************************************************************************** * Prototypes *****************************************************************************//* input_CreateThread * Release the returned input_thread_t using vlc_object_release() */#define input_CreateThread(a,b) __input_CreateThread(VLC_OBJECT(a),b)VLC_EXPORT( input_thread_t *, __input_CreateThread, ( vlc_object_t *, input_item_t * ) );#define input_Preparse(a,b) __input_Preparse(VLC_OBJECT(a),b)VLC_EXPORT( int, __input_Preparse, ( vlc_object_t *, input_item_t * ) );#define input_Read(a,b,c) __input_Read(VLC_OBJECT(a),b, c)VLC_EXPORT( int, __input_Read, ( vlc_object_t *, input_item_t *, bool ) );VLC_EXPORT( void, input_StopThread, ( input_thread_t * ) );enum input_query_e{ /* input variable "position" */ INPUT_GET_POSITION, /* arg1= double * res= */ INPUT_SET_POSITION, /* arg1= double res=can fail */ /* input variable "length" */ INPUT_GET_LENGTH, /* arg1= int64_t * res=can fail */ /* input variable "time" */ INPUT_GET_TIME, /* arg1= int64_t * res= */ INPUT_SET_TIME, /* arg1= int64_t res=can fail */ /* input variable "rate" (1 is DEFAULT_RATE) */ INPUT_GET_RATE, /* arg1= int * res= */ INPUT_SET_RATE, /* arg1= int res=can fail */ /* input variable "state" */ INPUT_GET_STATE, /* arg1= int * res= */ INPUT_SET_STATE, /* arg1= int res=can fail */ /* input variable "audio-delay" and "sub-delay" */ INPUT_GET_AUDIO_DELAY, /* arg1 = int* res=can fail */ INPUT_SET_AUDIO_DELAY, /* arg1 = int res=can fail */ INPUT_GET_SPU_DELAY, /* arg1 = int* res=can fail */ INPUT_SET_SPU_DELAY, /* arg1 = int res=can fail */ /* Meta datas */ INPUT_ADD_INFO, /* arg1= char* arg2= char* arg3=... res=can fail */ INPUT_GET_INFO, /* arg1= char* arg2= char* arg3= char** res=can fail */ INPUT_DEL_INFO, /* arg1= char* arg2= char* res=can fail */ INPUT_SET_NAME, /* arg1= char* res=can fail */ /* Input config options */ INPUT_ADD_OPTION, /* arg1= char * arg2= char * res=can fail*/ /* Input properties */ INPUT_GET_VIDEO_FPS, /* arg1= double * res=can fail */ /* bookmarks */ INPUT_GET_BOOKMARK, /* arg1= seekpoint_t * res=can fail */ INPUT_GET_BOOKMARKS, /* arg1= seekpoint_t *** arg2= int * res=can fail */ INPUT_CLEAR_BOOKMARKS, /* res=can fail */ INPUT_ADD_BOOKMARK, /* arg1= seekpoint_t * res=can fail */ INPUT_CHANGE_BOOKMARK, /* arg1= seekpoint_t * arg2= int * res=can fail */ INPUT_DEL_BOOKMARK, /* arg1= seekpoint_t * res=can fail */ INPUT_SET_BOOKMARK, /* arg1= int res=can fail */ /* Attachments */ INPUT_GET_ATTACHMENTS, /* arg1=input_attachment_t***, arg2=int* res=can fail */ INPUT_GET_ATTACHMENT, /* arg1=input_attachment_t**, arg2=char* res=can fail */ /* On the fly input slave */ INPUT_ADD_SLAVE, /* arg1= const char * */ INPUT_ADD_SUBTITLE, /* arg1= const char *, arg2=bool b_check_extension */ /* On the fly record while playing */ INPUT_SET_RECORD_STATE, /* arg1=bool res=can fail */ INPUT_GET_RECORD_STATE, /* arg1=bool* res=can fail */ /* ES */ INPUT_RESTART_ES, /* arg1=int (-AUDIO/VIDEO/SPU_ES for the whole category) */};VLC_EXPORT( int, input_vaControl,( input_thread_t *, int i_query, va_list ) );VLC_EXPORT( int, input_Control, ( input_thread_t *, int i_query, ... ) );/** * It will return the current state of the input. * Provided for convenience. */static inline input_state_e input_GetState( input_thread_t * p_input ){ input_state_e state = INIT_S; input_Control( p_input, INPUT_GET_STATE, &state ); return state;}/** * It will add a new subtitle source to the input. * Provided for convenience. */static inline int input_AddSubtitle( input_thread_t *p_input, const char *psz_url, bool b_check_extension ){ return input_Control( p_input, INPUT_ADD_SUBTITLE, psz_url, b_check_extension );}/* */typedef struct input_clock_t input_clock_t;VLC_EXPORT( decoder_t *, input_DecoderNew, ( input_thread_t *, es_format_t *, input_clock_t *, sout_instance_t * ) );VLC_EXPORT( void, input_DecoderDelete, ( decoder_t * ) );VLC_EXPORT( void, input_DecoderDecode,( decoder_t *, block_t * ) );/** * This function allows to split a MRL into access, demux and path part. * * You should not write into access and demux string as they may not point into * the provided buffer. * The buffer provided by psz_dup will be modified. */VLC_EXPORT( void, input_SplitMRL, ( const char **ppsz_access, const char **ppsz_demux, char **ppsz_path, char *psz_dup ) );/** * This function creates a sane filename path. */VLC_EXPORT( char *, input_CreateFilename, ( vlc_object_t *, const char *psz_path, const char *psz_prefix, const char *psz_extension ) );#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -