summaryrefslogtreecommitdiff
path: root/ext/directfb
diff options
context:
space:
mode:
authorTom Deseyn <tom.deseyn@barco.com>2011-05-30 08:48:29 +0200
committerSebastian Dröge <sebastian.droege@collabora.co.uk>2011-05-30 08:48:29 +0200
commit8f7183dc8539b87033b69fab4c98e0f57f44b2be (patch)
treeed3681b49d3b3e94b72b6aebd60b49fd4511e9c4 /ext/directfb
parentd536b73e25403bfbdd6dcc558fb82d0e507ea8b3 (diff)
downloadgstreamer-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.c85
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);
}
}