~ubuntu-branches/ubuntu/lucid/gavl/lucid

« back to all changes in this revision

Viewing changes to gavl/colorspace.c

  • Committer: Bazaar Package Importer
  • Author(s): Free Ekanayaka
  • Date: 2006-05-17 14:24:46 UTC
  • Revision ID: james.westby@ubuntu.com-20060517142446-iqm0jgfbkmy27n5w
Tags: upstream-0.2.3
ImportĀ upstreamĀ versionĀ 0.2.3

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*****************************************************************
 
2
 
 
3
  colorspace.c
 
4
 
 
5
  Copyright (c) 2001-2002 by Burkhard Plaum - plaum@ipf.uni-stuttgart.de
 
6
 
 
7
  http://gmerlin.sourceforge.net
 
8
 
 
9
  This program is distributed in the hope that it will be useful,
 
10
  but WITHOUT ANY WARRANTY; without even the implied warranty of
 
11
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
12
  GNU General Public License for more details.
 
13
 
 
14
  You should have received a copy of the GNU General Public License
 
15
  along with this program; if not, write to the Free Software
 
16
  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
 
17
 
 
18
*****************************************************************/
 
19
 
 
20
#include <gavl.h>
 
21
#include <config.h>
 
22
#include <video.h>
 
23
#include <colorspace.h>
 
24
#include <accel.h>
 
25
 
 
26
#include <stdlib.h>
 
27
#include <stdio.h>
 
28
#include <string.h>
 
29
 
 
30
typedef struct
 
31
  {
 
32
  gavl_pixelformat_t pixelformat;
 
33
  char * name;
 
34
  } pixelformat_tab_t;
 
35
 
 
36
pixelformat_tab_t pixelformat_tab[] =
 
37
  {
 
38
    { GAVL_RGB_15, "15 bpp RGB" },
 
39
    { GAVL_BGR_15, "15 bpp BGR" },
 
40
    { GAVL_RGB_16, "16 bpp RGB" },
 
41
    { GAVL_BGR_16, "16 bpp BGR" },
 
42
    { GAVL_RGB_24, "24 bpp RGB" },
 
43
    { GAVL_BGR_24, "24 bpp BGR" },
 
44
    { GAVL_RGB_32, "32 bpp RGB" },
 
45
    { GAVL_BGR_32, "32 bpp BGR" },
 
46
    { GAVL_RGBA_32, "32 bpp RGBA" },
 
47
    { GAVL_RGB_48, "48 bpp RGB" },
 
48
    { GAVL_RGBA_64, "64 bpp RGBA" },
 
49
    { GAVL_RGB_FLOAT, "Float RGB" },
 
50
    { GAVL_RGBA_FLOAT, "Float RGBA" },
 
51
    { GAVL_YUY2, "YUV 422 (YUY2)" },
 
52
    { GAVL_UYVY, "YUV 422 (UYVY)" },
 
53
    { GAVL_YUVA_32, "YUVA 4444" },
 
54
    { GAVL_YUV_420_P, "YUV 420 Planar" },
 
55
    { GAVL_YUV_410_P, "YUV 410 Planar" },
 
56
    { GAVL_YUV_411_P, "YUV 411 Planar" },
 
57
    { GAVL_YUV_422_P, "YUV 422 Planar" },
 
58
    { GAVL_YUV_422_P_16, "YUV 422 Planar (16 bit)" },
 
59
    { GAVL_YUV_444_P, "YUV 444 Planar" },
 
60
    { GAVL_YUV_444_P_16, "YUV 444 Planar (16 bit)" },
 
61
    { GAVL_YUVJ_420_P, "YUVJ 420 Planar" },
 
62
    { GAVL_YUVJ_422_P, "YUVJ 422 Planar" },
 
63
    { GAVL_YUVJ_444_P, "YUVJ 444 Planar" },
 
64
    { GAVL_PIXELFORMAT_NONE, "Undefined" }
 
65
  };
 
66
 
 
67
static int num_pixelformats = sizeof(pixelformat_tab)/sizeof(pixelformat_tab_t);
 
68
 
 
69
int gavl_pixelformat_num_planes(gavl_pixelformat_t csp)
 
70
  {
 
71
  switch(csp)
 
72
    {
 
73
    case GAVL_RGB_15:
 
74
    case GAVL_BGR_15:
 
75
    case GAVL_RGB_16:
 
76
    case GAVL_BGR_16:
 
77
    case GAVL_RGB_24:
 
78
    case GAVL_BGR_24:
 
79
    case GAVL_RGB_32:
 
80
    case GAVL_BGR_32:
 
81
    case GAVL_RGBA_32:
 
82
    case GAVL_YUY2:
 
83
    case GAVL_UYVY:
 
84
    case GAVL_YUVA_32:
 
85
    case GAVL_RGB_48:
 
86
    case GAVL_RGBA_64:
 
87
    case GAVL_RGB_FLOAT:
 
88
    case GAVL_RGBA_FLOAT:
 
89
      return 1;
 
90
      break;
 
91
    case GAVL_YUV_420_P:
 
92
    case GAVL_YUV_410_P:
 
93
    case GAVL_YUV_422_P:
 
94
    case GAVL_YUV_411_P:
 
95
    case GAVL_YUV_444_P:
 
96
    case GAVL_YUV_422_P_16:
 
97
    case GAVL_YUV_444_P_16:
 
98
    case GAVL_YUVJ_420_P:
 
99
    case GAVL_YUVJ_422_P:
 
100
    case GAVL_YUVJ_444_P:
 
101
      return 3;
 
102
      break;
 
103
    case GAVL_PIXELFORMAT_NONE:
 
104
      return 0;
 
105
      break;
 
106
    }
 
107
  return 0;
 
108
  }
 
109
 
 
110
void gavl_pixelformat_chroma_sub(gavl_pixelformat_t csp, int * sub_h,
 
111
                                int * sub_v)
 
112
  {
 
113
  switch(csp)
 
114
    {
 
115
    case GAVL_RGB_15:
 
116
    case GAVL_BGR_15:
 
117
    case GAVL_RGB_16:
 
118
    case GAVL_BGR_16:
 
119
    case GAVL_RGB_24:
 
120
    case GAVL_BGR_24:
 
121
    case GAVL_RGB_32:
 
122
    case GAVL_BGR_32:
 
123
    case GAVL_RGBA_32:
 
124
    case GAVL_YUV_444_P:
 
125
    case GAVL_YUV_444_P_16:
 
126
    case GAVL_YUVJ_444_P:
 
127
    case GAVL_YUVA_32:
 
128
    case GAVL_RGB_48:
 
129
    case GAVL_RGBA_64:
 
130
    case GAVL_RGB_FLOAT:
 
131
    case GAVL_RGBA_FLOAT:
 
132
      *sub_h = 1;
 
133
      *sub_v = 1;
 
134
      break;
 
135
    case GAVL_YUV_420_P:
 
136
    case GAVL_YUVJ_420_P:
 
137
      *sub_h = 2;
 
138
      *sub_v = 2;
 
139
      break;
 
140
    case GAVL_YUV_422_P:
 
141
    case GAVL_YUV_422_P_16:
 
142
    case GAVL_YUVJ_422_P:
 
143
    case GAVL_YUY2:
 
144
    case GAVL_UYVY:
 
145
      *sub_h = 2;
 
146
      *sub_v = 1;
 
147
      break;
 
148
    case GAVL_YUV_411_P:
 
149
      *sub_h = 4;
 
150
      *sub_v = 1;
 
151
      break;
 
152
    case GAVL_YUV_410_P:
 
153
      *sub_h = 4;
 
154
      *sub_v = 4;
 
155
      break;
 
156
    case GAVL_PIXELFORMAT_NONE:
 
157
      *sub_h = 0;
 
158
      *sub_v = 0;
 
159
      break;
 
160
    }
 
161
  }
 
162
 
 
163
int gavl_num_pixelformats()
 
164
  {
 
165
  return num_pixelformats - 1;
 
166
  }
 
167
 
 
168
gavl_pixelformat_t gavl_get_pixelformat(int index)
 
169
  {
 
170
  return pixelformat_tab[index].pixelformat;
 
171
  }
 
172
 
 
173
const char * gavl_pixelformat_to_string(gavl_pixelformat_t pixelformat)
 
174
  {
 
175
  int i;
 
176
  for(i = 0; i < num_pixelformats; i++)
 
177
    {
 
178
    if(pixelformat_tab[i].pixelformat == pixelformat)
 
179
      return pixelformat_tab[i].name;
 
180
    }
 
181
  return (const char*)0;
 
182
  }
 
183
 
 
184
gavl_pixelformat_t gavl_string_to_pixelformat(const char * name)
 
185
  {
 
186
  int i;
 
187
  for(i = 0; i < num_pixelformats; i++)
 
188
    {
 
189
    if(!strcmp(pixelformat_tab[i].name, name))
 
190
      return pixelformat_tab[i].pixelformat;
 
191
    }
 
192
  return GAVL_PIXELFORMAT_NONE;
 
193
  }
 
194
 
 
195
 
 
196
static gavl_pixelformat_function_table_t *
 
197
create_pixelformat_function_table(const gavl_video_options_t * opt,
 
198
                                 int width, int height)
 
199
  {
 
200
  gavl_pixelformat_function_table_t * csp_tab;
 
201
  int real_accel_flags = opt->accel_flags ?
 
202
    gavl_real_accel_flags(opt->accel_flags) : 0;
 
203
    
 
204
  csp_tab =
 
205
    calloc(1,sizeof(gavl_pixelformat_function_table_t));
 
206
#if 1
 
207
  if(!real_accel_flags || (real_accel_flags & GAVL_ACCEL_C))
 
208
    {
 
209
    //    fprintf(stderr, "Init C functions %08x\n", real_accel_flags);
 
210
    gavl_init_rgb_rgb_funcs_c(csp_tab, opt);
 
211
    gavl_init_rgb_yuv_funcs_c(csp_tab, opt);
 
212
    gavl_init_yuv_rgb_funcs_c(csp_tab, opt);
 
213
    gavl_init_yuv_yuv_funcs_c(csp_tab, opt);
 
214
    }
 
215
#endif
 
216
  
 
217
#ifdef ARCH_X86
 
218
  if(!real_accel_flags || (real_accel_flags & GAVL_ACCEL_MMX))
 
219
    {
 
220
    //    fprintf(stderr, "Init MMX functions %08x\n", real_accel_flags);
 
221
    gavl_init_rgb_rgb_funcs_mmx(csp_tab, width, opt);
 
222
    gavl_init_rgb_yuv_funcs_mmx(csp_tab, width, opt);
 
223
    gavl_init_yuv_yuv_funcs_mmx(csp_tab, width, opt);
 
224
    gavl_init_yuv_rgb_funcs_mmx(csp_tab, width, opt);
 
225
    }
 
226
  if(!real_accel_flags || (real_accel_flags & GAVL_ACCEL_MMXEXT))
 
227
    {
 
228
    //    fprintf(stderr, "Init MMXEXT functions %08x\n", real_accel_flags);
 
229
    gavl_init_rgb_rgb_funcs_mmxext(csp_tab, width, opt);
 
230
    gavl_init_rgb_yuv_funcs_mmxext(csp_tab, width, opt);
 
231
    gavl_init_yuv_yuv_funcs_mmxext(csp_tab, width, opt);
 
232
    gavl_init_yuv_rgb_funcs_mmxext(csp_tab, width, opt);
 
233
    }
 
234
#endif
 
235
  return csp_tab;
 
236
  }
 
237
 
 
238
gavl_video_func_t
 
239
gavl_find_pixelformat_converter(const gavl_video_options_t * opt,
 
240
                               gavl_pixelformat_t input_pixelformat,
 
241
                               gavl_pixelformat_t output_pixelformat,
 
242
                               int width,
 
243
                               int height)
 
244
  {
 
245
  gavl_video_func_t ret = NULL;
 
246
  gavl_pixelformat_function_table_t * tab =
 
247
    create_pixelformat_function_table(opt, width, height);
 
248
 
 
249
  switch(input_pixelformat)
 
250
    {
 
251
    case GAVL_RGB_15:
 
252
      switch(output_pixelformat)
 
253
        {
 
254
        case GAVL_BGR_15:
 
255
          ret = tab->swap_rgb_15;
 
256
          break;
 
257
        case GAVL_RGB_16:
 
258
          ret = tab->rgb_15_to_16;
 
259
          break;
 
260
        case GAVL_BGR_16:
 
261
          ret = tab->rgb_15_to_16_swap;
 
262
          break;
 
263
        case GAVL_RGB_24:
 
264
          ret = tab->rgb_15_to_24;
 
265
          break;
 
266
        case GAVL_BGR_24:
 
267
          ret = tab->rgb_15_to_24_swap;
 
268
          break;
 
269
        case GAVL_RGB_32:
 
270
          ret = tab->rgb_15_to_32;
 
271
          break;
 
272
        case GAVL_BGR_32:
 
273
          ret = tab->rgb_15_to_32_swap;
 
274
          break;
 
275
        case GAVL_RGBA_32:
 
276
          ret = tab->rgb_15_to_rgba_32;
 
277
          break;
 
278
        case GAVL_RGB_48:
 
279
          ret = tab->rgb_15_to_48;
 
280
          break;
 
281
        case GAVL_RGBA_64:
 
282
          ret = tab->rgb_15_to_rgba_64;
 
283
          break;
 
284
        case GAVL_RGB_FLOAT:
 
285
          ret = tab->rgb_15_to_float;
 
286
          break;
 
287
        case GAVL_RGBA_FLOAT:
 
288
          ret = tab->rgb_15_to_rgba_float;
 
289
          break;
 
290
        case GAVL_YUY2:
 
291
          ret = tab->rgb_15_to_yuy2;
 
292
          break;
 
293
        case GAVL_UYVY:
 
294
          ret = tab->rgb_15_to_uyvy;
 
295
          break;
 
296
        case GAVL_YUVA_32:
 
297
          ret = tab->rgb_15_to_yuva_32;
 
298
          break;
 
299
        case GAVL_YUV_420_P:
 
300
          ret = tab->rgb_15_to_yuv_420_p;
 
301
          break;
 
302
        case GAVL_YUV_410_P:
 
303
          ret = tab->rgb_15_to_yuv_410_p;
 
304
          break;
 
305
        case GAVL_YUV_422_P:
 
306
          ret = tab->rgb_15_to_yuv_422_p;
 
307
          break;
 
308
        case GAVL_YUV_422_P_16:
 
309
          ret = tab->rgb_15_to_yuv_422_p_16;
 
310
          break;
 
311
        case GAVL_YUV_411_P:
 
312
          ret = tab->rgb_15_to_yuv_411_p;
 
313
          break;
 
314
        case GAVL_YUV_444_P:
 
315
          ret = tab->rgb_15_to_yuv_444_p;
 
316
          break;
 
317
        case GAVL_YUV_444_P_16:
 
318
          ret = tab->rgb_15_to_yuv_444_p_16;
 
319
          break;
 
320
        case GAVL_YUVJ_420_P:
 
321
          ret = tab->rgb_15_to_yuvj_420_p;
 
322
          break;
 
323
        case GAVL_YUVJ_422_P:
 
324
          ret = tab->rgb_15_to_yuvj_422_p;
 
325
          break;
 
326
        case GAVL_YUVJ_444_P:
 
327
          ret = tab->rgb_15_to_yuvj_444_p;
 
328
          break;
 
329
        /* Keep GCC happy */
 
330
        case GAVL_PIXELFORMAT_NONE:
 
331
        case GAVL_RGB_15:
 
332
          break;
 
333
        }
 
334
      break;
 
335
    case GAVL_BGR_15:
 
336
      switch(output_pixelformat)
 
337
        {
 
338
        case GAVL_RGB_15:
 
339
          ret = tab->swap_rgb_15;
 
340
          break;
 
341
        case GAVL_RGB_16:
 
342
          ret = tab->rgb_15_to_16_swap;
 
343
          break;
 
344
        case GAVL_BGR_16:
 
345
          ret = tab->rgb_15_to_16;
 
346
          break;
 
347
        case GAVL_RGB_24:
 
348
          ret = tab->rgb_15_to_24_swap;
 
349
          break;
 
350
        case GAVL_BGR_24:
 
351
          ret = tab->rgb_15_to_24;
 
352
          break;
 
353
        case GAVL_RGB_32:
 
354
          ret = tab->rgb_15_to_32_swap;
 
355
          break;
 
356
        case GAVL_BGR_32:
 
357
          ret = tab->rgb_15_to_32;
 
358
          break;
 
359
        case GAVL_RGBA_32:
 
360
          ret = tab->bgr_15_to_rgba_32;
 
361
          break;
 
362
        case GAVL_RGB_48:
 
363
          ret = tab->rgb_15_to_48_swap;
 
364
          break;
 
365
        case GAVL_RGBA_64:
 
366
          ret = tab->bgr_15_to_rgba_64;
 
367
          break;
 
368
        case GAVL_RGB_FLOAT:
 
369
          ret = tab->rgb_15_to_float_swap;
 
370
          break;
 
371
        case GAVL_RGBA_FLOAT:
 
372
          ret = tab->bgr_15_to_rgba_float;
 
373
          break;
 
374
        case GAVL_YUY2:
 
375
          ret = tab->bgr_15_to_yuy2;
 
376
          break;
 
377
        case GAVL_UYVY:
 
378
          ret = tab->bgr_15_to_uyvy;
 
379
          break;
 
380
        case GAVL_YUVA_32:
 
381
          ret = tab->bgr_15_to_yuva_32;
 
382
          break;
 
383
        case GAVL_YUV_420_P:
 
384
          ret = tab->bgr_15_to_yuv_420_p;
 
385
          break;
 
386
        case GAVL_YUV_410_P:
 
387
          ret = tab->bgr_15_to_yuv_410_p;
 
388
          break;
 
389
        case GAVL_YUV_422_P:
 
390
          ret = tab->bgr_15_to_yuv_422_p;
 
391
          break;
 
392
        case GAVL_YUV_422_P_16:
 
393
          ret = tab->bgr_15_to_yuv_422_p_16;
 
394
          break;
 
395
        case GAVL_YUV_411_P:
 
396
          ret = tab->bgr_15_to_yuv_411_p;
 
397
          break;
 
398
        case GAVL_YUV_444_P:
 
399
          ret = tab->bgr_15_to_yuv_444_p;
 
400
          break;
 
401
        case GAVL_YUV_444_P_16:
 
402
          ret = tab->bgr_15_to_yuv_444_p_16;
 
403
          break;
 
404
        case GAVL_YUVJ_420_P:
 
405
          ret = tab->bgr_15_to_yuvj_420_p;
 
406
          break;
 
407
        case GAVL_YUVJ_422_P:
 
408
          ret = tab->bgr_15_to_yuvj_422_p;
 
409
          break;
 
410
        case GAVL_YUVJ_444_P:
 
411
          ret = tab->bgr_15_to_yuvj_444_p;
 
412
          break;
 
413
        /* Keep GCC happy */
 
414
        case GAVL_PIXELFORMAT_NONE:
 
415
        case GAVL_BGR_15:
 
416
          break;
 
417
        }
 
418
      break;
 
419
    case GAVL_RGB_16:
 
420
      switch(output_pixelformat)
 
421
        {
 
422
        case GAVL_RGB_15:
 
423
          ret = tab->rgb_16_to_15;
 
424
          break;
 
425
        case GAVL_BGR_15:
 
426
          ret = tab->rgb_16_to_15_swap;
 
427
          break;
 
428
        case GAVL_BGR_16:
 
429
          ret = tab->swap_rgb_16;
 
430
          break;
 
431
        case GAVL_RGB_24:
 
432
          ret = tab->rgb_16_to_24;
 
433
          break;
 
434
        case GAVL_BGR_24:
 
435
          ret = tab->rgb_16_to_24_swap;
 
436
          break;
 
437
        case GAVL_RGB_32:
 
438
          ret = tab->rgb_16_to_32;
 
439
          break;
 
440
        case GAVL_BGR_32:
 
441
          ret = tab->rgb_16_to_32_swap;
 
442
          break;
 
443
        case GAVL_RGBA_32:
 
444
          ret = tab->rgb_16_to_rgba_32;
 
445
          break;
 
446
        case GAVL_RGB_48:
 
447
          ret = tab->rgb_16_to_48;
 
448
          break;
 
449
        case GAVL_RGBA_64:
 
450
          ret = tab->rgb_16_to_rgba_64;
 
451
          break;
 
452
        case GAVL_RGB_FLOAT:
 
453
          ret = tab->rgb_16_to_float;
 
454
          break;
 
455
        case GAVL_RGBA_FLOAT:
 
456
          ret = tab->rgb_16_to_rgba_float;
 
457
          break;
 
458
 
 
459
        case GAVL_YUY2:
 
460
          ret = tab->rgb_16_to_yuy2;
 
461
          break;
 
462
        case GAVL_UYVY:
 
463
          ret = tab->rgb_16_to_uyvy;
 
464
          break;
 
465
        case GAVL_YUVA_32:
 
466
          ret = tab->rgb_16_to_yuva_32;
 
467
          break;
 
468
        case GAVL_YUV_420_P:
 
469
          ret = tab->rgb_16_to_yuv_420_p;
 
470
          break;
 
471
        case GAVL_YUV_410_P:
 
472
          ret = tab->rgb_16_to_yuv_410_p;
 
473
          break;
 
474
        case GAVL_YUV_422_P:
 
475
          ret = tab->rgb_16_to_yuv_422_p;
 
476
          break;
 
477
        case GAVL_YUV_422_P_16:
 
478
          ret = tab->rgb_16_to_yuv_422_p_16;
 
479
          break;
 
480
        case GAVL_YUV_411_P:
 
481
          ret = tab->rgb_16_to_yuv_411_p;
 
482
          break;
 
483
        case GAVL_YUV_444_P:
 
484
          ret = tab->rgb_16_to_yuv_444_p;
 
485
          break;
 
486
        case GAVL_YUV_444_P_16:
 
487
          ret = tab->rgb_16_to_yuv_444_p_16;
 
488
          break;
 
489
        case GAVL_YUVJ_420_P:
 
490
          ret = tab->rgb_16_to_yuvj_420_p;
 
491
          break;
 
492
        case GAVL_YUVJ_422_P:
 
493
          ret = tab->rgb_16_to_yuvj_422_p;
 
494
          break;
 
495
        case GAVL_YUVJ_444_P:
 
496
          ret = tab->rgb_16_to_yuvj_444_p;
 
497
          break;
 
498
        /* Keep GCC happy */
 
499
        case GAVL_PIXELFORMAT_NONE:
 
500
        case GAVL_RGB_16:
 
501
          break;
 
502
        }
 
503
      break;
 
504
    case GAVL_BGR_16:
 
505
      switch(output_pixelformat)
 
506
        {
 
507
        case GAVL_RGB_15:
 
508
          ret = tab->rgb_16_to_15_swap;
 
509
          break;
 
510
        case GAVL_BGR_15:
 
511
          ret = tab->rgb_16_to_15;
 
512
          break;
 
513
        case GAVL_RGB_16:
 
514
          ret = tab->swap_rgb_16;
 
515
          break;
 
516
        case GAVL_RGB_24:
 
517
          ret = tab->rgb_16_to_24_swap;
 
518
          break;
 
519
        case GAVL_BGR_24:
 
520
          ret = tab->rgb_16_to_24;
 
521
          break;
 
522
        case GAVL_RGB_32:
 
523
          ret = tab->rgb_16_to_32_swap;
 
524
          break;
 
525
        case GAVL_BGR_32:
 
526
          ret = tab->rgb_16_to_32;
 
527
          break;
 
528
        case GAVL_RGBA_32:
 
529
          ret = tab->bgr_16_to_rgba_32;
 
530
          break;
 
531
        case GAVL_RGB_48:
 
532
          ret = tab->rgb_16_to_48_swap;
 
533
          break;
 
534
        case GAVL_RGBA_64:
 
535
          ret = tab->bgr_16_to_rgba_64;
 
536
          break;
 
537
        case GAVL_RGB_FLOAT:
 
538
          ret = tab->rgb_16_to_float_swap;
 
539
          break;
 
540
        case GAVL_RGBA_FLOAT:
 
541
          ret = tab->bgr_16_to_rgba_float;
 
542
          break;
 
543
 
 
544
        case GAVL_YUY2:
 
545
          ret = tab->bgr_16_to_yuy2;
 
546
          break;
 
547
        case GAVL_UYVY:
 
548
          ret = tab->bgr_16_to_uyvy;
 
549
          break;
 
550
        case GAVL_YUVA_32:
 
551
          ret = tab->bgr_16_to_yuva_32;
 
552
          break;
 
553
        case GAVL_YUV_420_P:
 
554
          ret = tab->bgr_16_to_yuv_420_p;
 
555
          break;
 
556
        case GAVL_YUV_410_P:
 
557
          ret = tab->bgr_16_to_yuv_410_p;
 
558
          break;
 
559
        case GAVL_YUV_422_P:
 
560
          ret = tab->bgr_16_to_yuv_422_p;
 
561
          break;
 
562
        case GAVL_YUV_422_P_16:
 
563
          ret = tab->bgr_16_to_yuv_422_p_16;
 
564
          break;
 
565
        case GAVL_YUV_411_P:
 
566
          ret = tab->bgr_16_to_yuv_411_p;
 
567
          break;
 
568
        case GAVL_YUV_444_P:
 
569
          ret = tab->bgr_16_to_yuv_444_p;
 
570
          break;
 
571
        case GAVL_YUV_444_P_16:
 
572
          ret = tab->bgr_16_to_yuv_444_p_16;
 
573
          break;
 
574
        case GAVL_YUVJ_420_P:
 
575
          ret = tab->bgr_16_to_yuvj_420_p;
 
576
          break;
 
577
        case GAVL_YUVJ_422_P:
 
578
          ret = tab->bgr_16_to_yuvj_422_p;
 
579
          break;
 
580
        case GAVL_YUVJ_444_P:
 
581
          ret = tab->bgr_16_to_yuvj_444_p;
 
582
          break;
 
583
        /* Keep GCC happy */
 
584
        case GAVL_PIXELFORMAT_NONE:
 
585
        case GAVL_BGR_16:
 
586
          break;
 
587
        }
 
588
      break;
 
589
    case GAVL_RGB_24:
 
590
      switch(output_pixelformat)
 
591
        {
 
592
        case GAVL_RGB_15:
 
593
          ret = tab->rgb_24_to_15;
 
594
          break;
 
595
        case GAVL_BGR_15:
 
596
          ret = tab->rgb_24_to_15_swap;
 
597
          break;
 
598
        case GAVL_RGB_16:
 
599
          ret = tab->rgb_24_to_16;
 
600
          break;
 
601
        case GAVL_BGR_16:
 
602
          ret = tab->rgb_24_to_16_swap;
 
603
          break;
 
604
        case GAVL_BGR_24:
 
605
          ret = tab->swap_rgb_24;
 
606
          break;
 
607
        case GAVL_RGB_32:
 
608
          ret = tab->rgb_24_to_32;
 
609
          break;
 
610
        case GAVL_BGR_32:
 
611
          ret = tab->rgb_24_to_32_swap;
 
612
          break;
 
613
        case GAVL_RGBA_32:
 
614
          ret = tab->rgb_24_to_rgba_32;
 
615
          break;
 
616
        case GAVL_RGB_48:
 
617
          ret = tab->rgb_24_to_48;
 
618
          break;
 
619
        case GAVL_RGBA_64:
 
620
          ret = tab->rgb_24_to_rgba_64;
 
621
          break;
 
622
        case GAVL_RGB_FLOAT:
 
623
          ret = tab->rgb_24_to_float;
 
624
          break;
 
625
        case GAVL_RGBA_FLOAT:
 
626
          ret = tab->rgb_24_to_rgba_float;
 
627
          break;
 
628
        case GAVL_YUY2:
 
629
          ret = tab->rgb_24_to_yuy2;
 
630
          break;
 
631
        case GAVL_UYVY:
 
632
          ret = tab->rgb_24_to_uyvy;
 
633
          break;
 
634
        case GAVL_YUVA_32:
 
635
          ret = tab->rgb_24_to_yuva_32;
 
636
          break;
 
637
        case GAVL_YUV_420_P:
 
638
          ret = tab->rgb_24_to_yuv_420_p;
 
639
          break;
 
640
        case GAVL_YUV_410_P:
 
641
          ret = tab->rgb_24_to_yuv_410_p;
 
642
          break;
 
643
        case GAVL_YUV_422_P:
 
644
          ret = tab->rgb_24_to_yuv_422_p;
 
645
          break;
 
646
        case GAVL_YUV_422_P_16:
 
647
          ret = tab->rgb_24_to_yuv_422_p_16;
 
648
          break;
 
649
        case GAVL_YUV_411_P:
 
650
          ret = tab->rgb_24_to_yuv_411_p;
 
651
          break;
 
652
        case GAVL_YUV_444_P:
 
653
          ret = tab->rgb_24_to_yuv_444_p;
 
654
          break;
 
655
        case GAVL_YUV_444_P_16:
 
656
          ret = tab->rgb_24_to_yuv_444_p_16;
 
657
          break;
 
658
        case GAVL_YUVJ_420_P:
 
659
          ret = tab->rgb_24_to_yuvj_420_p;
 
660
          break;
 
661
        case GAVL_YUVJ_422_P:
 
662
          ret = tab->rgb_24_to_yuvj_422_p;
 
663
          break;
 
664
        case GAVL_YUVJ_444_P:
 
665
          ret = tab->rgb_24_to_yuvj_444_p;
 
666
          break;
 
667
        /* Keep GCC happy */
 
668
        case GAVL_PIXELFORMAT_NONE:
 
669
        case GAVL_RGB_24:
 
670
          break;
 
671
        }
 
672
      break;
 
673
    case GAVL_BGR_24:
 
674
      switch(output_pixelformat)
 
675
        {
 
676
        case GAVL_RGB_15:
 
677
          ret = tab->rgb_24_to_15_swap;
 
678
          break;
 
679
        case GAVL_BGR_15:
 
680
          ret = tab->rgb_24_to_15;
 
681
          break;
 
682
        case GAVL_RGB_16:
 
683
          ret = tab->rgb_24_to_16_swap;
 
684
          break;
 
685
        case GAVL_BGR_16:
 
686
          ret = tab->rgb_24_to_16;
 
687
          break;
 
688
        case GAVL_RGB_24:
 
689
          ret = tab->swap_rgb_24;
 
690
          break;
 
691
        case GAVL_RGB_32:
 
692
          ret = tab->rgb_24_to_32_swap;
 
693
          break;
 
694
        case GAVL_BGR_32:
 
695
          ret = tab->rgb_24_to_32;
 
696
          break;
 
697
        case GAVL_RGBA_32:
 
698
          ret = tab->bgr_24_to_rgba_32;
 
699
          break;
 
700
        case GAVL_RGB_48:
 
701
          ret = tab->rgb_24_to_48_swap;
 
702
          break;
 
703
        case GAVL_RGBA_64:
 
704
          ret = tab->bgr_24_to_rgba_64;
 
705
          break;
 
706
        case GAVL_RGB_FLOAT:
 
707
          ret = tab->rgb_24_to_float_swap;
 
708
          break;
 
709
        case GAVL_RGBA_FLOAT:
 
710
          ret = tab->bgr_24_to_rgba_float;
 
711
          break;
 
712
        case GAVL_YUY2:
 
713
          ret = tab->bgr_24_to_yuy2;
 
714
          break;
 
715
        case GAVL_UYVY:
 
716
          ret = tab->bgr_24_to_uyvy;
 
717
          break;
 
718
        case GAVL_YUVA_32:
 
719
          ret = tab->bgr_24_to_yuva_32;
 
720
          break;
 
721
        case GAVL_YUV_420_P:
 
722
          ret = tab->bgr_24_to_yuv_420_p;
 
723
          break;
 
724
        case GAVL_YUV_410_P:
 
725
          ret = tab->bgr_24_to_yuv_410_p;
 
726
          break;
 
727
        case GAVL_YUV_422_P:
 
728
          ret = tab->bgr_24_to_yuv_422_p;
 
729
          break;
 
730
        case GAVL_YUV_422_P_16:
 
731
          ret = tab->bgr_24_to_yuv_422_p_16;
 
732
          break;
 
733
        case GAVL_YUV_411_P:
 
734
          ret = tab->bgr_24_to_yuv_411_p;
 
735
          break;
 
736
        case GAVL_YUV_444_P:
 
737
          ret = tab->bgr_24_to_yuv_444_p;
 
738
          break;
 
739
        case GAVL_YUV_444_P_16:
 
740
          ret = tab->bgr_24_to_yuv_444_p_16;
 
741
          break;
 
742
        case GAVL_YUVJ_420_P:
 
743
          ret = tab->bgr_24_to_yuvj_420_p;
 
744
          break;
 
745
        case GAVL_YUVJ_422_P:
 
746
          ret = tab->bgr_24_to_yuvj_422_p;
 
747
          break;
 
748
        case GAVL_YUVJ_444_P:
 
749
          ret = tab->bgr_24_to_yuvj_444_p;
 
750
          break;
 
751
        /* Keep GCC happy */
 
752
        case GAVL_PIXELFORMAT_NONE:
 
753
        case GAVL_BGR_24:
 
754
          break;
 
755
        }
 
756
      break;
 
757
    case GAVL_RGB_32:
 
758
      switch(output_pixelformat)
 
759
        {
 
760
        case GAVL_RGB_15:
 
761
          ret = tab->rgb_32_to_15;
 
762
          break;
 
763
        case GAVL_BGR_15:
 
764
          ret = tab->rgb_32_to_15_swap;
 
765
          break;
 
766
        case GAVL_RGB_16:
 
767
          ret = tab->rgb_32_to_16;
 
768
          break;
 
769
        case GAVL_BGR_16:
 
770
          ret = tab->rgb_32_to_16_swap;
 
771
          break;
 
772
        case GAVL_RGB_24:
 
773
          ret = tab->rgb_32_to_24;
 
774
          break;
 
775
        case GAVL_BGR_24:
 
776
          ret = tab->rgb_32_to_24_swap;
 
777
          break;
 
778
        case GAVL_BGR_32:
 
779
          ret = tab->swap_rgb_32;
 
780
          break;
 
781
        case GAVL_RGBA_32:
 
782
          ret = tab->rgb_32_to_rgba_32;
 
783
          break;
 
784
        case GAVL_RGB_48:
 
785
          ret = tab->rgb_32_to_48;
 
786
          break;
 
787
        case GAVL_RGBA_64:
 
788
          ret = tab->rgb_32_to_rgba_64;
 
789
          break;
 
790
        case GAVL_RGB_FLOAT:
 
791
          ret = tab->rgb_32_to_float;
 
792
          break;
 
793
        case GAVL_RGBA_FLOAT:
 
794
          ret = tab->rgb_32_to_rgba_float;
 
795
          break;
 
796
        case GAVL_YUY2:
 
797
          ret = tab->rgb_32_to_yuy2;
 
798
          break;
 
799
        case GAVL_UYVY:
 
800
          ret = tab->rgb_32_to_uyvy;
 
801
          break;
 
802
        case GAVL_YUVA_32:
 
803
          ret = tab->rgb_32_to_yuva_32;
 
804
          break;
 
805
        case GAVL_YUV_420_P:
 
806
          ret = tab->rgb_32_to_yuv_420_p;
 
807
          break;
 
808
        case GAVL_YUV_410_P:
 
809
          ret = tab->rgb_32_to_yuv_410_p;
 
810
          break;
 
811
        case GAVL_YUV_422_P:
 
812
          ret = tab->rgb_32_to_yuv_422_p;
 
813
          break;
 
814
        case GAVL_YUV_422_P_16:
 
815
          ret = tab->rgb_32_to_yuv_422_p_16;
 
816
          break;
 
817
        case GAVL_YUV_411_P:
 
818
          ret = tab->rgb_32_to_yuv_411_p;
 
819
          break;
 
820
        case GAVL_YUV_444_P:
 
821
          ret = tab->rgb_32_to_yuv_444_p;
 
822
          break;
 
823
        case GAVL_YUV_444_P_16:
 
824
          ret = tab->rgb_32_to_yuv_444_p_16;
 
825
          break;
 
826
        case GAVL_YUVJ_420_P:
 
827
          ret = tab->rgb_32_to_yuvj_420_p;
 
828
          break;
 
829
        case GAVL_YUVJ_422_P:
 
830
          ret = tab->rgb_32_to_yuvj_422_p;
 
831
          break;
 
832
        case GAVL_YUVJ_444_P:
 
833
          ret = tab->rgb_32_to_yuvj_444_p;
 
834
          break;
 
835
        /* Keep GCC happy */
 
836
        case GAVL_PIXELFORMAT_NONE:
 
837
        case GAVL_RGB_32:
 
838
          break;
 
839
        }
 
840
      break;
 
841
    case GAVL_BGR_32:
 
842
      switch(output_pixelformat)
 
843
        {
 
844
        case GAVL_RGB_15:
 
845
          ret = tab->rgb_32_to_15_swap;
 
846
          break;
 
847
        case GAVL_BGR_15:
 
848
          ret = tab->rgb_32_to_15;
 
849
          break;
 
850
        case GAVL_RGB_16:
 
851
          ret = tab->rgb_32_to_16_swap;
 
852
          break;
 
853
        case GAVL_BGR_16:
 
854
          ret = tab->rgb_32_to_16;
 
855
          break;
 
856
        case GAVL_RGB_24:
 
857
          ret = tab->rgb_32_to_24_swap;
 
858
          break;
 
859
        case GAVL_BGR_24:
 
860
          ret = tab->rgb_32_to_24;
 
861
          break;
 
862
        case GAVL_RGB_32:
 
863
          ret = tab->swap_rgb_32;
 
864
          break;
 
865
        case GAVL_RGBA_32:
 
866
          ret = tab->bgr_32_to_rgba_32;
 
867
          break;
 
868
        case GAVL_RGB_48:
 
869
          ret = tab->rgb_32_to_48_swap;
 
870
          break;
 
871
        case GAVL_RGBA_64:
 
872
          ret = tab->bgr_32_to_rgba_64;
 
873
          break;
 
874
        case GAVL_RGB_FLOAT:
 
875
          ret = tab->rgb_32_to_float_swap;
 
876
          break;
 
877
        case GAVL_RGBA_FLOAT:
 
878
          ret = tab->bgr_32_to_rgba_float;
 
879
          break;
 
880
        case GAVL_YUY2:
 
881
          ret = tab->bgr_32_to_yuy2;
 
882
          break;
 
883
        case GAVL_UYVY:
 
884
          ret = tab->bgr_32_to_uyvy;
 
885
          break;
 
886
        case GAVL_YUVA_32:
 
887
          ret = tab->bgr_32_to_yuva_32;
 
888
          break;
 
889
        case GAVL_YUV_420_P:
 
890
          ret = tab->bgr_32_to_yuv_420_p;
 
891
          break;
 
892
        case GAVL_YUV_410_P:
 
893
          ret = tab->bgr_32_to_yuv_410_p;
 
894
          break;
 
895
        case GAVL_YUV_422_P:
 
896
          ret = tab->bgr_32_to_yuv_422_p;
 
897
          break;
 
898
        case GAVL_YUV_422_P_16:
 
899
          ret = tab->bgr_32_to_yuv_422_p_16;
 
900
          break;
 
901
        case GAVL_YUV_411_P:
 
902
          ret = tab->bgr_32_to_yuv_411_p;
 
903
          break;
 
904
        case GAVL_YUV_444_P:
 
905
          ret = tab->bgr_32_to_yuv_444_p;
 
906
          break;
 
907
        case GAVL_YUV_444_P_16:
 
908
          ret = tab->bgr_32_to_yuv_444_p_16;
 
909
          break;
 
910
        case GAVL_YUVJ_420_P:
 
911
          ret = tab->bgr_32_to_yuvj_420_p;
 
912
          break;
 
913
        case GAVL_YUVJ_422_P:
 
914
          ret = tab->bgr_32_to_yuvj_422_p;
 
915
          break;
 
916
        case GAVL_YUVJ_444_P:
 
917
          ret = tab->bgr_32_to_yuvj_444_p;
 
918
          break;
 
919
        /* Keep GCC happy */
 
920
        case GAVL_PIXELFORMAT_NONE:
 
921
        case GAVL_BGR_32:
 
922
          break;
 
923
        }
 
924
      break;
 
925
    case GAVL_RGBA_32:
 
926
      switch(output_pixelformat)
 
927
        {
 
928
        case GAVL_RGB_15:
 
929
          ret = tab->rgba_32_to_rgb_15;
 
930
          break;
 
931
        case GAVL_BGR_15:
 
932
          ret = tab->rgba_32_to_bgr_15;
 
933
          break;
 
934
        case GAVL_RGB_16:
 
935
          ret = tab->rgba_32_to_rgb_16;
 
936
          break;
 
937
        case GAVL_BGR_16:
 
938
          ret = tab->rgba_32_to_bgr_16;
 
939
          break;
 
940
        case GAVL_RGB_24:
 
941
          ret = tab->rgba_32_to_rgb_24;
 
942
          break;
 
943
        case GAVL_BGR_24:
 
944
          ret = tab->rgba_32_to_bgr_24;
 
945
          break;
 
946
        case GAVL_RGB_32:
 
947
          ret = tab->rgba_32_to_rgb_32;
 
948
          break;
 
949
        case GAVL_BGR_32:
 
950
          ret = tab->rgba_32_to_bgr_32;
 
951
          break;
 
952
        case GAVL_RGB_48:
 
953
          ret = tab->rgba_32_to_rgb_48;
 
954
          break;
 
955
        case GAVL_RGBA_64:
 
956
          ret = tab->rgba_32_to_rgba_64;
 
957
          break;
 
958
        case GAVL_RGB_FLOAT:
 
959
          ret = tab->rgba_32_to_rgb_float;
 
960
          break;
 
961
        case GAVL_RGBA_FLOAT:
 
962
          ret = tab->rgba_32_to_rgba_float;
 
963
          break;
 
964
        case GAVL_YUY2:
 
965
          ret = tab->rgba_32_to_yuy2;
 
966
          break;
 
967
        case GAVL_UYVY:
 
968
          ret = tab->rgba_32_to_uyvy;
 
969
          break;
 
970
        case GAVL_YUVA_32:
 
971
          ret = tab->rgba_32_to_yuva_32;
 
972
          break;
 
973
        case GAVL_YUV_420_P:
 
974
          ret = tab->rgba_32_to_yuv_420_p;
 
975
          break;
 
976
        case GAVL_YUV_410_P:
 
977
          ret = tab->rgba_32_to_yuv_410_p;
 
978
          break;
 
979
        case GAVL_YUV_422_P:
 
980
          ret = tab->rgba_32_to_yuv_422_p;
 
981
          break;
 
982
        case GAVL_YUV_422_P_16:
 
983
          ret = tab->rgba_32_to_yuv_422_p_16;
 
984
          break;
 
985
        case GAVL_YUV_411_P:
 
986
          ret = tab->rgba_32_to_yuv_411_p;
 
987
          break;
 
988
        case GAVL_YUV_444_P:
 
989
          ret = tab->rgba_32_to_yuv_444_p;
 
990
          break;
 
991
        case GAVL_YUV_444_P_16:
 
992
          ret = tab->rgba_32_to_yuv_444_p_16;
 
993
          break;
 
994
        case GAVL_YUVJ_420_P:
 
995
          ret = tab->rgba_32_to_yuvj_420_p;
 
996
          break;
 
997
        case GAVL_YUVJ_422_P:
 
998
          ret = tab->rgba_32_to_yuvj_422_p;
 
999
          break;
 
1000
        case GAVL_YUVJ_444_P:
 
1001
          ret = tab->rgba_32_to_yuvj_444_p;
 
1002
          break;
 
1003
        /* Keep GCC happy */
 
1004
        case GAVL_PIXELFORMAT_NONE:
 
1005
        case GAVL_RGBA_32:
 
1006
          break;
 
1007
        }
 
1008
      break;
 
1009
 
 
1010
    case GAVL_RGBA_64:
 
1011
      switch(output_pixelformat)
 
1012
        {
 
1013
        case GAVL_RGB_15:
 
1014
          ret = tab->rgba_64_to_rgb_15;
 
1015
          break;
 
1016
        case GAVL_BGR_15:
 
1017
          ret = tab->rgba_64_to_bgr_15;
 
1018
          break;
 
1019
        case GAVL_RGB_16:
 
1020
          ret = tab->rgba_64_to_rgb_16;
 
1021
          break;
 
1022
        case GAVL_BGR_16:
 
1023
          ret = tab->rgba_64_to_bgr_16;
 
1024
          break;
 
1025
        case GAVL_RGB_24:
 
1026
          ret = tab->rgba_64_to_rgb_24;
 
1027
          break;
 
1028
        case GAVL_BGR_24:
 
1029
          ret = tab->rgba_64_to_bgr_24;
 
1030
          break;
 
1031
        case GAVL_RGB_32:
 
1032
          ret = tab->rgba_64_to_rgb_32;
 
1033
          break;
 
1034
        case GAVL_BGR_32:
 
1035
          ret = tab->rgba_64_to_bgr_32;
 
1036
          break;
 
1037
        case GAVL_RGBA_32:
 
1038
          ret = tab->rgba_64_to_rgba_32;
 
1039
          break;
 
1040
        case GAVL_RGB_48:
 
1041
          ret = tab->rgba_64_to_rgb_48;
 
1042
          break;
 
1043
        case GAVL_RGB_FLOAT:
 
1044
          ret = tab->rgba_64_to_rgb_float;
 
1045
          break;
 
1046
        case GAVL_RGBA_FLOAT:
 
1047
          ret = tab->rgba_64_to_rgba_float;
 
1048
          break;
 
1049
        case GAVL_YUY2:
 
1050
          ret = tab->rgba_64_to_yuy2;
 
1051
          break;
 
1052
        case GAVL_UYVY:
 
1053
          ret = tab->rgba_64_to_uyvy;
 
1054
          break;
 
1055
        case GAVL_YUVA_32:
 
1056
          ret = tab->rgba_64_to_yuva_32;
 
1057
          break;
 
1058
        case GAVL_YUV_420_P:
 
1059
          ret = tab->rgba_64_to_yuv_420_p;
 
1060
          break;
 
1061
        case GAVL_YUV_410_P:
 
1062
          ret = tab->rgba_64_to_yuv_410_p;
 
1063
          break;
 
1064
        case GAVL_YUV_422_P:
 
1065
          ret = tab->rgba_64_to_yuv_422_p;
 
1066
          break;
 
1067
        case GAVL_YUV_422_P_16:
 
1068
          ret = tab->rgba_64_to_yuv_422_p_16;
 
1069
          break;
 
1070
        case GAVL_YUV_411_P:
 
1071
          ret = tab->rgba_64_to_yuv_411_p;
 
1072
          break;
 
1073
        case GAVL_YUV_444_P:
 
1074
          ret = tab->rgba_64_to_yuv_444_p;
 
1075
          break;
 
1076
        case GAVL_YUV_444_P_16:
 
1077
          ret = tab->rgba_64_to_yuv_444_p_16;
 
1078
          break;
 
1079
        case GAVL_YUVJ_420_P:
 
1080
          ret = tab->rgba_64_to_yuvj_420_p;
 
1081
          break;
 
1082
        case GAVL_YUVJ_422_P:
 
1083
          ret = tab->rgba_64_to_yuvj_422_p;
 
1084
          break;
 
1085
        case GAVL_YUVJ_444_P:
 
1086
          ret = tab->rgba_64_to_yuvj_444_p;
 
1087
          break;
 
1088
        /* Keep GCC happy */
 
1089
        case GAVL_PIXELFORMAT_NONE:
 
1090
        case GAVL_RGBA_64:
 
1091
          break;
 
1092
        }
 
1093
      break;
 
1094
 
 
1095
    case GAVL_RGBA_FLOAT:
 
1096
      switch(output_pixelformat)
 
1097
        {
 
1098
        case GAVL_RGB_15:
 
1099
          ret = tab->rgba_float_to_rgb_15;
 
1100
          break;
 
1101
        case GAVL_BGR_15:
 
1102
          ret = tab->rgba_float_to_bgr_15;
 
1103
          break;
 
1104
        case GAVL_RGB_16:
 
1105
          ret = tab->rgba_float_to_rgb_16;
 
1106
          break;
 
1107
        case GAVL_BGR_16:
 
1108
          ret = tab->rgba_float_to_bgr_16;
 
1109
          break;
 
1110
        case GAVL_RGB_24:
 
1111
          ret = tab->rgba_float_to_rgb_24;
 
1112
          break;
 
1113
        case GAVL_BGR_24:
 
1114
          ret = tab->rgba_float_to_bgr_24;
 
1115
          break;
 
1116
        case GAVL_RGB_32:
 
1117
          ret = tab->rgba_float_to_rgb_32;
 
1118
          break;
 
1119
        case GAVL_BGR_32:
 
1120
          ret = tab->rgba_float_to_bgr_32;
 
1121
          break;
 
1122
        case GAVL_RGBA_32:
 
1123
          ret = tab->rgba_float_to_rgba_32;
 
1124
          break;
 
1125
        case GAVL_RGB_48:
 
1126
          ret = tab->rgba_float_to_rgb_48;
 
1127
          break;
 
1128
        case GAVL_RGBA_64:
 
1129
          ret = tab->rgba_float_to_rgba_64;
 
1130
          break;
 
1131
        case GAVL_RGB_FLOAT:
 
1132
          ret = tab->rgba_float_to_rgb_float;
 
1133
          break;
 
1134
        case GAVL_YUY2:
 
1135
          ret = tab->rgba_float_to_yuy2;
 
1136
          break;
 
1137
        case GAVL_UYVY:
 
1138
          ret = tab->rgba_float_to_uyvy;
 
1139
          break;
 
1140
        case GAVL_YUVA_32:
 
1141
          ret = tab->rgba_float_to_yuva_32;
 
1142
          break;
 
1143
        case GAVL_YUV_420_P:
 
1144
          ret = tab->rgba_float_to_yuv_420_p;
 
1145
          break;
 
1146
        case GAVL_YUV_410_P:
 
1147
          ret = tab->rgba_float_to_yuv_410_p;
 
1148
          break;
 
1149
        case GAVL_YUV_422_P:
 
1150
          ret = tab->rgba_float_to_yuv_422_p;
 
1151
          break;
 
1152
        case GAVL_YUV_422_P_16:
 
1153
          ret = tab->rgba_float_to_yuv_422_p_16;
 
1154
          break;
 
1155
        case GAVL_YUV_411_P:
 
1156
          ret = tab->rgba_float_to_yuv_411_p;
 
1157
          break;
 
1158
        case GAVL_YUV_444_P:
 
1159
          ret = tab->rgba_float_to_yuv_444_p;
 
1160
          break;
 
1161
        case GAVL_YUV_444_P_16:
 
1162
          ret = tab->rgba_float_to_yuv_444_p_16;
 
1163
          break;
 
1164
        case GAVL_YUVJ_420_P:
 
1165
          ret = tab->rgba_float_to_yuvj_420_p;
 
1166
          break;
 
1167
        case GAVL_YUVJ_422_P:
 
1168
          ret = tab->rgba_float_to_yuvj_422_p;
 
1169
          break;
 
1170
        case GAVL_YUVJ_444_P:
 
1171
          ret = tab->rgba_float_to_yuvj_444_p;
 
1172
          break;
 
1173
        /* Keep GCC happy */
 
1174
        case GAVL_PIXELFORMAT_NONE:
 
1175
        case GAVL_RGBA_FLOAT:
 
1176
          break;
 
1177
        }
 
1178
      break;
 
1179
 
 
1180
      
 
1181
    case GAVL_RGB_48:
 
1182
      switch(output_pixelformat)
 
1183
        {
 
1184
        case GAVL_RGB_15:
 
1185
          ret = tab->rgb_48_to_15;
 
1186
          break;
 
1187
        case GAVL_BGR_15:
 
1188
          ret = tab->rgb_48_to_15_swap;
 
1189
          break;
 
1190
        case GAVL_RGB_16:
 
1191
          ret = tab->rgb_48_to_16;
 
1192
          break;
 
1193
        case GAVL_BGR_16:
 
1194
          ret = tab->rgb_48_to_16_swap;
 
1195
          break;
 
1196
        case GAVL_RGB_24:
 
1197
          ret = tab->rgb_48_to_24;
 
1198
          break;
 
1199
        case GAVL_BGR_24:
 
1200
          ret = tab->rgb_48_to_24_swap;
 
1201
          break;
 
1202
        case GAVL_RGB_32:
 
1203
          ret = tab->rgb_48_to_32;
 
1204
          break;
 
1205
        case GAVL_BGR_32:
 
1206
          ret = tab->rgb_48_to_32_swap;
 
1207
          break;
 
1208
        case GAVL_RGBA_32:
 
1209
          ret = tab->rgb_48_to_rgba_32;
 
1210
          break;
 
1211
        case GAVL_RGBA_64:
 
1212
          ret = tab->rgb_48_to_rgba_64;
 
1213
          break;
 
1214
        case GAVL_RGB_FLOAT:
 
1215
          ret = tab->rgb_48_to_float;
 
1216
          break;
 
1217
        case GAVL_RGBA_FLOAT:
 
1218
          ret = tab->rgb_48_to_rgba_float;
 
1219
          break;
 
1220
        case GAVL_YUY2:
 
1221
          ret = tab->rgb_48_to_yuy2;
 
1222
          break;
 
1223
        case GAVL_UYVY:
 
1224
          ret = tab->rgb_48_to_uyvy;
 
1225
          break;
 
1226
        case GAVL_YUVA_32:
 
1227
          ret = tab->rgb_48_to_yuva_32;
 
1228
          break;
 
1229
        case GAVL_YUV_420_P:
 
1230
          ret = tab->rgb_48_to_yuv_420_p;
 
1231
          break;
 
1232
        case GAVL_YUV_410_P:
 
1233
          ret = tab->rgb_48_to_yuv_410_p;
 
1234
          break;
 
1235
        case GAVL_YUV_422_P:
 
1236
          ret = tab->rgb_48_to_yuv_422_p;
 
1237
          break;
 
1238
        case GAVL_YUV_422_P_16:
 
1239
          ret = tab->rgb_48_to_yuv_422_p_16;
 
1240
          break;
 
1241
        case GAVL_YUV_411_P:
 
1242
          ret = tab->rgb_48_to_yuv_411_p;
 
1243
          break;
 
1244
        case GAVL_YUV_444_P:
 
1245
          ret = tab->rgb_48_to_yuv_444_p;
 
1246
          break;
 
1247
        case GAVL_YUV_444_P_16:
 
1248
          ret = tab->rgb_48_to_yuv_444_p_16;
 
1249
          break;
 
1250
        case GAVL_YUVJ_420_P:
 
1251
          ret = tab->rgb_48_to_yuvj_420_p;
 
1252
          break;
 
1253
        case GAVL_YUVJ_422_P:
 
1254
          ret = tab->rgb_48_to_yuvj_422_p;
 
1255
          break;
 
1256
        case GAVL_YUVJ_444_P:
 
1257
          ret = tab->rgb_48_to_yuvj_444_p;
 
1258
          break;
 
1259
        /* Keep GCC happy */
 
1260
        case GAVL_PIXELFORMAT_NONE:
 
1261
        case GAVL_RGB_48:
 
1262
          break;
 
1263
        }
 
1264
      break;
 
1265
    case GAVL_RGB_FLOAT:
 
1266
      switch(output_pixelformat)
 
1267
        {
 
1268
        case GAVL_RGB_15:
 
1269
          ret = tab->rgb_float_to_15;
 
1270
          break;
 
1271
        case GAVL_BGR_15:
 
1272
          ret = tab->rgb_float_to_15_swap;
 
1273
          break;
 
1274
        case GAVL_RGB_16:
 
1275
          ret = tab->rgb_float_to_16;
 
1276
          break;
 
1277
        case GAVL_BGR_16:
 
1278
          ret = tab->rgb_float_to_16_swap;
 
1279
          break;
 
1280
        case GAVL_RGB_24:
 
1281
          ret = tab->rgb_float_to_24;
 
1282
          break;
 
1283
        case GAVL_BGR_24:
 
1284
          ret = tab->rgb_float_to_24_swap;
 
1285
          break;
 
1286
        case GAVL_RGB_32:
 
1287
          ret = tab->rgb_float_to_32;
 
1288
          break;
 
1289
        case GAVL_BGR_32:
 
1290
          ret = tab->rgb_float_to_32_swap;
 
1291
          break;
 
1292
        case GAVL_RGBA_32:
 
1293
          ret = tab->rgb_float_to_rgba_32;
 
1294
          break;
 
1295
        case GAVL_RGB_48:
 
1296
          ret = tab->rgb_float_to_48;
 
1297
          break;
 
1298
        case GAVL_RGBA_64:
 
1299
          ret = tab->rgb_float_to_rgba_64;
 
1300
          break;
 
1301
        case GAVL_RGBA_FLOAT:
 
1302
          ret = tab->rgb_float_to_rgba_float;
 
1303
          break;
 
1304
        case GAVL_YUY2:
 
1305
          ret = tab->rgb_float_to_yuy2;
 
1306
          break;
 
1307
        case GAVL_UYVY:
 
1308
          ret = tab->rgb_float_to_uyvy;
 
1309
          break;
 
1310
        case GAVL_YUVA_32:
 
1311
          ret = tab->rgb_float_to_yuva_32;
 
1312
          break;
 
1313
        case GAVL_YUV_420_P:
 
1314
          ret = tab->rgb_float_to_yuv_420_p;
 
1315
          break;
 
1316
        case GAVL_YUV_410_P:
 
1317
          ret = tab->rgb_float_to_yuv_410_p;
 
1318
          break;
 
1319
        case GAVL_YUV_422_P:
 
1320
          ret = tab->rgb_float_to_yuv_422_p;
 
1321
          break;
 
1322
        case GAVL_YUV_422_P_16:
 
1323
          ret = tab->rgb_float_to_yuv_422_p_16;
 
1324
          break;
 
1325
        case GAVL_YUV_411_P:
 
1326
          ret = tab->rgb_float_to_yuv_411_p;
 
1327
          break;
 
1328
        case GAVL_YUV_444_P:
 
1329
          ret = tab->rgb_float_to_yuv_444_p;
 
1330
          break;
 
1331
        case GAVL_YUV_444_P_16:
 
1332
          ret = tab->rgb_float_to_yuv_444_p_16;
 
1333
          break;
 
1334
        case GAVL_YUVJ_420_P:
 
1335
          ret = tab->rgb_float_to_yuvj_420_p;
 
1336
          break;
 
1337
        case GAVL_YUVJ_422_P:
 
1338
          ret = tab->rgb_float_to_yuvj_422_p;
 
1339
          break;
 
1340
        case GAVL_YUVJ_444_P:
 
1341
          ret = tab->rgb_float_to_yuvj_444_p;
 
1342
          break;
 
1343
        /* Keep GCC happy */
 
1344
        case GAVL_PIXELFORMAT_NONE:
 
1345
        case GAVL_RGB_FLOAT:
 
1346
          break;
 
1347
        }
 
1348
      break;
 
1349
 
 
1350
      
 
1351
 
 
1352
    case GAVL_YUY2:
 
1353
      switch(output_pixelformat)
 
1354
        {
 
1355
        case GAVL_RGB_15:
 
1356
          ret = tab->yuy2_to_rgb_15;
 
1357
          break;
 
1358
        case GAVL_BGR_15:
 
1359
          ret = tab->yuy2_to_bgr_15;
 
1360
          break;
 
1361
        case GAVL_RGB_16:
 
1362
          ret = tab->yuy2_to_rgb_16;
 
1363
          break;
 
1364
        case GAVL_BGR_16:
 
1365
          ret = tab->yuy2_to_bgr_16;
 
1366
          break;
 
1367
        case GAVL_RGB_24:
 
1368
          ret = tab->yuy2_to_rgb_24;
 
1369
          break;
 
1370
        case GAVL_BGR_24:
 
1371
          ret = tab->yuy2_to_bgr_24;
 
1372
          break;
 
1373
        case GAVL_RGB_32:
 
1374
          ret = tab->yuy2_to_rgb_32;
 
1375
          break;
 
1376
        case GAVL_BGR_32:
 
1377
          ret = tab->yuy2_to_bgr_32;
 
1378
          break;
 
1379
        case GAVL_RGBA_32:
 
1380
          ret = tab->yuy2_to_rgba_32;
 
1381
          break;
 
1382
        case GAVL_RGB_48:
 
1383
          ret = tab->yuy2_to_rgb_48;
 
1384
          break;
 
1385
        case GAVL_RGBA_64:
 
1386
          ret = tab->yuy2_to_rgba_64;
 
1387
          break;
 
1388
        case GAVL_RGB_FLOAT:
 
1389
          ret = tab->yuy2_to_rgb_float;
 
1390
          break;
 
1391
        case GAVL_RGBA_FLOAT:
 
1392
          ret = tab->yuy2_to_rgba_float;
 
1393
          break;
 
1394
        case GAVL_YUV_420_P:
 
1395
          ret = tab->yuy2_to_yuv_420_p;
 
1396
          break;
 
1397
        case GAVL_YUV_410_P:
 
1398
          ret = tab->yuy2_to_yuv_410_p;
 
1399
          break;
 
1400
        case GAVL_YUV_422_P:
 
1401
          ret = tab->yuy2_to_yuv_422_p;
 
1402
          break;
 
1403
        case GAVL_YUV_422_P_16:
 
1404
          ret = tab->yuy2_to_yuv_422_p_16;
 
1405
          break;
 
1406
        case GAVL_YUV_411_P:
 
1407
          ret = tab->yuy2_to_yuv_411_p;
 
1408
          break;
 
1409
        case GAVL_YUV_444_P:
 
1410
          ret = tab->yuy2_to_yuv_444_p;
 
1411
          break;
 
1412
        case GAVL_YUV_444_P_16:
 
1413
          ret = tab->yuy2_to_yuv_444_p_16;
 
1414
          break;
 
1415
        case GAVL_YUVJ_420_P:
 
1416
          ret = tab->yuy2_to_yuvj_420_p;
 
1417
          break;
 
1418
        case GAVL_YUVJ_422_P:
 
1419
          ret = tab->yuy2_to_yuvj_422_p;
 
1420
          break;
 
1421
        case GAVL_YUVJ_444_P:
 
1422
          ret = tab->yuy2_to_yuvj_444_p;
 
1423
          break;
 
1424
        case GAVL_UYVY:
 
1425
          ret = tab->uyvy_to_yuy2;
 
1426
          break;
 
1427
        case GAVL_YUVA_32:
 
1428
          ret = tab->yuy2_to_yuva_32;
 
1429
          break;
 
1430
        /* Keep GCC happy */
 
1431
        case GAVL_PIXELFORMAT_NONE:
 
1432
        case GAVL_YUY2:
 
1433
          break;
 
1434
        }
 
1435
      break;
 
1436
    case GAVL_UYVY:
 
1437
      switch(output_pixelformat)
 
1438
        {
 
1439
        case GAVL_RGB_15:
 
1440
          ret = tab->uyvy_to_rgb_15;
 
1441
          break;
 
1442
        case GAVL_BGR_15:
 
1443
          ret = tab->uyvy_to_bgr_15;
 
1444
          break;
 
1445
        case GAVL_RGB_16:
 
1446
          ret = tab->uyvy_to_rgb_16;
 
1447
          break;
 
1448
        case GAVL_BGR_16:
 
1449
          ret = tab->uyvy_to_bgr_16;
 
1450
          break;
 
1451
        case GAVL_RGB_24:
 
1452
          ret = tab->uyvy_to_rgb_24;
 
1453
          break;
 
1454
        case GAVL_BGR_24:
 
1455
          ret = tab->uyvy_to_bgr_24;
 
1456
          break;
 
1457
        case GAVL_RGB_32:
 
1458
          ret = tab->uyvy_to_rgb_32;
 
1459
          break;
 
1460
        case GAVL_BGR_32:
 
1461
          ret = tab->uyvy_to_bgr_32;
 
1462
          break;
 
1463
        case GAVL_RGBA_32:
 
1464
          ret = tab->uyvy_to_rgba_32;
 
1465
          break;
 
1466
        case GAVL_RGB_48:
 
1467
          ret = tab->uyvy_to_rgb_48;
 
1468
          break;
 
1469
        case GAVL_RGBA_64:
 
1470
          ret = tab->uyvy_to_rgba_64;
 
1471
          break;
 
1472
        case GAVL_RGB_FLOAT:
 
1473
          ret = tab->uyvy_to_rgb_float;
 
1474
          break;
 
1475
        case GAVL_RGBA_FLOAT:
 
1476
          ret = tab->uyvy_to_rgba_float;
 
1477
          break;
 
1478
        case GAVL_YUV_420_P:
 
1479
          ret = tab->uyvy_to_yuv_420_p;
 
1480
          break;
 
1481
        case GAVL_YUV_410_P:
 
1482
          ret = tab->uyvy_to_yuv_410_p;
 
1483
          break;
 
1484
        case GAVL_YUV_422_P:
 
1485
          ret = tab->uyvy_to_yuv_422_p;
 
1486
          break;
 
1487
        case GAVL_YUV_422_P_16:
 
1488
          ret = tab->uyvy_to_yuv_422_p_16;
 
1489
          break;
 
1490
        case GAVL_YUV_411_P:
 
1491
          ret = tab->uyvy_to_yuv_411_p;
 
1492
          break;
 
1493
        case GAVL_YUV_444_P:
 
1494
          ret = tab->uyvy_to_yuv_444_p;
 
1495
          break;
 
1496
        case GAVL_YUV_444_P_16:
 
1497
          ret = tab->uyvy_to_yuv_444_p_16;
 
1498
          break;
 
1499
        case GAVL_YUVJ_420_P:
 
1500
          ret = tab->uyvy_to_yuvj_420_p;
 
1501
          break;
 
1502
        case GAVL_YUVJ_422_P:
 
1503
          ret = tab->uyvy_to_yuvj_422_p;
 
1504
          break;
 
1505
        case GAVL_YUVJ_444_P:
 
1506
          ret = tab->uyvy_to_yuvj_444_p;
 
1507
          break;
 
1508
        case GAVL_YUY2:
 
1509
          ret = tab->uyvy_to_yuy2;
 
1510
          break;
 
1511
        case GAVL_YUVA_32:
 
1512
          ret = tab->uyvy_to_yuva_32;
 
1513
          break;
 
1514
        /* Keep GCC happy */
 
1515
        case GAVL_PIXELFORMAT_NONE:
 
1516
        case GAVL_UYVY:
 
1517
          break;
 
1518
        }
 
1519
      break;
 
1520
 
 
1521
    case GAVL_YUVA_32:
 
1522
      switch(output_pixelformat)
 
1523
        {
 
1524
        case GAVL_RGB_15:
 
1525
          ret = tab->yuva_32_to_rgb_15;
 
1526
          break;
 
1527
        case GAVL_BGR_15:
 
1528
          ret = tab->yuva_32_to_bgr_15;
 
1529
          break;
 
1530
        case GAVL_RGB_16:
 
1531
          ret = tab->yuva_32_to_rgb_16;
 
1532
          break;
 
1533
        case GAVL_BGR_16:
 
1534
          ret = tab->yuva_32_to_bgr_16;
 
1535
          break;
 
1536
        case GAVL_RGB_24:
 
1537
          ret = tab->yuva_32_to_rgb_24;
 
1538
          break;
 
1539
        case GAVL_BGR_24:
 
1540
          ret = tab->yuva_32_to_bgr_24;
 
1541
          break;
 
1542
        case GAVL_RGB_32:
 
1543
          ret = tab->yuva_32_to_rgb_32;
 
1544
          break;
 
1545
        case GAVL_BGR_32:
 
1546
          ret = tab->yuva_32_to_bgr_32;
 
1547
          break;
 
1548
        case GAVL_RGBA_32:
 
1549
          ret = tab->yuva_32_to_rgba_32;
 
1550
          break;
 
1551
        case GAVL_RGB_48:
 
1552
          ret = tab->yuva_32_to_rgb_48;
 
1553
          break;
 
1554
        case GAVL_RGBA_64:
 
1555
          ret = tab->yuva_32_to_rgba_64;
 
1556
          break;
 
1557
        case GAVL_RGB_FLOAT:
 
1558
          ret = tab->yuva_32_to_rgb_float;
 
1559
          break;
 
1560
        case GAVL_RGBA_FLOAT:
 
1561
          ret = tab->yuva_32_to_rgba_float;
 
1562
          break;
 
1563
        case GAVL_YUV_420_P:
 
1564
          ret = tab->yuva_32_to_yuv_420_p;
 
1565
          break;
 
1566
        case GAVL_YUV_410_P:
 
1567
          ret = tab->yuva_32_to_yuv_410_p;
 
1568
          break;
 
1569
        case GAVL_YUV_422_P:
 
1570
          ret = tab->yuva_32_to_yuv_422_p;
 
1571
          break;
 
1572
        case GAVL_YUV_422_P_16:
 
1573
          ret = tab->yuva_32_to_yuv_422_p_16;
 
1574
          break;
 
1575
        case GAVL_YUV_411_P:
 
1576
          ret = tab->yuva_32_to_yuv_411_p;
 
1577
          break;
 
1578
        case GAVL_YUV_444_P:
 
1579
          ret = tab->yuva_32_to_yuv_444_p;
 
1580
          break;
 
1581
        case GAVL_YUV_444_P_16:
 
1582
          ret = tab->yuva_32_to_yuv_444_p_16;
 
1583
          break;
 
1584
        case GAVL_YUVJ_420_P:
 
1585
          ret = tab->yuva_32_to_yuvj_420_p;
 
1586
          break;
 
1587
        case GAVL_YUVJ_422_P:
 
1588
          ret = tab->yuva_32_to_yuvj_422_p;
 
1589
          break;
 
1590
        case GAVL_YUVJ_444_P:
 
1591
          ret = tab->yuva_32_to_yuvj_444_p;
 
1592
          break;
 
1593
        case GAVL_YUY2:
 
1594
          ret = tab->yuva_32_to_yuy2;
 
1595
          break;
 
1596
        case GAVL_UYVY:
 
1597
          ret = tab->yuva_32_to_uyvy;
 
1598
          break;
 
1599
        /* Keep GCC happy */
 
1600
        case GAVL_PIXELFORMAT_NONE:
 
1601
        case GAVL_YUVA_32:
 
1602
          break;
 
1603
        }
 
1604
      break;
 
1605
 
 
1606
 
 
1607
    case GAVL_YUV_420_P:
 
1608
      switch(output_pixelformat)
 
1609
        {
 
1610
        case GAVL_RGB_15:
 
1611
          ret = tab->yuv_420_p_to_rgb_15;
 
1612
          break;
 
1613
        case GAVL_BGR_15:
 
1614
          ret = tab->yuv_420_p_to_bgr_15;
 
1615
          break;
 
1616
        case GAVL_RGB_16:
 
1617
          ret = tab->yuv_420_p_to_rgb_16;
 
1618
          break;
 
1619
        case GAVL_BGR_16:
 
1620
          ret = tab->yuv_420_p_to_bgr_16;
 
1621
          break;
 
1622
        case GAVL_RGB_24:
 
1623
          ret = tab->yuv_420_p_to_rgb_24;
 
1624
          break;
 
1625
        case GAVL_BGR_24:
 
1626
          ret = tab->yuv_420_p_to_bgr_24;
 
1627
          break;
 
1628
        case GAVL_RGB_32:
 
1629
          ret = tab->yuv_420_p_to_rgb_32;
 
1630
          break;
 
1631
        case GAVL_BGR_32:
 
1632
          ret = tab->yuv_420_p_to_bgr_32;
 
1633
          break;
 
1634
        case GAVL_RGBA_32:
 
1635
          ret = tab->yuv_420_p_to_rgba_32;
 
1636
          break;
 
1637
        case GAVL_RGB_48:
 
1638
          ret = tab->yuv_420_p_to_rgb_48;
 
1639
          break;
 
1640
        case GAVL_RGBA_64:
 
1641
          ret = tab->yuv_420_p_to_rgba_64;
 
1642
          break;
 
1643
        case GAVL_RGB_FLOAT:
 
1644
          ret = tab->yuv_420_p_to_rgb_float;
 
1645
          break;
 
1646
        case GAVL_RGBA_FLOAT:
 
1647
          ret = tab->yuv_420_p_to_rgba_float;
 
1648
          break;
 
1649
 
 
1650
        case GAVL_YUY2:
 
1651
          ret = tab->yuv_420_p_to_yuy2;
 
1652
          break;
 
1653
        case GAVL_UYVY:
 
1654
          ret = tab->yuv_420_p_to_uyvy;
 
1655
          break;
 
1656
        case GAVL_YUVA_32:
 
1657
          ret = tab->yuv_420_p_to_yuva_32;
 
1658
          break;
 
1659
        case GAVL_YUV_410_P:
 
1660
          ret = tab->yuv_420_p_to_yuv_410_p;
 
1661
          break;
 
1662
        case GAVL_YUV_422_P:
 
1663
          ret = tab->yuv_420_p_to_yuv_422_p;
 
1664
          break;
 
1665
        case GAVL_YUV_422_P_16:
 
1666
          ret = tab->yuv_420_p_to_yuv_422_p_16;
 
1667
          break;
 
1668
        case GAVL_YUV_411_P:
 
1669
          ret = tab->yuv_420_p_to_yuv_411_p;
 
1670
          break;
 
1671
        case GAVL_YUV_444_P:
 
1672
          ret = tab->yuv_420_p_to_yuv_444_p;
 
1673
          break;
 
1674
        case GAVL_YUV_444_P_16:
 
1675
          ret = tab->yuv_420_p_to_yuv_444_p_16;
 
1676
          break;
 
1677
        case GAVL_YUVJ_420_P:
 
1678
          ret = tab->yuv_420_p_to_yuvj_420_p;
 
1679
          break;
 
1680
        case GAVL_YUVJ_422_P:
 
1681
          ret = tab->yuv_420_p_to_yuvj_422_p;
 
1682
          break;
 
1683
        case GAVL_YUVJ_444_P:
 
1684
          ret = tab->yuv_420_p_to_yuvj_444_p;
 
1685
          break;
 
1686
        /* Keep GCC happy */
 
1687
        case GAVL_PIXELFORMAT_NONE:
 
1688
        case GAVL_YUV_420_P:
 
1689
          break;
 
1690
        }
 
1691
      break;
 
1692
    case GAVL_YUV_410_P:
 
1693
      switch(output_pixelformat)
 
1694
        {
 
1695
        case GAVL_RGB_15:
 
1696
          ret = tab->yuv_410_p_to_rgb_15;
 
1697
          break;
 
1698
        case GAVL_BGR_15:
 
1699
          ret = tab->yuv_410_p_to_bgr_15;
 
1700
          break;
 
1701
        case GAVL_RGB_16:
 
1702
          ret = tab->yuv_410_p_to_rgb_16;
 
1703
          break;
 
1704
        case GAVL_BGR_16:
 
1705
          ret = tab->yuv_410_p_to_bgr_16;
 
1706
          break;
 
1707
        case GAVL_RGB_24:
 
1708
          ret = tab->yuv_410_p_to_rgb_24;
 
1709
          break;
 
1710
        case GAVL_BGR_24:
 
1711
          ret = tab->yuv_410_p_to_bgr_24;
 
1712
          break;
 
1713
        case GAVL_RGB_32:
 
1714
          ret = tab->yuv_410_p_to_rgb_32;
 
1715
          break;
 
1716
        case GAVL_BGR_32:
 
1717
          ret = tab->yuv_410_p_to_bgr_32;
 
1718
          break;
 
1719
        case GAVL_RGBA_32:
 
1720
          ret = tab->yuv_410_p_to_rgba_32;
 
1721
          break;
 
1722
        case GAVL_RGB_48:
 
1723
          ret = tab->yuv_410_p_to_rgb_48;
 
1724
          break;
 
1725
        case GAVL_RGBA_64:
 
1726
          ret = tab->yuv_410_p_to_rgba_64;
 
1727
          break;
 
1728
        case GAVL_RGB_FLOAT:
 
1729
          ret = tab->yuv_410_p_to_rgb_float;
 
1730
          break;
 
1731
        case GAVL_RGBA_FLOAT:
 
1732
          ret = tab->yuv_410_p_to_rgba_float;
 
1733
          break;
 
1734
 
 
1735
        case GAVL_YUY2:
 
1736
          ret = tab->yuv_410_p_to_yuy2;
 
1737
          break;
 
1738
        case GAVL_UYVY:
 
1739
          ret = tab->yuv_410_p_to_uyvy;
 
1740
          break;
 
1741
        case GAVL_YUVA_32:
 
1742
          ret = tab->yuv_410_p_to_yuva_32;
 
1743
          break;
 
1744
        case GAVL_YUV_420_P:
 
1745
          ret = tab->yuv_410_p_to_yuv_420_p;
 
1746
          break;
 
1747
        case GAVL_YUV_422_P:
 
1748
          ret = tab->yuv_410_p_to_yuv_422_p;
 
1749
          break;
 
1750
        case GAVL_YUV_422_P_16:
 
1751
          ret = tab->yuv_410_p_to_yuv_422_p_16;
 
1752
          break;
 
1753
        case GAVL_YUV_411_P:
 
1754
          ret = tab->yuv_410_p_to_yuv_411_p;
 
1755
          break;
 
1756
        case GAVL_YUV_444_P:
 
1757
          ret = tab->yuv_410_p_to_yuv_444_p;
 
1758
          break;
 
1759
        case GAVL_YUV_444_P_16:
 
1760
          ret = tab->yuv_410_p_to_yuv_444_p_16;
 
1761
          break;
 
1762
        case GAVL_YUVJ_420_P:
 
1763
          ret = tab->yuv_410_p_to_yuvj_420_p;
 
1764
          break;
 
1765
        case GAVL_YUVJ_422_P:
 
1766
          ret = tab->yuv_410_p_to_yuvj_422_p;
 
1767
          break;
 
1768
        case GAVL_YUVJ_444_P:
 
1769
          ret = tab->yuv_410_p_to_yuvj_444_p;
 
1770
          break;
 
1771
        /* Keep GCC happy */
 
1772
        case GAVL_PIXELFORMAT_NONE:
 
1773
        case GAVL_YUV_410_P:
 
1774
          break;
 
1775
        }
 
1776
      break;
 
1777
    case GAVL_YUV_422_P:
 
1778
      switch(output_pixelformat)
 
1779
        {
 
1780
        case GAVL_RGB_15:
 
1781
          ret = tab->yuv_422_p_to_rgb_15;
 
1782
          break;
 
1783
        case GAVL_BGR_15:
 
1784
          ret = tab->yuv_422_p_to_bgr_15;
 
1785
          break;
 
1786
        case GAVL_RGB_16:
 
1787
          ret = tab->yuv_422_p_to_rgb_16;
 
1788
          break;
 
1789
        case GAVL_BGR_16:
 
1790
          ret = tab->yuv_422_p_to_bgr_16;
 
1791
          break;
 
1792
        case GAVL_RGB_24:
 
1793
          ret = tab->yuv_422_p_to_rgb_24;
 
1794
          break;
 
1795
        case GAVL_BGR_24:
 
1796
          ret = tab->yuv_422_p_to_bgr_24;
 
1797
          break;
 
1798
        case GAVL_RGB_32:
 
1799
          ret = tab->yuv_422_p_to_rgb_32;
 
1800
          break;
 
1801
        case GAVL_BGR_32:
 
1802
          ret = tab->yuv_422_p_to_bgr_32;
 
1803
          break;
 
1804
        case GAVL_RGBA_32:
 
1805
          ret = tab->yuv_422_p_to_rgba_32;
 
1806
          break;
 
1807
        case GAVL_RGB_48:
 
1808
          ret = tab->yuv_422_p_to_rgb_48;
 
1809
          break;
 
1810
        case GAVL_RGBA_64:
 
1811
          ret = tab->yuv_422_p_to_rgba_64;
 
1812
          break;
 
1813
        case GAVL_RGB_FLOAT:
 
1814
          ret = tab->yuv_422_p_to_rgb_float;
 
1815
          break;
 
1816
        case GAVL_RGBA_FLOAT:
 
1817
          ret = tab->yuv_422_p_to_rgba_float;
 
1818
          break;
 
1819
        case GAVL_YUY2:
 
1820
          ret = tab->yuv_422_p_to_yuy2;
 
1821
          break;
 
1822
        case GAVL_UYVY:
 
1823
          ret = tab->yuv_422_p_to_uyvy;
 
1824
          break;
 
1825
        case GAVL_YUVA_32:
 
1826
          ret = tab->yuv_422_p_to_yuva_32;
 
1827
          break;
 
1828
        case GAVL_YUV_420_P:
 
1829
          ret = tab->yuv_422_p_to_yuv_420_p;
 
1830
          break;
 
1831
        case GAVL_YUV_410_P:
 
1832
          ret = tab->yuv_422_p_to_yuv_410_p;
 
1833
          break;
 
1834
        case GAVL_YUV_411_P:
 
1835
          ret = tab->yuv_422_p_to_yuv_411_p;
 
1836
          break;
 
1837
        case GAVL_YUV_444_P:
 
1838
          ret = tab->yuv_422_p_to_yuv_444_p;
 
1839
          break;
 
1840
        case GAVL_YUV_444_P_16:
 
1841
          ret = tab->yuv_422_p_to_yuv_444_p_16;
 
1842
          break;
 
1843
        case GAVL_YUV_422_P_16:
 
1844
          ret = tab->yuv_422_p_to_yuv_422_p_16;
 
1845
          break;
 
1846
        case GAVL_YUVJ_420_P:
 
1847
          ret = tab->yuv_422_p_to_yuvj_420_p;
 
1848
          break;
 
1849
        case GAVL_YUVJ_422_P:
 
1850
          ret = tab->yuv_422_p_to_yuvj_422_p;
 
1851
          break;
 
1852
        case GAVL_YUVJ_444_P:
 
1853
          ret = tab->yuv_422_p_to_yuvj_444_p;
 
1854
          break;
 
1855
        /* Keep GCC happy */
 
1856
        case GAVL_PIXELFORMAT_NONE:
 
1857
        case GAVL_YUV_422_P:
 
1858
          break;
 
1859
        }
 
1860
      break;
 
1861
 
 
1862
    case GAVL_YUV_422_P_16:
 
1863
      switch(output_pixelformat)
 
1864
        {
 
1865
        case GAVL_RGB_15:
 
1866
          ret = tab->yuv_422_p_16_to_rgb_15;
 
1867
          break;
 
1868
        case GAVL_BGR_15:
 
1869
          ret = tab->yuv_422_p_16_to_bgr_15;
 
1870
          break;
 
1871
        case GAVL_RGB_16:
 
1872
          ret = tab->yuv_422_p_16_to_rgb_16;
 
1873
          break;
 
1874
        case GAVL_BGR_16:
 
1875
          ret = tab->yuv_422_p_16_to_bgr_16;
 
1876
          break;
 
1877
        case GAVL_RGB_24:
 
1878
          ret = tab->yuv_422_p_16_to_rgb_24;
 
1879
          break;
 
1880
        case GAVL_BGR_24:
 
1881
          ret = tab->yuv_422_p_16_to_bgr_24;
 
1882
          break;
 
1883
        case GAVL_RGB_32:
 
1884
          ret = tab->yuv_422_p_16_to_rgb_32;
 
1885
          break;
 
1886
        case GAVL_BGR_32:
 
1887
          ret = tab->yuv_422_p_16_to_bgr_32;
 
1888
          break;
 
1889
        case GAVL_RGBA_32:
 
1890
          ret = tab->yuv_422_p_16_to_rgba_32;
 
1891
          break;
 
1892
        case GAVL_RGB_48:
 
1893
          ret = tab->yuv_422_p_16_to_rgb_48;
 
1894
          break;
 
1895
        case GAVL_RGBA_64:
 
1896
          ret = tab->yuv_422_p_16_to_rgba_64;
 
1897
          break;
 
1898
        case GAVL_RGB_FLOAT:
 
1899
          ret = tab->yuv_422_p_16_to_rgb_float;
 
1900
          break;
 
1901
        case GAVL_RGBA_FLOAT:
 
1902
          ret = tab->yuv_422_p_16_to_rgba_float;
 
1903
          break;
 
1904
        case GAVL_YUY2:
 
1905
          ret = tab->yuv_422_p_16_to_yuy2;
 
1906
          break;
 
1907
        case GAVL_UYVY:
 
1908
          ret = tab->yuv_422_p_16_to_uyvy;
 
1909
          break;
 
1910
        case GAVL_YUVA_32:
 
1911
          ret = tab->yuv_422_p_16_to_yuva_32;
 
1912
          break;
 
1913
        case GAVL_YUV_420_P:
 
1914
          ret = tab->yuv_422_p_16_to_yuv_420_p;
 
1915
          break;
 
1916
        case GAVL_YUV_410_P:
 
1917
          ret = tab->yuv_422_p_16_to_yuv_410_p;
 
1918
          break;
 
1919
        case GAVL_YUV_411_P:
 
1920
          ret = tab->yuv_422_p_16_to_yuv_411_p;
 
1921
          break;
 
1922
        case GAVL_YUV_444_P:
 
1923
          ret = tab->yuv_422_p_16_to_yuv_444_p;
 
1924
          break;
 
1925
        case GAVL_YUV_444_P_16:
 
1926
          ret = tab->yuv_422_p_16_to_yuv_444_p_16;
 
1927
          break;
 
1928
        case GAVL_YUV_422_P:
 
1929
          ret = tab->yuv_422_p_16_to_yuv_422_p;
 
1930
          break;
 
1931
        case GAVL_YUVJ_420_P:
 
1932
          ret = tab->yuv_422_p_16_to_yuvj_420_p;
 
1933
          break;
 
1934
        case GAVL_YUVJ_422_P:
 
1935
          ret = tab->yuv_422_p_16_to_yuvj_422_p;
 
1936
          break;
 
1937
        case GAVL_YUVJ_444_P:
 
1938
          ret = tab->yuv_422_p_16_to_yuvj_444_p;
 
1939
          break;
 
1940
        /* Keep GCC happy */
 
1941
        case GAVL_PIXELFORMAT_NONE:
 
1942
        case GAVL_YUV_422_P_16:
 
1943
          break;
 
1944
        }
 
1945
      break;
 
1946
 
 
1947
    case GAVL_YUV_411_P:
 
1948
      switch(output_pixelformat)
 
1949
        {
 
1950
        case GAVL_RGB_15:
 
1951
          ret = tab->yuv_411_p_to_rgb_15;
 
1952
          break;
 
1953
        case GAVL_BGR_15:
 
1954
          ret = tab->yuv_411_p_to_bgr_15;
 
1955
          break;
 
1956
        case GAVL_RGB_16:
 
1957
          ret = tab->yuv_411_p_to_rgb_16;
 
1958
          break;
 
1959
        case GAVL_BGR_16:
 
1960
          ret = tab->yuv_411_p_to_bgr_16;
 
1961
          break;
 
1962
        case GAVL_RGB_24:
 
1963
          ret = tab->yuv_411_p_to_rgb_24;
 
1964
          break;
 
1965
        case GAVL_BGR_24:
 
1966
          ret = tab->yuv_411_p_to_bgr_24;
 
1967
          break;
 
1968
        case GAVL_RGB_32:
 
1969
          ret = tab->yuv_411_p_to_rgb_32;
 
1970
          break;
 
1971
        case GAVL_BGR_32:
 
1972
          ret = tab->yuv_411_p_to_bgr_32;
 
1973
          break;
 
1974
        case GAVL_RGBA_32:
 
1975
          ret = tab->yuv_411_p_to_rgba_32;
 
1976
          break;
 
1977
        case GAVL_RGB_48:
 
1978
          ret = tab->yuv_411_p_to_rgb_48;
 
1979
          break;
 
1980
        case GAVL_RGBA_64:
 
1981
          ret = tab->yuv_411_p_to_rgba_64;
 
1982
          break;
 
1983
        case GAVL_RGB_FLOAT:
 
1984
          ret = tab->yuv_411_p_to_rgb_float;
 
1985
          break;
 
1986
        case GAVL_RGBA_FLOAT:
 
1987
          ret = tab->yuv_411_p_to_rgba_float;
 
1988
          break;
 
1989
 
 
1990
        case GAVL_YUY2:
 
1991
          ret = tab->yuv_411_p_to_yuy2;
 
1992
          break;
 
1993
        case GAVL_UYVY:
 
1994
          ret = tab->yuv_411_p_to_uyvy;
 
1995
          break;
 
1996
        case GAVL_YUVA_32:
 
1997
          ret = tab->yuv_411_p_to_yuva_32;
 
1998
          break;
 
1999
        case GAVL_YUV_420_P:
 
2000
          ret = tab->yuv_411_p_to_yuv_420_p;
 
2001
          break;
 
2002
        case GAVL_YUV_410_P:
 
2003
          ret = tab->yuv_411_p_to_yuv_410_p;
 
2004
          break;
 
2005
        case GAVL_YUV_422_P:
 
2006
          ret = tab->yuv_411_p_to_yuv_422_p;
 
2007
          break;
 
2008
        case GAVL_YUV_422_P_16:
 
2009
          ret = tab->yuv_411_p_to_yuv_422_p_16;
 
2010
          break;
 
2011
        case GAVL_YUV_444_P:
 
2012
          ret = tab->yuv_411_p_to_yuv_444_p;
 
2013
          break;
 
2014
        case GAVL_YUV_444_P_16:
 
2015
          ret = tab->yuv_411_p_to_yuv_444_p_16;
 
2016
          break;
 
2017
        case GAVL_YUVJ_420_P:
 
2018
          ret = tab->yuv_411_p_to_yuvj_420_p;
 
2019
          break;
 
2020
        case GAVL_YUVJ_422_P:
 
2021
          ret = tab->yuv_411_p_to_yuvj_422_p;
 
2022
          break;
 
2023
        case GAVL_YUVJ_444_P:
 
2024
          ret = tab->yuv_411_p_to_yuvj_444_p;
 
2025
          break;
 
2026
        /* Keep GCC happy */
 
2027
        case GAVL_PIXELFORMAT_NONE:
 
2028
        case GAVL_YUV_411_P:
 
2029
          break;
 
2030
        }
 
2031
      break;
 
2032
    case GAVL_YUV_444_P:
 
2033
      switch(output_pixelformat)
 
2034
        {
 
2035
        case GAVL_RGB_15:
 
2036
          ret = tab->yuv_444_p_to_rgb_15;
 
2037
          break;
 
2038
        case GAVL_BGR_15:
 
2039
          ret = tab->yuv_444_p_to_bgr_15;
 
2040
          break;
 
2041
        case GAVL_RGB_16:
 
2042
          ret = tab->yuv_444_p_to_rgb_16;
 
2043
          break;
 
2044
        case GAVL_BGR_16:
 
2045
          ret = tab->yuv_444_p_to_bgr_16;
 
2046
          break;
 
2047
        case GAVL_RGB_24:
 
2048
          ret = tab->yuv_444_p_to_rgb_24;
 
2049
          break;
 
2050
        case GAVL_BGR_24:
 
2051
          ret = tab->yuv_444_p_to_bgr_24;
 
2052
          break;
 
2053
        case GAVL_RGB_32:
 
2054
          ret = tab->yuv_444_p_to_rgb_32;
 
2055
          break;
 
2056
        case GAVL_BGR_32:
 
2057
          ret = tab->yuv_444_p_to_bgr_32;
 
2058
          break;
 
2059
        case GAVL_RGBA_32:
 
2060
          ret = tab->yuv_444_p_to_rgba_32;
 
2061
          break;
 
2062
        case GAVL_RGB_48:
 
2063
          ret = tab->yuv_444_p_to_rgb_48;
 
2064
          break;
 
2065
        case GAVL_RGBA_64:
 
2066
          ret = tab->yuv_444_p_to_rgba_64;
 
2067
          break;
 
2068
        case GAVL_RGB_FLOAT:
 
2069
          ret = tab->yuv_444_p_to_rgb_float;
 
2070
          break;
 
2071
        case GAVL_RGBA_FLOAT:
 
2072
          ret = tab->yuv_444_p_to_rgba_float;
 
2073
          break;
 
2074
         
 
2075
        case GAVL_YUY2:
 
2076
          ret = tab->yuv_444_p_to_yuy2;
 
2077
          break;
 
2078
        case GAVL_UYVY:
 
2079
          ret = tab->yuv_444_p_to_uyvy;
 
2080
          break;
 
2081
        case GAVL_YUVA_32:
 
2082
          ret = tab->yuv_444_p_to_yuva_32;
 
2083
          break;
 
2084
        case GAVL_YUV_410_P:
 
2085
          ret = tab->yuv_444_p_to_yuv_410_p;
 
2086
          break;
 
2087
        case GAVL_YUV_420_P:
 
2088
          ret = tab->yuv_444_p_to_yuv_420_p;
 
2089
          break;
 
2090
        case GAVL_YUV_422_P:
 
2091
          ret = tab->yuv_444_p_to_yuv_422_p;
 
2092
          break;
 
2093
        case GAVL_YUV_422_P_16:
 
2094
          ret = tab->yuv_444_p_to_yuv_422_p_16;
 
2095
          break;
 
2096
        case GAVL_YUV_444_P_16:
 
2097
          ret = tab->yuv_444_p_to_yuv_444_p_16;
 
2098
          break;
 
2099
        case GAVL_YUV_411_P:
 
2100
          ret = tab->yuv_444_p_to_yuv_411_p;
 
2101
          break;
 
2102
        case GAVL_YUVJ_420_P:
 
2103
          ret = tab->yuv_444_p_to_yuvj_420_p;
 
2104
          break;
 
2105
        case GAVL_YUVJ_422_P:
 
2106
          ret = tab->yuv_444_p_to_yuvj_422_p;
 
2107
          break;
 
2108
        case GAVL_YUVJ_444_P:
 
2109
          ret = tab->yuv_444_p_to_yuvj_444_p;
 
2110
          break;
 
2111
        /* Keep GCC happy */
 
2112
        case GAVL_PIXELFORMAT_NONE:
 
2113
        case GAVL_YUV_444_P:
 
2114
          break;
 
2115
        }
 
2116
      break;
 
2117
 
 
2118
    case GAVL_YUV_444_P_16:
 
2119
      switch(output_pixelformat)
 
2120
        {
 
2121
        case GAVL_RGB_15:
 
2122
          ret = tab->yuv_444_p_16_to_rgb_15;
 
2123
          break;
 
2124
        case GAVL_BGR_15:
 
2125
          ret = tab->yuv_444_p_16_to_bgr_15;
 
2126
          break;
 
2127
        case GAVL_RGB_16:
 
2128
          ret = tab->yuv_444_p_16_to_rgb_16;
 
2129
          break;
 
2130
        case GAVL_BGR_16:
 
2131
          ret = tab->yuv_444_p_16_to_bgr_16;
 
2132
          break;
 
2133
        case GAVL_RGB_24:
 
2134
          ret = tab->yuv_444_p_16_to_rgb_24;
 
2135
          break;
 
2136
        case GAVL_BGR_24:
 
2137
          ret = tab->yuv_444_p_16_to_bgr_24;
 
2138
          break;
 
2139
        case GAVL_RGB_32:
 
2140
          ret = tab->yuv_444_p_16_to_rgb_32;
 
2141
          break;
 
2142
        case GAVL_BGR_32:
 
2143
          ret = tab->yuv_444_p_16_to_bgr_32;
 
2144
          break;
 
2145
        case GAVL_RGBA_32:
 
2146
          ret = tab->yuv_444_p_16_to_rgba_32;
 
2147
          break;
 
2148
        case GAVL_RGB_48:
 
2149
          ret = tab->yuv_444_p_16_to_rgb_48;
 
2150
          break;
 
2151
        case GAVL_RGBA_64:
 
2152
          ret = tab->yuv_444_p_16_to_rgba_64;
 
2153
          break;
 
2154
        case GAVL_RGB_FLOAT:
 
2155
          ret = tab->yuv_444_p_16_to_rgb_float;
 
2156
          break;
 
2157
        case GAVL_RGBA_FLOAT:
 
2158
          ret = tab->yuv_444_p_16_to_rgba_float;
 
2159
          break;
 
2160
         
 
2161
        case GAVL_YUY2:
 
2162
          ret = tab->yuv_444_p_16_to_yuy2;
 
2163
          break;
 
2164
        case GAVL_UYVY:
 
2165
          ret = tab->yuv_444_p_16_to_uyvy;
 
2166
          break;
 
2167
        case GAVL_YUVA_32:
 
2168
          ret = tab->yuv_444_p_16_to_yuva_32;
 
2169
          break;
 
2170
        case GAVL_YUV_410_P:
 
2171
          ret = tab->yuv_444_p_16_to_yuv_410_p;
 
2172
          break;
 
2173
        case GAVL_YUV_420_P:
 
2174
          ret = tab->yuv_444_p_16_to_yuv_420_p;
 
2175
          break;
 
2176
        case GAVL_YUV_422_P:
 
2177
          ret = tab->yuv_444_p_16_to_yuv_422_p;
 
2178
          break;
 
2179
        case GAVL_YUV_422_P_16:
 
2180
          ret = tab->yuv_444_p_16_to_yuv_422_p_16;
 
2181
          break;
 
2182
        case GAVL_YUV_444_P:
 
2183
          ret = tab->yuv_444_p_16_to_yuv_444_p;
 
2184
          break;
 
2185
        case GAVL_YUV_411_P:
 
2186
          ret = tab->yuv_444_p_16_to_yuv_411_p;
 
2187
          break;
 
2188
        case GAVL_YUVJ_420_P:
 
2189
          ret = tab->yuv_444_p_16_to_yuvj_420_p;
 
2190
          break;
 
2191
        case GAVL_YUVJ_422_P:
 
2192
          ret = tab->yuv_444_p_16_to_yuvj_422_p;
 
2193
          break;
 
2194
        case GAVL_YUVJ_444_P:
 
2195
          ret = tab->yuv_444_p_16_to_yuvj_444_p;
 
2196
          break;
 
2197
        /* Keep GCC happy */
 
2198
        case GAVL_PIXELFORMAT_NONE:
 
2199
        case GAVL_YUV_444_P_16:
 
2200
          break;
 
2201
        }
 
2202
      break;
 
2203
 
 
2204
    case GAVL_YUVJ_420_P:
 
2205
      switch(output_pixelformat)
 
2206
        {
 
2207
        case GAVL_RGB_15:
 
2208
          ret = tab->yuvj_420_p_to_rgb_15;
 
2209
          break;
 
2210
        case GAVL_BGR_15:
 
2211
          ret = tab->yuvj_420_p_to_bgr_15;
 
2212
          break;
 
2213
        case GAVL_RGB_16:
 
2214
          ret = tab->yuvj_420_p_to_rgb_16;
 
2215
          break;
 
2216
        case GAVL_BGR_16:
 
2217
          ret = tab->yuvj_420_p_to_bgr_16;
 
2218
          break;
 
2219
        case GAVL_RGB_24:
 
2220
          ret = tab->yuvj_420_p_to_rgb_24;
 
2221
          break;
 
2222
        case GAVL_BGR_24:
 
2223
          ret = tab->yuvj_420_p_to_bgr_24;
 
2224
          break;
 
2225
        case GAVL_RGB_32:
 
2226
          ret = tab->yuvj_420_p_to_rgb_32;
 
2227
          break;
 
2228
        case GAVL_BGR_32:
 
2229
          ret = tab->yuvj_420_p_to_bgr_32;
 
2230
          break;
 
2231
        case GAVL_RGBA_32:
 
2232
          ret = tab->yuvj_420_p_to_rgba_32;
 
2233
          break;
 
2234
        case GAVL_RGB_48:
 
2235
          ret = tab->yuvj_420_p_to_rgb_48;
 
2236
          break;
 
2237
        case GAVL_RGBA_64:
 
2238
          ret = tab->yuvj_420_p_to_rgba_64;
 
2239
          break;
 
2240
        case GAVL_RGB_FLOAT:
 
2241
          ret = tab->yuvj_420_p_to_rgb_float;
 
2242
          break;
 
2243
        case GAVL_RGBA_FLOAT:
 
2244
          ret = tab->yuvj_420_p_to_rgba_float;
 
2245
          break;
 
2246
 
 
2247
        case GAVL_YUY2:
 
2248
          ret = tab->yuvj_420_p_to_yuy2;
 
2249
          break;
 
2250
        case GAVL_UYVY:
 
2251
          ret = tab->yuvj_420_p_to_uyvy;
 
2252
          break;
 
2253
        case GAVL_YUVA_32:
 
2254
          ret = tab->yuvj_420_p_to_yuva_32;
 
2255
          break;
 
2256
        case GAVL_YUV_422_P:
 
2257
          ret = tab->yuvj_420_p_to_yuv_422_p;
 
2258
          break;
 
2259
        case GAVL_YUV_422_P_16:
 
2260
          ret = tab->yuvj_420_p_to_yuv_422_p_16;
 
2261
          break;
 
2262
        case GAVL_YUV_444_P:
 
2263
          ret = tab->yuvj_420_p_to_yuv_444_p;
 
2264
          break;
 
2265
        case GAVL_YUV_444_P_16:
 
2266
          ret = tab->yuvj_420_p_to_yuv_444_p_16;
 
2267
          break;
 
2268
        case GAVL_YUV_420_P:
 
2269
          ret = tab->yuvj_420_p_to_yuv_420_p;
 
2270
          break;
 
2271
        case GAVL_YUV_410_P:
 
2272
          ret = tab->yuvj_420_p_to_yuv_410_p;
 
2273
          break;
 
2274
        case GAVL_YUVJ_422_P:
 
2275
          ret = tab->yuv_420_p_to_yuv_422_p;
 
2276
          break;
 
2277
        case GAVL_YUV_411_P:
 
2278
          ret = tab->yuv_420_p_to_yuv_411_p;
 
2279
          break;
 
2280
        case GAVL_YUVJ_444_P:
 
2281
          ret = tab->yuv_420_p_to_yuv_444_p;
 
2282
          break;
 
2283
        /* Keep GCC happy */
 
2284
        case GAVL_PIXELFORMAT_NONE:
 
2285
        case GAVL_YUVJ_420_P:
 
2286
          break;
 
2287
        }
 
2288
      break;
 
2289
    case GAVL_YUVJ_422_P:
 
2290
      switch(output_pixelformat)
 
2291
        {
 
2292
        case GAVL_RGB_15:
 
2293
          ret = tab->yuvj_422_p_to_rgb_15;
 
2294
          break;
 
2295
        case GAVL_BGR_15:
 
2296
          ret = tab->yuvj_422_p_to_bgr_15;
 
2297
          break;
 
2298
        case GAVL_RGB_16:
 
2299
          ret = tab->yuvj_422_p_to_rgb_16;
 
2300
          break;
 
2301
        case GAVL_BGR_16:
 
2302
          ret = tab->yuvj_422_p_to_bgr_16;
 
2303
          break;
 
2304
        case GAVL_RGB_24:
 
2305
          ret = tab->yuvj_422_p_to_rgb_24;
 
2306
          break;
 
2307
        case GAVL_BGR_24:
 
2308
          ret = tab->yuvj_422_p_to_bgr_24;
 
2309
          break;
 
2310
        case GAVL_RGB_32:
 
2311
          ret = tab->yuvj_422_p_to_rgb_32;
 
2312
          break;
 
2313
        case GAVL_BGR_32:
 
2314
          ret = tab->yuvj_422_p_to_bgr_32;
 
2315
          break;
 
2316
        case GAVL_RGBA_32:
 
2317
          ret = tab->yuvj_422_p_to_rgba_32;
 
2318
          break;
 
2319
        case GAVL_RGB_48:
 
2320
          ret = tab->yuvj_422_p_to_rgb_48;
 
2321
          break;
 
2322
        case GAVL_RGBA_64:
 
2323
          ret = tab->yuvj_422_p_to_rgba_64;
 
2324
          break;
 
2325
        case GAVL_RGB_FLOAT:
 
2326
          ret = tab->yuvj_422_p_to_rgb_float;
 
2327
          break;
 
2328
        case GAVL_RGBA_FLOAT:
 
2329
          ret = tab->yuvj_422_p_to_rgba_float;
 
2330
          break;
 
2331
        case GAVL_YUY2:
 
2332
          ret = tab->yuvj_422_p_to_yuy2;
 
2333
          break;
 
2334
        case GAVL_UYVY:
 
2335
          ret = tab->yuvj_422_p_to_uyvy;
 
2336
          break;
 
2337
        case GAVL_YUVA_32:
 
2338
          ret = tab->yuvj_422_p_to_yuva_32;
 
2339
          break;
 
2340
        case GAVL_YUV_420_P:
 
2341
          ret = tab->yuvj_422_p_to_yuv_420_p;
 
2342
          break;
 
2343
        case GAVL_YUV_411_P:
 
2344
          ret = tab->yuvj_422_p_to_yuv_411_p;
 
2345
          break;
 
2346
        case GAVL_YUV_410_P:
 
2347
          ret = tab->yuvj_422_p_to_yuv_410_p;
 
2348
          break;
 
2349
        case GAVL_YUV_444_P:
 
2350
          ret = tab->yuvj_422_p_to_yuv_444_p;
 
2351
          break;
 
2352
        case GAVL_YUV_444_P_16:
 
2353
          ret = tab->yuvj_422_p_to_yuv_444_p_16;
 
2354
          break;
 
2355
        case GAVL_YUVJ_420_P:
 
2356
          ret = tab->yuv_422_p_to_yuv_420_p;
 
2357
          break;
 
2358
        case GAVL_YUV_422_P:
 
2359
          ret = tab->yuvj_422_p_to_yuv_422_p;
 
2360
          break;
 
2361
        case GAVL_YUV_422_P_16:
 
2362
          ret = tab->yuvj_422_p_to_yuv_422_p_16;
 
2363
          break;
 
2364
        case GAVL_YUVJ_444_P:
 
2365
          ret = tab->yuv_422_p_to_yuv_444_p;
 
2366
          break;
 
2367
        /* Keep GCC happy */
 
2368
        case GAVL_PIXELFORMAT_NONE:
 
2369
        case GAVL_YUVJ_422_P:
 
2370
          break;
 
2371
        }
 
2372
      break;
 
2373
    case GAVL_YUVJ_444_P:
 
2374
      switch(output_pixelformat)
 
2375
        {
 
2376
        case GAVL_RGB_15:
 
2377
          ret = tab->yuvj_444_p_to_rgb_15;
 
2378
          break;
 
2379
        case GAVL_BGR_15:
 
2380
          ret = tab->yuvj_444_p_to_bgr_15;
 
2381
          break;
 
2382
        case GAVL_RGB_16:
 
2383
          ret = tab->yuvj_444_p_to_rgb_16;
 
2384
          break;
 
2385
        case GAVL_BGR_16:
 
2386
          ret = tab->yuvj_444_p_to_bgr_16;
 
2387
          break;
 
2388
        case GAVL_RGB_24:
 
2389
          ret = tab->yuvj_444_p_to_rgb_24;
 
2390
          break;
 
2391
        case GAVL_BGR_24:
 
2392
          ret = tab->yuvj_444_p_to_bgr_24;
 
2393
          break;
 
2394
        case GAVL_RGB_32:
 
2395
          ret = tab->yuvj_444_p_to_rgb_32;
 
2396
          break;
 
2397
        case GAVL_BGR_32:
 
2398
          ret = tab->yuvj_444_p_to_bgr_32;
 
2399
          break;
 
2400
        case GAVL_RGBA_32:
 
2401
          ret = tab->yuvj_444_p_to_rgba_32;
 
2402
          break;
 
2403
        case GAVL_RGB_48:
 
2404
          ret = tab->yuvj_444_p_to_rgb_48;
 
2405
          break;
 
2406
        case GAVL_RGBA_64:
 
2407
          ret = tab->yuvj_444_p_to_rgba_64;
 
2408
          break;
 
2409
        case GAVL_RGB_FLOAT:
 
2410
          ret = tab->yuvj_444_p_to_rgb_float;
 
2411
          break;
 
2412
        case GAVL_RGBA_FLOAT:
 
2413
          ret = tab->yuvj_444_p_to_rgba_float;
 
2414
          break;
 
2415
        case GAVL_YUY2:
 
2416
          ret = tab->yuvj_444_p_to_yuy2;
 
2417
          break;
 
2418
        case GAVL_UYVY:
 
2419
          ret = tab->yuvj_444_p_to_uyvy;
 
2420
          break;
 
2421
        case GAVL_YUVA_32:
 
2422
          ret = tab->yuvj_444_p_to_yuva_32;
 
2423
          break;
 
2424
        case GAVL_YUV_420_P:
 
2425
          ret = tab->yuvj_444_p_to_yuv_420_p;
 
2426
          break;
 
2427
        case GAVL_YUV_410_P:
 
2428
          ret = tab->yuvj_444_p_to_yuv_410_p;
 
2429
          break;
 
2430
        case GAVL_YUV_422_P:
 
2431
          ret = tab->yuvj_444_p_to_yuv_422_p;
 
2432
          break;
 
2433
        case GAVL_YUV_422_P_16:
 
2434
          ret = tab->yuvj_444_p_to_yuv_422_p_16;
 
2435
          break;
 
2436
        case GAVL_YUV_411_P:
 
2437
          ret = tab->yuvj_444_p_to_yuv_411_p;
 
2438
          break;
 
2439
        case GAVL_YUVJ_420_P:
 
2440
          ret = tab->yuv_444_p_to_yuv_420_p;
 
2441
          break;
 
2442
        case GAVL_YUVJ_422_P:
 
2443
          ret = tab->yuv_444_p_to_yuv_422_p;
 
2444
          break;
 
2445
        case GAVL_YUV_444_P:
 
2446
          ret = tab->yuvj_444_p_to_yuv_444_p;
 
2447
          break;
 
2448
        case GAVL_YUV_444_P_16:
 
2449
          ret = tab->yuvj_444_p_to_yuv_444_p_16;
 
2450
          break;
 
2451
        /* Keep GCC happy */
 
2452
        case GAVL_PIXELFORMAT_NONE:
 
2453
        case GAVL_YUVJ_444_P:
 
2454
          break;
 
2455
        }
 
2456
      break;
 
2457
 
 
2458
      
 
2459
    case GAVL_PIXELFORMAT_NONE:
 
2460
      break;
 
2461
    }
 
2462
  free(tab);  
 
2463
  return ret;
 
2464
  }
 
2465
 
 
2466
/* bytes_per_component is only valid for planar formats */
 
2467
  
 
2468
int gavl_pixelformat_bytes_per_component(gavl_pixelformat_t csp)
 
2469
  {
 
2470
  switch(csp)
 
2471
    {
 
2472
    case GAVL_PIXELFORMAT_NONE:
 
2473
    case GAVL_RGB_15:
 
2474
    case GAVL_BGR_15:
 
2475
    case GAVL_RGB_16:
 
2476
    case GAVL_BGR_16:
 
2477
    case GAVL_RGB_24:
 
2478
    case GAVL_BGR_24:
 
2479
    case GAVL_RGB_32:
 
2480
    case GAVL_BGR_32:
 
2481
    case GAVL_RGBA_32:
 
2482
    case GAVL_RGB_48:
 
2483
    case GAVL_RGBA_64:
 
2484
    case GAVL_RGB_FLOAT:
 
2485
    case GAVL_RGBA_FLOAT:
 
2486
    case GAVL_YUY2:
 
2487
    case GAVL_UYVY:
 
2488
    case GAVL_YUVA_32:
 
2489
      return 0;
 
2490
      break;
 
2491
    case GAVL_YUV_420_P:
 
2492
    case GAVL_YUV_422_P:
 
2493
    case GAVL_YUV_444_P:
 
2494
    case GAVL_YUV_411_P:
 
2495
    case GAVL_YUV_410_P:
 
2496
    case GAVL_YUVJ_420_P:
 
2497
    case GAVL_YUVJ_422_P:
 
2498
    case GAVL_YUVJ_444_P:
 
2499
      return 1;
 
2500
      break;
 
2501
    case GAVL_YUV_444_P_16:
 
2502
    case GAVL_YUV_422_P_16:
 
2503
      return 2;
 
2504
    }
 
2505
  return 0;
 
2506
  }
 
2507
 
 
2508
/* bytes_per_pixel is only valid for packed formats */
 
2509
 
 
2510
int gavl_pixelformat_bytes_per_pixel(gavl_pixelformat_t csp)
 
2511
  {
 
2512
  switch(csp)
 
2513
    {
 
2514
    case GAVL_PIXELFORMAT_NONE:
 
2515
      return 0;
 
2516
      break;
 
2517
    case GAVL_RGB_15:
 
2518
    case GAVL_BGR_15:
 
2519
    case GAVL_RGB_16:
 
2520
    case GAVL_BGR_16:
 
2521
      return 2;
 
2522
      break;
 
2523
    case GAVL_RGB_24:
 
2524
    case GAVL_BGR_24:
 
2525
      return 3;
 
2526
      break;
 
2527
    case GAVL_RGB_32:
 
2528
    case GAVL_BGR_32:
 
2529
    case GAVL_RGBA_32:
 
2530
    case GAVL_YUVA_32:
 
2531
      return 4;
 
2532
      break;
 
2533
    case GAVL_RGB_48:
 
2534
      return 6;
 
2535
      break;
 
2536
    case GAVL_RGBA_64:
 
2537
      return 8;
 
2538
      break;
 
2539
    case GAVL_RGB_FLOAT:
 
2540
      return 3*sizeof(float);
 
2541
      break;
 
2542
    case GAVL_RGBA_FLOAT:
 
2543
      return 4*sizeof(float);
 
2544
      break;
 
2545
    case GAVL_YUY2:
 
2546
    case GAVL_UYVY:
 
2547
      return 2;
 
2548
    case GAVL_YUV_420_P:
 
2549
    case GAVL_YUV_422_P:
 
2550
    case GAVL_YUV_422_P_16:
 
2551
    case GAVL_YUV_444_P:
 
2552
    case GAVL_YUV_444_P_16:
 
2553
    case GAVL_YUV_411_P:
 
2554
    case GAVL_YUV_410_P:
 
2555
    case GAVL_YUVJ_420_P:
 
2556
    case GAVL_YUVJ_422_P:
 
2557
    case GAVL_YUVJ_444_P:
 
2558
      return 0;
 
2559
    }
 
2560
  return 0;
 
2561
  }
 
2562
 
 
2563
/* Check if a pixelformat can be converted by simple scaling */
 
2564
 
 
2565
int gavl_pixelformat_can_scale(gavl_pixelformat_t in_csp, gavl_pixelformat_t out_csp)
 
2566
  {
 
2567
    int sub_v_in,  sub_h_in;
 
2568
  int sub_v_out, sub_h_out;
 
2569
  if(gavl_pixelformat_is_rgb(in_csp) ||
 
2570
     gavl_pixelformat_is_rgb(out_csp))
 
2571
    {
 
2572
    return 0;
 
2573
    }
 
2574
 
 
2575
  if(gavl_pixelformat_is_jpeg_scaled(in_csp) !=
 
2576
     gavl_pixelformat_is_jpeg_scaled(out_csp))
 
2577
    {
 
2578
    return 0;
 
2579
    }
 
2580
  if(gavl_pixelformat_has_alpha(in_csp) !=
 
2581
     gavl_pixelformat_has_alpha(out_csp))
 
2582
    {
 
2583
    return 0;
 
2584
    }
 
2585
 
 
2586
 
 
2587
  
 
2588
  gavl_pixelformat_chroma_sub(in_csp, &sub_h_in, &sub_v_in);
 
2589
  gavl_pixelformat_chroma_sub(out_csp, &sub_h_out, &sub_v_out);
 
2590
  
 
2591
  if((sub_h_in == sub_h_out) && (sub_v_in == sub_v_out))
 
2592
    {
 
2593
    return 0;
 
2594
    }
 
2595
 
 
2596
  if(!gavl_pixelformat_is_planar(in_csp))
 
2597
    {
 
2598
    fprintf(stderr, "BLUPPPP: %d %d\n", gavl_pixelformat_is_planar(out_csp),
 
2599
            gavl_pixelformat_bytes_per_component(out_csp));
 
2600
    
 
2601
    if(gavl_pixelformat_is_planar(out_csp) &&
 
2602
       (gavl_pixelformat_bytes_per_component(out_csp) == 1))
 
2603
      return 1;
 
2604
    else
 
2605
      return 0;
 
2606
    }
 
2607
  else
 
2608
    {
 
2609
    if(!gavl_pixelformat_is_planar(out_csp) &&
 
2610
       (gavl_pixelformat_bytes_per_component(in_csp) == 1))
 
2611
      return 1;
 
2612
    else if(gavl_pixelformat_bytes_per_component(in_csp) ==
 
2613
            gavl_pixelformat_bytes_per_component(out_csp))
 
2614
      return 1;
 
2615
    else
 
2616
      return 0;
 
2617
    }
 
2618
  return 0;
 
2619
  }
 
2620
 
 
2621
/*
 
2622
 *  Return a pixelformat (or GAVL_PIXELFORMAT_NONE) as an intermediate pixelformat
 
2623
 *  for which the conversion quality can be improved. E.g. instead of
 
2624
 *  RGB -> YUV420P, we can do RGB -> YUV444P -> YUV420P with proper chroma scaling
 
2625
 */
 
2626
 
 
2627
gavl_pixelformat_t gavl_pixelformat_get_intermediate(gavl_pixelformat_t in_csp,
 
2628
                                                   gavl_pixelformat_t out_csp)
 
2629
  {
 
2630
  switch(in_csp)
 
2631
    {
 
2632
    case GAVL_PIXELFORMAT_NONE: return GAVL_PIXELFORMAT_NONE; break;
 
2633
    case GAVL_RGB_15:
 
2634
    case GAVL_BGR_15:
 
2635
    case GAVL_RGB_16:
 
2636
    case GAVL_BGR_16:
 
2637
    case GAVL_RGB_24:
 
2638
    case GAVL_BGR_24:
 
2639
    case GAVL_RGB_32:
 
2640
    case GAVL_BGR_32:
 
2641
    case GAVL_RGBA_32:
 
2642
    case GAVL_RGB_48:
 
2643
    case GAVL_RGBA_64:
 
2644
    case GAVL_RGB_FLOAT:
 
2645
    case GAVL_RGBA_FLOAT:
 
2646
    case GAVL_YUVA_32:
 
2647
      /*4:4:4 -> */
 
2648
      switch(out_csp)
 
2649
        {
 
2650
        case GAVL_PIXELFORMAT_NONE:
 
2651
        case GAVL_RGB_15:
 
2652
        case GAVL_BGR_15:
 
2653
        case GAVL_RGB_16:
 
2654
        case GAVL_BGR_16:
 
2655
        case GAVL_RGB_24:
 
2656
        case GAVL_BGR_24:
 
2657
        case GAVL_RGB_32:
 
2658
        case GAVL_BGR_32:
 
2659
        case GAVL_RGB_48:
 
2660
        case GAVL_RGBA_64:
 
2661
        case GAVL_RGB_FLOAT:
 
2662
        case GAVL_RGBA_FLOAT:
 
2663
        case GAVL_RGBA_32:
 
2664
        case GAVL_YUVA_32:
 
2665
        case GAVL_YUV_444_P:
 
2666
        case GAVL_YUVJ_444_P:
 
2667
        case GAVL_YUV_444_P_16:
 
2668
          return GAVL_PIXELFORMAT_NONE; break;
 
2669
        case GAVL_YUY2:
 
2670
        case GAVL_UYVY:
 
2671
        case GAVL_YUV_420_P:
 
2672
        case GAVL_YUV_422_P:
 
2673
        case GAVL_YUV_411_P:
 
2674
        case GAVL_YUV_410_P:
 
2675
          return GAVL_YUV_444_P; break;
 
2676
        case GAVL_YUVJ_420_P:
 
2677
        case GAVL_YUVJ_422_P:
 
2678
          return GAVL_YUVJ_444_P; break;
 
2679
        case GAVL_YUV_422_P_16:
 
2680
          return GAVL_YUV_444_P_16; break;
 
2681
        }
 
2682
      break;
 
2683
    case GAVL_YUY2:
 
2684
    case GAVL_UYVY:
 
2685
    case GAVL_YUV_422_P:
 
2686
      switch(out_csp)
 
2687
        {
 
2688
        case GAVL_PIXELFORMAT_NONE:
 
2689
          return GAVL_PIXELFORMAT_NONE; break;
 
2690
          /* YUV422 -> RGB */
 
2691
        case GAVL_RGB_15:
 
2692
        case GAVL_BGR_15:
 
2693
        case GAVL_RGB_16:
 
2694
        case GAVL_BGR_16:
 
2695
        case GAVL_RGB_24:
 
2696
        case GAVL_BGR_24:
 
2697
        case GAVL_RGB_32:
 
2698
        case GAVL_BGR_32:
 
2699
        case GAVL_RGB_48:
 
2700
        case GAVL_RGBA_64:
 
2701
        case GAVL_RGB_FLOAT:
 
2702
        case GAVL_RGBA_FLOAT:
 
2703
        case GAVL_RGBA_32:
 
2704
        case GAVL_YUVA_32:
 
2705
          return GAVL_YUV_444_P; break;
 
2706
        case GAVL_YUV_422_P:
 
2707
        case GAVL_YUV_422_P_16:
 
2708
        case GAVL_YUVJ_422_P:
 
2709
        case GAVL_YUY2:
 
2710
        case GAVL_UYVY:
 
2711
        case GAVL_YUV_420_P:
 
2712
        case GAVL_YUV_411_P:
 
2713
        case GAVL_YUV_410_P:
 
2714
          return GAVL_PIXELFORMAT_NONE; break;
 
2715
        case GAVL_YUV_444_P_16:
 
2716
          return GAVL_YUV_422_P_16; break;
 
2717
        case GAVL_YUV_444_P:
 
2718
          return GAVL_YUV_422_P; break;
 
2719
        case GAVL_YUVJ_444_P:
 
2720
          return GAVL_YUVJ_422_P; break;
 
2721
        case GAVL_YUVJ_420_P:
 
2722
          return GAVL_YUVJ_422_P; break;
 
2723
        }
 
2724
      break;
 
2725
    case GAVL_YUV_420_P:
 
2726
      switch(out_csp)
 
2727
        {
 
2728
        case GAVL_PIXELFORMAT_NONE:
 
2729
          return GAVL_PIXELFORMAT_NONE; break;
 
2730
          /* YUV420 -> RGB */
 
2731
        case GAVL_RGB_15:
 
2732
        case GAVL_BGR_15:
 
2733
        case GAVL_RGB_16:
 
2734
        case GAVL_BGR_16:
 
2735
        case GAVL_RGB_24:
 
2736
        case GAVL_BGR_24:
 
2737
        case GAVL_RGB_32:
 
2738
        case GAVL_BGR_32:
 
2739
        case GAVL_RGB_48:
 
2740
        case GAVL_RGBA_64:
 
2741
        case GAVL_RGB_FLOAT:
 
2742
        case GAVL_RGBA_FLOAT:
 
2743
        case GAVL_RGBA_32:
 
2744
        case GAVL_YUVA_32:
 
2745
          return GAVL_YUV_444_P; break;
 
2746
        case GAVL_YUV_422_P:
 
2747
        case GAVL_YUY2:
 
2748
        case GAVL_UYVY:
 
2749
        case GAVL_YUV_420_P:
 
2750
        case GAVL_YUV_411_P:
 
2751
        case GAVL_YUV_410_P:
 
2752
        case GAVL_YUV_444_P:
 
2753
        case GAVL_YUVJ_420_P:
 
2754
          return GAVL_PIXELFORMAT_NONE; break;
 
2755
        case GAVL_YUV_422_P_16:
 
2756
          return GAVL_YUV_422_P; break;
 
2757
        case GAVL_YUVJ_422_P:
 
2758
          return GAVL_YUVJ_420_P; break;
 
2759
        case GAVL_YUV_444_P_16:
 
2760
          return GAVL_YUV_444_P; break;
 
2761
        case GAVL_YUVJ_444_P:
 
2762
          return GAVL_YUVJ_420_P; break;
 
2763
        }
 
2764
      break;
 
2765
    case GAVL_YUV_444_P:
 
2766
      switch(out_csp)
 
2767
        {
 
2768
        case GAVL_PIXELFORMAT_NONE:
 
2769
        case GAVL_RGB_15:
 
2770
        case GAVL_BGR_15:
 
2771
        case GAVL_RGB_16:
 
2772
        case GAVL_BGR_16:
 
2773
        case GAVL_RGB_24:
 
2774
        case GAVL_BGR_24:
 
2775
        case GAVL_RGB_32:
 
2776
        case GAVL_BGR_32:
 
2777
        case GAVL_RGB_48:
 
2778
        case GAVL_RGBA_64:
 
2779
        case GAVL_RGB_FLOAT:
 
2780
        case GAVL_RGBA_FLOAT:
 
2781
        case GAVL_RGBA_32:
 
2782
        case GAVL_YUVA_32:
 
2783
          return GAVL_PIXELFORMAT_NONE; break;
 
2784
        case GAVL_YUV_422_P:
 
2785
        case GAVL_YUY2:
 
2786
        case GAVL_UYVY:
 
2787
        case GAVL_YUV_420_P:
 
2788
        case GAVL_YUV_411_P:
 
2789
        case GAVL_YUV_410_P:
 
2790
        case GAVL_YUV_444_P:
 
2791
        case GAVL_YUVJ_444_P:
 
2792
        case GAVL_YUV_444_P_16:
 
2793
          return GAVL_PIXELFORMAT_NONE; break;
 
2794
        case GAVL_YUV_422_P_16:
 
2795
          return GAVL_YUV_422_P; break;
 
2796
        case GAVL_YUVJ_422_P:
 
2797
          return GAVL_YUVJ_420_P; break;
 
2798
        case GAVL_YUVJ_420_P:
 
2799
          return GAVL_YUVJ_444_P; break;
 
2800
        }
 
2801
      break;
 
2802
      
 
2803
    case GAVL_YUV_411_P:
 
2804
    case GAVL_YUV_410_P:
 
2805
      switch(out_csp)
 
2806
        {
 
2807
        case GAVL_PIXELFORMAT_NONE:
 
2808
          return GAVL_PIXELFORMAT_NONE; break;
 
2809
        case GAVL_RGB_15:
 
2810
        case GAVL_BGR_15:
 
2811
        case GAVL_RGB_16:
 
2812
        case GAVL_BGR_16:
 
2813
        case GAVL_RGB_24:
 
2814
        case GAVL_BGR_24:
 
2815
        case GAVL_RGB_32:
 
2816
        case GAVL_BGR_32:
 
2817
        case GAVL_RGB_48:
 
2818
        case GAVL_RGBA_64:
 
2819
        case GAVL_RGB_FLOAT:
 
2820
        case GAVL_RGBA_FLOAT:
 
2821
        case GAVL_RGBA_32:
 
2822
        case GAVL_YUVA_32:
 
2823
          return GAVL_YUV_444_P; break;
 
2824
        case GAVL_YUV_422_P:
 
2825
        case GAVL_YUY2:
 
2826
        case GAVL_UYVY:
 
2827
        case GAVL_YUV_420_P:
 
2828
        case GAVL_YUV_411_P:
 
2829
        case GAVL_YUV_410_P:
 
2830
        case GAVL_YUV_444_P:
 
2831
          return GAVL_PIXELFORMAT_NONE; break;
 
2832
 
 
2833
        case GAVL_YUVJ_444_P:
 
2834
          return GAVL_YUV_444_P; break;
 
2835
        case GAVL_YUV_422_P_16:
 
2836
          return GAVL_YUV_422_P; break;
 
2837
        case GAVL_YUVJ_422_P:
 
2838
          return GAVL_YUV_422_P; break;
 
2839
        case GAVL_YUV_444_P_16:
 
2840
          return GAVL_YUV_444_P; break;
 
2841
        case GAVL_YUVJ_420_P:
 
2842
          return GAVL_YUV_420_P; break;
 
2843
        }
 
2844
      break;
 
2845
    case GAVL_YUVJ_420_P:
 
2846
      switch(out_csp)
 
2847
        {
 
2848
        case GAVL_PIXELFORMAT_NONE:
 
2849
          return GAVL_PIXELFORMAT_NONE; break;
 
2850
        case GAVL_RGB_15:
 
2851
        case GAVL_BGR_15:
 
2852
        case GAVL_RGB_16:
 
2853
        case GAVL_BGR_16:
 
2854
        case GAVL_RGB_24:
 
2855
        case GAVL_BGR_24:
 
2856
        case GAVL_RGB_32:
 
2857
        case GAVL_BGR_32:
 
2858
        case GAVL_RGB_48:
 
2859
        case GAVL_RGBA_64:
 
2860
        case GAVL_RGB_FLOAT:
 
2861
        case GAVL_RGBA_FLOAT:
 
2862
        case GAVL_RGBA_32:
 
2863
        case GAVL_YUVA_32:
 
2864
          return GAVL_YUVJ_444_P; break;
 
2865
        case GAVL_YUV_422_P:
 
2866
        case GAVL_YUY2:
 
2867
        case GAVL_UYVY:
 
2868
        case GAVL_YUV_411_P:
 
2869
        case GAVL_YUV_410_P:
 
2870
        case GAVL_YUV_444_P:
 
2871
          return GAVL_YUV_420_P; break;
 
2872
        case GAVL_YUV_420_P:
 
2873
        case GAVL_YUVJ_444_P:
 
2874
        case GAVL_YUVJ_422_P:
 
2875
        case GAVL_YUVJ_420_P:
 
2876
          return GAVL_PIXELFORMAT_NONE; break;
 
2877
 
 
2878
        case GAVL_YUV_422_P_16:
 
2879
          return GAVL_YUVJ_422_P; break;
 
2880
        case GAVL_YUV_444_P_16:
 
2881
          return GAVL_YUVJ_444_P; break;
 
2882
        }
 
2883
      break;
 
2884
      
 
2885
    case GAVL_YUVJ_422_P:
 
2886
      switch(out_csp)
 
2887
        {
 
2888
        case GAVL_PIXELFORMAT_NONE:
 
2889
          return GAVL_PIXELFORMAT_NONE; break;
 
2890
        case GAVL_RGB_15:
 
2891
        case GAVL_BGR_15:
 
2892
        case GAVL_RGB_16:
 
2893
        case GAVL_BGR_16:
 
2894
        case GAVL_RGB_24:
 
2895
        case GAVL_BGR_24:
 
2896
        case GAVL_RGB_32:
 
2897
        case GAVL_BGR_32:
 
2898
        case GAVL_RGB_48:
 
2899
        case GAVL_RGBA_64:
 
2900
        case GAVL_RGB_FLOAT:
 
2901
        case GAVL_RGBA_FLOAT:
 
2902
        case GAVL_RGBA_32:
 
2903
        case GAVL_YUVA_32:
 
2904
          return GAVL_YUVJ_444_P; break;
 
2905
        case GAVL_YUV_411_P:
 
2906
        case GAVL_YUV_410_P:
 
2907
        case GAVL_YUV_444_P:
 
2908
        case GAVL_YUV_420_P:
 
2909
          return GAVL_YUV_422_P; break;
 
2910
        case GAVL_YUV_422_P:
 
2911
        case GAVL_YUY2:
 
2912
        case GAVL_UYVY:
 
2913
        case GAVL_YUVJ_444_P:
 
2914
        case GAVL_YUVJ_422_P:
 
2915
        case GAVL_YUVJ_420_P:
 
2916
        case GAVL_YUV_422_P_16:
 
2917
          return GAVL_PIXELFORMAT_NONE; break;
 
2918
        case GAVL_YUV_444_P_16:
 
2919
          return GAVL_YUV_422_P_16; break;
 
2920
        }
 
2921
      break;
 
2922
    case GAVL_YUVJ_444_P:
 
2923
      switch(out_csp)
 
2924
        {
 
2925
        case GAVL_PIXELFORMAT_NONE:
 
2926
        case GAVL_RGB_15:
 
2927
        case GAVL_BGR_15:
 
2928
        case GAVL_RGB_16:
 
2929
        case GAVL_BGR_16:
 
2930
        case GAVL_RGB_24:
 
2931
        case GAVL_BGR_24:
 
2932
        case GAVL_RGB_32:
 
2933
        case GAVL_BGR_32:
 
2934
        case GAVL_RGB_48:
 
2935
        case GAVL_RGBA_64:
 
2936
        case GAVL_RGB_FLOAT:
 
2937
        case GAVL_RGBA_FLOAT:
 
2938
        case GAVL_RGBA_32:
 
2939
        case GAVL_YUVA_32:
 
2940
        case GAVL_YUV_444_P:
 
2941
        case GAVL_YUV_444_P_16:
 
2942
          return GAVL_PIXELFORMAT_NONE; break;
 
2943
        case GAVL_YUV_411_P:
 
2944
        case GAVL_YUV_410_P:
 
2945
        case GAVL_YUV_420_P:
 
2946
          return GAVL_YUV_444_P; break;
 
2947
        case GAVL_YUV_422_P:
 
2948
        case GAVL_YUY2:
 
2949
        case GAVL_UYVY:
 
2950
        case GAVL_YUVJ_444_P:
 
2951
        case GAVL_YUVJ_422_P:
 
2952
        case GAVL_YUVJ_420_P:
 
2953
          return GAVL_PIXELFORMAT_NONE; break;
 
2954
 
 
2955
        case GAVL_YUV_422_P_16:
 
2956
          return GAVL_YUVJ_422_P; break;
 
2957
          return GAVL_YUV_422_P_16; break;
 
2958
        }
 
2959
      break;
 
2960
    case GAVL_YUV_444_P_16:
 
2961
      switch(out_csp)
 
2962
        {
 
2963
        case GAVL_PIXELFORMAT_NONE:
 
2964
        case GAVL_RGB_15:
 
2965
        case GAVL_BGR_15:
 
2966
        case GAVL_RGB_16:
 
2967
        case GAVL_BGR_16:
 
2968
        case GAVL_RGB_24:
 
2969
        case GAVL_BGR_24:
 
2970
        case GAVL_RGB_32:
 
2971
        case GAVL_BGR_32:
 
2972
        case GAVL_RGB_48:
 
2973
        case GAVL_RGBA_64:
 
2974
        case GAVL_RGB_FLOAT:
 
2975
        case GAVL_RGBA_FLOAT:
 
2976
        case GAVL_RGBA_32:
 
2977
        case GAVL_YUVA_32:
 
2978
        case GAVL_YUV_444_P:
 
2979
        case GAVL_YUV_444_P_16:
 
2980
        case GAVL_YUVJ_444_P:
 
2981
        case GAVL_YUV_422_P_16:
 
2982
          return GAVL_PIXELFORMAT_NONE; break;
 
2983
        case GAVL_YUV_422_P:
 
2984
        case GAVL_YUY2:
 
2985
        case GAVL_UYVY:
 
2986
        case GAVL_YUV_411_P:
 
2987
        case GAVL_YUV_410_P:
 
2988
        case GAVL_YUV_420_P:
 
2989
          return GAVL_YUV_444_P; break;
 
2990
        case GAVL_YUVJ_422_P:
 
2991
        case GAVL_YUVJ_420_P:
 
2992
          return GAVL_YUVJ_444_P; break;
 
2993
        }
 
2994
      break;
 
2995
    case GAVL_YUV_422_P_16:
 
2996
      switch(out_csp)
 
2997
        {
 
2998
        case GAVL_PIXELFORMAT_NONE:
 
2999
        case GAVL_RGB_15:
 
3000
        case GAVL_BGR_15:
 
3001
        case GAVL_RGB_16:
 
3002
        case GAVL_BGR_16:
 
3003
        case GAVL_RGB_24:
 
3004
        case GAVL_BGR_24:
 
3005
        case GAVL_RGB_32:
 
3006
        case GAVL_BGR_32:
 
3007
        case GAVL_RGB_48:
 
3008
        case GAVL_RGBA_64:
 
3009
        case GAVL_RGB_FLOAT:
 
3010
        case GAVL_RGBA_FLOAT:
 
3011
        case GAVL_RGBA_32:
 
3012
        case GAVL_YUVA_32:
 
3013
        case GAVL_YUV_444_P:
 
3014
        case GAVL_YUVJ_444_P:
 
3015
          return GAVL_YUV_444_P_16; break;
 
3016
        case GAVL_YUV_444_P_16:
 
3017
        case GAVL_YUV_422_P_16:
 
3018
        case GAVL_YUV_422_P:
 
3019
        case GAVL_YUY2:
 
3020
        case GAVL_UYVY:
 
3021
        case GAVL_YUVJ_422_P:
 
3022
          return GAVL_PIXELFORMAT_NONE; break;
 
3023
        case GAVL_YUV_411_P:
 
3024
        case GAVL_YUV_410_P:
 
3025
        case GAVL_YUV_420_P:
 
3026
          return GAVL_YUV_422_P; break;
 
3027
        case GAVL_YUVJ_420_P:
 
3028
          return GAVL_YUVJ_422_P; break;
 
3029
        }
 
3030
 
 
3031
      break;
 
3032
    }
 
3033
  return GAVL_PIXELFORMAT_NONE;
 
3034
  }