3 ** Copyright 2009, The Android Open Source Project
5 ** Licensed under the Apache License, Version 2.0 (the "License");
6 ** you may not use this file except in compliance with the License.
7 ** You may obtain a copy of the License at
9 ** http://www.apache.org/licenses/LICENSE-2.0
11 ** Unless required by applicable law or agreed to in writing, software
12 ** distributed under the License is distributed on an "AS IS" BASIS,
13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 ** See the License for the specific language governing permissions and
15 ** limitations under the License.
18 #ifndef ANDROID_BUFFER_ALLOCATOR_H
19 #define ANDROID_BUFFER_ALLOCATOR_H
23 #include <cutils/native_handle.h>
25 #include <utils/Errors.h>
26 #include <utils/KeyedVector.h>
27 #include <utils/threads.h>
28 #include <utils/Singleton.h>
30 #include <ui/PixelFormat.h>
32 #include <hardware/gralloc.h>
36 // ---------------------------------------------------------------------------
40 class GraphicBufferAllocator : public Singleton<GraphicBufferAllocator>
44 USAGE_SW_READ_NEVER = GRALLOC_USAGE_SW_READ_NEVER,
45 USAGE_SW_READ_RARELY = GRALLOC_USAGE_SW_READ_RARELY,
46 USAGE_SW_READ_OFTEN = GRALLOC_USAGE_SW_READ_OFTEN,
47 USAGE_SW_READ_MASK = GRALLOC_USAGE_SW_READ_MASK,
49 USAGE_SW_WRITE_NEVER = GRALLOC_USAGE_SW_WRITE_NEVER,
50 USAGE_SW_WRITE_RARELY = GRALLOC_USAGE_SW_WRITE_RARELY,
51 USAGE_SW_WRITE_OFTEN = GRALLOC_USAGE_SW_WRITE_OFTEN,
52 USAGE_SW_WRITE_MASK = GRALLOC_USAGE_SW_WRITE_MASK,
54 USAGE_SOFTWARE_MASK = USAGE_SW_READ_MASK|USAGE_SW_WRITE_MASK,
56 USAGE_HW_TEXTURE = GRALLOC_USAGE_HW_TEXTURE,
57 USAGE_HW_RENDER = GRALLOC_USAGE_HW_RENDER,
58 USAGE_HW_2D = GRALLOC_USAGE_HW_2D,
59 USAGE_HW_MASK = GRALLOC_USAGE_HW_MASK
62 static inline GraphicBufferAllocator& get() { return getInstance(); }
65 status_t alloc(uint32_t w, uint32_t h, PixelFormat format, int usage,
66 buffer_handle_t* handle, int32_t* stride);
68 status_t free(buffer_handle_t handle);
70 void dump(String8& res) const;
71 static void dumpToSystemLog();
84 static KeyedVector<buffer_handle_t, alloc_rec_t> sAllocList;
86 friend class Singleton<GraphicBufferAllocator>;
87 GraphicBufferAllocator();
88 ~GraphicBufferAllocator();
90 alloc_device_t *mAllocDev;
93 // ---------------------------------------------------------------------------
94 }; // namespace android
96 #endif // ANDROID_BUFFER_ALLOCATOR_H