diff options
author | Brian Cameron <brian.cameron@sun.com> | 2007-05-16 01:35:51 +0000 |
---|---|---|
committer | Brian Cameron <bcameron@src.gnome.org> | 2007-05-16 01:35:51 +0000 |
commit | 94dcec33c18664b4bc6e8e595c94e33a664b2ec2 (patch) | |
tree | 74c07b0732174019faefd2c5d377d3f4ced0c5ae /gdk/gdkrgb.c | |
parent | 5e9e9fe4e0fe1e75f0da025ada55358cce5d4d9f (diff) | |
download | gtk+-94dcec33c18664b4bc6e8e595c94e33a664b2ec2.tar.gz |
Add Sun mediaLib support so that hardware acceleration via mediaLib is
2007-05-16 Brian Cameron <brian.cameron@sun.com>
* acconfig.h, configure.in, gdk/Makefile.am, gdkprivate.h, gdkrgb.c,
gdkdraw.c, gdk-pixbuf/gdk-pixbuf-scale.c,
gdk-pixbuf/pixops/Makefile.am, gdk-pixbuf/pixops/pixops.[ch],
gdk-pixbuf/pixops/timescale.c: Add Sun mediaLib support so that
hardware acceleration via mediaLib is enabled if mediaLib is
detected via configure. Enhancement request #344813. I was given
permission to commit in the bug report by Matthias Clasen.
* gdk/medialib.[ch]: New files added for mediaLib support.
* docs/reference/gdk-pixbuf/tmpl/scaling.sgml,
docs/reference/gdk/tmpl/rgb.sgml, gdk/gdkdraw.c: Add docs for
mediaLib support.
svn path=/trunk/; revision=17855
Diffstat (limited to 'gdk/gdkrgb.c')
-rw-r--r-- | gdk/gdkrgb.c | 46 |
1 files changed, 44 insertions, 2 deletions
diff --git a/gdk/gdkrgb.c b/gdk/gdkrgb.c index 97b2f15c26..6b9b84c761 100644 --- a/gdk/gdkrgb.c +++ b/gdk/gdkrgb.c @@ -2158,6 +2158,29 @@ gdk_rgb_convert_0888 (GdkRgbInfo *image_info, GdkImage *image, } } +#ifdef USE_MEDIALIB25 +/* convert 24-bit packed to 32-bit unpacked */ +static void +gdk_rgb_convert_0888_medialib (GdkRgbInfo *image_info, GdkImage *image, + gint x0, gint y0, gint width, gint height, + guchar *buf, int rowstride, + gint x_align, gint y_align, GdkRgbCmap *cmap) +{ + int y, w; + guchar *obuf, *p; + gint bpl; + guchar *bptr, *bp2; + + bptr = buf; + bpl = image->bpl; + obuf = ((guchar *)image->mem) + y0 * bpl + x0 * 4; + + mlib_VideoColorRGBint_to_BGRAint (obuf, bptr, NULL, 0xff, + width, height, bpl, + rowstride, 0); +} +#endif + static void gdk_rgb_convert_0888_br (GdkRgbInfo *image_info, GdkImage *image, gint x0, gint y0, gint width, gint height, @@ -3131,7 +3154,17 @@ gdk_rgb_select_conv (GdkRgbInfo *image_info) (depth == 24 || depth == 32) && vtype == GDK_VISUAL_TRUE_COLOR && (mask_rgb && byte_order == GDK_LSB_FIRST)) - conv = gdk_rgb_convert_0888; + { +#ifdef USE_MEDIALIB25 + if (_gdk_use_medialib ()) + conv = gdk_rgb_convert_0888_medialib; + else + conv = gdk_rgb_convert_0888; +#else + conv = gdk_rgb_convert_0888; +#endif + } + #if G_BYTE_ORDER == G_BIG_ENDIAN else if (bpp == 32 && depth == 24 && vtype == GDK_VISUAL_TRUE_COLOR && (mask_bgr && byte_order == GDK_MSB_FIRST)) @@ -3148,7 +3181,16 @@ gdk_rgb_select_conv (GdkRgbInfo *image_info) conv = gdk_rgb_convert_8880_br; else if (bpp == 32 && depth == 32 && vtype == GDK_VISUAL_TRUE_COLOR && (mask_rgb && byte_order == GDK_LSB_FIRST)) - conv = gdk_rgb_convert_0888; + { +#ifdef USE_MEDIALIB25 + if (_gdk_use_medialib ()) + conv = gdk_rgb_convert_0888_medialib; + else + conv = gdk_rgb_convert_0888; +#else + conv = gdk_rgb_convert_0888; +#endif + } #endif else if (vtype == GDK_VISUAL_TRUE_COLOR && byte_order == GDK_LSB_FIRST) { |