]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
mpegts input: move mm_input_queue push to mpegts_input_queue_packets()
authorJaroslav Kysela <perex@perex.cz>
Thu, 29 Mar 2018 12:05:46 +0000 (14:05 +0200)
committerJaroslav Kysela <perex@perex.cz>
Thu, 29 Mar 2018 12:05:46 +0000 (14:05 +0200)
src/input/mpegts/mpegts_input.c

index 96ed0a6cd14143cdd5c1c1c120339dba8af65d65..5464dcb4347c0d4eb1fa5c6ff8ec2a8f4d16e653 100644 (file)
@@ -1156,6 +1156,32 @@ ts_sync_count ( const uint8_t *tsb, int len )
   return tsb - start;
 }
 
+static void
+mpegts_input_queue_packets
+  ( mpegts_mux_instance_t *mmi, mpegts_packet_t *mp )
+{
+  mpegts_input_t *mi = mmi->mmi_input;
+  int len = mp->mp_len;
+
+  pthread_mutex_lock(&mi->mi_input_lock);
+  if (mmi->mmi_mux->mm_active == mmi) {
+    if (mi->mi_input_queue_size < 50*1024*1024) {
+      mi->mi_input_queue_size += len;
+      memoryinfo_alloc(&mpegts_input_queue_memoryinfo, sizeof(mpegts_packet_t) + len);
+      mpegts_mux_grab(mp->mp_mux);
+      TAILQ_INSERT_TAIL(&mi->mi_input_queue, mp, mp_link);
+      tvh_cond_signal(&mi->mi_input_cond, 0);
+    } else {
+      if (tvhlog_limit(&mi->mi_input_queue_loglimit, 10))
+        tvhwarn(LS_MPEGTS, "too much queued input data (over 50MB) for %s, discarding new", mi->mi_name);
+      free(mp);
+    }
+  } else {
+    free(mp);
+  }
+  pthread_mutex_unlock(&mi->mi_input_lock);
+}
+
 void
 mpegts_input_recv_packets
   ( mpegts_mux_instance_t *mmi, sbuf_t *sb,
@@ -1244,23 +1270,7 @@ retry:
       goto end;
     }
 
-    pthread_mutex_lock(&mi->mi_input_lock);
-    if (mmi->mmi_mux->mm_active == mmi) {
-      if (mi->mi_input_queue_size < 50*1024*1024) {
-        mi->mi_input_queue_size += len2;
-        memoryinfo_alloc(&mpegts_input_queue_memoryinfo, sizeof(mpegts_packet_t) + len2);
-        mpegts_mux_grab(mp->mp_mux);
-        TAILQ_INSERT_TAIL(&mi->mi_input_queue, mp, mp_link);
-        tvh_cond_signal(&mi->mi_input_cond, 0);
-      } else {
-        if (tvhlog_limit(&mi->mi_input_queue_loglimit, 10))
-          tvhwarn(LS_MPEGTS, "too much queued input data (over 50MB) for %s, discarding new", mi->mi_name);
-        free(mp);
-      }
-    } else {
-      free(mp);
-    }
-    pthread_mutex_unlock(&mi->mi_input_lock);
+    mpegts_input_queue_packets(mmi, mp);
   }
 
   /* Adjust buffer */