New Upstream Snapshot - vdr-plugin-xineliboutput

Ready changes

Summary

Merged new upstream version: 2.2.0+git20220319 (was: 2.2.0+git20211212).

Resulting package

Built on 2022-10-21T06:20 (took 5m25s)

The resulting binary packages can be installed (if you have the apt repository enabled) by running one of:

apt install -t fresh-snapshots libxine2-xvdr-dbgsymapt install -t fresh-snapshots libxine2-xvdrapt install -t fresh-snapshots libxineliboutput-fbfe-dbgsymapt install -t fresh-snapshots libxineliboutput-fbfeapt install -t fresh-snapshots libxineliboutput-sxfe-dbgsymapt install -t fresh-snapshots libxineliboutput-sxfeapt install -t fresh-snapshots libxineliboutput-wlfe-dbgsymapt install -t fresh-snapshots libxineliboutput-wlfeapt install -t fresh-snapshots vdr-plugin-xineliboutput-dbgsymapt install -t fresh-snapshots vdr-plugin-xineliboutputapt install -t fresh-snapshots xineliboutput-fbfe-dbgsymapt install -t fresh-snapshots xineliboutput-fbfeapt install -t fresh-snapshots xineliboutput-sxfe-dbgsymapt install -t fresh-snapshots xineliboutput-sxfeapt install -t fresh-snapshots xineliboutput-wlfe-dbgsymapt install -t fresh-snapshots xineliboutput-wlfe

Lintian Result

Diff

diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 01ca3ad..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,20 +0,0 @@
-.dependencies
-config.mak
-configure.log
-features.h
-
-black_720x576.c
-nosignal_720x576.c
-vdrlogo_720x576.c
-
-*.o
-*.so
-libvdr-*.so.*
-libxineliboutput-*.so.*
-mpg2c
-vdr-fbfe
-vdr-sxfe
-vdr-wlfe
-
-po/*.mo
-po/*.pot
diff --git a/debian/changelog b/debian/changelog
index ee4c24a..e802480 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+vdr-plugin-xineliboutput (2.2.0+git20220319-1) UNRELEASED; urgency=low
+
+  * New upstream snapshot.
+
+ -- Debian Janitor <janitor@jelmer.uk>  Fri, 21 Oct 2022 06:17:38 -0000
+
 vdr-plugin-xineliboutput (2.2.0+git20211212-2) unstable; urgency=medium
 
   [ Tobias Grimm ]
diff --git a/debian/patches/cppflags.patch b/debian/patches/cppflags.patch
index f50f356..4cda742 100644
--- a/debian/patches/cppflags.patch
+++ b/debian/patches/cppflags.patch
@@ -1,6 +1,8 @@
---- a/Makefile
-+++ b/Makefile
-@@ -270,7 +270,7 @@
+Index: vdr-plugin-xineliboutput.git/Makefile
+===================================================================
+--- vdr-plugin-xineliboutput.git.orig/Makefile
++++ vdr-plugin-xineliboutput.git/Makefile
+@@ -270,7 +270,7 @@ OBJS_XINE = $(OBJS_XINEINPUTVDR) xine_po
  
  %.o: %.c
  	@echo CXX $@
@@ -9,7 +11,7 @@
  
  
  ###
-@@ -282,7 +282,7 @@
+@@ -282,7 +282,7 @@ DEPFILE = .dependencies
  $(DEPFILE): Makefile config.mak
  	@rm -f $@
  	@for i in $(OBJS:%.o=%.c) $(OBJS_SXFE:%.o=%.c) $(OBJS_FBFE:%.o=%.c) $(OBJS_WLFE:%.o=%.c) $(OBJS_XINE:%.o=%.c) ; do \
@@ -18,7 +20,7 @@
  	done
  
  -include $(DEPFILE)
-@@ -296,7 +296,7 @@
+@@ -296,7 +296,7 @@ DEFINES += -Wall
  
  mpg2c: mpg2c.c
  	@echo CCLD $@
@@ -27,7 +29,7 @@
  
  # data
  black_720x576.c: mpg2c black_720x576.mpg
-@@ -315,7 +315,7 @@
+@@ -315,7 +315,7 @@ xine_input_vdr.o: nosignal_720x576.c
  
  $(sort $(OBJS_SXFE) $(OBJS_FBFE) $(OBJS_WLFE) $(OBJS_XINE)): %.o: %.c
  	@echo CC $@
diff --git a/debian/patches/disable-po-update.patch b/debian/patches/disable-po-update.patch
index edf34d3..24d82be 100644
--- a/debian/patches/disable-po-update.patch
+++ b/debian/patches/disable-po-update.patch
@@ -1,6 +1,8 @@
---- a/Makefile
-+++ b/Makefile
-@@ -333,10 +333,10 @@
+Index: vdr-plugin-xineliboutput.git/Makefile
+===================================================================
+--- vdr-plugin-xineliboutput.git.orig/Makefile
++++ vdr-plugin-xineliboutput.git/Makefile
+@@ -333,10 +333,10 @@ $(I18Npot): $(wildcard *.c)
  	@echo GT $@
  	$(Q)xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --package-name=vdr-$(PLUGIN) --package-version=$(VERSION) --msgid-bugs-address='<phintuka@users.sourceforge.net>' -o $@ `ls $^`
  
diff --git a/tools/atomic.h b/tools/atomic.h
index 38a1416..a67156b 100644
--- a/tools/atomic.h
+++ b/tools/atomic.h
@@ -28,48 +28,47 @@ typedef struct {
 #endif
 } xl_atomic_int;
 
-static inline void _xl_atomic_init(xl_atomic_int *a, int value)
+static inline int _xl_atomic_load(xl_atomic_int *a)
 {
 #ifdef HAVE_STDATOMIC_H
-  atomic_init(&a->value, value);
+  return atomic_load(&a->value);
 #else
-  pthread_mutex_init (&a->lock, NULL);
-  _xl_atomic_store(a, value);
+  int result;
+  pthread_mutex_lock(&a->lock);
+  result = a->value;
+  pthread_mutex_unlock(&a->lock);
+  return result;
 #endif
 }
 
-static inline void _xl_atomic_destroy(xl_atomic_int *a)
+static void _xl_atomic_store(xl_atomic_int *a, int value)
 {
 #ifdef HAVE_STDATOMIC_H
-  (void)a;
+  atomic_store(&a->value, value);
 #else
-  pthread_mutex_destroy(&a->lock);
+  pthread_mutex_lock(&a->lock);
+  a->value = value;
+  pthread_mutex_unlock(&a->lock);
 #endif
 }
 
-static inline int _xl_atomic_load(xl_atomic_int *a)
+static inline void _xl_atomic_init(xl_atomic_int *a, int value)
 {
 #ifdef HAVE_STDATOMIC_H
-  return atomic_load(&a->value);
+  atomic_init(&a->value, value);
 #else
-  int result;
-  pthread_mutex_lock(&a->control_running_lock);
-  result = a->value;
-  pthread_mutex_unlock(&a->control_running_lock);
-  return result;
+  pthread_mutex_init (&a->lock, NULL);
+  _xl_atomic_store(a, value);
 #endif
 }
 
-static void _xl_atomic_store(xl_atomic_int *a, int value)
+static inline void _xl_atomic_destroy(xl_atomic_int *a)
 {
 #ifdef HAVE_STDATOMIC_H
-  atomic_store(&a->value, value);
+  (void)a;
 #else
-  pthread_mutex_lock(&a->lock);
-  a->value = value;
-  pthread_mutex_unlock(&a->lock);
+  pthread_mutex_destroy(&a->lock);
 #endif
 }
 
-
 #endif /* _XINELIBOUTPUT_ATOMIC_H_ */
diff --git a/xine/demux_xvdr.c b/xine/demux_xvdr.c
index a7e686f..c206c11 100644
--- a/xine/demux_xvdr.c
+++ b/xine/demux_xvdr.c
@@ -329,6 +329,7 @@ static void track_audio_stream_change(demux_xvdr_t *this, buf_element_t *buf)
         b->type = BUF_CONTROL_START;
         b->decoder_flags = BUF_FLAG_GAPLESS_SW;
         this->audio_fifo->put(this->audio_fifo, b);
+        LOGVERBOSE("posted BUF_CONTROL_START to audio fifo");
       }
     }
 
@@ -1347,7 +1348,20 @@ static int demux_xvdr_seek (demux_plugin_t *this_gen,
   } else {
     this->buf_flag_seek = 1;
     this->last_vpts     = INT64_C(-1);
+
+    LOGVERBOSE("demux_xvdr_seek: flushing engine...");
+
+    /* Make sure this sends DISC_STREAMSTART. */
+    int gs = xine_get_param (this->stream, XINE_PARAM_GAPLESS_SWITCH);
+    if (gs)
+      xine_set_param (this->stream, XINE_PARAM_GAPLESS_SWITCH, 0);
+    _x_demux_control_start (this->stream);
+    if (gs)
+      xine_set_param (this->stream, XINE_PARAM_GAPLESS_SWITCH, gs);
+
     _x_demux_flush_engine(this->stream);
+
+    LOGVERBOSE("demux_xvdr_seek: engine flushed");
   }
 
   return this->status;
diff --git a/xine_frontend_main.c b/xine_frontend_main.c
index 99e8076..997922c 100644
--- a/xine_frontend_main.c
+++ b/xine_frontend_main.c
@@ -291,6 +291,14 @@ int main(int argc, char *argv[])
 
   LogToSysLog = 0;
 
+  const char *lib_verbosity = getenv("LIBXINE_VERBOSITY");
+  if (lib_verbosity) {
+    int lib_loglevel = atoi(lib_verbosity);
+    if (lib_loglevel > 0 && SysLogLevel <= lib_loglevel) {
+      SysLogLevel = lib_loglevel + 1;
+    }
+  }
+
   if (strrchr(argv[0],'/'))
     exec_name = strrchr(argv[0],'/')+1;
 
diff --git a/xine_input_vdr.c b/xine_input_vdr.c
index ca22987..8d56dce 100644
--- a/xine_input_vdr.c
+++ b/xine_input_vdr.c
@@ -331,6 +331,7 @@ typedef struct vdr_input_plugin_s {
   pthread_mutex_t     lock;
   pthread_mutex_t     vdr_entry_lock;
   pthread_cond_t      engine_flushed;
+  int                 engine_flushing;
 
   /* Playback */
   uint8_t             read_timeouts;        /* number of timeouts in read_block */
@@ -715,6 +716,22 @@ static void vdr_adjust_realtime_speed(vdr_input_plugin_t *this)
    */
 
   if (scr_tuning == SCR_TUNING_PAUSED) {
+
+    /* avoid freezing if audio fifo is filling up */
+    if (this->stream->audio_fifo) {
+      int audio_free = this->stream->audio_fifo->num_free(this->stream->audio_fifo);
+      if (audio_free < 20) {
+        LOGMSG("Audio fifo almost full (%d free buffers). Starting playback.", audio_free);
+        reset_scr_tuning(this);
+        return;
+      }
+    }
+    if (!this->no_video && num_free < 10) {
+      LOGMSG("fifo almost full (%d free buffers). Starting playback.", num_free);
+      reset_scr_tuning(this);
+      return;
+    }
+
     unsigned audio_size = this->stream->audio_fifo ? this->stream->audio_fifo->size(this->stream->audio_fifo) : 0;
     unsigned scr_treshold = 100 * num_used / (num_used + num_free);
     unsigned audio_treshold = 100 * audio_size / (audio_size + 500);
@@ -1507,15 +1524,23 @@ static buf_element_t *get_buf_element(vdr_input_plugin_t *this, int size)
   buf_element_t *buf = NULL;
 
     /* limit max. buffered data */
+  if (this->no_video) {
+    fifo_buffer_t *f = this->stream->audio_fifo;
+    if (f->buffer_pool_num_free < f->buffer_pool_capacity - 2*RADIO_MAX_BUFFERS)
+      return NULL;
+    if (this->buffer_pool->buffer_pool_num_free < 20)
+      return NULL;
+  } else {
     if (this->buffer_pool->buffer_pool_num_free < (int)this->reserved_buffers)
       return NULL;
+  }
 
     /* get smallest possible buffer */
 
     if (this->input_buffer && this->mpeg_ts &&
         NULL != (buf = this->input_buffer->buffer_pool_try_alloc(this->input_buffer))) {
-      ASSERT(size < 2048+64, 0);
-    } else if (size < 8000) {
+      ASSERT(size < this->input_buffer->buffer_pool_buf_size, 0);
+    } else if (size < this->buffer_pool->buffer_pool_buf_size) {
       buf = this->buffer_pool->buffer_pool_try_alloc(this->buffer_pool);
     }
     else if(size < 0xffff) {
@@ -2103,16 +2128,22 @@ static void vdr_flush_engine(vdr_input_plugin_t *this, uint64_t discard_index)
     _x_set_fine_speed(this->stream, XINE_FINE_SPEED_NORMAL);
   }
 
+  this->engine_flushing = 1;
   pthread_mutex_unlock(&this->lock);
 
+  LOGVERBOSE("flushing engine ...");
+
   _x_demux_seek(this->stream, 0, 0, 1);
 
   pthread_mutex_lock(&this->lock);
+  this->engine_flushing = 0;
 
   reset_scr_tuning(this);
   this->stream_start = 1;
   this->mpeg_ts = 0;
   this->I_frames = this->B_frames = this->P_frames = 0;
+
+  LOGVERBOSE("engine flushed.");
 }
 
 static int set_deinterlace_method(vdr_input_plugin_t *this, const char *method_name)
@@ -4070,6 +4101,14 @@ static void data_stream_parse_control(vdr_input_plugin_t *this, char *cmd)
   vdr_plugin_parse_control(&this->iface, cmd);
 }
 
+static void _log_fifo(const char *name, fifo_buffer_t *fifo)
+{
+  int cap  = fifo->buffer_pool_capacity;
+  int used = fifo->size(fifo);
+  int free = fifo->num_free(fifo);
+  LOGDBG("%s: max %d, used %d, free %d, in-flight %d", name, cap, used, free, cap - used - free);
+}
+
 /*
  * vdr_plugin_read_block_tcp()
  *
@@ -4111,8 +4150,15 @@ static buf_element_t *vdr_plugin_read_block_tcp(vdr_input_plugin_t *this)
       this->read_buffer = read_buffer = get_buf_element_timed(this, 2048+sizeof(stream_tcp_header_t), 100);
       if (!read_buffer) {
         /* do not drop any data here ; dropping is done only at server side. */
-        if (!this->is_paused && !warnings)
-          LOGDBG("TCP: fifo buffer full");
+        if (!this->is_paused && !warnings) {
+          LOGDBG("TCP: fifo buffer full (reserved_buffers %d)", this->reserved_buffers);
+          LOGDBG("block-buffer: used %d", this->block_buffer->size(this->block_buffer));
+          _log_fifo("audio-fifo", this->stream->audio_fifo);
+          _log_fifo("video-fifo", this->stream->video_fifo);
+          pthread_mutex_lock(&this->lock);
+          reset_scr_tuning(this);
+          pthread_mutex_unlock(&this->lock);
+        }
         warnings++;
         continue; /* must call select to check fd for errors / closing */
       }
@@ -4901,7 +4947,20 @@ static int adjust_scr_speed(vdr_input_plugin_t *this)
     if(this->stream_start) {
       reset_scr_tuning(this);
       need_pause = 1;
+      if (this->engine_flushing) {
+        // XXXX this should not be possible ; stream_start skips flush engine.
+        pthread_mutex_unlock(&this->lock);
+        LOGMSG("adjust_scr_speed() aborted: stream start and engine flushing ?!?!");
+        return 0;
+      }
     } else {
+
+      if (this->engine_flushing) {
+        pthread_mutex_unlock(&this->lock);
+        LOGVERBOSE("adjust_scr_speed() aborted: engine flushing");
+        return 0;
+      }
+
       vdr_adjust_realtime_speed(this);
     }
   }

Debdiff

[The following lists of changes regard files as different if they have different names, permissions or owners.]

Files in second set of .debs but not in first

-rw-r--r--  root/root   /usr/lib/debug/.build-id/0b/36a0431ff293e682a6b244b27a5e6593fd7b9b.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/4e/3a9e6e906d62bd6f59e0a88b4260afd0f1b432.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/51/b322c159f1787c8516c1e562379594dc9a9381.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/5d/2a696270b3b9a880154fb9bb430f2deffecaa9.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/69/afd19ae51a7e6a1b7bebc4969b585e6c357c80.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/6a/0a11950d1b9fb9eabe3c48cc462094750612c8.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/84/94cd9ef3106a6a29f26416c49c65d08c56eedb.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/84/e8ebbf5bed0f7b07d5af2ba670514e39974f05.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/8b/186c73ebfbf243d0530edd2d44daa1c0051977.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/ce/b2c487bf1a0ff9915c84ef4e0d779f437239fb.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/eb/014b0f855b7f255cdcbe1e492dcc5f44bf40c2.debug

Files in first set of .debs but not in second

-rw-r--r--  root/root   /usr/lib/debug/.build-id/07/12dfd9956f4a40daa30ce1b2624f95cda9f370.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/1b/33a58a7c80c79961e61b9b95f7264a65e6ab3c.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/34/9d93661d9b3a0bb3bca9dc0d290df5583ca7a3.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/3b/8b0b267d8bfbb53f69d6bbf361a4c83d19183a.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/4e/2119bf417f10f2d7f9e7ba7d37b7d2c4a491ef.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/53/b442edfdd0826f189656ecf4bde79edbe919ea.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/65/fd72737f762df9c1e310a0c5dc854e1900c4c6.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/6f/2775e5fbcf89c9b6fccac5ff4f101a746e0e54.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/bd/a4b0f9b6e613bc479216c5457caed2fcd5a851.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/d2/b5996fbc46ac367f8d31a6de051a4b788096a2.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/e3/da7057c7e7cc3ce9073087c5e743a6022f3b70.debug

No differences were encountered between the control files of package libxine2-xvdr

Control files of package libxine2-xvdr-dbgsym: lines which differ (wdiff format)

  • Build-Ids: 0712dfd9956f4a40daa30ce1b2624f95cda9f370 3b8b0b267d8bfbb53f69d6bbf361a4c83d19183a 4e2119bf417f10f2d7f9e7ba7d37b7d2c4a491ef 6f2775e5fbcf89c9b6fccac5ff4f101a746e0e54 4e3a9e6e906d62bd6f59e0a88b4260afd0f1b432 69afd19ae51a7e6a1b7bebc4969b585e6c357c80 6a0a11950d1b9fb9eabe3c48cc462094750612c8 84e8ebbf5bed0f7b07d5af2ba670514e39974f05

No differences were encountered between the control files of package libxineliboutput-fbfe

Control files of package libxineliboutput-fbfe-dbgsym: lines which differ (wdiff format)

  • Build-Ids: 65fd72737f762df9c1e310a0c5dc854e1900c4c6 5d2a696270b3b9a880154fb9bb430f2deffecaa9

No differences were encountered between the control files of package libxineliboutput-sxfe

Control files of package libxineliboutput-sxfe-dbgsym: lines which differ (wdiff format)

  • Build-Ids: e3da7057c7e7cc3ce9073087c5e743a6022f3b70 8494cd9ef3106a6a29f26416c49c65d08c56eedb

No differences were encountered between the control files of package libxineliboutput-wlfe

Control files of package libxineliboutput-wlfe-dbgsym: lines which differ (wdiff format)

  • Build-Ids: 53b442edfdd0826f189656ecf4bde79edbe919ea 8b186c73ebfbf243d0530edd2d44daa1c0051977

No differences were encountered between the control files of package vdr-plugin-xineliboutput

Control files of package vdr-plugin-xineliboutput-dbgsym: lines which differ (wdiff format)

  • Build-Ids: 1b33a58a7c80c79961e61b9b95f7264a65e6ab3c 0b36a0431ff293e682a6b244b27a5e6593fd7b9b

No differences were encountered between the control files of package xineliboutput-fbfe

Control files of package xineliboutput-fbfe-dbgsym: lines which differ (wdiff format)

  • Build-Ids: bda4b0f9b6e613bc479216c5457caed2fcd5a851 ceb2c487bf1a0ff9915c84ef4e0d779f437239fb

No differences were encountered between the control files of package xineliboutput-sxfe

Control files of package xineliboutput-sxfe-dbgsym: lines which differ (wdiff format)

  • Build-Ids: 349d93661d9b3a0bb3bca9dc0d290df5583ca7a3 51b322c159f1787c8516c1e562379594dc9a9381

No differences were encountered between the control files of package xineliboutput-wlfe

Control files of package xineliboutput-wlfe-dbgsym: lines which differ (wdiff format)

  • Build-Ids: d2b5996fbc46ac367f8d31a6de051a4b788096a2 eb014b0f855b7f255cdcbe1e492dcc5f44bf40c2

More details

Full run details