Das neue squeezebox-Plugin enthält ja einen Patch für softhddevice:
--- vdr-plugin-softhddevice-0.6.1rc1.git20140124.1219.orig/softhddevice.cpp
+++ vdr-plugin-softhddevice-0.6.1rc1.git20140124.1219/softhddevice.cpp
@@ -2208,7 +2208,10 @@ bool cSoftHdDevice::SetPlayMode(ePlayMod
break;
case pmAudioOnly:
case pmAudioOnlyBlack:
- break;
+ dsyslog("[softhddev] play mode external audio\n");
+ Suspend(0, 1, 0);
+ SuspendMode = SUSPEND_EXTERNAL;
+ return true;
case pmVideoOnly:
break;
case pmNone:
Alles anzeigen
in yavdr testing ist der schon drin. Seitdem stürzt vdr mit einem segfault ab, wenn ich im mp3-Plugin (das den gleichen Playmode benutzt) skippe:
Im backtrace sieht das so aus:
#0 0x00007fdddced7090 in RingBufferUsedBytes () from /usr/lib/vdr/plugins/libvdr-softhddevice.so.2.0.0
(gdb) bt
#0 0x00007fdddced7090 in RingBufferUsedBytes () from /usr/lib/vdr/plugins/libvdr-softhddevice.so.2.0.0
#1 0x00007fdddced2bda in AudioFlushBuffers () from /usr/lib/vdr/plugins/libvdr-softhddevice.so.2.0.0
#2 0x00007fdddcec4cef in Clear () from /usr/lib/vdr/plugins/libvdr-softhddevice.so.2.0.0
#3 0x00007fddd888734e in cMP3Player::Empty() () from /usr/lib/vdr/plugins/libvdr-mp3.so.2.0.0
#4 0x00007fddd8888713 in cMP3Player::SkipSeconds(int) () from /usr/lib/vdr/plugins/libvdr-mp3.so.2.0.0
#5 0x00007fddd887b729 in cMP3Control::ProcessKey(eKeys) () from /usr/lib/vdr/plugins/libvdr-mp3.so.2.0.0
#6 0x000000000046dcd6 in main ()
Drückt man Pause und löst sie wieder, ist es ähnlich:
#0 0x00007fe275bf9090 in RingBufferUsedBytes () from /usr/lib/vdr/plugins/libvdr-softhddevice.so.2.0.0
(gdb) bt
#0 0x00007fe275bf9090 in RingBufferUsedBytes () from /usr/lib/vdr/plugins/libvdr-softhddevice.so.2.0.0
#1 0x00007fe275bf4bda in AudioFlushBuffers () from /usr/lib/vdr/plugins/libvdr-softhddevice.so.2.0.0
#2 0x00007fe275be6cef in Clear () from /usr/lib/vdr/plugins/libvdr-softhddevice.so.2.0.0
#3 0x00007fe2715a934e in cMP3Player::Empty() () from /usr/lib/vdr/plugins/libvdr-mp3.so.2.0.0
#4 0x00007fe2715aa558 in cMP3Player::PrevCheck() () from /usr/lib/vdr/plugins/libvdr-mp3.so.2.0.0
#5 0x00007fe27159d7e3 in cMP3Control::ProcessKey(eKeys) () from /usr/lib/vdr/plugins/libvdr-mp3.so.2.0.0
#6 0x000000000046dcd6 in main ()
Auslöser ist wohl AudioFlushBuffers, das durch Clear ausgelöst wird. Clear wiederum ruft das mp3-Plugin über DeviceClear auf.
Im Moment bin ich wohl der einzige, der das nachstellen kann, da ich eine für alsa-Ausgabe gepatchte Version des mp3-Plugins in Verbindung mit Ausgabe über plug:dmix verwende. Ohne den squeezebox-Patch klappt das auch prima.
Das Problem tritt auch mit deaktiviertem CloseOnSwitch auf. Auch die Option -w alsa-no-close-open ändert nichts.
Auf meinem Test-VDR ist der backtrace ausagekräftiger:
#0 RingBufferUsedBytes (rb=0x0) at ringbuffer.c:337
#1 0x00007f75dd600bfa in AudioFlushBuffers () at audio.c:2457
#2 0x00007f75dd5f1f4a in Clear () at softhddev.c:2594 --> Aufruf von AudioFlushBuffers
#3 0x00007f75d32a0e9e in DeviceClear (this=<optimized out>) at /home/martin/vdr-2.1.3/include/vdr/player.h:31
#4 cMP3Player::Empty (this=0x1d93400) at player-mp3.c:2045
#5 0x00007f75d32a21d3 in cMP3Player::SkipSeconds (this=0x1d93400, secs=3) at player-mp3.c:2131
#6 0x00007f75d3297646 in ProcessKey (Key=kRight, this=0x1d93040) at mp3.c:685
#7 cMP3Control::ProcessKey (this=0x1d93040, Key=kRight) at mp3.c:641
#8 0x000000000046ecc2 in main (argc=<optimized out>, argv=<optimized out>) at vdr.c:1218
softhddev.c:2594 ist der Aufruf von AudioFlushBuffers
audio.c:2457 ist die Zeile
Zitat
RingBufferReadAdvance(AudioRing[AudioRingWrite].RingBuffer,
RingBufferUsedBytes(AudioRing[AudioRingWrite].RingBuffer));
in AudioFlushBuffers()
Da ist also irgendwo noch der Wurm drin. Deshalb sollte der squeezebox-Patch erstmal nicht ins softhddevice-git einfließen.
gerade gemerkt:
der squeezebox-Patch ist auch Schuld daran, dass das mp3-Plugin bei DVB-Ausgabemodus stumm bleibt und der Fortschrittsbalken im Turbomodus durchrast. Auf meinem Test-VDR kriege ich dann auch leicht einen segfault mit ähnlichem backtrace:
Program terminated with signal 11, Segmentation fault.
#0 RingBufferUsedBytes (rb=0x0) at ringbuffer.c:337
337 return atomic_read(&rb->Filled);
(gdb) bt
#0 RingBufferUsedBytes (rb=0x0) at ringbuffer.c:337
#1 0x00007face91d8bfa in AudioFlushBuffers () at audio.c:2457
#2 0x00007face91c9f4a in Clear () at softhddev.c:2594
#3 0x00007facdee78e9e in DeviceClear (this=<optimized out>) at /home/martin/vdr-2.1.3/include/vdr/player.h:31
#4 cMP3Player::Empty (this=0x203f8c0) at player-mp3.c:2045
#5 0x00007facdee79cdf in cMP3Player::StopPlay (this=this@entry=0x203f8c0) at player-mp3.c:2052
#6 0x00007facdee79f04 in cMP3Player::Activate (this=0x203f8c0, On=<optimized out>) at player-mp3.c:1717
#7 0x000000000048543e in cDevice::Detach (this=0x1e87160, Player=Player@entry=0x203f8c0) at device.c:1247
#8 0x00000000004d3a84 in cPlayer::Detach (this=this@entry=0x203f8c0) at player.c:37
#9 0x00007facdee75384 in cMP3Player::~cMP3Player (this=0x203f8c0, __in_chrg=<optimized out>) at player-mp3.c:1696
#10 0x00007facdee75429 in cMP3Player::~cMP3Player (this=0x203f8c0, __in_chrg=<optimized out>) at player-mp3.c:1698
#11 0x00007facdee6b5be in cMP3Control::Stop (this=this@entry=0x203f610) at mp3.c:271
#12 0x00007facdee6b95b in cMP3Control::~cMP3Control (this=0x203f610, __in_chrg=<optimized out>) at mp3.c:265
#13 0x00007facdee6b999 in cMP3Control::~cMP3Control (this=0x203f610, __in_chrg=<optimized out>) at mp3.c:266
#14 0x00000000004d3be0 in cControl::Shutdown () at player.c:105
#15 0x000000000046edcd in main (argc=<optimized out>, argv=<optimized out>) at vdr.c:1268
Alles anzeigen