[mythtvnz] Myth DVD creation

Steven Ellis mythtvnz@lists.linuxnut.co.nz
Tue, 21 Nov 2006 18:20:55 +1300 (NZDT)


------=_20061121182055_17192
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: 8bit

Andrew Ruthven wrote:
> Hi Steven,
>
> On Tue, 2006-11-21 at 16:01 +1300, Steven Ellis wrote:
>> Andrew Ruthven wrote:
>> > The backend now has a tendency to crash, whereas with 0.19 I had no
>> > issues (I'm not using DVB-S yet).  And while watching recorded shows,
>> > the frontend will sometimes lock up, this is repeatable with the same
>> > shows.
>
>> I'm pretty much at the same SVN fixes level as you and my setup is rock
>> solid. A couple of questions.
>
> Hmmm...
>
>> 1. What CPU have you got?
>
> The backend is a PIII 500MHz (I have a 800EB waiting to be swapped into
> the case).  512MB of RAM.
>
> the frontend is a Via Epia M10000.  256MB of RAM.

All pretty standard

>> 2. Are you running 64bit or 32bit - there are a couple of 64bit issues
>
> All 32bit.  All my hardware at home is *far* to old to be 64bit!  :(

Fine. I don't run 64bit on my 64bit hw anyway

>> 3. What capture cards do you have?
>
> Hauppauge PVR250 and a SkyStar2 which is not connected to a dish, but is
> still configured in MythTV.

Ok it might be the backend getting confused about opening the extra card.
What do you have configured for the card like videosource etc. I had some
issues with a partially configured DVB-T card they kept causing the
backend to crash

Another one to check is that the OS has loaded the drivers correctly for
the card on boot. If it is in a partially configured state and the backend
does a device scan it can crash the backend.

>> 4. What settings are you using for playback - I needed a extra XvMC
>> patch
>> to sort out some problems
>
> I'm using XvMC to use the MPEG2 H/W decoder on the Via.  The picture is
> being deinterlaced, but no custom filters are being used.  I found that
> the OpenGL stuff just completely failed to work, and haven't had time to
> work out why, so I'm just using the QT painter.  I'm not sure if there
> is anything else you want here...

Lots of odd XvMC issues out there. I haven't played with the Via XvMC
support but it shouldn't crash your backend.

> Do you mind letting me know which patch you needed?

Not at all. Patch attached. It sorts out a non fading osd issue that left
a ghost behind. The ghost had a major effect on playback performance.

Steve
------=_20061121182055_17192
Content-Type: text/x-patch; name="xvmc_ghost.diff"
Content-Transfer-Encoding: 8bit
Content-Disposition: attachment; filename="xvmc_ghost.diff"

diff -Nru --exclude .svn mythtv.orig/libs/libmythtv/NuppelVideoPlayer.cpp mythtv/libs/libmythtv/NuppelVideoPlayer.cpp
--- mythtv.orig/libs/libmythtv/NuppelVideoPlayer.cpp	2006-10-01 17:26:39.000000000 +1300
+++ mythtv/libs/libmythtv/NuppelVideoPlayer.cpp	2006-10-06 15:28:59.000000000 +1300
@@ -2474,6 +2474,12 @@
             }
         }
     }
+    else 
+    {
+        OSD *osd = GetOSD();
+        if (osd)
+            osd->HideSet("interactive");
+    }
 
     // handle EIA-608 and Teletext
     if (textDisplayMode & kDisplayNUVCaptions)
@@ -5835,7 +5841,7 @@
         if (GetInteractiveTV())
             interactiveTV->Restart(chanid, cardid, isLiveTV);
     }
-       
+    
     osd->ClearAll("interactive");
     itvosd->Display();
     osd->SetVisible(itvosd, 0);
diff -Nru --exclude .svn mythtv.orig/libs/libmythtv/osd.cpp mythtv/libs/libmythtv/osd.cpp
--- mythtv.orig/libs/libmythtv/osd.cpp	2006-09-11 23:06:08.000000000 +1200
+++ mythtv/libs/libmythtv/osd.cpp	2006-10-06 15:22:58.000000000 +1300
@@ -2474,6 +2474,11 @@
     totalfadetime = 0;
 }
 
+OSDSurface *OSD::GetDisplaySurface(void)
+{
+    return drawSurface;
+}
+
 OSDSurface *OSD::Display(void)
 {
     bool anytodisplay = false;
@@ -2545,7 +2550,7 @@
 
     m_setsvisible = anytodisplay;
 
-    if (m_setsvisible)
+    if (m_setsvisible && !drawSurface->IsClear())
         return drawSurface;
 
     return NULL;
diff -Nru --exclude .svn mythtv.orig/libs/libmythtv/osd.h mythtv/libs/libmythtv/osd.h
--- mythtv.orig/libs/libmythtv/osd.h	2006-08-27 17:17:27.000000000 +1200
+++ mythtv/libs/libmythtv/osd.h	2006-10-06 15:22:04.000000000 +1300
@@ -60,6 +60,8 @@
 
     OSDSurface *Display(void);
 
+    OSDSurface *GetDisplaySurface(void);
+
     void ClearAll(const QString &name);
     void ClearAllText(const QString &name);
     void SetText(const QString &name, QMap<QString, QString> &infoMap,
diff -Nru --exclude .svn mythtv.orig/libs/libmythtv/osdsurface.cpp mythtv/libs/libmythtv/osdsurface.cpp
--- mythtv.orig/libs/libmythtv/osdsurface.cpp	2006-08-27 17:17:27.000000000 +1200
+++ mythtv/libs/libmythtv/osdsurface.cpp	2006-10-06 15:22:41.000000000 +1300
@@ -135,6 +135,11 @@
     usedRegions = QRegion();
 }
 
+bool OSDSurface::IsClear(void)
+{
+    return (usedRegions == QRegion());
+}
+
 bool OSDSurface::IntersectsDrawn(QRect &newrect)
 {
     QMutexLocker lock(&usedRegionsLock);
@@ -799,7 +804,7 @@
 
         if (startline < 0) startline = 0;
         if (endline >= height) endline = height - 1;
-        if (startcol < 0) endcol = 0;
+        if (startcol < 0) startcol = 0;
         if (endcol >= width) endcol = width - 1;
 
         unsigned char *src;
diff -Nru --exclude .svn mythtv.orig/libs/libmythtv/osdsurface.h mythtv/libs/libmythtv/osdsurface.h
--- mythtv.orig/libs/libmythtv/osdsurface.h	2006-08-27 17:17:27.000000000 +1200
+++ mythtv/libs/libmythtv/osdsurface.h	2006-10-06 15:22:00.000000000 +1300
@@ -24,6 +24,7 @@
 
     void Clear(void);
     void ClearUsed(void);
+    bool IsClear();
 
     bool IntersectsDrawn(QRect &newrect);
     void AddRect(QRect &newrect);
diff -Nru --exclude .svn mythtv.orig/libs/libmythtv/videoout_xv.cpp mythtv/libs/libmythtv/videoout_xv.cpp
--- mythtv.orig/libs/libmythtv/videoout_xv.cpp	2006-09-11 23:06:08.000000000 +1200
+++ mythtv/libs/libmythtv/videoout_xv.cpp	2006-10-06 15:22:29.000000000 +1300
@@ -2859,7 +2859,7 @@
         VideoFrame *osdframe = NULL;
         int ret = DisplayOSD(xvmc_osd->OSDFrame(), osd, -1,
                              xvmc_osd->GetRevision());
-        OSDSurface *osdsurf = osd->Display();
+        OSDSurface *osdsurf = osd->GetDisplaySurface();
         if (osdsurf)
             xvmc_osd->SetRevision(osdsurf->GetRevision());
         if (ret >= 0 && xvmc_osd->NeedFrame())
------=_20061121182055_17192--