diff options
author | Tom Deseyn <tom.deseyn@barco.com> | 2011-05-30 08:48:29 +0200 |
---|---|---|
committer | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2011-05-30 08:48:29 +0200 |
commit | 8f7183dc8539b87033b69fab4c98e0f57f44b2be (patch) | |
tree | ed3681b49d3b3e94b72b6aebd60b49fd4511e9c4 /ext/directfb | |
parent | d536b73e25403bfbdd6dcc558fb82d0e507ea8b3 (diff) | |
download | gstreamer-plugins-bad-8f7183dc8539b87033b69fab4c98e0f57f44b2be.tar.gz |
dfbvideosink: Also consider non-accelerated DirectFB surfaces
Fixes bug #631390.
Diffstat (limited to 'ext/directfb')
-rw-r--r-- | ext/directfb/dfbvideosink.c | 85 |
1 files changed, 48 insertions, 37 deletions
diff --git a/ext/directfb/dfbvideosink.c b/ext/directfb/dfbvideosink.c index d8bb6d9ce..39d8fc7b5 100644 --- a/ext/directfb/dfbvideosink.c +++ b/ext/directfb/dfbvideosink.c @@ -998,7 +998,7 @@ beach: static gboolean gst_dfbvideosink_can_blit_from_format (GstDfbVideoSink * dfbvideosink, - DFBSurfacePixelFormat format) + DFBSurfacePixelFormat format, gboolean accelerated) { gboolean res = FALSE; DFBResult ret; @@ -1058,14 +1058,14 @@ gst_dfbvideosink_can_blit_from_format (GstDfbVideoSink * dfbvideosink, } /* Blitting from this format to our primary is accelerated */ - if (mask & DFXL_BLIT) { + if ((mask & DFXL_BLIT) && accelerated) { GST_DEBUG_OBJECT (dfbvideosink, "blitting from format %s to our primary " "is accelerated", gst_dfbvideosink_get_format_name (format)); res = TRUE; - } else { + } else if (!accelerated) { GST_DEBUG_OBJECT (dfbvideosink, "blitting from format %s to our primary " "is not accelerated", gst_dfbvideosink_get_format_name (format)); - res = FALSE; + res = TRUE; } /* Restore original layer configuration */ @@ -1165,41 +1165,52 @@ gst_dfbvideosink_getcaps (GstBaseSink * bsink) caps = gst_dfbvideosink_get_caps_from_format (dfbvideosink->pixel_format); } else { /* Try some formats */ + gboolean accelerated = TRUE; caps = gst_caps_new_empty (); - if (gst_dfbvideosink_can_blit_from_format (dfbvideosink, DSPF_RGB16)) { - gst_caps_append (caps, - gst_dfbvideosink_get_caps_from_format (DSPF_RGB16)); - } - if (gst_dfbvideosink_can_blit_from_format (dfbvideosink, DSPF_RGB24)) { - 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)); - } - if (gst_dfbvideosink_can_blit_from_format (dfbvideosink, DSPF_UYVY)) { - gst_caps_append (caps, - gst_dfbvideosink_get_caps_from_format (DSPF_UYVY)); - } - if (gst_dfbvideosink_can_blit_from_format (dfbvideosink, DSPF_I420)) { - gst_caps_append (caps, - gst_dfbvideosink_get_caps_from_format (DSPF_I420)); - } - if (gst_dfbvideosink_can_blit_from_format (dfbvideosink, DSPF_YV12)) { - gst_caps_append (caps, - gst_dfbvideosink_get_caps_from_format (DSPF_YV12)); - } + do { + if (gst_dfbvideosink_can_blit_from_format (dfbvideosink, DSPF_RGB16, + accelerated)) { + gst_caps_append (caps, + gst_dfbvideosink_get_caps_from_format (DSPF_RGB16)); + } + if (gst_dfbvideosink_can_blit_from_format (dfbvideosink, DSPF_RGB24, + accelerated)) { + gst_caps_append (caps, + gst_dfbvideosink_get_caps_from_format (DSPF_RGB24)); + } + if (gst_dfbvideosink_can_blit_from_format (dfbvideosink, DSPF_RGB32, + accelerated)) { + gst_caps_append (caps, + gst_dfbvideosink_get_caps_from_format (DSPF_RGB32)); + } + if (gst_dfbvideosink_can_blit_from_format (dfbvideosink, DSPF_ARGB, + accelerated)) { + gst_caps_append (caps, + gst_dfbvideosink_get_caps_from_format (DSPF_ARGB)); + } + if (gst_dfbvideosink_can_blit_from_format (dfbvideosink, DSPF_YUY2, + accelerated)) { + gst_caps_append (caps, + gst_dfbvideosink_get_caps_from_format (DSPF_YUY2)); + } + if (gst_dfbvideosink_can_blit_from_format (dfbvideosink, DSPF_UYVY, + accelerated)) { + gst_caps_append (caps, + gst_dfbvideosink_get_caps_from_format (DSPF_UYVY)); + } + if (gst_dfbvideosink_can_blit_from_format (dfbvideosink, DSPF_I420, + accelerated)) { + gst_caps_append (caps, + gst_dfbvideosink_get_caps_from_format (DSPF_I420)); + } + if (gst_dfbvideosink_can_blit_from_format (dfbvideosink, DSPF_YV12, + accelerated)) { + gst_caps_append (caps, + gst_dfbvideosink_get_caps_from_format (DSPF_YV12)); + } + accelerated = !accelerated; + } while (accelerated == FALSE); } } |