[mythtv] Debugging Unreliable DCT-6200 Recording
Donald Oakes
donald at oakesville.com
Sat Oct 22 18:18:53 UTC 2005
I've been having similar problems with firewire connectivity and my
DCT-6200. Along with the appropriate plugctl commands
(http://www.netzwerk-aktiv.com/pub/doc/newsletters/linux1394-user/html/2344.html),
your suggested workaround enabled me to get test-mpeg2 working 100% in
broadcast mode. However, firewire recording and live TV were still only
working part of the time. So I compared the sequence of operations in
test-mpeg2.c versus firewirerecorder.cpp, and I noticed a slight
discrepancy in the order that the raw1394 file descriptor was obtained.
When I applied the attached patch to current svn (10/22/05) I was able
to achieve 100% reliability for MythTV firewire recording. I have
absolutely no idea why moving the call to raw1394_get_fd() would have
any impact, but it seemed to do the trick. Any advice as to whether
this warrants a Trac ticket would be greatly appreciated.
Thanks,
- Don
Jim Westfall wrote:
>You have mythtv setup using broadcast firewire connection type?
>
>test-mpeg2 -r 1 > blah.ts uses a peer to peer connection type. Doing this
>seems to initialize something in the driver or dct-6200 and it ends up
>making a boardcast connection work 100% after that.
>
>I know a few people that use the workaround that I do and it works for
>them as well.
>
>jim
>
>jrandall at ftrd.us <jrandall at ftrd.us> wrote [09.23.05]:
>
>
>>Jim,
>>
>>Thanks for the input on this.
>>
>>For me, your fix only works for live tv. I had been doing basically
>>the same thing before, although it's usually faster for me to skip
>>using test-mpeg2 and just go for a few tries with mythfrontend. The
>>timeout is longer, but I haven't observed any relationship between
>>getting things going correctly with test-mpeg2 and then having them
>>subsequently work in myth. I am seeing about 50% failure and haven't
>>detected any sort of pattern, although perhaps I will write up a
>>little script and let it go a few hundred trials just to check on that.
>>
>>Once livetv starts working, it is true that you are "all set" in the
>>sense that you can (it seems) continue to watch live tv indefinitely,
>>change channels, etc without any problem. However, if you want to
>>record it is still 50% odds that it works. Even if you are watching
>>livetv and push the 'r'ecord button, it seems that it resets the
>>connection when switching to record mode and there's a good chance it
>>won't work.
>>
>>I suppose another option for a workaround would be to just keep the
>>transport stream open once it is working (just like live tv does when
>>changing channels). We could look for a way to hand off the open
>>firewire stream to the recording process rather than having it
>>reinitialized every time.
>>
>>But that would still require human intervention to get things going
>>in the first place. I'm going to try to hack up a way for the
>>firewire code to detect when the transport stream connection isn't
>>working and give a few tries at reinitializing it before giving up.
>>It looks like libs/libmythtv/firewirerecorder.cpp is the place to do
>>this, so that's where I'm headed.
>>
>>I just noticed that there is a bug tracking system, but didn't see a
>>bug for this yet. Should we add one so we'll have a place to submit
>>the patch? It'll be good to have others who have this problem to
>>test and make sure it solves it for more than just me.
>>
>>Josh.
>>
>>
>>On Sep 22, 2005, at 8:16 PM, Jim Westfall wrote:
>>
>>
>>
>>>Hi Josh
>>>
>>>I have this issue as well on one of my dct-6200's. I havent had time
>>>to see what the exact cause it, but the following work around gets it
>>>working 100% for me.
>>>
>>>make sure your firewire connection type is set to broadcast in
>>>mythsetup.
>>>
>>>run 'test-mpeg2 -r 1 > test.ts' over and over until you get
>>>output. once
>>>you get output stop test-mpeg2 then attempt to watch livetv in
>>>myth. If
>>>livetv works you should be all set. If not, you will need to
>>>repeat the
>>>process until it does. It will usually take me a few (less then
>>>10) tries
>>>to get it in a working state.
>>>
>>>This process should only be required if you reboot your box or
>>>dct-6200.
>>>
>>>jim
>>>
>>>jrandall at ftrd.us <jrandall at ftrd.us> wrote [09.22.05]:
>>>
>>>
>>>
>>>>I'm having intermittent trouble recording with my DCT-6200 cable box
>>>>connected via firewire. Basically it seems like about half the time
>>>>the program/live tv doesn't start coming in. For example, when you
>>>>select "Watch TV" the screen just goes blank for a little while and
>>>>then returns. If you try a few times, it always starts working
>>>>eventually, but it is much more of a problem for recording -- which
>>>>fails completely half the time.
>>>>
>>>>I have seen other people posting similar issues, so I know it is not
>>>>just me.
>>>>
>>>>I suspect that it is not an issue with MythTV per se. I have also
>>>>observed this phenomenon when using the test-mpeg2 utility that comes
>>>>with libiec61883. Basically, running "test-mpeg2 -r 1 > /tmp/foo.ts"
>>>>will either start to fill up the file or will leave a 0 byte file
>>>>"forever". Either way, test-mpeg2 says "...Established
>>>>Connection..." and "Starting to receive" -- it doesn't seem to know
>>>>whether data is actually coming or not. I also have my DCT-6200
>>>>connected directly to a TV for debugging, and I note that it always
>>>>glitches a little whenever you start capturing from it (picture
>>>>freezes and audio stops for a second, then continues). This happens
>>>>whether the data is transmitted or not.
>>>>
>>>>When the connection is not working, mythbackend says:
>>>>"Firewire: No Input in 15 seconds [P:1 N:1] (select)"
>>>>followed by:
>>>>"RingBuffer: Couldn't read data from the capture card in 15 seconds.
>>>>Stopping."
>>>>
>>>>Once data starts flowing, I have never observed any problems, but as
>>>>I said, it has this problem about 50% of the time. When using test-
>>>>mpeg2 to capture, it isn't really a problem, since I note right away
>>>>that no data is flowing and retry until it works. But, mythtv fails
>>>>much harder. It takes many seconds to timeout on live tv before
>>>>letting you retry, and has the problem on channel changing as well.
>>>>And recording shows only works about half the time, because it is
>>>>either go or no-go... there seems to be no retry possible.
>>>>
>>>>How should I go about debugging/fixing this?
>>>>
>>>>We could probably add a way to detect that no data is flowing over
>>>>firewire after the receive connection has been established and then
>>>>retry the connection, but should this problem be fixed here or at a
>>>>lower level (such as in libiec61883?). Unfortunately, the
>>>>linux1394.org server still seems to be down, so I can't check the
>>>>buglist there to see if this is a known problem or not.
>>>>
>>>>It seems probable that the real problem here is with the firmware in
>>>>my cable box, but since it is not up to me to update that, I'd rather
>>>>see a workaround in software.
>>>>
>>>>Could someone who is familiar with the firewire STB support in mythtv
>>>>let me know where the best place would be to put the fix? I can
>>>>start hacking around, but I'd rather do it "right" the first time.
>>>>
>>>>Thanks,
>>>>
>>>>Josh.
>>>>
>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>>>_______________________________________________
>>>>mythtv-dev mailing list
>>>>mythtv-dev at mythtv.org
>>>>http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-dev
>>>>
>>>>
>>>>
>>>_______________________________________________
>>>mythtv-dev mailing list
>>>mythtv-dev at mythtv.org
>>>http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-dev
>>>
>>>
>>>
>>>------------------------------------------------------------------------
>>>
>>>_______________________________________________
>>>mythtv-dev mailing list
>>>mythtv-dev at mythtv.org
>>>http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-dev
>>>
>>>
-------------- next part --------------
Index: firewirerecorder.cpp
===================================================================
--- firewirerecorder.cpp (revision 7560)
+++ firewirerecorder.cpp (working copy)
@@ -103,7 +103,6 @@
}
isopen = true;
- fwfd = raw1394_get_fd(fwhandle);
return true;
}
@@ -144,6 +143,8 @@
_request_recording = true;
_recording = true;
+ fwfd = raw1394_get_fd(fwhandle);
+
iec61883_mpeg2_recv_start(fwmpeg,fwchannel);
lastpacket = time(NULL);
while(_request_recording) {
More information about the mythtv-dev
mailing list