diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/private/ui/SurfaceBuffer.h | 81 | ||||
-rw-r--r-- | include/private/ui/android_natives_priv.h | 47 | ||||
-rw-r--r-- | include/ui/GraphicBuffer.h | 124 | ||||
-rw-r--r-- | include/ui/GraphicBufferAllocator.h | 96 | ||||
-rw-r--r-- | include/ui/GraphicBufferMapper.h (renamed from include/ui/BufferMapper.h) | 8 | ||||
-rw-r--r-- | include/ui/ISurface.h | 4 | ||||
-rw-r--r-- | include/ui/Surface.h | 16 | ||||
-rw-r--r-- | include/ui/android_native_buffer.h | 62 |
8 files changed, 297 insertions, 141 deletions
diff --git a/include/private/ui/SurfaceBuffer.h b/include/private/ui/SurfaceBuffer.h deleted file mode 100644 index 73e517b..0000000 --- a/include/private/ui/SurfaceBuffer.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (C) 2007 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef ANDROID_UI_PRIVATE_SURFACE_BUFFER_H -#define ANDROID_UI_PRIVATE_SURFACE_BUFFER_H - -#include <stdint.h> -#include <sys/types.h> - -#include <utils/RefBase.h> - -#include <private/ui/android_natives_priv.h> - -namespace android { - -// --------------------------------------------------------------------------- - -class BufferMapper; -class Parcel; -class Rect; -class Surface; -class SurfaceBuffer; - -// --------------------------------------------------------------------------- - -class SurfaceBuffer - : public EGLNativeBase< - android_native_buffer_t, - SurfaceBuffer, - LightRefBase<SurfaceBuffer> > -{ -public: - status_t lock(uint32_t usage, void** vaddr); - status_t lock(uint32_t usage, const Rect& rect, void** vaddr); - status_t unlock(); - - void setIndex(int index); - int getIndex() const; - -protected: - SurfaceBuffer(); - SurfaceBuffer(const Parcel& reply); - virtual ~SurfaceBuffer(); - bool mOwner; - - inline const BufferMapper& getBufferMapper() const { return mBufferMapper; } - inline BufferMapper& getBufferMapper() { return mBufferMapper; } - -private: - friend class Surface; - friend class BpSurface; - friend class BnSurface; - friend class LightRefBase<SurfaceBuffer>; - - SurfaceBuffer& operator = (const SurfaceBuffer& rhs); - const SurfaceBuffer& operator = (const SurfaceBuffer& rhs) const; - - static status_t writeToParcel(Parcel* reply, - android_native_buffer_t const* buffer); - - BufferMapper& mBufferMapper; - int mIndex; -}; - -}; // namespace android - -#endif // ANDROID_UI_PRIVATE_SURFACE_BUFFER_H - diff --git a/include/private/ui/android_natives_priv.h b/include/private/ui/android_natives_priv.h index 9c92af8..6b9f524 100644 --- a/include/private/ui/android_natives_priv.h +++ b/include/private/ui/android_natives_priv.h @@ -14,49 +14,4 @@ * limitations under the License. */ -#ifndef ANDROID_ANDROID_NATIVES_PRIV_H -#define ANDROID_ANDROID_NATIVES_PRIV_H - -#include <ui/egl/android_natives.h> - -#ifdef __cplusplus -extern "C" { -#endif - -/*****************************************************************************/ - -typedef struct android_native_buffer_t -{ -#ifdef __cplusplus - android_native_buffer_t() { - common.magic = ANDROID_NATIVE_BUFFER_MAGIC; - common.version = sizeof(android_native_buffer_t); - memset(common.reserved, 0, sizeof(common.reserved)); - } -#endif - - struct android_native_base_t common; - - int width; - int height; - int stride; - int format; - int usage; - - void* reserved[2]; - - buffer_handle_t handle; - - void* reserved_proc[8]; -} android_native_buffer_t; - - -/*****************************************************************************/ - -#ifdef __cplusplus -} -#endif - -/*****************************************************************************/ - -#endif /* ANDROID_ANDROID_NATIVES_PRIV_H */ +#include <ui/android_native_buffer.h> diff --git a/include/ui/GraphicBuffer.h b/include/ui/GraphicBuffer.h new file mode 100644 index 0000000..8897f03 --- /dev/null +++ b/include/ui/GraphicBuffer.h @@ -0,0 +1,124 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ANDROID_GRAPHIC_BUFFER_H +#define ANDROID_GRAPHIC_BUFFER_H + +#include <stdint.h> +#include <sys/types.h> + +#include <ui/android_native_buffer.h> +#include <ui/PixelFormat.h> +#include <ui/Rect.h> +#include <pixelflinger/pixelflinger.h> + +struct android_native_buffer_t; + +namespace android { + +class GraphicBufferMapper; +class Parcel; + +// =========================================================================== +// GraphicBuffer +// =========================================================================== + +class GraphicBuffer + : public EGLNativeBase< + android_native_buffer_t, + GraphicBuffer, + LightRefBase<GraphicBuffer> > +{ +public: + + enum { + USAGE_SW_READ_NEVER = GRALLOC_USAGE_SW_READ_NEVER, + USAGE_SW_READ_RARELY = GRALLOC_USAGE_SW_READ_RARELY, + USAGE_SW_READ_OFTEN = GRALLOC_USAGE_SW_READ_OFTEN, + USAGE_SW_READ_MASK = GRALLOC_USAGE_SW_READ_MASK, + + USAGE_SW_WRITE_NEVER = GRALLOC_USAGE_SW_WRITE_NEVER, + USAGE_SW_WRITE_RARELY = GRALLOC_USAGE_SW_WRITE_RARELY, + USAGE_SW_WRITE_OFTEN = GRALLOC_USAGE_SW_WRITE_OFTEN, + USAGE_SW_WRITE_MASK = GRALLOC_USAGE_SW_WRITE_MASK, + + USAGE_SOFTWARE_MASK = USAGE_SW_READ_MASK|USAGE_SW_WRITE_MASK, + + USAGE_HW_TEXTURE = GRALLOC_USAGE_HW_TEXTURE, + USAGE_HW_RENDER = GRALLOC_USAGE_HW_RENDER, + USAGE_HW_2D = GRALLOC_USAGE_HW_2D, + USAGE_HW_MASK = GRALLOC_USAGE_HW_MASK + }; + + GraphicBuffer(); + + // creates w * h buffer + GraphicBuffer(uint32_t w, uint32_t h, PixelFormat format, uint32_t ssage); + + // return status + status_t initCheck() const; + + uint32_t getWidth() const { return width; } + uint32_t getHeight() const { return height; } + uint32_t getStride() const { return stride; } + uint32_t getUsage() const { return usage; } + PixelFormat getPixelFormat() const { return format; } + Rect getBounds() const { return Rect(width, height); } + + status_t reallocate(uint32_t w, uint32_t h, PixelFormat f, uint32_t usage); + + status_t lock(uint32_t usage, void** vaddr); + status_t lock(uint32_t usage, const Rect& rect, void** vaddr); + status_t lock(GGLSurface* surface, uint32_t usage); + status_t unlock(); + + android_native_buffer_t* getNativeBuffer() const; + + void setIndex(int index); + int getIndex() const; + +protected: + GraphicBuffer(const Parcel& reply); + virtual ~GraphicBuffer(); + + inline const GraphicBufferMapper& getBufferMapper() const { return mBufferMapper; } + inline GraphicBufferMapper& getBufferMapper() { return mBufferMapper; } + bool mOwner; + +private: + friend class Surface; + friend class BpSurface; + friend class BnSurface; + friend class LightRefBase<GraphicBuffer>; + GraphicBuffer(const GraphicBuffer& rhs); + GraphicBuffer& operator = (const GraphicBuffer& rhs); + const GraphicBuffer& operator = (const GraphicBuffer& rhs) const; + + status_t initSize(uint32_t w, uint32_t h, PixelFormat format, + uint32_t usage); + + static status_t writeToParcel(Parcel* reply, + android_native_buffer_t const* buffer); + + GraphicBufferMapper& mBufferMapper; + ssize_t mInitCheck; + uint32_t mVStride; + int mIndex; +}; + +}; // namespace android + +#endif // ANDROID_GRAPHIC_BUFFER_H diff --git a/include/ui/GraphicBufferAllocator.h b/include/ui/GraphicBufferAllocator.h new file mode 100644 index 0000000..be9c79b --- /dev/null +++ b/include/ui/GraphicBufferAllocator.h @@ -0,0 +1,96 @@ +/* +** +** Copyright 2009, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + +#ifndef ANDROID_BUFFER_ALLOCATOR_H +#define ANDROID_BUFFER_ALLOCATOR_H + +#include <stdint.h> + +#include <cutils/native_handle.h> + +#include <utils/Errors.h> +#include <utils/KeyedVector.h> +#include <utils/threads.h> +#include <utils/Singleton.h> + +#include <ui/PixelFormat.h> + +#include <hardware/gralloc.h> + + +namespace android { +// --------------------------------------------------------------------------- + +class String8; + +class GraphicBufferAllocator : public Singleton<GraphicBufferAllocator> +{ +public: + enum { + USAGE_SW_READ_NEVER = GRALLOC_USAGE_SW_READ_NEVER, + USAGE_SW_READ_RARELY = GRALLOC_USAGE_SW_READ_RARELY, + USAGE_SW_READ_OFTEN = GRALLOC_USAGE_SW_READ_OFTEN, + USAGE_SW_READ_MASK = GRALLOC_USAGE_SW_READ_MASK, + + USAGE_SW_WRITE_NEVER = GRALLOC_USAGE_SW_WRITE_NEVER, + USAGE_SW_WRITE_RARELY = GRALLOC_USAGE_SW_WRITE_RARELY, + USAGE_SW_WRITE_OFTEN = GRALLOC_USAGE_SW_WRITE_OFTEN, + USAGE_SW_WRITE_MASK = GRALLOC_USAGE_SW_WRITE_MASK, + + USAGE_SOFTWARE_MASK = USAGE_SW_READ_MASK|USAGE_SW_WRITE_MASK, + + USAGE_HW_TEXTURE = GRALLOC_USAGE_HW_TEXTURE, + USAGE_HW_RENDER = GRALLOC_USAGE_HW_RENDER, + USAGE_HW_2D = GRALLOC_USAGE_HW_2D, + USAGE_HW_MASK = GRALLOC_USAGE_HW_MASK + }; + + static inline GraphicBufferAllocator& get() { return getInstance(); } + + + status_t alloc(uint32_t w, uint32_t h, PixelFormat format, int usage, + buffer_handle_t* handle, int32_t* stride); + + status_t free(buffer_handle_t handle); + + void dump(String8& res) const; + +private: + struct alloc_rec_t { + uint32_t w; + uint32_t h; + PixelFormat format; + uint32_t usage; + void* vaddr; + size_t size; + }; + + static Mutex sLock; + static KeyedVector<buffer_handle_t, alloc_rec_t> sAllocList; + + friend class Singleton<GraphicBufferAllocator>; + GraphicBufferAllocator(); + ~GraphicBufferAllocator(); + + mutable Mutex mLock; + alloc_device_t *mAllocDev; +}; + +// --------------------------------------------------------------------------- +}; // namespace android + +#endif // ANDROID_BUFFER_ALLOCATOR_H diff --git a/include/ui/BufferMapper.h b/include/ui/GraphicBufferMapper.h index 5f084be..697a02a 100644 --- a/include/ui/BufferMapper.h +++ b/include/ui/GraphicBufferMapper.h @@ -33,10 +33,10 @@ namespace android { class Rect; -class BufferMapper : public Singleton<BufferMapper> +class GraphicBufferMapper : public Singleton<GraphicBufferMapper> { public: - static inline BufferMapper& get() { return getInstance(); } + static inline GraphicBufferMapper& get() { return getInstance(); } status_t registerBuffer(buffer_handle_t handle); @@ -51,8 +51,8 @@ public: void dump(buffer_handle_t handle); private: - friend class Singleton<BufferMapper>; - BufferMapper(); + friend class Singleton<GraphicBufferMapper>; + GraphicBufferMapper(); gralloc_module_t const *mAllocMod; }; diff --git a/include/ui/ISurface.h b/include/ui/ISurface.h index 1283033..2ca0026 100644 --- a/include/ui/ISurface.h +++ b/include/ui/ISurface.h @@ -34,7 +34,7 @@ typedef int32_t SurfaceID; class IMemoryHeap; class OverlayRef; -class SurfaceBuffer; +class GraphicBuffer; class ISurface : public IInterface { @@ -50,7 +50,7 @@ protected: public: DECLARE_META_INTERFACE(Surface); - virtual sp<SurfaceBuffer> requestBuffer(int bufferIdx, int usage) = 0; + virtual sp<GraphicBuffer> requestBuffer(int bufferIdx, int usage) = 0; class BufferHeap { public: diff --git a/include/ui/Surface.h b/include/ui/Surface.h index 2cedeb6..70303cd 100644 --- a/include/ui/Surface.h +++ b/include/ui/Surface.h @@ -34,7 +34,7 @@ namespace android { // --------------------------------------------------------------------------- -class BufferMapper; +class GraphicBufferMapper; class IOMX; class Rect; class Surface; @@ -192,8 +192,8 @@ private: status_t validate(SharedClient const* cblk) const; - inline const BufferMapper& getBufferMapper() const { return mBufferMapper; } - inline BufferMapper& getBufferMapper() { return mBufferMapper; } + inline const GraphicBufferMapper& getBufferMapper() const { return mBufferMapper; } + inline GraphicBufferMapper& getBufferMapper() { return mBufferMapper; } static int setSwapInterval(android_native_window_t* window, int interval); static int dequeueBuffer(android_native_window_t* window, android_native_buffer_t** buffer); @@ -208,7 +208,7 @@ private: int query(int what, int* value); int perform(int operation, va_list args); - status_t dequeueBuffer(sp<SurfaceBuffer>* buffer); + status_t dequeueBuffer(sp<GraphicBuffer>* buffer); void setUsage(uint32_t reqUsage); @@ -221,7 +221,7 @@ private: uint32_t mIdentity; PixelFormat mFormat; uint32_t mFlags; - BufferMapper& mBufferMapper; + GraphicBufferMapper& mBufferMapper; SharedBufferClient* mSharedBufferClient; // protected by mSurfaceLock @@ -230,12 +230,12 @@ private: // protected by mSurfaceLock. These are also used from lock/unlock // but in that case, they must be called form the same thread. - sp<SurfaceBuffer> mBuffers[2]; + sp<GraphicBuffer> mBuffers[2]; mutable Region mDirtyRegion; // must be used from the lock/unlock thread - sp<SurfaceBuffer> mLockedBuffer; - sp<SurfaceBuffer> mPostedBuffer; + sp<GraphicBuffer> mLockedBuffer; + sp<GraphicBuffer> mPostedBuffer; mutable Region mOldDirtyRegion; bool mNeedFullUpdate; diff --git a/include/ui/android_native_buffer.h b/include/ui/android_native_buffer.h new file mode 100644 index 0000000..9c92af8 --- /dev/null +++ b/include/ui/android_native_buffer.h @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ANDROID_ANDROID_NATIVES_PRIV_H +#define ANDROID_ANDROID_NATIVES_PRIV_H + +#include <ui/egl/android_natives.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/*****************************************************************************/ + +typedef struct android_native_buffer_t +{ +#ifdef __cplusplus + android_native_buffer_t() { + common.magic = ANDROID_NATIVE_BUFFER_MAGIC; + common.version = sizeof(android_native_buffer_t); + memset(common.reserved, 0, sizeof(common.reserved)); + } +#endif + + struct android_native_base_t common; + + int width; + int height; + int stride; + int format; + int usage; + + void* reserved[2]; + + buffer_handle_t handle; + + void* reserved_proc[8]; +} android_native_buffer_t; + + +/*****************************************************************************/ + +#ifdef __cplusplus +} +#endif + +/*****************************************************************************/ + +#endif /* ANDROID_ANDROID_NATIVES_PRIV_H */ |