X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fvlc_input.h;h=1f152eff8438e76ce1056810e7553157db736a40;hb=4372508cafbe8e7054c82d4789f39be8169a38f3;hp=650bb7b1fc650e5245fd2ec5a32ca7e4162406bf;hpb=d4e9d57d43bf2d369b7cc75178f84ecdb9b5499e;p=vlc diff --git a/include/vlc_input.h b/include/vlc_input.h index 650bb7b1fc..1f152eff84 100644 --- a/include/vlc_input.h +++ b/include/vlc_input.h @@ -248,14 +248,16 @@ static inline void vlc_input_attachment_Delete( input_attachment_t *a ) #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 +/** + * This defines private core storage for an input. */ -VLC_EXPORT(input_item_t*, input_GetItem, (input_thread_t*)); - typedef struct input_thread_private_t input_thread_private_t; +/** + * This defines an opaque input resource handler. + */ +typedef struct input_resource_t input_resource_t; + /** * Main structure representing an input thread. This structure is mostly * private. The only public fields are READ-ONLY. You must use the helpers @@ -278,7 +280,7 @@ struct input_thread_t * Record prefix string. * TODO make it configurable. */ -#define INPUT_RECORD_PREFIX "vlc-record-%Y-%m-%d-%H:%M:%S-$ N-$ p" +#define INPUT_RECORD_PREFIX "vlc-record-%Y-%m-%d-%Hh%Mm%Ss-$ N-$ p" /***************************************************************************** * Input events and variables @@ -302,6 +304,7 @@ struct input_thread_t * variable value being the one currently selected, -1 if no teletext) * - "signal-quality" * - "signal-strength" + * - "program-scrambled" (if the current program is scrambled) * - "cache" (level of data cached [0 .. 1]) * * The read-write variables are: @@ -341,12 +344,14 @@ typedef enum 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. + * It is an float used by the variable "rate" in the + * range [INPUT_RATE_DEFAULT/INPUT_RATE_MAX, INPUT_RATE_DEFAULT/INPUT_RATE_MAX] + * the default value being 1. It represents the ratio of playback speed to + * nominal speed (bigger is faster). * - * A value lower than INPUT_RATE_DEFAULT plays faster. - * A value higher than INPUT_RATE_DEFAULT plays slower. + * Internally, the rate is stored as a value in the range + * [INPUT_RATE_MIN, INPUT_RATE_MAX]. + * internal rate = INPUT_RATE_DEFAULT / rate variable */ /** @@ -374,12 +379,17 @@ typedef enum input_event_type_e INPUT_EVENT_STATE, /* b_dead is true */ INPUT_EVENT_DEAD, + /* a *user* abort has been requested */ + INPUT_EVENT_ABORT, /* "rate" has changed */ INPUT_EVENT_RATE, - /* At least one of "position" or "time" or "length" has changed */ - INPUT_EVENT_TIMES, + /* At least one of "position" or "time" */ + INPUT_EVENT_POSITION, + + /* "length" has changed */ + INPUT_EVENT_LENGTH, /* A title has been added or removed or selected. * It imply that chapter has changed (not chapter event is sent) */ @@ -387,7 +397,8 @@ typedef enum input_event_type_e /* A chapter has been added or removed or selected. */ INPUT_EVENT_CHAPTER, - /* A program has been added or removed or selected */ + /* A program ("program") has been added or removed or selected, + * or "program-scrambled" has changed.*/ INPUT_EVENT_PROGRAM, /* A ES has been added or removed or selected */ INPUT_EVENT_ES, @@ -427,22 +438,9 @@ typedef enum input_event_type_e } 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 * ) ); - -VLC_EXPORT( void, input_StopThread, ( input_thread_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 ) ); - +/** + * Input queries + */ enum input_query_e { /* input variable "position" */ @@ -456,7 +454,7 @@ enum input_query_e INPUT_GET_TIME, /* arg1= int64_t * res= */ INPUT_SET_TIME, /* arg1= int64_t res=can fail */ - /* input variable "rate" (1 is DEFAULT_RATE) */ + /* input variable "rate" (nominal is INPUT_RATE_DEFAULT) */ INPUT_GET_RATE, /* arg1= int * res= */ INPUT_SET_RATE, /* arg1= int res=can fail */ @@ -512,9 +510,37 @@ enum input_query_e INPUT_GET_VOUTS, /* arg1=vout_thread_t ***, int * res=can fail */ }; +/** @}*/ + +/***************************************************************************** + * Prototypes + *****************************************************************************/ + +#define input_Create(a,b,c,d) __input_Create(VLC_OBJECT(a),b,c,d) +VLC_EXPORT( input_thread_t *, __input_Create, ( vlc_object_t *p_parent, input_item_t *, const char *psz_log, input_resource_t * ) ); + +#define input_CreateAndStart(a,b,c) __input_CreateAndStart(VLC_OBJECT(a),b,c) +VLC_EXPORT( input_thread_t *, __input_CreateAndStart, ( vlc_object_t *p_parent, input_item_t *, const char *psz_log ) ); + +VLC_EXPORT( int, input_Start, ( input_thread_t * ) ); + +VLC_EXPORT( void, input_Stop, ( input_thread_t *, bool b_abort ) ); + +#define input_Read(a,b) __input_Read(VLC_OBJECT(a),b) +VLC_EXPORT( int, __input_Read, ( vlc_object_t *, input_item_t * ) ); + VLC_EXPORT( int, input_vaControl,( input_thread_t *, int i_query, va_list ) ); + VLC_EXPORT( int, input_Control, ( input_thread_t *, int i_query, ... ) ); +/** + * Get the input item for an input thread + * + * You have to keep a reference to the input or to the input_item_t until + * you do not need it anymore. + */ +VLC_EXPORT( input_item_t*, input_GetItem, ( input_thread_t * ) ); + /** * It will return the current state of the input. * Provided for convenience. @@ -544,16 +570,16 @@ static inline int input_AddSubtitle( input_thread_t *p_input, const char *psz_ur static inline vout_thread_t *input_GetVout( input_thread_t *p_input ) { vout_thread_t **pp_vout, *p_vout; - unsigned i_vout; + size_t i_vout; if( input_Control( p_input, INPUT_GET_VOUTS, &pp_vout, &i_vout ) ) return NULL; - for( unsigned i = 1; i < i_vout; i++ ) + for( size_t i = 1; i < i_vout; i++ ) vlc_object_release( (vlc_object_t *)(pp_vout[i]) ); p_vout = (i_vout >= 1) ? pp_vout[0] : NULL; - free (pp_vout); + free( pp_vout ); return p_vout; } @@ -573,7 +599,7 @@ static inline aout_instance_t *input_GetAout( input_thread_t *p_input ) 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 * ) ); +VLC_EXPORT( void, input_DecoderDecode,( decoder_t *, block_t *, bool b_do_pace ) ); /** * This function allows to split a MRL into access, demux and path part. @@ -589,4 +615,18 @@ VLC_EXPORT( void, input_SplitMRL, ( const char **ppsz_access, const char **ppsz_ */ VLC_EXPORT( char *, input_CreateFilename, ( vlc_object_t *, const char *psz_path, const char *psz_prefix, const char *psz_extension ) ); +/** + * This function detaches resources from a dead input. + * + * It MUST be called on a dead input (p_input->b_dead true) otherwise + * it will assert. + * It does not support concurrent calls. + */ +VLC_EXPORT(input_resource_t *, input_DetachResource, ( input_thread_t * ) ); + +/** + * This function releases the input resource. + */ +VLC_EXPORT(void, input_resource_Delete, ( input_resource_t * ) ); + #endif