Statistics
| Branch: | Revision:

root / qemu-pixman.c @ daa8e5a0

History | View | Annotate | Download (1.7 kB)

1
/*
2
 * This work is licensed under the terms of the GNU GPL, version 2 or later.
3
 * See the COPYING file in the top-level directory.
4
 */
5

    
6
#include "qemu-pixman.h"
7

    
8
int qemu_pixman_get_type(int rshift, int gshift, int bshift)
9
{
10
    int type = PIXMAN_TYPE_OTHER;
11

    
12
    if (rshift > gshift && gshift > bshift) {
13
        if (bshift == 0) {
14
            type = PIXMAN_TYPE_ARGB;
15
        } else {
16
#if PIXMAN_VERSION >= PIXMAN_VERSION_ENCODE(0, 21, 8)
17
            type = PIXMAN_TYPE_RGBA;
18
#endif
19
        }
20
    } else if (rshift < gshift && gshift < bshift) {
21
        if (rshift == 0) {
22
            type = PIXMAN_TYPE_ABGR;
23
        } else {
24
            type = PIXMAN_TYPE_BGRA;
25
        }
26
    }
27
    return type;
28
}
29

    
30
pixman_format_code_t qemu_pixman_get_format(PixelFormat *pf)
31
{
32
    pixman_format_code_t format;
33
    int type;
34

    
35
    type = qemu_pixman_get_type(pf->rshift, pf->gshift, pf->bshift);
36
    format = PIXMAN_FORMAT(pf->bits_per_pixel, type,
37
                           pf->abits, pf->rbits, pf->gbits, pf->bbits);
38
    if (!pixman_format_supported_source(format)) {
39
        return 0;
40
    }
41
    return format;
42
}
43

    
44
pixman_image_t *qemu_pixman_linebuf_create(pixman_format_code_t format,
45
                                           int width)
46
{
47
    pixman_image_t *image = pixman_image_create_bits(format, width, 1, NULL, 0);
48
    assert(image != NULL);
49
    return image;
50
}
51

    
52
void qemu_pixman_linebuf_fill(pixman_image_t *linebuf, pixman_image_t *fb,
53
                              int width, int y)
54
{
55
    pixman_image_composite(PIXMAN_OP_SRC, fb, NULL, linebuf,
56
                           0, y, 0, 0, 0, 0, width, 1);
57
}
58

    
59
void qemu_pixman_image_unref(pixman_image_t *image)
60
{
61
    if (image == NULL) {
62
        return;
63
    }
64
    pixman_image_unref(image);
65
}