2010-05-24 Jer Noble <jer.noble@apple.com>
[WebKit-https.git] / WebCore / platform / graphics / win / WKCAImageQueue.h
1 /*
2  * Copyright (C) 2010 Apple Inc. All rights reserved.
3  * 
4  * Redistribution and use in source and binary forms, with or without 
5  * modification, are permitted provided that the following conditions 
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright 
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the 
11  *    documentation and/or other materials provided with the distribution.
12  * 
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS \93AS IS\94 
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef WKCAImageQueue_h
27 #define WKCAImageQueue_h
28
29 #if USE(ACCELERATED_COMPOSITING)
30
31 typedef const void * CFTypeRef;
32 typedef const struct __CFDictionary * CFDictionaryRef;
33
34 #include <stdint.h>
35 #include <wtf/OwnPtr.h>
36
37 namespace WebCore {
38
39 class WKCAImageQueuePrivate;
40
41 class WKCAImageQueue {
42 public:
43     enum Flags {
44         Async = 1U << 0,
45         Fill  = 1U << 1,
46         Protected = 1U << 2,
47         UseCleanAperture = 1U << 3,
48         UseAspectRatio = 1U << 4,
49         LowQualityColor = 1U << 5,
50     };
51
52     enum ImageType {
53         Nil = 1,
54         Surface,
55         Buffer,
56         IOSurface,
57     };
58
59     enum ImageFlags {
60         Opaque = 1U << 0,
61         Flush = 1U << 1,
62         WillFlush = 1U << 2,
63         Flipped = 1U << 3,
64         WaitGPU = 1U << 4,
65     };
66
67     typedef void (*ReleaseCallback)(unsigned int type, uint64_t id, void* info);
68
69     WKCAImageQueue(uint32_t width, uint32_t height, uint32_t capacity);
70     ~WKCAImageQueue(void);
71
72     size_t collect();
73
74     bool insertImage(double t, unsigned int type, uint64_t id, uint32_t flags, ReleaseCallback release, void* info);
75     uint64_t registerPixelBuffer(void *data, size_t data_size, size_t rowbytes, size_t width, size_t height, uint32_t pixel_format, CFDictionaryRef attachments, uint32_t flags);
76
77     uint32_t flags() const;
78     void setFlags(uint32_t mask, uint32_t flags);
79
80     CFTypeRef get();
81
82 private:
83     WKCAImageQueue(const WKCAImageQueue&);
84     WKCAImageQueue& operator=(const WKCAImageQueue&);
85     OwnPtr<WKCAImageQueuePrivate> m_private;
86 };
87
88 }
89
90 #endif
91
92 #endif