Steve Lhomme pushed to branch master at VideoLAN / VLC


Commits:
b0b5f693 by Alexandre Janniaux at 2024-04-15T06:34:38+00:00
input: move input_source_t to its own files

input_source_t doesn't depend on anything, so it can be moved to its own
files so that it can be included in tests without using input.c also.

- - - - -
c1b91b1e by Alexandre Janniaux at 2024-04-15T06:34:38+00:00
input: move item parse to its own file

Input item parsing depends on other components and exposes its own new
objects so separate it from the main input.c file to ease compilation
with tests.

- - - - -


9 changed files:

- src/Makefile.am
- src/input/es_out.c
- src/input/input.c
- src/input/input_internal.h
- src/input/item.c
- + src/input/parse.c
- + src/input/source.c
- + src/input/source.h
- src/meson.build


Changes:

=====================================
src/Makefile.am
=====================================
@@ -288,6 +288,7 @@ libvlccore_la_SOURCES = \
        input/info.h \
        input/meta.c \
        input/attachment.c \
+       input/parse.c \
        player/player.c \
        player/player.h \
        player/input.c \
@@ -316,6 +317,8 @@ libvlccore_la_SOURCES = \
        input/resource.h \
        input/resource.c \
        input/services_discovery.c \
+       input/source.c \
+       input/source.h \
        input/stats.c \
        input/stream.c \
        input/stream_fifo.c \


=====================================
src/input/es_out.c
=====================================
@@ -46,6 +46,7 @@
 #include <vlc_tracer.h>
 
 #include "input_internal.h"
+#include "./source.h"
 #include "../clock/input_clock.h"
 #include "../clock/clock.h"
 #include "decoder.h"


=====================================
src/input/input.c
=====================================
@@ -2790,36 +2790,6 @@ static int InputSourceInit( input_source_t *in, 
input_thread_t *p_input,
     return VLC_SUCCESS;
 }
 
-input_source_t *input_source_Hold( input_source_t *in )
-{
-    vlc_atomic_rc_inc( &in->rc );
-    return in;
-}
-
-void input_source_Release( input_source_t *in )
-{
-    if( vlc_atomic_rc_dec( &in->rc ) )
-    {
-        free( in->str_id );
-        free( in );
-    }
-}
-
-const char *input_source_GetStrId( input_source_t *in )
-{
-    return in->str_id;
-}
-
-int input_source_GetNewAutoId( input_source_t *in )
-{
-    return in->auto_id++;
-}
-
-bool input_source_IsAutoSelected( input_source_t *in )
-{
-    return in->autoselected;
-}
-
 /*****************************************************************************
  * InputSourceDestroy:
  *****************************************************************************/


=====================================
src/input/input_internal.h
=====================================
@@ -27,6 +27,7 @@
 #include <vlc_input.h>
 #include "input_interface.h"
 #include "../misc/interrupt.h"
+#include "./source.h"
 
 struct input_stats;
 
@@ -373,53 +374,6 @@ input_item_t* input_GetItem( input_thread_t * ) VLC_USED;
 
 #define INPUT_CONTROL_FIFO_SIZE    100
 
-/* input_source_t: gathers all information per input source */
-struct input_source_t
-{
-    vlc_atomic_rc_t rc;
-
-    demux_t  *p_demux; /**< Demux object (most downstream) */
-    es_out_t *p_slave_es_out; /**< Slave es out */
-
-    char *str_id;
-    int auto_id;
-    bool autoselected;
-
-    /* Title infos for that input */
-    bool         b_title_demux; /* Titles/Seekpoints provided by demux */
-    int          i_title;
-    input_title_t **title;
-
-    int i_title_offset;
-    int i_seekpoint_offset;
-
-    int i_title_start;
-    int i_title_end;
-    int i_seekpoint_start;
-    int i_seekpoint_end;
-
-    /* Properties */
-    bool b_can_pause;
-    bool b_can_pace_control;
-    bool b_can_rate_control;
-    bool b_can_stream_record;
-    bool b_rescale_ts;
-    double f_fps;
-
-    /* sub-fps handling */
-    bool b_slave_sub;
-    float sub_rate;
-
-    /* */
-    vlc_tick_t i_pts_delay;
-
-    /* Read-write protected by es_out.c lock */
-    vlc_tick_t i_normal_time;
-
-    bool       b_eof;   /* eof of demuxer */
-
-};
-
 typedef union
 {
     vlc_value_t val;
@@ -683,37 +637,6 @@ input_attachment_t *input_GetAttachment(input_thread_t 
*input, const char *name)
 
 bool input_CanPaceControl(input_thread_t *input);
 
-/**
- * Hold the input_source_t
- */
-input_source_t *input_source_Hold( input_source_t *in );
-
-/**
- * Release the input_source_t
- */
-void input_source_Release( input_source_t *in );
-
-/**
- * Returns the string identifying this input source
- *
- * @return a string id or NULL if the source is the master
- */
-const char *input_source_GetStrId( input_source_t *in );
-
-/**
- * Get a new fmt.i_id from the input source
- *
- * This auto id will be relative to this input source. It allows to have stable
- * ids across different playback instances, by not relying on the input source
- * addition order.
- */
-int input_source_GetNewAutoId( input_source_t *in );
-
-/**
- * Returns true if a given source should be auto-selected
- */
-bool input_source_IsAutoSelected( input_source_t *in );
-
 /* Bound pts_delay */
 #define INPUT_PTS_DELAY_MAX VLC_TICK_FROM_SEC(60)
 


=====================================
src/input/item.c
=====================================
@@ -1299,89 +1299,6 @@ char *input_item_CreateFilename(input_item_t *item,
     return path;
 }
 
-struct input_item_parser_id_t
-{
-    input_thread_t *input;
-    input_state_e state;
-    const input_item_parser_cbs_t *cbs;
-    void *userdata;
-};
-
-static void
-input_item_parser_InputEvent(input_thread_t *input,
-                             const struct vlc_input_event *event, void 
*parser_)
-{
-    input_item_parser_id_t *parser = parser_;
-
-    switch (event->type)
-    {
-        case INPUT_EVENT_TIMES:
-            input_item_SetDuration(input_GetItem(input), event->times.length);
-            break;
-        case INPUT_EVENT_STATE:
-            parser->state = event->state.value;
-            break;
-        case INPUT_EVENT_DEAD:
-        {
-            int status = parser->state == END_S ? VLC_SUCCESS : VLC_EGENERIC;
-            parser->cbs->on_ended(input_GetItem(input), status, 
parser->userdata);
-            break;
-        }
-        case INPUT_EVENT_SUBITEMS:
-            if (parser->cbs->on_subtree_added)
-                parser->cbs->on_subtree_added(input_GetItem(input),
-                                              event->subitems, 
parser->userdata);
-            break;
-        case INPUT_EVENT_ATTACHMENTS:
-            if (parser->cbs->on_attachments_added != NULL)
-                parser->cbs->on_attachments_added(input_GetItem(input),
-                                                  event->attachments.array,
-                                                  event->attachments.count,
-                                                  parser->userdata);
-            break;
-        default:
-            break;
-    }
-}
-
-input_item_parser_id_t *
-input_item_Parse(input_item_t *item, vlc_object_t *obj,
-                 const input_item_parser_cbs_t *cbs, void *userdata)
-{
-    assert(cbs && cbs->on_ended);
-    input_item_parser_id_t *parser = malloc(sizeof(*parser));
-    if (!parser)
-        return NULL;
-
-    parser->state = INIT_S;
-    parser->cbs = cbs;
-    parser->userdata = userdata;
-    parser->input = input_Create(obj, input_item_parser_InputEvent, parser,
-                                 item, INPUT_TYPE_PREPARSING, NULL, NULL);
-    if (!parser->input || input_Start(parser->input))
-    {
-        if (parser->input)
-            input_Close(parser->input);
-        free(parser);
-        return NULL;
-    }
-    return parser;
-}
-
-void
-input_item_parser_id_Interrupt(input_item_parser_id_t *parser)
-{
-    input_Stop(parser->input);
-}
-
-void
-input_item_parser_id_Release(input_item_parser_id_t *parser)
-{
-    input_item_parser_id_Interrupt(parser);
-    input_Close(parser->input);
-    free(parser);
-}
-
 static int rdh_compar_type(input_item_t *p1, input_item_t *p2)
 {
     if (p1->i_type != p2->i_type)


=====================================
src/input/parse.c
=====================================
@@ -0,0 +1,123 @@
+/*****************************************************************************
+ * parse.c: input_item parsing management
+ *****************************************************************************
+ * Copyright (C) 1998-2004 VLC authors and VideoLAN
+ *
+ * Authors: Clément Stenac <zorg...@videolan.org>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+#include <assert.h>
+#include <time.h>
+#include <limits.h>
+#include <ctype.h>
+
+#include <vlc_common.h>
+#include <vlc_arrays.h>
+#include <vlc_url.h>
+#include <vlc_strings.h>
+
+#include "item.h"
+#include "info.h"
+#include "input_internal.h"
+
+#include <vlc_charset.h>
+
+struct input_item_parser_id_t
+{
+    input_thread_t *input;
+    input_state_e state;
+    const input_item_parser_cbs_t *cbs;
+    void *userdata;
+};
+
+static void
+input_item_parser_InputEvent(input_thread_t *input,
+                             const struct vlc_input_event *event, void 
*parser_)
+{
+    input_item_parser_id_t *parser = parser_;
+
+    switch (event->type)
+    {
+        case INPUT_EVENT_TIMES:
+            input_item_SetDuration(input_GetItem(input), event->times.length);
+            break;
+        case INPUT_EVENT_STATE:
+            parser->state = event->state.value;
+            break;
+        case INPUT_EVENT_DEAD:
+        {
+            int status = parser->state == END_S ? VLC_SUCCESS : VLC_EGENERIC;
+            parser->cbs->on_ended(input_GetItem(input), status, 
parser->userdata);
+            break;
+        }
+        case INPUT_EVENT_SUBITEMS:
+            if (parser->cbs->on_subtree_added)
+                parser->cbs->on_subtree_added(input_GetItem(input),
+                                              event->subitems, 
parser->userdata);
+            break;
+        case INPUT_EVENT_ATTACHMENTS:
+            if (parser->cbs->on_attachments_added != NULL)
+                parser->cbs->on_attachments_added(input_GetItem(input),
+                                                  event->attachments.array,
+                                                  event->attachments.count,
+                                                  parser->userdata);
+            break;
+        default:
+            break;
+    }
+}
+
+input_item_parser_id_t *
+input_item_Parse(input_item_t *item, vlc_object_t *obj,
+                 const input_item_parser_cbs_t *cbs, void *userdata)
+{
+    assert(cbs && cbs->on_ended);
+    input_item_parser_id_t *parser = malloc(sizeof(*parser));
+    if (!parser)
+        return NULL;
+
+    parser->state = INIT_S;
+    parser->cbs = cbs;
+    parser->userdata = userdata;
+    parser->input = input_Create(obj, input_item_parser_InputEvent, parser,
+                                 item, INPUT_TYPE_PREPARSING, NULL, NULL);
+    if (!parser->input || input_Start(parser->input))
+    {
+        if (parser->input)
+            input_Close(parser->input);
+        free(parser);
+        return NULL;
+    }
+    return parser;
+}
+
+void
+input_item_parser_id_Interrupt(input_item_parser_id_t *parser)
+{
+    input_Stop(parser->input);
+}
+
+void
+input_item_parser_id_Release(input_item_parser_id_t *parser)
+{
+    input_item_parser_id_Interrupt(parser);
+    input_Close(parser->input);
+    free(parser);
+}


=====================================
src/input/source.c
=====================================
@@ -0,0 +1,59 @@
+/*****************************************************************************
+ * source.c: input thread source handling
+ *****************************************************************************
+ * Copyright (C) 1998-2007 VLC authors and VideoLAN
+ *
+ * Authors: Christophe Massiot <mass...@via.ecp.fr>
+ *          Laurent Aimar <fen...@via.ecp.fr>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "./source.h"
+
+input_source_t *input_source_Hold(input_source_t *in)
+{
+    vlc_atomic_rc_inc( &in->rc );
+    return in;
+}
+
+void input_source_Release(input_source_t *in)
+{
+    if( vlc_atomic_rc_dec( &in->rc ) )
+    {
+        free( in->str_id );
+        free( in );
+    }
+}
+
+const char *input_source_GetStrId(input_source_t *in)
+{
+    return in->str_id;
+}
+
+int input_source_GetNewAutoId(input_source_t *in)
+{
+    return in->auto_id++;
+}
+
+bool input_source_IsAutoSelected(input_source_t *in)
+{
+    return in->autoselected;
+}
+


=====================================
src/input/source.h
=====================================
@@ -0,0 +1,109 @@
+/*****************************************************************************
+ * source.h: Internal input source structures
+ *****************************************************************************
+ * Copyright (C) 1998-2006 VLC authors and VideoLAN
+ *
+ * Authors: Laurent Aimar <fen...@via.ecp.fr>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#ifndef LIBVLC_INPUT_SOURCE_H
+#define LIBVLC_INPUT_SOURCE_H 1
+
+#include <vlc_common.h>
+#include <vlc_tick.h>
+#include <vlc_atomic.h>
+
+typedef struct input_title_t input_title_t;
+
+/* input_source_t: gathers all information per input source */
+struct input_source_t
+{
+    vlc_atomic_rc_t rc;
+
+    demux_t  *p_demux; /**< Demux object (most downstream) */
+    es_out_t *p_slave_es_out; /**< Slave es out */
+
+    char *str_id;
+    int auto_id;
+    bool autoselected;
+
+    /* Title infos for that input */
+    bool         b_title_demux; /* Titles/Seekpoints provided by demux */
+    int          i_title;
+    input_title_t **title;
+
+    int i_title_offset;
+    int i_seekpoint_offset;
+
+    int i_title_start;
+    int i_title_end;
+    int i_seekpoint_start;
+    int i_seekpoint_end;
+
+    /* Properties */
+    bool b_can_pause;
+    bool b_can_pace_control;
+    bool b_can_rate_control;
+    bool b_can_stream_record;
+    bool b_rescale_ts;
+    double f_fps;
+
+    /* sub-fps handling */
+    bool b_slave_sub;
+    float sub_rate;
+
+    /* */
+    vlc_tick_t i_pts_delay;
+
+    /* Read-write protected by es_out.c lock */
+    vlc_tick_t i_normal_time;
+
+    bool       b_eof;   /* eof of demuxer */
+};
+
+/**
+ * Hold the input_source_t
+ */
+input_source_t *input_source_Hold( input_source_t *in );
+
+/**
+ * Release the input_source_t
+ */
+void input_source_Release( input_source_t *in );
+
+/**
+ * Returns the string identifying this input source
+ *
+ * @return a string id or NULL if the source is the master
+ */
+const char *input_source_GetStrId( input_source_t *in );
+
+/**
+ * Get a new fmt.i_id from the input source
+ *
+ * This auto id will be relative to this input source. It allows to have stable
+ * ids across different playback instances, by not relying on the input source
+ * addition order.
+ */
+int input_source_GetNewAutoId( input_source_t *in );
+
+/**
+ * Returns true if a given source should be auto-selected
+ */
+bool input_source_IsAutoSelected( input_source_t *in );
+
+#endif


=====================================
src/meson.build
=====================================
@@ -139,7 +139,10 @@ libvlccore_sources_base = files(
     'input/input.c',
     'input/info.h',
     'input/meta.c',
+    'input/parse.c',
     'input/attachment.c',
+    'input/source.c',
+    'input/source.h',
     'player/player.c',
     'player/player.h',
     'player/input.c',



View it on GitLab: 
https://code.videolan.org/videolan/vlc/-/compare/65b813712c929a12cdadff0fee1bb8e578224914...c1b91b1e3941395439cddd9d25ea0fd9e76c615d

-- 
View it on GitLab: 
https://code.videolan.org/videolan/vlc/-/compare/65b813712c929a12cdadff0fee1bb8e578224914...c1b91b1e3941395439cddd9d25ea0fd9e76c615d
You're receiving this email because of your account on code.videolan.org.


VideoLAN code repository instance
_______________________________________________
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to