Opened 17 years ago
Closed 16 years ago
#6719 closed patch (fixed)
Add channel change monitoring into the signal monitor
| Reported by: | Owned by: | jpoet | |
|---|---|---|---|
| Priority: | minor | Milestone: | unknown |
| Component: | MythTV - Recording | Version: | unknown |
| Severity: | medium | Keywords: | channel change signal monitor |
| Cc: | Ticket locked: | no |
Description
The signal monitor reports the status of tuning events to the mythfrontend. By adding the channel change process to this list of events, the user gets immediate feedback during a channel change. If the channel change fails or takes a long time, the user can see this, and choose to select a different channel or abort LiveTV.
Mythfrontend has a 15 second timeout before it gives up waiting for the backend to send it data. Some external channel change scripts can take over 15 seconds, which means they must be run in the background to prevent a timeout. However, if a signal monitor is desired, the channel change could not happen in the background because the monitor needs to know when the channel change is complete. By moving channel change monitoring into the "signal monitor", this problem is solved.
Note: With this change, any pre-existing external channel change scripts which ran in the background, must be modified to run in the foreground.
Attachments (20)
Change History (45)
by , 17 years ago
| Attachment: | channel-thread.patch added |
|---|
comment:1 by , 17 years ago
I attempted to use this patch to test out, as I have the exact issue this is to fix... I receive compilation error:
channelscan/channelscan_sm.cpp: In member function â: channelscan/channelscan_sm.cpp:1333: error: no matching function for call to â ./signalmonitor.h:45: note: candidates are: virtual void SignalMonitor::Start(bool) make[2]: * [channelscan_sm.o] Error 1 make[2]: * Waiting for unfinished jobs.... make[2]: Leaving directory `/var/tmp/portage/media-tv/mythtv-0.22_alpha20878/work/mythtv-0.22/libs/libmythtv' make[1]: * [sub-libmythtv-make_default] Error 2 make[1]: Leaving directory `/var/tmp/portage/media-tv/mythtv-0.22_alpha20878/work/mythtv-0.22/libs'
comment:4 by , 17 years ago
I've been running this test for several days now, and I think this may have eliminated some issues I had when running a script to prime firewire and tune, as my firewire itself can be problematic. The constant segfault no longer occurs, and it seems to return to a state to try a new channel after restarting playback, so Thank You, this seems to work flawlessly for me.
comment:5 by , 17 years ago
New version of patch (channel-thread-v1.2.patch) compatible with changeset 20938
comment:6 by , 17 years ago
New patch (channel-thread-v1.2a.patch) updated to apply to current trunk.
comment:7 by , 17 years ago
FWIW, the above patch together with the patch in ticket 6611 makes channel changes work fine with an HD-PVR here.
comment:8 by , 17 years ago
I will test this again. It was working well before, but I dropped using it at one point due to a different problem. Now, after an upgrade to current CVS today (21623) my firewire capture has ceased to function, failing to lock on signal, even though firewire tester shows it as fine
comment:9 by , 17 years ago
For anyone using the patch in this bug, or an HD-PVR in general, you probably also want the deadlock fix in ticket #7132.
comment:10 by , 17 years ago
by , 17 years ago
| Attachment: | channel-thread-v1.4.patch added |
|---|
Address possible issues noticed by mark.buechler and jst-myth
comment:13 by , 16 years ago
| Owner: | changed from to |
|---|---|
| Status: | new → assigned |
by , 16 years ago
| Attachment: | channel-thread-v1.4a-deadlock-fix.patch added |
|---|
Fix a deadlock in the last patch when a livetv user prevents a scheduled recording from starting.
comment:14 by , 16 years ago
For the record, the patch I just attached fixes a reproducible deadlock in channel-thread-v1.4a.patch. The deadlock comes from a thread deadlocking on attempting to re-lock pendingRecLock, which is non-recursive. This is the stack for the deadlock:
#3 0x0683e982 in QMutex::lock() () from /usr/lib/libQtCore.so.4 #4 0x08075ffc in QMutexLocker::relock (this=0xad9f3828)
at /usr/include/QtCore/qmutex.h:120
#5 0x08075f7d in QMutexLocker::QMutexLocker (this=0xad9f3828, m=0x8358904)
at /usr/include/QtCore/qmutex.h:102
#6 0x00fe0352 in TVRec::RecordPending (this=0x8358870, rcinfo=0xa85bd590,
secsleft=-1, hasLater=false) at tv_rec.cpp:383
#7 0x00fe1fa1 in TVRec::CancelNextRecording (this=0x8358870, cancel=true)
at tv_rec.cpp:480
#8 0x0807de73 in EncoderLink::CancelNextRecording (this=0x8387150,
cancel=true) at encoderlink.cpp:587
#9 0x080cb925 in MainServer::HandleRecorderQuery (this=0x8389180,
slist=@0xad9f40a0, commands=@0xad9f4098, pbs=0x8384428) at mainserver.cpp:3468
...
comment:15 by , 16 years ago
channel-thread-v1.4a.patch does not compile on 0.22-fixes r22859. A reference in signalmonitor.cpp to channelchangemonitor.h seems to be the problem. Log to follow.
by , 16 years ago
| Attachment: | compile_error-channel-thread-v1.4a.log added |
|---|
channel-thread-v1.4a compile error
comment:16 by , 16 years ago
I re-worked the channel-thread-v1.4a.patch for 22890 (attached as v1.5) and was able to build my package and install. Things were looking good until I had back-to-back recordings on the same channel/mulltiplex using the multirecord feature. Using a HD-3000 ATSC card, the second recording of the back-to-back fails. (file size is "B" in mythweb and when searched for, does not exist.)
[mythtv@mythbox-mbe ~]$ mythbackend --version Please include all output in bug reports. MythTV Version : 22890M MythTV Branch : branches/release-0-22-fixes Network Protocol : 50 Library API : 0.22.20091023-1 QT Version : 4.5.2 Options compiled in: linux debug using_oss using_alsa using_backend using_directfb using_dvb using_firewire using_frontend using_hdhomerun using_hdpvr using_iptv using_ivtv using_joystick_menu using_lirc using_mheg using_opengl_video using_opengl_vsync using_qtwebkit using_v4l using_x11 using_xrandr using_xv using_xvmc using_xvmc_vld using_xvmcw using_bindings_perl using_bindings_python using_opengl using_ffmpeg_threads using_libavc_5_3 using_live using_mheg config.log: Tue Nov 24 13:19:57 PST 2009 ./configure --prefix=/usr --arch=i686 --disable-vdpau --enable-xvmc --enable-xvmc-pro --enable-opengl-vsync --enable-libfaad --enable-dvb --enable-firewire --compile-type=debug --with-bindings=perl,python --enable-audio-alsa --disable-audio-jack --disable-audio-arts
by , 16 years ago
| Attachment: | back-to-back_DVB_failure-example--no-debug.txt added |
|---|
Example log file when failure occurs
by , 16 years ago
| Attachment: | gdb_back_to_back_DVB_failure-debug.txt added |
|---|
gdb debug output when back-to-back DVB failure occurs
comment:17 by , 16 years ago
Updated patch.
hansonorders, this patch is slightly different than the one you uploaded. I have no way of testing your situation, so I do not know if it will help you.
by , 16 years ago
| Attachment: | channel-thread-trunk-24052.patch added |
|---|
by , 16 years ago
| Attachment: | channel-thread-0.23-fixes-24052.patch added |
|---|
For the 0.23-fixes branch
comment:20 by , 16 years ago
| Component: | MythTV - General → MythTV - Recording |
|---|
by , 16 years ago
| Attachment: | channel-thread-trunk-24509.patch added |
|---|
This version tightens up a critical section, a little bit.
by , 16 years ago
| Attachment: | channel-thread-0.23-fixes-24516.patch added |
|---|
This version shrinks a critical area, and prevents a possible deadlock
by , 16 years ago
| Attachment: | channel-thread-trunk-24509a.patch added |
|---|
This version fixes a possible deadlock
comment:21 by , 16 years ago
Have some failed hunks in rev 25179: <snip> Hunk #8 FAILED at 322. 1 out of 10 hunks FAILED -- saving rejects to file libs/libmythtv/signalmonitor.cpp.rej <snip> patching file libs/libmythtv/tv_rec.cpp <snip> Hunk #2 FAILED at 404. <snip> Hunk #5 FAILED at 576. <snip> Hunk #14 FAILED at 2520. <snip> 3 out of 19 hunks FAILED -- saving rejects to file libs/libmythtv/tv_rec.cpp.rej
by , 16 years ago
| Attachment: | channel-thread-0.23-fixes-25369.patch added |
|---|
Fixes interaction with multi-rec
by , 16 years ago
| Attachment: | channel-thread-trunk-25379.patch added |
|---|
Fixes dvb multirec problem. Updated for trunk r25379
comment:22 by , 16 years ago
Updated patch which fixes problem with multirec and dvb.
I big thank you to Mark Goldberg for his help in tracking down the problem and figuring out how to reproduce it.
comment:23 by , 16 years ago
(In [25543]) Make the actual process of changing the channel part of the signal monitor. Refs #6719
For LiveTV this allows feedback to be given to the user, instead of leaving them in limbo until the channel change is complete. Also allows for situations where channel changes can take a very long time (e.g. using IR blaster).
This does require the channel change process to be moved into it's own thread, and is therefore a somewhat major change.
comment:24 by , 16 years ago
| Owner: | changed from to |
|---|
comment:25 by , 16 years ago
| Resolution: | → fixed |
|---|---|
| Status: | assigned → closed |
(In [25642]) Fix issues with DiSEqC caused by [25543].
Creating the LiveTVRingBuffer before the channel change operation means that the channelbase::sourceid may not be up to date when multiple sourceids are associated with a single input. Therefore a call to CheckChannel is needed to determine that information.
Also, when initializing the inputs in ChannelBase, retrieve the "default input" from the DB in case the capture device is opened "on demand".
Both of these issues could result in incorrect program information being displayed when changing from one channel to another in LiveTV, as well as tuning failures due to DB lookup problems.
Thanks to Gus Bourg for discovering and diagnosing the problem with DiSEqC.
Thanks to Benny Sjöstrand for discovering the issue with opening devices "on demand", and fixing it.
Thanks to Mark Buechler for his help in analyzing log files, and diagnosing the problems.

Adds channel change monitoring to the signal monitor.