Libav
Main Page
Related Pages
Modules
Data Structures
Files
Examples
File List
Globals
libswscale
swscale_internal.h
Go to the documentation of this file.
1
/*
2
* Copyright (C) 2001-2003 Michael Niedermayer <michaelni@gmx.at>
3
*
4
* This file is part of Libav.
5
*
6
* Libav is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU Lesser General Public
8
* License as published by the Free Software Foundation; either
9
* version 2.1 of the License, or (at your option) any later version.
10
*
11
* Libav is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
* Lesser General Public License for more details.
15
*
16
* You should have received a copy of the GNU Lesser General Public
17
* License along with Libav; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
*/
20
21
#ifndef SWSCALE_SWSCALE_INTERNAL_H
22
#define SWSCALE_SWSCALE_INTERNAL_H
23
24
#include "config.h"
25
26
#if HAVE_ALTIVEC_H
27
#include <altivec.h>
28
#endif
29
30
#include "
libavutil/avassert.h
"
31
#include "
libavutil/avutil.h
"
32
#include "
libavutil/common.h
"
33
#include "
libavutil/log.h
"
34
#include "
libavutil/pixfmt.h
"
35
#include "
libavutil/pixdesc.h
"
36
37
#define STR(s) AV_TOSTRING(s) // AV_STRINGIFY is too long
38
39
#define FAST_BGR2YV12 // use 7-bit instead of 15-bit coefficients
40
41
#define MAX_FILTER_SIZE 256
42
43
#if HAVE_BIGENDIAN
44
#define ALT32_CORR (-1)
45
#else
46
#define ALT32_CORR 1
47
#endif
48
49
#if ARCH_X86_64
50
# define APCK_PTR2 8
51
# define APCK_COEF 16
52
# define APCK_SIZE 24
53
#else
54
# define APCK_PTR2 4
55
# define APCK_COEF 8
56
# define APCK_SIZE 16
57
#endif
58
59
struct
SwsContext
;
60
61
typedef
int (*
SwsFunc
)(
struct
SwsContext
*context,
const
uint8_t
*src[],
62
int
srcStride[],
int
srcSliceY,
int
srcSliceH,
63
uint8_t
*dst[],
int
dstStride[]);
64
77
typedef
void
(*
yuv2planar1_fn
)(
const
int16_t *src,
uint8_t
*dest,
int
dstW
,
78
const
uint8_t
*
dither
,
int
offset);
79
93
typedef
void
(*
yuv2planarX_fn
)(
const
int16_t *
filter
,
int
filterSize,
94
const
int16_t **src,
uint8_t
*dest,
int
dstW
,
95
const
uint8_t
*
dither
,
int
offset);
96
112
typedef
void
(*
yuv2interleavedX_fn
)(
struct
SwsContext
*c,
113
const
int16_t *chrFilter,
114
int
chrFilterSize,
115
const
int16_t **chrUSrc,
116
const
int16_t **chrVSrc,
117
uint8_t
*dest,
int
dstW
);
118
148
typedef
void
(*
yuv2packed1_fn
)(
struct
SwsContext
*c,
const
int16_t *lumSrc,
149
const
int16_t *chrUSrc[2],
150
const
int16_t *chrVSrc[2],
151
const
int16_t *alpSrc,
uint8_t
*dest,
152
int
dstW
,
int
uvalpha,
int
y);
181
typedef
void
(*
yuv2packed2_fn
)(
struct
SwsContext
*c,
const
int16_t *lumSrc[2],
182
const
int16_t *chrUSrc[2],
183
const
int16_t *chrVSrc[2],
184
const
int16_t *alpSrc[2],
185
uint8_t
*dest,
186
int
dstW
,
int
yalpha,
int
uvalpha,
int
y);
213
typedef
void
(*
yuv2packedX_fn
)(
struct
SwsContext
*c,
const
int16_t *lumFilter,
214
const
int16_t **lumSrc,
int
lumFilterSize,
215
const
int16_t *chrFilter,
216
const
int16_t **chrUSrc,
217
const
int16_t **chrVSrc,
int
chrFilterSize,
218
const
int16_t **alpSrc,
uint8_t
*dest,
219
int
dstW
,
int
y);
220
247
typedef
void
(*
yuv2anyX_fn
)(
struct
SwsContext
*c,
const
int16_t *lumFilter,
248
const
int16_t **lumSrc,
int
lumFilterSize,
249
const
int16_t *chrFilter,
250
const
int16_t **chrUSrc,
251
const
int16_t **chrVSrc,
int
chrFilterSize,
252
const
int16_t **alpSrc,
uint8_t
**dest,
253
int
dstW
,
int
y);
254
255
/* This struct should be aligned on at least a 32-byte boundary. */
256
typedef
struct
SwsContext
{
260
const
AVClass
*
av_class
;
261
266
SwsFunc
swscale
;
267
int
srcW
;
268
int
srcH
;
269
int
dstH
;
270
int
chrSrcW
;
271
int
chrSrcH
;
272
int
chrDstW
;
273
int
chrDstH
;
274
int
lumXInc
,
chrXInc
;
275
int
lumYInc
,
chrYInc
;
276
enum
AVPixelFormat
dstFormat
;
277
enum
AVPixelFormat
srcFormat
;
278
int
dstFormatBpp
;
279
int
srcFormatBpp
;
280
int
dstBpc
,
srcBpc
;
281
int
chrSrcHSubSample
;
282
int
chrSrcVSubSample
;
283
int
chrDstHSubSample
;
284
int
chrDstVSubSample
;
285
int
vChrDrop
;
286
int
sliceDir
;
287
double
param
[2];
288
289
uint32_t
pal_yuv
[256];
290
uint32_t
pal_rgb
[256];
291
302
int16_t **
lumPixBuf
;
303
int16_t **
chrUPixBuf
;
304
int16_t **
chrVPixBuf
;
305
int16_t **
alpPixBuf
;
306
int
vLumBufSize
;
307
int
vChrBufSize
;
308
int
lastInLumBuf
;
309
int
lastInChrBuf
;
310
int
lumBufIndex
;
311
int
chrBufIndex
;
312
313
314
uint8_t
*
formatConvBuffer
;
315
330
int16_t *
hLumFilter
;
331
int16_t *
hChrFilter
;
332
int16_t *
vLumFilter
;
333
int16_t *
vChrFilter
;
334
int32_t
*
hLumFilterPos
;
335
int32_t
*
hChrFilterPos
;
336
int32_t
*
vLumFilterPos
;
337
int32_t
*
vChrFilterPos
;
338
int
hLumFilterSize
;
339
int
hChrFilterSize
;
340
int
vLumFilterSize
;
341
int
vChrFilterSize
;
342
343
344
int
lumMmxextFilterCodeSize
;
345
int
chrMmxextFilterCodeSize
;
346
uint8_t
*
lumMmxextFilterCode
;
347
uint8_t
*
chrMmxextFilterCode
;
348
349
int
canMMXEXTBeUsed
;
350
351
int
dstY
;
352
int
flags
;
353
void
*
yuvTable
;
// pointer to the yuv->rgb table start so it can be freed()
354
uint8_t
*
table_rV
[256];
355
uint8_t
*
table_gU
[256];
356
int
table_gV
[256];
357
uint8_t
*
table_bU
[256];
358
359
//Colorspace stuff
360
int
contrast
,
brightness
,
saturation
;
// for sws_getColorspaceDetails
361
int
srcColorspaceTable
[4];
362
int
dstColorspaceTable
[4];
363
int
srcRange
;
364
int
dstRange
;
365
int
yuv2rgb_y_offset
;
366
int
yuv2rgb_y_coeff
;
367
int
yuv2rgb_v2r_coeff
;
368
int
yuv2rgb_v2g_coeff
;
369
int
yuv2rgb_u2g_coeff
;
370
int
yuv2rgb_u2b_coeff
;
371
372
#define RED_DITHER "0*8"
373
#define GREEN_DITHER "1*8"
374
#define BLUE_DITHER "2*8"
375
#define Y_COEFF "3*8"
376
#define VR_COEFF "4*8"
377
#define UB_COEFF "5*8"
378
#define VG_COEFF "6*8"
379
#define UG_COEFF "7*8"
380
#define Y_OFFSET "8*8"
381
#define U_OFFSET "9*8"
382
#define V_OFFSET "10*8"
383
#define LUM_MMX_FILTER_OFFSET "11*8"
384
#define CHR_MMX_FILTER_OFFSET "11*8+4*4*256"
385
#define DSTW_OFFSET "11*8+4*4*256*2" //do not change, it is hardcoded in the ASM
386
#define ESP_OFFSET "11*8+4*4*256*2+8"
387
#define VROUNDER_OFFSET "11*8+4*4*256*2+16"
388
#define U_TEMP "11*8+4*4*256*2+24"
389
#define V_TEMP "11*8+4*4*256*2+32"
390
#define Y_TEMP "11*8+4*4*256*2+40"
391
#define ALP_MMX_FILTER_OFFSET "11*8+4*4*256*2+48"
392
#define UV_OFF_PX "11*8+4*4*256*3+48"
393
#define UV_OFF_BYTE "11*8+4*4*256*3+56"
394
#define DITHER16 "11*8+4*4*256*3+64"
395
#define DITHER32 "11*8+4*4*256*3+80"
396
397
DECLARE_ALIGNED
(8, uint64_t,
redDither
);
398
DECLARE_ALIGNED
(8, uint64_t,
greenDither
);
399
DECLARE_ALIGNED
(8, uint64_t,
blueDither
);
400
401
DECLARE_ALIGNED
(8, uint64_t,
yCoeff
);
402
DECLARE_ALIGNED
(8, uint64_t,
vrCoeff
);
403
DECLARE_ALIGNED
(8, uint64_t,
ubCoeff
);
404
DECLARE_ALIGNED
(8, uint64_t,
vgCoeff
);
405
DECLARE_ALIGNED
(8, uint64_t,
ugCoeff
);
406
DECLARE_ALIGNED
(8, uint64_t,
yOffset
);
407
DECLARE_ALIGNED
(8, uint64_t,
uOffset
);
408
DECLARE_ALIGNED
(8, uint64_t,
vOffset
);
409
int32_t
lumMmxFilter
[4 *
MAX_FILTER_SIZE
];
410
int32_t
chrMmxFilter
[4 *
MAX_FILTER_SIZE
];
411
int
dstW
;
412
DECLARE_ALIGNED
(8, uint64_t,
esp
);
413
DECLARE_ALIGNED
(8, uint64_t,
vRounder
);
414
DECLARE_ALIGNED
(8, uint64_t,
u_temp
);
415
DECLARE_ALIGNED
(8, uint64_t,
v_temp
);
416
DECLARE_ALIGNED
(8, uint64_t,
y_temp
);
417
int32_t
alpMmxFilter
[4 *
MAX_FILTER_SIZE
];
418
// alignment of these values is not necessary, but merely here
419
// to maintain the same offset across x8632 and x86-64. Once we
420
// use proper offset macros in the asm, they can be removed.
421
DECLARE_ALIGNED
(8, ptrdiff_t,
uv_off_px
);
422
DECLARE_ALIGNED
(8, ptrdiff_t,
uv_off_byte
);
423
DECLARE_ALIGNED
(8, uint16_t,
dither16
)[8];
424
DECLARE_ALIGNED
(8, uint32_t,
dither32
)[8];
425
426
const
uint8_t
*
chrDither8
, *
lumDither8
;
427
428
#if HAVE_ALTIVEC
429
vector
signed
short
CY;
430
vector
signed
short
CRV;
431
vector
signed
short
CBU;
432
vector
signed
short
CGU;
433
vector
signed
short
CGV;
434
vector
signed
short
OY;
435
vector
unsigned
short
CSHIFT
;
436
vector
signed
short
*vYCoeffsBank, *vCCoeffsBank;
437
#endif
438
439
#if ARCH_BFIN
440
DECLARE_ALIGNED
(4, uint32_t, oy);
441
DECLARE_ALIGNED
(4, uint32_t, oc);
442
DECLARE_ALIGNED
(4, uint32_t, zero);
443
DECLARE_ALIGNED
(4, uint32_t, cy);
444
DECLARE_ALIGNED
(4, uint32_t, crv);
445
DECLARE_ALIGNED
(4, uint32_t, rmask);
446
DECLARE_ALIGNED
(4, uint32_t, cbu);
447
DECLARE_ALIGNED
(4, uint32_t, bmask);
448
DECLARE_ALIGNED
(4, uint32_t, cgu);
449
DECLARE_ALIGNED
(4, uint32_t, cgv);
450
DECLARE_ALIGNED
(4, uint32_t, gmask);
451
#endif
452
453
#if HAVE_VIS
454
DECLARE_ALIGNED
(8, uint64_t, sparc_coeffs)[10];
455
#endif
456
457
/* function pointers for swscale() */
458
yuv2planar1_fn
yuv2plane1
;
459
yuv2planarX_fn
yuv2planeX
;
460
yuv2interleavedX_fn
yuv2nv12cX
;
461
yuv2packed1_fn
yuv2packed1
;
462
yuv2packed2_fn
yuv2packed2
;
463
yuv2packedX_fn
yuv2packedX
;
464
yuv2anyX_fn
yuv2anyX
;
465
467
void
(*
lumToYV12
)(
uint8_t
*dst,
const
uint8_t
*src,
468
int
width
, uint32_t *pal);
470
void
(*
alpToYV12
)(
uint8_t
*dst,
const
uint8_t
*src,
471
int
width
, uint32_t *pal);
473
void
(*
chrToYV12
)(
uint8_t
*dstU,
uint8_t
*dstV,
474
const
uint8_t
*src1,
const
uint8_t
*src2,
475
int
width
, uint32_t *pal);
476
482
void
(*
readLumPlanar
)(
uint8_t
*dst,
const
uint8_t
*src[4],
int
width
);
483
void
(*
readChrPlanar
)(
uint8_t
*dstU,
uint8_t
*dstV,
const
uint8_t
*src[4],
484
int
width
);
506
void
(*
hyscale_fast
)(
struct
SwsContext
*c,
507
int16_t *dst,
int
dstWidth,
508
const
uint8_t
*src,
int
srcW
,
int
xInc);
509
void
(*
hcscale_fast
)(
struct
SwsContext
*c,
510
int16_t *dst1, int16_t *dst2,
int
dstWidth,
511
const
uint8_t
*src1,
const
uint8_t
*src2,
512
int
srcW
,
int
xInc);
546
void
(*
hyScale
)(
struct
SwsContext
*c, int16_t *dst,
int
dstW
,
547
const
uint8_t
*src,
const
int16_t *
filter
,
548
const
int32_t
*filterPos,
int
filterSize);
549
void
(*
hcScale
)(
struct
SwsContext
*c, int16_t *dst,
int
dstW
,
550
const
uint8_t
*src,
const
int16_t *
filter
,
551
const
int32_t
*filterPos,
int
filterSize);
554
void
(*
lumConvertRange
)(int16_t *dst,
int
width
);
557
void
(*
chrConvertRange
)(int16_t *dst1, int16_t *dst2,
int
width
);
558
559
int
needs_hcscale
;
560
}
SwsContext
;
561
//FIXME check init (where 0)
562
563
SwsFunc
ff_yuv2rgb_get_func_ptr
(
SwsContext
*c);
564
int
ff_yuv2rgb_c_init_tables
(
SwsContext
*c,
const
int
inv_table[4],
565
int
fullRange,
int
brightness
,
566
int
contrast
,
int
saturation
);
567
void
ff_yuv2rgb_init_tables_ppc
(
SwsContext
*c,
const
int
inv_table[4],
568
int
brightness
,
int
contrast
,
int
saturation
);
569
570
void
updateMMXDitherTables
(
SwsContext
*c,
int
dstY
,
int
lumBufIndex
,
int
chrBufIndex
,
571
int
lastInLumBuf
,
int
lastInChrBuf
);
572
573
SwsFunc
ff_yuv2rgb_init_x86
(
SwsContext
*c);
574
SwsFunc
ff_yuv2rgb_init_vis
(
SwsContext
*c);
575
SwsFunc
ff_yuv2rgb_init_ppc
(
SwsContext
*c);
576
SwsFunc
ff_yuv2rgb_init_bfin
(
SwsContext
*c);
577
578
const
char
*
sws_format_name
(
enum
AVPixelFormat
format);
579
580
static
av_always_inline
int
is16BPS
(
enum
AVPixelFormat
pix_fmt
)
581
{
582
const
AVPixFmtDescriptor
*desc =
av_pix_fmt_desc_get
(pix_fmt);
583
av_assert0
(desc);
584
return
desc->
comp
[0].
depth_minus1
== 15;
585
}
586
587
static
av_always_inline
int
is9_OR_10BPS
(
enum
AVPixelFormat
pix_fmt
)
588
{
589
const
AVPixFmtDescriptor
*desc =
av_pix_fmt_desc_get
(pix_fmt);
590
av_assert0
(desc);
591
return
desc->
comp
[0].
depth_minus1
== 8 || desc->
comp
[0].
depth_minus1
== 9;
592
}
593
594
static
av_always_inline
int
isBE
(
enum
AVPixelFormat
pix_fmt
)
595
{
596
const
AVPixFmtDescriptor
*desc =
av_pix_fmt_desc_get
(pix_fmt);
597
av_assert0
(desc);
598
return
desc->
flags
&
AV_PIX_FMT_FLAG_BE
;
599
}
600
601
static
av_always_inline
int
isYUV
(
enum
AVPixelFormat
pix_fmt
)
602
{
603
const
AVPixFmtDescriptor
*desc =
av_pix_fmt_desc_get
(pix_fmt);
604
av_assert0
(desc);
605
return
!(desc->
flags
&
AV_PIX_FMT_FLAG_RGB
) && desc->
nb_components
>= 2;
606
}
607
608
static
av_always_inline
int
isPlanarYUV
(
enum
AVPixelFormat
pix_fmt
)
609
{
610
const
AVPixFmtDescriptor
*desc =
av_pix_fmt_desc_get
(pix_fmt);
611
av_assert0
(desc);
612
return
((desc->
flags
&
AV_PIX_FMT_FLAG_PLANAR
) &&
isYUV
(pix_fmt));
613
}
614
615
static
av_always_inline
int
isRGB
(
enum
AVPixelFormat
pix_fmt
)
616
{
617
const
AVPixFmtDescriptor
*desc =
av_pix_fmt_desc_get
(pix_fmt);
618
av_assert0
(desc);
619
return
(desc->
flags
&
AV_PIX_FMT_FLAG_RGB
);
620
}
621
622
#if 0 // FIXME
623
#define isGray(x) \
624
(!(av_pix_fmt_descriptors[x].flags & AV_PIX_FMT_FLAG_PAL) && \
625
av_pix_fmt_descriptors[x].nb_components <= 2)
626
#else
627
#define isGray(x) \
628
((x) == AV_PIX_FMT_GRAY8 || \
629
(x) == AV_PIX_FMT_Y400A || \
630
(x) == AV_PIX_FMT_GRAY16BE || \
631
(x) == AV_PIX_FMT_GRAY16LE)
632
#endif
633
634
#define isRGBinInt(x) \
635
((x) == AV_PIX_FMT_RGB48BE || \
636
(x) == AV_PIX_FMT_RGB48LE || \
637
(x) == AV_PIX_FMT_RGB32 || \
638
(x) == AV_PIX_FMT_RGB32_1 || \
639
(x) == AV_PIX_FMT_RGB24 || \
640
(x) == AV_PIX_FMT_RGB565BE || \
641
(x) == AV_PIX_FMT_RGB565LE || \
642
(x) == AV_PIX_FMT_RGB555BE || \
643
(x) == AV_PIX_FMT_RGB555LE || \
644
(x) == AV_PIX_FMT_RGB444BE || \
645
(x) == AV_PIX_FMT_RGB444LE || \
646
(x) == AV_PIX_FMT_RGB8 || \
647
(x) == AV_PIX_FMT_RGB4 || \
648
(x) == AV_PIX_FMT_RGB4_BYTE || \
649
(x) == AV_PIX_FMT_MONOBLACK || \
650
(x) == AV_PIX_FMT_MONOWHITE)
651
652
#define isBGRinInt(x) \
653
((x) == AV_PIX_FMT_BGR48BE || \
654
(x) == AV_PIX_FMT_BGR48LE || \
655
(x) == AV_PIX_FMT_BGR32 || \
656
(x) == AV_PIX_FMT_BGR32_1 || \
657
(x) == AV_PIX_FMT_BGR24 || \
658
(x) == AV_PIX_FMT_BGR565BE || \
659
(x) == AV_PIX_FMT_BGR565LE || \
660
(x) == AV_PIX_FMT_BGR555BE || \
661
(x) == AV_PIX_FMT_BGR555LE || \
662
(x) == AV_PIX_FMT_BGR444BE || \
663
(x) == AV_PIX_FMT_BGR444LE || \
664
(x) == AV_PIX_FMT_BGR8 || \
665
(x) == AV_PIX_FMT_BGR4 || \
666
(x) == AV_PIX_FMT_BGR4_BYTE || \
667
(x) == AV_PIX_FMT_MONOBLACK || \
668
(x) == AV_PIX_FMT_MONOWHITE)
669
670
#define isAnyRGB(x) \
671
(isRGBinInt(x) || \
672
isBGRinInt(x))
673
674
static
av_always_inline
int
isALPHA
(
enum
AVPixelFormat
pix_fmt
)
675
{
676
const
AVPixFmtDescriptor
*desc =
av_pix_fmt_desc_get
(pix_fmt);
677
av_assert0
(desc);
678
return
desc->
nb_components
== 2 || desc->
nb_components
== 4;
679
}
680
681
static
av_always_inline
int
isPacked
(
enum
AVPixelFormat
pix_fmt
)
682
{
683
const
AVPixFmtDescriptor
*desc =
av_pix_fmt_desc_get
(pix_fmt);
684
av_assert0
(desc);
685
return
((desc->
nb_components
>= 2 && !(desc->
flags
&
AV_PIX_FMT_FLAG_PLANAR
)) ||
686
pix_fmt ==
AV_PIX_FMT_PAL8
);
687
}
688
689
static
av_always_inline
int
isPlanar
(
enum
AVPixelFormat
pix_fmt
)
690
{
691
const
AVPixFmtDescriptor
*desc =
av_pix_fmt_desc_get
(pix_fmt);
692
av_assert0
(desc);
693
return
(desc->
nb_components
>= 2 && (desc->
flags
&
AV_PIX_FMT_FLAG_PLANAR
));
694
}
695
696
static
av_always_inline
int
isPackedRGB
(
enum
AVPixelFormat
pix_fmt
)
697
{
698
const
AVPixFmtDescriptor
*desc =
av_pix_fmt_desc_get
(pix_fmt);
699
av_assert0
(desc);
700
return
((desc->
flags
& (
AV_PIX_FMT_FLAG_PLANAR
|
AV_PIX_FMT_FLAG_RGB
)) ==
AV_PIX_FMT_FLAG_RGB
);
701
}
702
703
static
av_always_inline
int
isPlanarRGB
(
enum
AVPixelFormat
pix_fmt
)
704
{
705
const
AVPixFmtDescriptor
*desc =
av_pix_fmt_desc_get
(pix_fmt);
706
av_assert0
(desc);
707
return
((desc->
flags
& (
AV_PIX_FMT_FLAG_PLANAR
|
AV_PIX_FMT_FLAG_RGB
)) ==
708
(
AV_PIX_FMT_FLAG_PLANAR
|
AV_PIX_FMT_FLAG_RGB
));
709
}
710
711
static
av_always_inline
int
usePal
(
enum
AVPixelFormat
pix_fmt
)
712
{
713
const
AVPixFmtDescriptor
*desc =
av_pix_fmt_desc_get
(pix_fmt);
714
av_assert0
(desc);
715
return
((desc->
flags
&
AV_PIX_FMT_FLAG_PAL
) || (desc->
flags
&
AV_PIX_FMT_FLAG_PSEUDOPAL
) ||
716
pix_fmt ==
AV_PIX_FMT_Y400A
);
717
}
718
719
extern
const
uint64_t
ff_dither4
[2];
720
extern
const
uint64_t
ff_dither8
[2];
721
722
extern
const
uint8_t
ff_dither_4x4_16
[4][8];
723
extern
const
uint8_t
ff_dither_8x8_32
[8][8];
724
extern
const
uint8_t
ff_dither_8x8_73
[8][8];
725
extern
const
uint8_t
ff_dither_8x8_128
[8][8];
726
extern
const
uint8_t
ff_dither_8x8_220
[8][8];
727
728
extern
const
int32_t
ff_yuv2rgb_coeffs
[8][4];
729
730
extern
const
AVClass
sws_context_class
;
731
736
void
ff_get_unscaled_swscale
(
SwsContext
*c);
737
void
ff_get_unscaled_swscale_bfin
(
SwsContext
*c);
738
void
ff_get_unscaled_swscale_ppc
(
SwsContext
*c);
739
744
SwsFunc
ff_getSwsFunc
(
SwsContext
*c);
745
746
void
ff_sws_init_input_funcs
(
SwsContext
*c);
747
void
ff_sws_init_output_funcs
(
SwsContext
*c,
748
yuv2planar1_fn
*
yuv2plane1
,
749
yuv2planarX_fn
*
yuv2planeX
,
750
yuv2interleavedX_fn
*
yuv2nv12cX
,
751
yuv2packed1_fn
*
yuv2packed1
,
752
yuv2packed2_fn
*
yuv2packed2
,
753
yuv2packedX_fn
*
yuv2packedX
,
754
yuv2anyX_fn
*
yuv2anyX
);
755
void
ff_sws_init_swscale_ppc
(
SwsContext
*c);
756
void
ff_sws_init_swscale_x86
(
SwsContext
*c);
757
758
#endif
/* SWSCALE_SWSCALE_INTERNAL_H */
Generated on Tue Mar 1 2016 21:14:53 for Libav by
1.8.4