• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
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_ISURFACE_H
18 #define ANDROID_ISURFACE_H
19 
20 #include <stdint.h>
21 #include <sys/types.h>
22 
23 #include <utils/Errors.h>
24 #include <binder/IInterface.h>
25 #include <utils/RefBase.h>
26 #include <ui/PixelFormat.h>
27 
28 #include <hardware/hardware.h>
29 #include <hardware/gralloc.h>
30 
31 namespace android {
32 
33 typedef int32_t    SurfaceID;
34 
35 class IMemoryHeap;
36 class OverlayRef;
37 class GraphicBuffer;
38 
39 class ISurface : public IInterface
40 {
41 protected:
42     enum {
43         REGISTER_BUFFERS = IBinder::FIRST_CALL_TRANSACTION,
44         UNREGISTER_BUFFERS,
45         POST_BUFFER, // one-way transaction
46         CREATE_OVERLAY,
47         REQUEST_BUFFER,
48     };
49 
50 public:
51     DECLARE_META_INTERFACE(Surface);
52 
53     virtual sp<GraphicBuffer> requestBuffer(int bufferIdx, int usage) = 0;
54 
55     class BufferHeap {
56     public:
57         enum {
58             /* rotate source image 90 degrees */
59             ROT_90    = HAL_TRANSFORM_ROT_90,
60         };
61         BufferHeap();
62 
63         BufferHeap(uint32_t w, uint32_t h,
64                 int32_t hor_stride, int32_t ver_stride,
65                 PixelFormat format, const sp<IMemoryHeap>& heap);
66 
67         BufferHeap(uint32_t w, uint32_t h,
68                 int32_t hor_stride, int32_t ver_stride,
69                 PixelFormat format, uint32_t transform, uint32_t flags,
70                 const sp<IMemoryHeap>& heap);
71 
72         ~BufferHeap();
73 
74         uint32_t w;
75         uint32_t h;
76         int32_t hor_stride;
77         int32_t ver_stride;
78         PixelFormat format;
79         uint32_t transform;
80         uint32_t flags;
81         sp<IMemoryHeap> heap;
82     };
83 
84     virtual status_t registerBuffers(const BufferHeap& buffers) = 0;
85     virtual void postBuffer(ssize_t offset) = 0; // one-way
86     virtual void unregisterBuffers() = 0;
87 
88     virtual sp<OverlayRef> createOverlay(
89             uint32_t w, uint32_t h, int32_t format) = 0;
90 };
91 
92 // ----------------------------------------------------------------------------
93 
94 class BnSurface : public BnInterface<ISurface>
95 {
96 public:
97     virtual status_t    onTransact( uint32_t code,
98                                     const Parcel& data,
99                                     Parcel* reply,
100                                     uint32_t flags = 0);
101 };
102 
103 // ----------------------------------------------------------------------------
104 
105 }; // namespace android
106 
107 #endif // ANDROID_ISURFACE_H
108