Coverage Report

Created: 2024-05-20 06:11

/src/FreeRDP/libfreerdp/primitives/prim_internal.h
Line
Count
Source (jump to first uncovered line)
1
/* prim_internal.h
2
 * vi:ts=4 sw=4
3
 *
4
 * (c) Copyright 2012 Hewlett-Packard Development Company, L.P.
5
 * Licensed under the Apache License, Version 2.0 (the "License"); you may
6
 * not use this file except in compliance with the License. You may obtain
7
 * a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
8
 * Unless required by applicable law or agreed to in writing, software
9
 * distributed under the License is distributed on an "AS IS" BASIS,
10
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11
 * or implied. See the License for the specific language governing
12
 * permissions and limitations under the License.  Algorithms used by
13
 * this code may be covered by patents by HP, Microsoft, or other parties.
14
 *
15
 */
16
17
#ifndef FREERDP_LIB_PRIM_INTERNAL_H
18
#define FREERDP_LIB_PRIM_INTERNAL_H
19
20
#include <freerdp/config.h>
21
22
#include <freerdp/primitives.h>
23
#include <freerdp/api.h>
24
25
#ifdef __GNUC__
26
#define PRIM_ALIGN_128 __attribute__((aligned(16)))
27
#else
28
#ifdef _WIN32
29
#define PRIM_ALIGN_128 __declspec(align(16))
30
#endif
31
#endif
32
33
#if defined(WITH_SSE2) || defined(WITH_NEON) || defined(WITH_OPENCL)
34
#define HAVE_OPTIMIZED_PRIMITIVES 1
35
#endif
36
37
#if defined(WITH_SSE2) || defined(WITH_NEON)
38
#define HAVE_CPU_OPTIMIZED_PRIMITIVES 1
39
#endif
40
41
#if defined(WITH_SSE2)
42
/* Use lddqu for unaligned; load for 16-byte aligned. */
43
#define LOAD_SI128(_ptr_)                                                       \
44
  (((const ULONG_PTR)(_ptr_)&0x0f) ? _mm_lddqu_si128((const __m128i*)(_ptr_)) \
45
                                   : _mm_load_si128((const __m128i*)(_ptr_)))
46
#endif
47
48
static INLINE BYTE* writePixelBGRA(BYTE* dst, DWORD formatSize, UINT32 format, BYTE R, BYTE G,
49
                                   BYTE B, BYTE A)
50
0
{
51
0
  WINPR_UNUSED(formatSize);
52
0
  WINPR_UNUSED(format);
53
54
0
  *dst++ = B;
55
0
  *dst++ = G;
56
0
  *dst++ = R;
57
0
  *dst++ = A;
58
0
  return dst;
59
0
}
Unexecuted instantiation: primitives.c:writePixelBGRA
Unexecuted instantiation: prim_add.c:writePixelBGRA
Unexecuted instantiation: prim_andor.c:writePixelBGRA
Unexecuted instantiation: prim_alphaComp.c:writePixelBGRA
Unexecuted instantiation: prim_colors.c:writePixelBGRA
Unexecuted instantiation: prim_copy.c:writePixelBGRA
Unexecuted instantiation: prim_set.c:writePixelBGRA
Unexecuted instantiation: prim_shift.c:writePixelBGRA
Unexecuted instantiation: prim_sign.c:writePixelBGRA
Unexecuted instantiation: prim_YUV.c:writePixelBGRA
Unexecuted instantiation: prim_YCoCg.c:writePixelBGRA
60
61
static INLINE BYTE* writePixelBGRX(BYTE* dst, DWORD formatSize, UINT32 format, BYTE R, BYTE G,
62
                                   BYTE B, BYTE A)
63
0
{
64
0
  WINPR_UNUSED(formatSize);
65
0
  WINPR_UNUSED(format);
66
0
  WINPR_UNUSED(A);
67
68
0
  *dst++ = B;
69
0
  *dst++ = G;
70
0
  *dst++ = R;
71
0
  dst++; /* Do not touch alpha */
72
73
0
  return dst;
74
0
}
Unexecuted instantiation: primitives.c:writePixelBGRX
Unexecuted instantiation: prim_add.c:writePixelBGRX
Unexecuted instantiation: prim_andor.c:writePixelBGRX
Unexecuted instantiation: prim_alphaComp.c:writePixelBGRX
Unexecuted instantiation: prim_colors.c:writePixelBGRX
Unexecuted instantiation: prim_copy.c:writePixelBGRX
Unexecuted instantiation: prim_set.c:writePixelBGRX
Unexecuted instantiation: prim_shift.c:writePixelBGRX
Unexecuted instantiation: prim_sign.c:writePixelBGRX
Unexecuted instantiation: prim_YUV.c:writePixelBGRX
Unexecuted instantiation: prim_YCoCg.c:writePixelBGRX
75
76
static INLINE BYTE* writePixelRGBA(BYTE* dst, DWORD formatSize, UINT32 format, BYTE R, BYTE G,
77
                                   BYTE B, BYTE A)
78
0
{
79
0
  WINPR_UNUSED(formatSize);
80
0
  WINPR_UNUSED(format);
81
82
0
  *dst++ = R;
83
0
  *dst++ = G;
84
0
  *dst++ = B;
85
0
  *dst++ = A;
86
0
  return dst;
87
0
}
Unexecuted instantiation: primitives.c:writePixelRGBA
Unexecuted instantiation: prim_add.c:writePixelRGBA
Unexecuted instantiation: prim_andor.c:writePixelRGBA
Unexecuted instantiation: prim_alphaComp.c:writePixelRGBA
Unexecuted instantiation: prim_colors.c:writePixelRGBA
Unexecuted instantiation: prim_copy.c:writePixelRGBA
Unexecuted instantiation: prim_set.c:writePixelRGBA
Unexecuted instantiation: prim_shift.c:writePixelRGBA
Unexecuted instantiation: prim_sign.c:writePixelRGBA
Unexecuted instantiation: prim_YUV.c:writePixelRGBA
Unexecuted instantiation: prim_YCoCg.c:writePixelRGBA
88
89
static INLINE BYTE* writePixelRGBX(BYTE* dst, DWORD formatSize, UINT32 format, BYTE R, BYTE G,
90
                                   BYTE B, BYTE A)
91
0
{
92
0
  WINPR_UNUSED(formatSize);
93
0
  WINPR_UNUSED(format);
94
0
  WINPR_UNUSED(A);
95
96
0
  *dst++ = R;
97
0
  *dst++ = G;
98
0
  *dst++ = B;
99
0
  dst++; /* Do not touch alpha */
100
101
0
  return dst;
102
0
}
Unexecuted instantiation: primitives.c:writePixelRGBX
Unexecuted instantiation: prim_add.c:writePixelRGBX
Unexecuted instantiation: prim_andor.c:writePixelRGBX
Unexecuted instantiation: prim_alphaComp.c:writePixelRGBX
Unexecuted instantiation: prim_colors.c:writePixelRGBX
Unexecuted instantiation: prim_copy.c:writePixelRGBX
Unexecuted instantiation: prim_set.c:writePixelRGBX
Unexecuted instantiation: prim_shift.c:writePixelRGBX
Unexecuted instantiation: prim_sign.c:writePixelRGBX
Unexecuted instantiation: prim_YUV.c:writePixelRGBX
Unexecuted instantiation: prim_YCoCg.c:writePixelRGBX
103
104
static INLINE BYTE* writePixelABGR(BYTE* dst, DWORD formatSize, UINT32 format, BYTE R, BYTE G,
105
                                   BYTE B, BYTE A)
106
0
{
107
0
  WINPR_UNUSED(formatSize);
108
0
  WINPR_UNUSED(format);
109
110
0
  *dst++ = A;
111
0
  *dst++ = B;
112
0
  *dst++ = G;
113
0
  *dst++ = R;
114
0
  return dst;
115
0
}
Unexecuted instantiation: primitives.c:writePixelABGR
Unexecuted instantiation: prim_add.c:writePixelABGR
Unexecuted instantiation: prim_andor.c:writePixelABGR
Unexecuted instantiation: prim_alphaComp.c:writePixelABGR
Unexecuted instantiation: prim_colors.c:writePixelABGR
Unexecuted instantiation: prim_copy.c:writePixelABGR
Unexecuted instantiation: prim_set.c:writePixelABGR
Unexecuted instantiation: prim_shift.c:writePixelABGR
Unexecuted instantiation: prim_sign.c:writePixelABGR
Unexecuted instantiation: prim_YUV.c:writePixelABGR
Unexecuted instantiation: prim_YCoCg.c:writePixelABGR
116
117
static INLINE BYTE* writePixelXBGR(BYTE* dst, DWORD formatSize, UINT32 format, BYTE R, BYTE G,
118
                                   BYTE B, BYTE A)
119
0
{
120
0
  WINPR_UNUSED(formatSize);
121
0
  WINPR_UNUSED(format);
122
0
  WINPR_UNUSED(A);
123
124
0
  dst++; /* Do not touch alpha */
125
0
  *dst++ = B;
126
0
  *dst++ = G;
127
0
  *dst++ = R;
128
0
  return dst;
129
0
}
Unexecuted instantiation: primitives.c:writePixelXBGR
Unexecuted instantiation: prim_add.c:writePixelXBGR
Unexecuted instantiation: prim_andor.c:writePixelXBGR
Unexecuted instantiation: prim_alphaComp.c:writePixelXBGR
Unexecuted instantiation: prim_colors.c:writePixelXBGR
Unexecuted instantiation: prim_copy.c:writePixelXBGR
Unexecuted instantiation: prim_set.c:writePixelXBGR
Unexecuted instantiation: prim_shift.c:writePixelXBGR
Unexecuted instantiation: prim_sign.c:writePixelXBGR
Unexecuted instantiation: prim_YUV.c:writePixelXBGR
Unexecuted instantiation: prim_YCoCg.c:writePixelXBGR
130
131
static INLINE BYTE* writePixelARGB(BYTE* dst, DWORD formatSize, UINT32 format, BYTE R, BYTE G,
132
                                   BYTE B, BYTE A)
133
0
{
134
0
  WINPR_UNUSED(formatSize);
135
0
  WINPR_UNUSED(format);
136
137
0
  *dst++ = A;
138
0
  *dst++ = R;
139
0
  *dst++ = G;
140
0
  *dst++ = B;
141
0
  return dst;
142
0
}
Unexecuted instantiation: primitives.c:writePixelARGB
Unexecuted instantiation: prim_add.c:writePixelARGB
Unexecuted instantiation: prim_andor.c:writePixelARGB
Unexecuted instantiation: prim_alphaComp.c:writePixelARGB
Unexecuted instantiation: prim_colors.c:writePixelARGB
Unexecuted instantiation: prim_copy.c:writePixelARGB
Unexecuted instantiation: prim_set.c:writePixelARGB
Unexecuted instantiation: prim_shift.c:writePixelARGB
Unexecuted instantiation: prim_sign.c:writePixelARGB
Unexecuted instantiation: prim_YUV.c:writePixelARGB
Unexecuted instantiation: prim_YCoCg.c:writePixelARGB
143
144
static INLINE BYTE* writePixelXRGB(BYTE* dst, DWORD formatSize, UINT32 format, BYTE R, BYTE G,
145
                                   BYTE B, BYTE A)
146
0
{
147
0
  WINPR_UNUSED(formatSize);
148
0
  WINPR_UNUSED(format);
149
0
  WINPR_UNUSED(A);
150
151
0
  dst++; /* Do not touch alpha */
152
0
  *dst++ = R;
153
0
  *dst++ = G;
154
0
  *dst++ = B;
155
0
  return dst;
156
0
}
Unexecuted instantiation: primitives.c:writePixelXRGB
Unexecuted instantiation: prim_add.c:writePixelXRGB
Unexecuted instantiation: prim_andor.c:writePixelXRGB
Unexecuted instantiation: prim_alphaComp.c:writePixelXRGB
Unexecuted instantiation: prim_colors.c:writePixelXRGB
Unexecuted instantiation: prim_copy.c:writePixelXRGB
Unexecuted instantiation: prim_set.c:writePixelXRGB
Unexecuted instantiation: prim_shift.c:writePixelXRGB
Unexecuted instantiation: prim_sign.c:writePixelXRGB
Unexecuted instantiation: prim_YUV.c:writePixelXRGB
Unexecuted instantiation: prim_YCoCg.c:writePixelXRGB
157
158
static INLINE BYTE* writePixelGenericAlpha(BYTE* dst, DWORD formatSize, UINT32 format, BYTE R,
159
                                           BYTE G, BYTE B, BYTE A)
160
1.25M
{
161
1.25M
  UINT32 color = FreeRDPGetColor(format, R, G, B, A);
162
1.25M
  FreeRDPWriteColor(dst, format, color);
163
1.25M
  return dst + formatSize;
164
1.25M
}
Unexecuted instantiation: primitives.c:writePixelGenericAlpha
Unexecuted instantiation: prim_add.c:writePixelGenericAlpha
Unexecuted instantiation: prim_andor.c:writePixelGenericAlpha
Unexecuted instantiation: prim_alphaComp.c:writePixelGenericAlpha
Unexecuted instantiation: prim_colors.c:writePixelGenericAlpha
Unexecuted instantiation: prim_copy.c:writePixelGenericAlpha
Unexecuted instantiation: prim_set.c:writePixelGenericAlpha
Unexecuted instantiation: prim_shift.c:writePixelGenericAlpha
Unexecuted instantiation: prim_sign.c:writePixelGenericAlpha
Unexecuted instantiation: prim_YUV.c:writePixelGenericAlpha
prim_YCoCg.c:writePixelGenericAlpha
Line
Count
Source
160
1.25M
{
161
1.25M
  UINT32 color = FreeRDPGetColor(format, R, G, B, A);
162
1.25M
  FreeRDPWriteColor(dst, format, color);
163
1.25M
  return dst + formatSize;
164
1.25M
}
165
166
static INLINE BYTE* writePixelGeneric(BYTE* dst, DWORD formatSize, UINT32 format, BYTE R, BYTE G,
167
                                      BYTE B, BYTE A)
168
0
{
169
0
  UINT32 color = FreeRDPGetColor(format, R, G, B, A);
170
0
  FreeRDPWriteColorIgnoreAlpha(dst, format, color);
171
0
  return dst + formatSize;
172
0
}
Unexecuted instantiation: primitives.c:writePixelGeneric
Unexecuted instantiation: prim_add.c:writePixelGeneric
Unexecuted instantiation: prim_andor.c:writePixelGeneric
Unexecuted instantiation: prim_alphaComp.c:writePixelGeneric
Unexecuted instantiation: prim_colors.c:writePixelGeneric
Unexecuted instantiation: prim_copy.c:writePixelGeneric
Unexecuted instantiation: prim_set.c:writePixelGeneric
Unexecuted instantiation: prim_shift.c:writePixelGeneric
Unexecuted instantiation: prim_sign.c:writePixelGeneric
Unexecuted instantiation: prim_YUV.c:writePixelGeneric
Unexecuted instantiation: prim_YCoCg.c:writePixelGeneric
173
174
typedef BYTE* (*fkt_writePixel)(BYTE*, DWORD, UINT32, BYTE, BYTE, BYTE, BYTE);
175
176
static INLINE fkt_writePixel getPixelWriteFunction(DWORD format, BOOL useAlpha)
177
640
{
178
640
  switch (format)
179
640
  {
180
0
    case PIXEL_FORMAT_ARGB32:
181
0
    case PIXEL_FORMAT_XRGB32:
182
0
      return useAlpha ? writePixelARGB : writePixelXRGB;
183
184
0
    case PIXEL_FORMAT_ABGR32:
185
0
    case PIXEL_FORMAT_XBGR32:
186
0
      return useAlpha ? writePixelABGR : writePixelXBGR;
187
188
0
    case PIXEL_FORMAT_RGBA32:
189
0
    case PIXEL_FORMAT_RGBX32:
190
0
      return useAlpha ? writePixelRGBA : writePixelRGBX;
191
192
0
    case PIXEL_FORMAT_BGRA32:
193
0
    case PIXEL_FORMAT_BGRX32:
194
0
      return useAlpha ? writePixelBGRA : writePixelBGRX;
195
196
640
    default:
197
640
      return useAlpha ? writePixelGenericAlpha : writePixelGeneric;
198
640
  }
199
640
}
Unexecuted instantiation: primitives.c:getPixelWriteFunction
Unexecuted instantiation: prim_add.c:getPixelWriteFunction
Unexecuted instantiation: prim_andor.c:getPixelWriteFunction
Unexecuted instantiation: prim_alphaComp.c:getPixelWriteFunction
Unexecuted instantiation: prim_colors.c:getPixelWriteFunction
Unexecuted instantiation: prim_copy.c:getPixelWriteFunction
Unexecuted instantiation: prim_set.c:getPixelWriteFunction
Unexecuted instantiation: prim_shift.c:getPixelWriteFunction
Unexecuted instantiation: prim_sign.c:getPixelWriteFunction
Unexecuted instantiation: prim_YUV.c:getPixelWriteFunction
prim_YCoCg.c:getPixelWriteFunction
Line
Count
Source
177
640
{
178
640
  switch (format)
179
640
  {
180
0
    case PIXEL_FORMAT_ARGB32:
181
0
    case PIXEL_FORMAT_XRGB32:
182
0
      return useAlpha ? writePixelARGB : writePixelXRGB;
183
184
0
    case PIXEL_FORMAT_ABGR32:
185
0
    case PIXEL_FORMAT_XBGR32:
186
0
      return useAlpha ? writePixelABGR : writePixelXBGR;
187
188
0
    case PIXEL_FORMAT_RGBA32:
189
0
    case PIXEL_FORMAT_RGBX32:
190
0
      return useAlpha ? writePixelRGBA : writePixelRGBX;
191
192
0
    case PIXEL_FORMAT_BGRA32:
193
0
    case PIXEL_FORMAT_BGRX32:
194
0
      return useAlpha ? writePixelBGRA : writePixelBGRX;
195
196
640
    default:
197
640
      return useAlpha ? writePixelGenericAlpha : writePixelGeneric;
198
640
  }
199
640
}
200
201
static INLINE BYTE CLIP(INT64 X)
202
3.75M
{
203
3.75M
  if (X > 255L)
204
163k
    return 255L;
205
206
3.59M
  if (X < 0L)
207
655k
    return 0L;
208
209
2.93M
  return (BYTE)X;
210
3.59M
}
Unexecuted instantiation: primitives.c:CLIP
Unexecuted instantiation: prim_add.c:CLIP
Unexecuted instantiation: prim_andor.c:CLIP
Unexecuted instantiation: prim_alphaComp.c:CLIP
Unexecuted instantiation: prim_colors.c:CLIP
Unexecuted instantiation: prim_copy.c:CLIP
Unexecuted instantiation: prim_set.c:CLIP
Unexecuted instantiation: prim_shift.c:CLIP
Unexecuted instantiation: prim_sign.c:CLIP
Unexecuted instantiation: prim_YUV.c:CLIP
prim_YCoCg.c:CLIP
Line
Count
Source
202
3.75M
{
203
3.75M
  if (X > 255L)
204
163k
    return 255L;
205
206
3.59M
  if (X < 0L)
207
655k
    return 0L;
208
209
2.93M
  return (BYTE)X;
210
3.59M
}
211
212
static INLINE BYTE CONDITIONAL_CLIP(INT32 in, BYTE original)
213
0
{
214
0
  BYTE out = CLIP(in);
215
0
  BYTE diff;
216
0
  if (out > original)
217
0
    diff = out - original;
218
0
  else
219
0
    diff = original - out;
220
0
  if (diff < 30)
221
0
    return original;
222
0
  return out;
223
0
}
Unexecuted instantiation: primitives.c:CONDITIONAL_CLIP
Unexecuted instantiation: prim_add.c:CONDITIONAL_CLIP
Unexecuted instantiation: prim_andor.c:CONDITIONAL_CLIP
Unexecuted instantiation: prim_alphaComp.c:CONDITIONAL_CLIP
Unexecuted instantiation: prim_colors.c:CONDITIONAL_CLIP
Unexecuted instantiation: prim_copy.c:CONDITIONAL_CLIP
Unexecuted instantiation: prim_set.c:CONDITIONAL_CLIP
Unexecuted instantiation: prim_shift.c:CONDITIONAL_CLIP
Unexecuted instantiation: prim_sign.c:CONDITIONAL_CLIP
Unexecuted instantiation: prim_YUV.c:CONDITIONAL_CLIP
Unexecuted instantiation: prim_YCoCg.c:CONDITIONAL_CLIP
224
225
/**
226
 * | R |   ( | 256     0    403 | |    Y    | )
227
 * | G | = ( | 256   -48   -120 | | U - 128 | ) >> 8
228
 * | B |   ( | 256   475      0 | | V - 128 | )
229
 */
230
static INLINE INT32 C(INT32 Y)
231
0
{
232
0
  return (Y)-0L;
233
0
}
Unexecuted instantiation: primitives.c:C
Unexecuted instantiation: prim_add.c:C
Unexecuted instantiation: prim_andor.c:C
Unexecuted instantiation: prim_alphaComp.c:C
Unexecuted instantiation: prim_colors.c:C
Unexecuted instantiation: prim_copy.c:C
Unexecuted instantiation: prim_set.c:C
Unexecuted instantiation: prim_shift.c:C
Unexecuted instantiation: prim_sign.c:C
Unexecuted instantiation: prim_YUV.c:C
Unexecuted instantiation: prim_YCoCg.c:C
234
235
static INLINE INT32 D(INT32 U)
236
0
{
237
0
  return (U)-128L;
238
0
}
Unexecuted instantiation: primitives.c:D
Unexecuted instantiation: prim_add.c:D
Unexecuted instantiation: prim_andor.c:D
Unexecuted instantiation: prim_alphaComp.c:D
Unexecuted instantiation: prim_colors.c:D
Unexecuted instantiation: prim_copy.c:D
Unexecuted instantiation: prim_set.c:D
Unexecuted instantiation: prim_shift.c:D
Unexecuted instantiation: prim_sign.c:D
Unexecuted instantiation: prim_YUV.c:D
Unexecuted instantiation: prim_YCoCg.c:D
239
240
static INLINE INT32 E(INT32 V)
241
0
{
242
0
  return (V)-128L;
243
0
}
Unexecuted instantiation: primitives.c:E
Unexecuted instantiation: prim_add.c:E
Unexecuted instantiation: prim_andor.c:E
Unexecuted instantiation: prim_alphaComp.c:E
Unexecuted instantiation: prim_colors.c:E
Unexecuted instantiation: prim_copy.c:E
Unexecuted instantiation: prim_set.c:E
Unexecuted instantiation: prim_shift.c:E
Unexecuted instantiation: prim_sign.c:E
Unexecuted instantiation: prim_YUV.c:E
Unexecuted instantiation: prim_YCoCg.c:E
244
245
static INLINE BYTE YUV2R(INT32 Y, INT32 U, INT32 V)
246
0
{
247
0
  const INT32 r = (256L * C(Y) + 0L * D(U) + 403L * E(V));
248
0
  const INT32 r8 = r >> 8L;
249
0
  return CLIP(r8);
250
0
}
Unexecuted instantiation: primitives.c:YUV2R
Unexecuted instantiation: prim_add.c:YUV2R
Unexecuted instantiation: prim_andor.c:YUV2R
Unexecuted instantiation: prim_alphaComp.c:YUV2R
Unexecuted instantiation: prim_colors.c:YUV2R
Unexecuted instantiation: prim_copy.c:YUV2R
Unexecuted instantiation: prim_set.c:YUV2R
Unexecuted instantiation: prim_shift.c:YUV2R
Unexecuted instantiation: prim_sign.c:YUV2R
Unexecuted instantiation: prim_YUV.c:YUV2R
Unexecuted instantiation: prim_YCoCg.c:YUV2R
251
252
static INLINE BYTE YUV2G(INT32 Y, INT32 U, INT32 V)
253
0
{
254
0
  const INT32 g = (256L * C(Y) - 48L * D(U) - 120L * E(V));
255
0
  const INT32 g8 = g >> 8L;
256
0
  return CLIP(g8);
257
0
}
Unexecuted instantiation: primitives.c:YUV2G
Unexecuted instantiation: prim_add.c:YUV2G
Unexecuted instantiation: prim_andor.c:YUV2G
Unexecuted instantiation: prim_alphaComp.c:YUV2G
Unexecuted instantiation: prim_colors.c:YUV2G
Unexecuted instantiation: prim_copy.c:YUV2G
Unexecuted instantiation: prim_set.c:YUV2G
Unexecuted instantiation: prim_shift.c:YUV2G
Unexecuted instantiation: prim_sign.c:YUV2G
Unexecuted instantiation: prim_YUV.c:YUV2G
Unexecuted instantiation: prim_YCoCg.c:YUV2G
258
259
static INLINE BYTE YUV2B(INT32 Y, INT32 U, INT32 V)
260
0
{
261
0
  const INT32 b = (256L * C(Y) + 475L * D(U) + 0L * E(V));
262
0
  const INT32 b8 = b >> 8L;
263
0
  return CLIP(b8);
264
0
}
Unexecuted instantiation: primitives.c:YUV2B
Unexecuted instantiation: prim_add.c:YUV2B
Unexecuted instantiation: prim_andor.c:YUV2B
Unexecuted instantiation: prim_alphaComp.c:YUV2B
Unexecuted instantiation: prim_colors.c:YUV2B
Unexecuted instantiation: prim_copy.c:YUV2B
Unexecuted instantiation: prim_set.c:YUV2B
Unexecuted instantiation: prim_shift.c:YUV2B
Unexecuted instantiation: prim_sign.c:YUV2B
Unexecuted instantiation: prim_YUV.c:YUV2B
Unexecuted instantiation: prim_YCoCg.c:YUV2B
265
266
/* Function prototypes for all the init/deinit routines. */
267
FREERDP_LOCAL void primitives_init_copy(primitives_t* prims);
268
FREERDP_LOCAL void primitives_init_set(primitives_t* prims);
269
FREERDP_LOCAL void primitives_init_add(primitives_t* prims);
270
FREERDP_LOCAL void primitives_init_andor(primitives_t* prims);
271
FREERDP_LOCAL void primitives_init_shift(primitives_t* prims);
272
FREERDP_LOCAL void primitives_init_sign(primitives_t* prims);
273
FREERDP_LOCAL void primitives_init_alphaComp(primitives_t* prims);
274
FREERDP_LOCAL void primitives_init_colors(primitives_t* prims);
275
FREERDP_LOCAL void primitives_init_YCoCg(primitives_t* prims);
276
FREERDP_LOCAL void primitives_init_YUV(primitives_t* prims);
277
278
#if defined(WITH_SSE2) || defined(WITH_NEON)
279
FREERDP_LOCAL void primitives_init_copy_opt(primitives_t* prims);
280
FREERDP_LOCAL void primitives_init_set_opt(primitives_t* prims);
281
FREERDP_LOCAL void primitives_init_add_opt(primitives_t* prims);
282
FREERDP_LOCAL void primitives_init_andor_opt(primitives_t* prims);
283
FREERDP_LOCAL void primitives_init_shift_opt(primitives_t* prims);
284
FREERDP_LOCAL void primitives_init_sign_opt(primitives_t* prims);
285
FREERDP_LOCAL void primitives_init_alphaComp_opt(primitives_t* prims);
286
FREERDP_LOCAL void primitives_init_colors_opt(primitives_t* prims);
287
FREERDP_LOCAL void primitives_init_YCoCg_opt(primitives_t* prims);
288
FREERDP_LOCAL void primitives_init_YUV_opt(primitives_t* prims);
289
#endif
290
291
#if defined(WITH_OPENCL)
292
FREERDP_LOCAL BOOL primitives_init_opencl(primitives_t* prims);
293
#endif
294
295
FREERDP_LOCAL primitives_t* primitives_get_by_type(DWORD type);
296
297
#endif /* FREERDP_LIB_PRIM_INTERNAL_H */