Wied Pakusa wrote:
> Hello.
> 
> I hope you can help me, because i'm almost getting mad about the mythtv 
> installation :-)
> 
> My hardware:
> -> Hauppauge PVR 250
> -> Matrox G450 DH
> 

[...]

> XDirectFB runs with a nice quality on my TV-Out.
> I want to use XDirectFB (mythtv not compiled against qte but with 
> --enable-directfb) because qte doesn't use directfb but only the 
> linux-fb device - the quality is not so nice like directfb.
> But that's not import - my problem still remaining is:
> 
> When i start the playback of TV or a movie it isn't displayed on my TV 
> but on Head1 (Monitor) ->
> example: mythfrontend runs on XDirectFB on Head 2 (TV-OUT) - then 
> starting Live-TV -> TV-Out black -> Live-TV plays on my monitor.
> So thats my question -> How can i make mythfrontend to show the picture 
> on Head 2? I hadn't found any information about that.
> 
> I really hope you can help me, because i have the feeling i'm nearly 
> before a nice mythtv-center using my existing hardware.

The directfb support for mythtv doesn't by default use the tv-out of
matrox cards.

I however managed to get a picture to TV (I have G400) with mythtv gui
through XDirectFB and video through mythtv's directfb support with the
attached patch (which is a hack), but the interlacing was lost and
movements weren't smooth.

I didn't quite like the GUI of mythtv either, so I gave up and installed
VDR instead.


-- 
Anssi Hannula

diff -Nurp mythtv-trunk-8387/libs/libmythtv/videoout_directfb.cpp mythtv-trunk-8387-fix/libs/libmythtv/videoout_directfb.cpp
--- mythtv-trunk-8387/libs/libmythtv/videoout_directfb.cpp	2005-12-20 08:51:06.000000000 -0500
+++ mythtv-trunk-8387-fix/libs/libmythtv/videoout_directfb.cpp	2005-12-26 19:35:59.000000000 -0500
@@ -369,12 +369,14 @@ bool VideoOutputDirectfb::Init(int width
 
     //look up an output layer that supports the right format, begin with the video format we have as input, fall back to others
     data->videoLayerConfig.flags = (DFBDisplayLayerConfigFlags)(DLCONF_WIDTH | DLCONF_HEIGHT | DLCONF_PIXELFORMAT);
-    data->videoLayerConfig.width = width;
+    data->videoLayerConfig.width = 720; // hack
     data->videoLayerConfig.height = height;
     data->videoLayerConfig.pixelformat = DSPF_I420;
 
     DFBCHECK(data->dfb->EnumDisplayLayers(data->dfb, LayerCallback, data));
-
+    
+    VERBOSE(VB_GENERAL, "Layers enumerated, going forward");
+	
     if (data->videoLayer == NULL) {
         data->videoLayerConfig.pixelformat = DSPF_YV12;
         DFBCHECK(data->dfb->EnumDisplayLayers(data->dfb, LayerCallback, data));
@@ -407,8 +409,19 @@ bool VideoOutputDirectfb::Init(int width
         }
     }
 
-    DFBCHECKFAIL(data->videoLayer->SetConfiguration(data->videoLayer, &(data->videoLayerConfig)), false);
+    VERBOSE(VB_GENERAL, QString("Trying to use these settings: DirectFB output : videoLayer : %1 : %2x%3, %4, %5 buffering")
+		    .arg(data->videoLayerDesc.name)
+				    .arg(data->videoLayerConfig.width)
+				    .arg(data->videoLayerConfig.height)
+				    .arg(data->videoLayerConfig.pixelformat == DSPF_I420 ? "I420 : Yuv" : "YV12 : Yvu")
+				    .arg(
+                data->videoLayerConfig.buffermode == DLBM_TRIPLE ? "triple (video memory)" :
+                data->videoLayerConfig.buffermode == DLBM_BACKVIDEO ? "double (video memory)" :
+				    "double (system memory)")
+	   );
 
+    DFBCHECKFAIL(data->videoLayer->SetConfiguration(data->videoLayer, &(data->videoLayerConfig)), false);
+    DFBCHECKFAIL(data->videoLayer->SetFieldParity(data->videoLayer, 0), false);
     VERBOSE(VB_GENERAL, QString("DirectFB output : videoLayer : %1 : %2x%3, %4, %5 buffering")
             .arg(data->videoLayerDesc.name)
             .arg(data->videoLayerConfig.width)
@@ -785,7 +798,24 @@ DFBEnumerationResult LayerCallback(unsig
     struct DirectfbData *vodata = (DirectfbData*)data;
     DFBResult ret;
     //IDirectFBSurface *surface;
-
+    
+    VERBOSE(VB_GENERAL, "=== WE ARE GOING TO LAYERCALLBACK");
+    VERBOSE(VB_GENERAL, "=== Checking for Matrox CRTC2 Layer");
+    
+    if (!strcmp("Matrox CRTC2 Layer", desc.name )) {
+	    VERBOSE(VB_GENERAL, "  === Found CORRECT LAYER");
+	    VERBOSE(VB_GENERAL, "  === Calling GetDisplayLayer...");
+	    if ((vodata->dfb->GetDisplayLayer(vodata->dfb, id, &(vodata->videoLayer))) == DFB_OK) {
+		    VERBOSE(VB_GENERAL, "    === DFB_OK, Cancelling Enumeration :)");
+		    VERBOSE(VB_GENERAL, "    === Testconfiguration skipped");
+		    vodata->videoLayerDesc = desc;
+		    return DFENUM_CANCEL;
+	    }
+	    VERBOSE(VB_GENERAL, "    === FAILED!");
+    }
+    VERBOSE(VB_GENERAL, "  === Not the right one, trying next...");
+    return DFENUM_OK;
+/*
     if (id == DLID_PRIMARY)
         return DFENUM_OK;
 
@@ -838,5 +868,5 @@ DFBEnumerationResult LayerCallback(unsig
     else {
         vodata->videoLayer->Release(vodata->videoLayer);
     }
-    return DFENUM_OK;
+    return DFENUM_OK;*/
 }

_______________________________________________
mythtv-dev mailing list
mythtv-dev@mythtv.org
http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-dev

Reply via email to