import exynos 7570 bsp
[GitHub/LineageOS/android_hardware_samsung_slsi_exynos.git] / libfimg4x / FimgExynos5.h
1 /*
2 **
3 ** Copyright 2008, The Android Open Source Project
4 ** Copyright 2009 Samsung Electronics Co, Ltd. All Rights Reserved.
5 **
6 ** Licensed under the Apache License, Version 2.0 (the "License");
7 ** you may not use this file except in compliance with the License.
8 ** You may obtain a copy of the License at
9 **
10 ** http://www.apache.org/licenses/LICENSE-2.0
11 **
12 ** Unless required by applicable law or agreed to in writing, software
13 ** distributed under the License is distributed on an "AS IS" BASIS,
14 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 ** See the License for the specific language governing permissions and
16 ** limitations under the License.
17 **
18 **
19 */
20
21 #ifndef FIMG_EXYNOS5_H
22 #define FIMG_EXYNOS5_H
23
24 #include <stdio.h>
25 #include <string.h>
26 #include <stdlib.h>
27
28 #include <fcntl.h>
29 #include <unistd.h>
30 #include <errno.h>
31 #include <signal.h>
32 #include <sys/mman.h>
33 #include <sys/time.h>
34 #include <sys/ioctl.h>
35 #include <sys/poll.h>
36 #include <sys/stat.h>
37
38 #include <utils/threads.h>
39 #include <utils/StopWatch.h>
40
41 #include "FimgApi.h"
42
43 #include "sec_g2d_4x.h"
44
45 namespace android
46 {
47
48 #define NUMBER_FIMG_LIST (1)
49 #define GET_RECT_SIZE(rect) ((rect->full_w) * (rect->h) * (rect->bytes_per_pixel))
50 #define GET_REAL_SIZE(rect) ((rect->full_w) * (rect->h) * (rect->bytes_per_pixel))
51 #define GET_START_ADDR(rect) (rect->virt_addr + ((rect->y * rect->full_w) * rect->bytes_per_pixel))
52 #define SLEEP_TIME (100000) // 100 msec
53
54 int compare_size[][4] = { {160, 97, 240, 146}, {228, 228, 266, 266}, {160, 97, 280, 170} };
55
56 //---------------------------------------------------------------------------//
57 // class FimgV4x : public FimgBase
58 //---------------------------------------------------------------------------//
59 class FimgV4x : public FimgApi
60 {
61 private :
62 int m_g2dFd;
63
64 unsigned char *m_g2dVirtAddr;
65 unsigned int m_g2dSize;
66 unsigned char *m_g2dSrcVirtAddr;
67 unsigned int m_g2dSrcSize;
68 unsigned char *m_g2dDstVirtAddr;
69 unsigned int m_g2dDstSize;
70 struct pollfd m_g2dPoll;
71
72 Mutex m_lock;
73
74 static unsigned m_curFimgV4xIndex;
75 static int m_numOfInstance;
76
77 static FimgApi *m_ptrFimgApiList[NUMBER_FIMG_LIST];
78
79 protected :
80 FimgV4x();
81 virtual ~FimgV4x();
82
83 public:
84 static FimgApi *CreateInstance();
85 static void DestroyInstance(FimgApi *ptrFimgApi);
86 static void DestroyAllInstance(void);
87
88 protected:
89 virtual bool t_Create(void);
90 virtual bool t_Destroy(void);
91 virtual bool t_Stretch(struct fimg2d_blit *cmd);
92 virtual bool t_Sync(void);
93 virtual bool t_Lock(void);
94 virtual bool t_UnLock(void);
95
96 private:
97 bool m_CreateG2D(void);
98 bool m_DestroyG2D(void);
99
100 bool m_DoG2D(struct fimg2d_blit *cmd);
101
102 inline bool m_PollG2D(struct pollfd *events);
103
104 inline int m_ColorFormatFimgApi2FimgHw(int colorFormat);
105 };
106
107 class FimgApiAutoFreeThread;
108
109 static sp<FimgApiAutoFreeThread> fimgApiAutoFreeThread = 0;
110
111 class FimgApiAutoFreeThread : public Thread
112 {
113 private:
114 bool mOneMoreSleep;
115 bool mDestroyed;
116
117 public:
118 FimgApiAutoFreeThread(void):
119 Thread(false),
120 mOneMoreSleep(true),
121 mDestroyed(false)
122 { }
123 ~FimgApiAutoFreeThread(void)
124 {
125 if (mDestroyed == false) {
126 FimgV4x::DestroyAllInstance();
127 mDestroyed = true;
128 }
129 }
130
131 virtual void onFirstRef()
132 {
133 run("FimgApiAutoFreeThread", PRIORITY_BACKGROUND);
134 }
135
136 virtual bool threadLoop()
137 {
138
139 if (mOneMoreSleep == true) {
140 mOneMoreSleep = false;
141 usleep(SLEEP_TIME);
142
143 return true;
144 }
145 else {
146 if (mDestroyed == false) {
147 FimgV4x::DestroyAllInstance();
148 mDestroyed = true;
149 }
150
151 fimgApiAutoFreeThread = 0;
152
153 return false;
154 }
155 }
156
157 void SetOneMoreSleep(void)
158 {
159 mOneMoreSleep = true;
160 }
161 };
162
163 }; // namespace android
164
165 #endif // FIMG_EXYNOS5_H