blob: a9ae1c436470a12c1021c2f7e400da6c0e82e857 [file] [log] [blame]
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001/*
2 * Copyright (C) 2007 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef ANDROID_OVERLAY_H
18#define ANDROID_OVERLAY_H
19
20#include <stdint.h>
21#include <sys/types.h>
22
23#include <utils/Errors.h>
Mathias Agopian07952722009-05-19 19:08:10 -070024#include <binder/IInterface.h>
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080025#include <utils/RefBase.h>
26#include <utils/threads.h>
27
28#include <ui/PixelFormat.h>
29#include <ui/IOverlay.h>
30
31#include <hardware/overlay.h>
32
33namespace android {
34
35class IMemory;
36class IMemoryHeap;
37
38// ----------------------------------------------------------------------------
39
40class OverlayRef : public LightRefBase<OverlayRef>
41{
42public:
43 OverlayRef(overlay_handle_t, const sp<IOverlay>&,
44 uint32_t w, uint32_t h, int32_t f, uint32_t ws, uint32_t hs);
45
46 static sp<OverlayRef> readFromParcel(const Parcel& data);
47 static status_t writeToParcel(Parcel* reply, const sp<OverlayRef>& o);
48
49private:
50 friend class LightRefBase<OverlayRef>;
51 friend class Overlay;
52
53 OverlayRef();
54 virtual ~OverlayRef();
55
56 overlay_handle_t mOverlayHandle;
57 sp<IOverlay> mOverlayChannel;
58 uint32_t mWidth;
59 uint32_t mHeight;
60 int32_t mFormat;
61 int32_t mWidthStride;
62 int32_t mHeightStride;
63 bool mOwnHandle;
64};
65
66// ----------------------------------------------------------------------------
67
68class Overlay : public virtual RefBase
69{
70public:
71 Overlay(const sp<OverlayRef>& overlayRef);
72
73 /* destroys this overlay */
74 void destroy();
75
76 /* get the HAL handle for this overlay */
77 overlay_handle_t getHandleRef() const;
78
79 /* blocks until an overlay buffer is available and return that buffer. */
80 status_t dequeueBuffer(overlay_buffer_t* buffer);
81
82 /* release the overlay buffer and post it */
83 status_t queueBuffer(overlay_buffer_t buffer);
84
Benny Wong4ccee712009-07-24 19:25:30 -050085 /* change the width and height of the overlay */
86 status_t resizeInput(uint32_t width, uint32_t height);
87
Benny Wong6d2090e2009-07-15 18:44:27 -050088 status_t setCrop(uint32_t x, uint32_t y, uint32_t w, uint32_t h) ;
89
90 status_t getCrop(uint32_t* x, uint32_t* y, uint32_t* w, uint32_t* h) ;
91
Benny Wong4ccee712009-07-24 19:25:30 -050092 /* set the buffer attributes */
93 status_t setParameter(int param, int value);
94
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080095 /* returns the address of a given buffer if supported, NULL otherwise. */
96 void* getBufferAddress(overlay_buffer_t buffer);
97
98 /* get physical informations about the overlay */
99 uint32_t getWidth() const;
100 uint32_t getHeight() const;
101 int32_t getFormat() const;
102 int32_t getWidthStride() const;
103 int32_t getHeightStride() const;
104 int32_t getBufferCount() const;
105 status_t getStatus() const;
106
107private:
108 virtual ~Overlay();
109
110 sp<OverlayRef> mOverlayRef;
111 overlay_data_device_t *mOverlayData;
112 status_t mStatus;
113};
114
115// ----------------------------------------------------------------------------
116
117}; // namespace android
118
119#endif // ANDROID_OVERLAY_H