[vlc-commits] cdda: merge directory and demux submodules

Rémi Denis-Courmont git at videolan.org
Sat Mar 31 17:02:26 CEST 2018


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Sun Mar 25 07:05:05 2018 +0300| [a5c4d380e2432278a1688aad9baf6f773e6ed42a] | committer: Rémi Denis-Courmont

cdda: merge directory and demux submodules

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=a5c4d380e2432278a1688aad9baf6f773e6ed42a
---

 modules/access/cdda.c | 76 +++++++++++++++++++++++----------------------------
 1 file changed, 34 insertions(+), 42 deletions(-)

diff --git a/modules/access/cdda.c b/modules/access/cdda.c
index 384dfb03a4..26bd2aa081 100644
--- a/modules/access/cdda.c
+++ b/modules/access/cdda.c
@@ -212,20 +212,11 @@ static int DemuxControl(demux_t *demux, int query, va_list args)
     return VLC_SUCCESS;
 }
 
-static int DemuxOpen(vlc_object_t *obj)
+static int DemuxOpen(vlc_object_t *obj, vcddev_t *dev, unsigned track)
 {
     demux_t *demux = (demux_t *)obj;
-    unsigned track;
 
     if (demux->out == NULL)
-        return VLC_EGENERIC;
-
-    vcddev_t *dev = DiscOpen(obj, demux->psz_location, demux->psz_filepath,
-                             &track);
-    if (dev == NULL)
-        return VLC_EGENERIC;
-
-    if (track == 0 /* Whole disc -> use access plugin */)
         goto error;
 
     demux_sys_t *sys = vlc_obj_malloc(obj, sizeof (*sys));
@@ -275,14 +266,6 @@ error:
     return VLC_EGENERIC;
 }
 
-static void DemuxClose(vlc_object_t *obj)
-{
-    demux_t *demux = (demux_t *)obj;
-    demux_sys_t *sys = demux->p_sys;
-
-    ioctl_Close(obj, sys->vcddev);
-}
-
 /*****************************************************************************
  * Access: local prototypes
  *****************************************************************************/
@@ -606,22 +589,10 @@ static int AccessControl(stream_t *access, int query, va_list args)
     return access_vaDirectoryControlHelper(access, query, args);
 }
 
-static int AccessOpen(vlc_object_t *obj)
+static int AccessOpen(vlc_object_t *obj, vcddev_t *dev)
 {
     stream_t *access = (stream_t *)obj;
-    unsigned track;
-
-    vcddev_t *dev = DiscOpen(obj, access->psz_location, access->psz_filepath,
-                             &track);
-    if (dev == NULL)
-        return VLC_EGENERIC;
-
-    if (track != 0 /* Only whole discs here */)
-    {
-        ioctl_Close(obj, dev);
-        return VLC_EGENERIC;
-    }
-
+    /* Only whole discs here */
     access_sys_t *sys = vlc_obj_malloc(obj, sizeof (*sys));
     if (unlikely(sys == NULL))
     {
@@ -676,11 +647,8 @@ error:
     return VLC_EGENERIC;
 }
 
-static void AccessClose(vlc_object_t *obj)
+static void AccessClose(access_sys_t *sys)
 {
-    stream_t *access = (stream_t *)obj;
-    access_sys_t *sys = access->p_sys;
-
     for (int i = 0; i < sys->cdtextc; i++)
     {
         vlc_meta_t *meta = sys->cdtextv[i];
@@ -695,7 +663,35 @@ static void AccessClose(vlc_object_t *obj)
 #endif
 
     free(sys->p_sectors);
-    ioctl_Close(obj, sys->vcddev);
+}
+
+static int Open(vlc_object_t *obj)
+{
+    stream_t *stream = (stream_t *)obj;
+    unsigned track;
+
+    vcddev_t *dev = DiscOpen(obj, stream->psz_location, stream->psz_filepath,
+                             &track);
+    if (dev == NULL)
+        return VLC_EGENERIC;
+
+    if (track == 0)
+        return AccessOpen(obj, dev);
+    else
+        return DemuxOpen(obj, dev, track);
+}
+
+static void Close(vlc_object_t *obj)
+{
+    stream_t *stream = (stream_t *)obj;
+    void *sys = stream->p_sys;
+
+    if (stream->pf_readdir != NULL)
+        AccessClose(sys);
+
+    static_assert(offsetof(demux_sys_t, vcddev) == 0, "Invalid cast");
+    static_assert(offsetof(access_sys_t, vcddev) == 0, "Invalid cast");
+    ioctl_Close(obj, *(vcddev_t **)sys);
 }
 
 /*****************************************************************************
@@ -725,7 +721,7 @@ vlc_module_begin ()
     set_capability( "access", 0 )
     set_category( CAT_INPUT )
     set_subcategory( SUBCAT_INPUT_ACCESS )
-    set_callbacks(AccessOpen, AccessClose)
+    set_callbacks(Open, Close)
 
     add_loadfile( "cd-audio", CD_DEVICE, CDAUDIO_DEV_TEXT,
                   CDAUDIO_DEV_LONGTEXT, false )
@@ -747,8 +743,4 @@ vlc_module_begin ()
 #endif
 
     add_shortcut( "cdda", "cddasimple" )
-
-    add_submodule()
-    set_capability( "access_demux", 1 )
-    set_callbacks(DemuxOpen, DemuxClose)
 vlc_module_end ()



More information about the vlc-commits mailing list