]> git.sesse.net Git - vlc/commitdiff
RTP: notify demux thread when RTP flow is dead
authorRémi Denis-Courmont <rdenis@simphalempin.com>
Thu, 27 Nov 2008 16:43:15 +0000 (18:43 +0200)
committerRémi Denis-Courmont <rdenis@simphalempin.com>
Thu, 27 Nov 2008 17:12:52 +0000 (19:12 +0200)
modules/access/rtp/input.c
modules/access/rtp/rtp.c
modules/access/rtp/rtp.h

index 995c7ba3737881a9459fd0f5b92b3648dbf8eba0..dc1110b149fa70fd2a7035e6220eb7d644af1217 100644 (file)
@@ -160,30 +160,32 @@ void *rtp_thread (void *data)
     demux_t *demux = data;
     demux_sys_t *p_sys = demux->p_sys;
 
-    for (;;)
+    do
     {
         block_t *block = rtp_recv (demux);
-        if (block == NULL)
-            break; /* fatal error: abort */
 
         vlc_mutex_lock (&p_sys->lock);
-
-        /* Autodetect payload type, _before_ rtp_queue() */
-        if (p_sys->autodetect)
+        if (block == NULL)
+            p_sys->dead = true; /* Fatal error: abort */
+        else
         {
-            if (rtp_autodetect (demux, p_sys->session, block))
-            {
-                block_Release (block);
-                continue;
+            if (p_sys->autodetect)
+            {   /* Autodetect payload type, _before_ rtp_queue() */
+                if (rtp_autodetect (demux, p_sys->session, block))
+                {
+                    vlc_mutex_unlock (&p_sys->lock);
+                    block_Release (block);
+                    continue;
+                }
+                p_sys->autodetect = false;
             }
-            p_sys->autodetect = false;
+            rtp_queue (demux, p_sys->session, block);
         }
-
-        rtp_queue (demux, p_sys->session, block);
         vlc_cond_signal (&p_sys->wait);
         vlc_mutex_unlock (&p_sys->lock);
     }
-    /* TODO: return 0 from Demux */
+    while (!p_sys->dead);
+
     return NULL;
 }
 
index 0fb398feb3fc47f5298772d5147269cd60523aa3..c3b4bd07a1885eb6e884aa8dc800cf1b80b5d1d8 100644 (file)
@@ -237,6 +237,7 @@ static int Open (vlc_object_t *obj)
     p_sys->max_misorder = var_CreateGetInteger (obj, "rtp-max-misorder");
     p_sys->autodetect   = true;
     p_sys->framed_rtp   = (tp == IPPROTO_TCP);
+    p_sys->dead         = false;
 
     demux->pf_demux   = Demux;
     demux->pf_control = Control;
index c27c2895ab7bd5f2fdb1cfeed4876b7444510fac..98616641c133c9028ff81b925d19c09b5c62ea25 100644 (file)
@@ -63,10 +63,11 @@ struct demux_sys_t
 
     unsigned      caching;
     unsigned      timeout;
-    uint8_t       max_src;
-    uint16_t      max_dropout;
-    uint16_t      max_misorder;
-    bool          autodetect;
-    bool          framed_rtp;
+    uint16_t      max_dropout; /**< Max packet forward misordering */
+    uint16_t      max_misorder; /**< Max packet backward misordering */
+    uint8_t       max_src; /**< Max simultaneous RTP sources */
+    bool          autodetect; /**< Payload format autodetection */
+    bool          framed_rtp; /**< Framed RTP packets over TCP */
+    bool          dead; /**< End of stream */
 };