]> git.sesse.net Git - vlc/blobdiff - src/input/input_internal.h
EsIsSelected() input_ClockSetRate() input_ClockInit() input_ClockResetPCR():
[vlc] / src / input / input_internal.h
index e19f626e4b67f5f09c23d3dd17f3cc8037802105..93c67d1565561ae60779544798ab9db40623658c 100644 (file)
@@ -60,8 +60,11 @@ typedef struct
     int i_seekpoint_end;
 
     /* Properties */
-    vlc_bool_t b_can_pace_control;
     vlc_bool_t b_can_pause;
+    vlc_bool_t b_can_pace_control;
+    vlc_bool_t b_can_rate_control;
+    vlc_bool_t b_rescale_ts;
+
     vlc_bool_t b_eof;   /* eof of demuxer */
     double     f_fps;
 
@@ -75,6 +78,7 @@ struct input_thread_private_t
 {
     /* Global properties */
     vlc_bool_t  b_can_pause;
+    vlc_bool_t  b_can_rate_control;
 
     int         i_rate;
     /* */
@@ -213,6 +217,99 @@ static inline void input_ControlPush( input_thread_t *p_input,
     vlc_mutex_unlock( &p_input->p->lock_control );
 }
 
+/** Stuff moved out of vlc_input.h -- FIXME: should probably not be inline
+ * anyway. */
+static inline void input_ItemInit( vlc_object_t *p_o, input_item_t *p_i )
+{
+    memset( p_i, 0, sizeof(input_item_t) );
+    p_i->psz_name = NULL;
+    p_i->psz_uri = NULL;
+    TAB_INIT( p_i->i_es, p_i->es );
+    TAB_INIT( p_i->i_options, p_i->ppsz_options );
+    TAB_INIT( p_i->i_categories, p_i->pp_categories );
+
+    p_i->i_type = ITEM_TYPE_UNKNOWN;
+    p_i->b_fixed_name = VLC_TRUE;
+
+    p_i->p_stats = NULL;
+    p_i->p_meta = NULL;
+
+    vlc_mutex_init( p_o, &p_i->lock );
+    vlc_event_manager_init( &p_i->event_manager, p_i, p_o );
+    vlc_event_manager_register_event_type( &p_i->event_manager,
+        vlc_InputItemMetaChanged );
+    vlc_event_manager_register_event_type( &p_i->event_manager,
+        vlc_InputItemSubItemAdded );
+    vlc_event_manager_register_event_type( &p_i->event_manager,
+        vlc_InputItemDurationChanged );
+    vlc_event_manager_register_event_type( &p_i->event_manager,
+        vlc_InputItemPreparsedChanged );
+}
+
+static inline void input_item_SetPreparsed( input_item_t *p_i, vlc_bool_t preparsed )
+{
+    vlc_bool_t send_event = VLC_FALSE;
+
+    if( !p_i->p_meta )
+        p_i->p_meta = vlc_meta_New();
+
+    vlc_mutex_lock( &p_i->lock );
+    int new_status;
+    if( preparsed )
+        new_status = p_i->p_meta->i_status | ITEM_PREPARSED;
+    else
+        new_status = p_i->p_meta->i_status & ~ITEM_PREPARSED;
+    if ( p_i->p_meta->i_status != new_status )
+    {
+        p_i->p_meta->i_status = new_status;
+        send_event = VLC_TRUE;
+    }
+
+    vlc_mutex_unlock( &p_i->lock );
+
+    if ( send_event == VLC_TRUE )
+    {
+        vlc_event_t event;
+        event.type = vlc_InputItemPreparsedChanged;
+        event.u.input_item_preparsed_changed.new_status = new_status;
+        vlc_event_send( &p_i->event_manager, &event );
+    }
+}
+
+static inline void input_item_SetMetaFetched( input_item_t *p_i, vlc_bool_t metafetched )
+{
+    if( !p_i->p_meta )
+        p_i->p_meta = vlc_meta_New();
+
+    if( metafetched )
+        p_i->p_meta->i_status |= ITEM_META_FETCHED;
+    else
+        p_i->p_meta->i_status &= ~ITEM_META_FETCHED;
+}
+
+static inline void input_item_SetArtNotFound( input_item_t *p_i, vlc_bool_t notfound )
+{
+    if( !p_i->p_meta )
+        p_i->p_meta = vlc_meta_New();
+
+    if( notfound )
+        p_i->p_meta->i_status |= ITEM_ART_NOTFOUND;
+    else
+        p_i->p_meta->i_status &= ~ITEM_ART_NOTFOUND;
+}
+
+static inline void input_item_SetArtFetched( input_item_t *p_i, vlc_bool_t artfetched )
+{
+    if( !p_i->p_meta )
+        p_i->p_meta = vlc_meta_New();
+
+    if( artfetched )
+        p_i->p_meta->i_status |= ITEM_ART_FETCHED;
+    else
+        p_i->p_meta->i_status &= ~ITEM_ART_FETCHED;
+}
+
+
 /**********************************************************************
  * Item metadata
  **********************************************************************/
@@ -306,17 +403,17 @@ typedef struct
     int                     i_delta_cr_residue;
 } input_clock_t;
 
-void    input_ClockInit( input_thread_t *, input_clock_t *, vlc_bool_t b_master, int i_cr_average, int i_rate );
+void    input_ClockInit( input_clock_t *, vlc_bool_t b_master, int i_cr_average, int i_rate );
 void    input_ClockSetPCR( input_thread_t *, input_clock_t *, mtime_t );
-void    input_ClockResetPCR( input_thread_t *, input_clock_t * );
+void    input_ClockResetPCR( input_clock_t * );
 mtime_t input_ClockGetTS( input_thread_t *, input_clock_t *, mtime_t );
-void    input_ClockSetRate( input_thread_t *, input_clock_t *cl, int i_rate );
+void    input_ClockSetRate( input_clock_t *cl, int i_rate );
 
 /* Subtitles */
 char **subtitles_Detect( input_thread_t *, char* path, const char *fname );
 int subtitles_Filter( const char *);
 
-void MRLSplit( vlc_object_t *, char *, const char **, const char **, char ** );
+void MRLSplit( char *, const char **, const char **, char ** );
 
 static inline void input_ChangeState( input_thread_t *p_input, int state )
 {