diff options
author | Julien Moutte <julien@moutte.net> | 2005-11-05 19:55:12 +0000 |
---|---|---|
committer | Julien Moutte <julien@moutte.net> | 2005-11-05 19:55:12 +0000 |
commit | 0adb034b32d93e761f38dae2e4485c1095e1a786 (patch) | |
tree | 7a612e183e8ce589be84904b82b0ebf8bfbf5381 /ext | |
parent | 478c8ba2992782b0860ea38d87552ab0108f1050 (diff) | |
download | gst-plugins-bad-0adb034b32d93e761f38dae2e4485c1095e1a786.tar.gz gst-plugins-bad-0adb034b32d93e761f38dae2e4485c1095e1a786.tar.bz2 gst-plugins-bad-0adb034b32d93e761f38dae2e4485c1095e1a786.zip |
ext/directfb/dfbvideosink.c: Make acceleration detection work, better, add safety checks and ARGB support for cards t...
Original commit message from CVS:
2005-11-05 Julien MOUTTE <julien@moutte.net>
* ext/directfb/dfbvideosink.c: (gst_dfbvideosink_enum_layers),
(gst_dfbvideosink_setup),
(gst_dfbvideosink_can_blit_from_format),
(gst_dfbvideosink_getcaps): Make acceleration detection work,
better, add safety checks and ARGB support for cards that
support it.
Diffstat (limited to 'ext')
-rw-r--r-- | ext/directfb/dfbvideosink.c | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/ext/directfb/dfbvideosink.c b/ext/directfb/dfbvideosink.c index e9d68725..47b2cd2f 100644 --- a/ext/directfb/dfbvideosink.c +++ b/ext/directfb/dfbvideosink.c @@ -544,6 +544,9 @@ gst_dfbvideosink_setup (GstDfbVideoSink * dfbvideosink) GST_DEBUG ("getting primary surface"); dfbvideosink->layer->GetSurface (dfbvideosink->layer, &dfbvideosink->primary); + + dfbvideosink->primary->SetBlittingFlags (dfbvideosink->primary, + DSBLIT_NOFX); } dfbvideosink->primary->GetPixelFormat (dfbvideosink->primary, @@ -781,15 +784,15 @@ gst_dfbvideosink_can_blit_from_format (GstDfbVideoSink * dfbvideosink, IDirectFBSurface *surface = NULL; DFBSurfaceDescription s_dsc; DFBAccelerationMask mask; - DFBDisplayLayerConfig dlc; + DFBDisplayLayerConfig dlc, prev_dlc; g_return_val_if_fail (GST_IS_DFBVIDEOSINK (dfbvideosink), FALSE); /* Create a surface of desired format */ s_dsc.flags = DSDESC_PIXELFORMAT | DSDESC_WIDTH | DSDESC_HEIGHT; s_dsc.pixelformat = format; - s_dsc.width = 1; - s_dsc.height = 1; + s_dsc.width = 10; + s_dsc.height = 10; ret = dfbvideosink->dfb->CreateSurface (dfbvideosink->dfb, &s_dsc, &surface); if (ret != DFB_OK) { @@ -798,6 +801,13 @@ gst_dfbvideosink_can_blit_from_format (GstDfbVideoSink * dfbvideosink, goto beach; } + /* Backup layer configuration */ + ret = dfbvideosink->layer->GetConfiguration (dfbvideosink->layer, &prev_dlc); + if (ret != DFB_OK) { + GST_WARNING ("failed when getting current layer configuration"); + goto beach; + } + /* Test configuration of the layer to this pixel format */ dlc.flags = DLCONF_PIXELFORMAT; dlc.pixelformat = format; @@ -833,7 +843,14 @@ gst_dfbvideosink_can_blit_from_format (GstDfbVideoSink * dfbvideosink, } else { GST_DEBUG ("blitting from format %s to our primary is not accelerated", gst_dfbvideosink_get_format_name (format)); - res = TRUE; + res = FALSE; + } + + /* Restore original layer configuration */ + ret = dfbvideosink->layer->SetConfiguration (dfbvideosink->layer, &prev_dlc); + if (ret != DFB_OK) { + GST_WARNING ("failed when restoring layer configuration"); + goto beach; } beach: @@ -934,6 +951,15 @@ gst_dfbvideosink_getcaps (GstBaseSink * bsink) gst_caps_append (caps, gst_dfbvideosink_get_caps_from_format (DSPF_RGB24)); } + /* There's something wrong with RGB32, ffmpegcolorspace ? + if (gst_dfbvideosink_can_blit_from_format (dfbvideosink, DSPF_RGB32)) { + gst_caps_append (caps, + gst_dfbvideosink_get_caps_from_format (DSPF_RGB32)); + } */ + if (gst_dfbvideosink_can_blit_from_format (dfbvideosink, DSPF_ARGB)) { + gst_caps_append (caps, + gst_dfbvideosink_get_caps_from_format (DSPF_ARGB)); + } if (gst_dfbvideosink_can_blit_from_format (dfbvideosink, DSPF_YUY2)) { gst_caps_append (caps, gst_dfbvideosink_get_caps_from_format (DSPF_YUY2)); |