Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
582bc5a3
Commit
582bc5a3
authored
Aug 03, 2018
by
Sergey Lavrushkin
Committed by
Michael Niedermayer
Aug 14, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
libswscale: Adds conversions from/to float gray format.
Signed-off-by:
Michael Niedermayer
<
michael@niedermayer.cc
>
parent
551a029a
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
248 additions
and
4 deletions
+248
-4
input.c
libswscale/input.c
+38
-0
output.c
libswscale/output.c
+105
-0
swscale_altivec.c
libswscale/ppc/swscale_altivec.c
+1
-0
swscale_internal.h
libswscale/swscale_internal.h
+9
-0
swscale_unscaled.c
libswscale/swscale_unscaled.c
+52
-2
utils.c
libswscale/utils.c
+19
-1
swscale_template.c
libswscale/x86/swscale_template.c
+2
-1
filter-pixdesc-grayf32be
tests/ref/fate/filter-pixdesc-grayf32be
+1
-0
filter-pixdesc-grayf32le
tests/ref/fate/filter-pixdesc-grayf32le
+1
-0
filter-pixfmts-copy
tests/ref/fate/filter-pixfmts-copy
+2
-0
filter-pixfmts-crop
tests/ref/fate/filter-pixfmts-crop
+2
-0
filter-pixfmts-field
tests/ref/fate/filter-pixfmts-field
+2
-0
filter-pixfmts-fieldorder
tests/ref/fate/filter-pixfmts-fieldorder
+2
-0
filter-pixfmts-hflip
tests/ref/fate/filter-pixfmts-hflip
+2
-0
filter-pixfmts-il
tests/ref/fate/filter-pixfmts-il
+2
-0
filter-pixfmts-null
tests/ref/fate/filter-pixfmts-null
+2
-0
filter-pixfmts-scale
tests/ref/fate/filter-pixfmts-scale
+2
-0
filter-pixfmts-transpose
tests/ref/fate/filter-pixfmts-transpose
+2
-0
filter-pixfmts-vflip
tests/ref/fate/filter-pixfmts-vflip
+2
-0
No files found.
libswscale/input.c
View file @
582bc5a3
...
@@ -942,6 +942,30 @@ static av_always_inline void planar_rgb16_to_uv(uint8_t *_dstU, uint8_t *_dstV,
...
@@ -942,6 +942,30 @@ static av_always_inline void planar_rgb16_to_uv(uint8_t *_dstU, uint8_t *_dstV,
}
}
#undef rdpx
#undef rdpx
static
av_always_inline
void
grayf32ToY16_c
(
uint8_t
*
_dst
,
const
uint8_t
*
_src
,
const
uint8_t
*
unused1
,
const
uint8_t
*
unused2
,
int
width
,
uint32_t
*
unused
)
{
int
i
;
const
float
*
src
=
(
const
float
*
)
_src
;
uint16_t
*
dst
=
(
uint16_t
*
)
_dst
;
for
(
i
=
0
;
i
<
width
;
++
i
){
dst
[
i
]
=
av_clip_uint16
(
lrintf
(
65535
.
0
f
*
src
[
i
]));
}
}
static
av_always_inline
void
grayf32ToY16_bswap_c
(
uint8_t
*
_dst
,
const
uint8_t
*
_src
,
const
uint8_t
*
unused1
,
const
uint8_t
*
unused2
,
int
width
,
uint32_t
*
unused
)
{
int
i
;
const
uint32_t
*
src
=
(
const
uint32_t
*
)
_src
;
uint16_t
*
dst
=
(
uint16_t
*
)
_dst
;
for
(
i
=
0
;
i
<
width
;
++
i
){
dst
[
i
]
=
av_clip_uint16
(
lrintf
(
65535
.
0
f
*
av_int2float
(
av_bswap32
(
src
[
i
]))));
}
}
#define rgb9plus_planar_funcs_endian(nbits, endian_name, endian) \
#define rgb9plus_planar_funcs_endian(nbits, endian_name, endian) \
static void planar_rgb##nbits##endian_name##_to_y(uint8_t *dst, const uint8_t *src[4], \
static void planar_rgb##nbits##endian_name##_to_y(uint8_t *dst, const uint8_t *src[4], \
int w, int32_t *rgb2yuv) \
int w, int32_t *rgb2yuv) \
...
@@ -1538,6 +1562,20 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c)
...
@@ -1538,6 +1562,20 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c)
case
AV_PIX_FMT_P010BE
:
case
AV_PIX_FMT_P010BE
:
c
->
lumToYV12
=
p010BEToY_c
;
c
->
lumToYV12
=
p010BEToY_c
;
break
;
break
;
case
AV_PIX_FMT_GRAYF32LE
:
#if HAVE_BIGENDIAN
c
->
lumToYV12
=
grayf32ToY16_bswap_c
;
#else
c
->
lumToYV12
=
grayf32ToY16_c
;
#endif
break
;
case
AV_PIX_FMT_GRAYF32BE
:
#if HAVE_BIGENDIAN
c
->
lumToYV12
=
grayf32ToY16_c
;
#else
c
->
lumToYV12
=
grayf32ToY16_bswap_c
;
#endif
break
;
}
}
if
(
c
->
needAlpha
)
{
if
(
c
->
needAlpha
)
{
if
(
is16BPS
(
srcFormat
)
||
isNBPS
(
srcFormat
))
{
if
(
is16BPS
(
srcFormat
)
||
isNBPS
(
srcFormat
))
{
...
...
libswscale/output.c
View file @
582bc5a3
...
@@ -208,6 +208,105 @@ static void yuv2p016cX_c(SwsContext *c, const int16_t *chrFilter, int chrFilterS
...
@@ -208,6 +208,105 @@ static void yuv2p016cX_c(SwsContext *c, const int16_t *chrFilter, int chrFilterS
}
}
}
}
static
av_always_inline
void
yuv2plane1_float_c_template
(
const
int32_t
*
src
,
float
*
dest
,
int
dstW
)
{
static
const
int
big_endian
=
HAVE_BIGENDIAN
;
static
const
int
shift
=
3
;
static
const
float
float_mult
=
1
.
0
f
/
65535
.
0
f
;
int
i
,
val
;
uint16_t
val_uint
;
for
(
i
=
0
;
i
<
dstW
;
++
i
){
val
=
src
[
i
]
+
(
1
<<
(
shift
-
1
));
output_pixel
(
&
val_uint
,
val
,
0
,
uint
);
dest
[
i
]
=
float_mult
*
(
float
)
val_uint
;
}
}
static
av_always_inline
void
yuv2plane1_float_bswap_c_template
(
const
int32_t
*
src
,
uint32_t
*
dest
,
int
dstW
)
{
static
const
int
big_endian
=
HAVE_BIGENDIAN
;
static
const
int
shift
=
3
;
static
const
float
float_mult
=
1
.
0
f
/
65535
.
0
f
;
int
i
,
val
;
uint16_t
val_uint
;
for
(
i
=
0
;
i
<
dstW
;
++
i
){
val
=
src
[
i
]
+
(
1
<<
(
shift
-
1
));
output_pixel
(
&
val_uint
,
val
,
0
,
uint
);
dest
[
i
]
=
av_bswap32
(
av_float2int
(
float_mult
*
(
float
)
val_uint
));
}
}
static
av_always_inline
void
yuv2planeX_float_c_template
(
const
int16_t
*
filter
,
int
filterSize
,
const
int32_t
**
src
,
float
*
dest
,
int
dstW
)
{
static
const
int
big_endian
=
HAVE_BIGENDIAN
;
static
const
int
shift
=
15
;
static
const
float
float_mult
=
1
.
0
f
/
65535
.
0
f
;
int
i
,
j
,
val
;
uint16_t
val_uint
;
for
(
i
=
0
;
i
<
dstW
;
++
i
){
val
=
(
1
<<
(
shift
-
1
))
-
0x40000000
;
for
(
j
=
0
;
j
<
filterSize
;
++
j
){
val
+=
src
[
j
][
i
]
*
(
unsigned
)
filter
[
j
];
}
output_pixel
(
&
val_uint
,
val
,
0x8000
,
int
);
dest
[
i
]
=
float_mult
*
(
float
)
val_uint
;
}
}
static
av_always_inline
void
yuv2planeX_float_bswap_c_template
(
const
int16_t
*
filter
,
int
filterSize
,
const
int32_t
**
src
,
uint32_t
*
dest
,
int
dstW
)
{
static
const
int
big_endian
=
HAVE_BIGENDIAN
;
static
const
int
shift
=
15
;
static
const
float
float_mult
=
1
.
0
f
/
65535
.
0
f
;
int
i
,
j
,
val
;
uint16_t
val_uint
;
for
(
i
=
0
;
i
<
dstW
;
++
i
){
val
=
(
1
<<
(
shift
-
1
))
-
0x40000000
;
for
(
j
=
0
;
j
<
filterSize
;
++
j
){
val
+=
src
[
j
][
i
]
*
(
unsigned
)
filter
[
j
];
}
output_pixel
(
&
val_uint
,
val
,
0x8000
,
int
);
dest
[
i
]
=
av_bswap32
(
av_float2int
(
float_mult
*
(
float
)
val_uint
));
}
}
#define yuv2plane1_float(template, dest_type, BE_LE) \
static void yuv2plane1_float ## BE_LE ## _c(const int16_t *src, uint8_t *dest, int dstW, \
const uint8_t *dither, int offset) \
{ \
template((const int32_t *)src, (dest_type *)dest, dstW); \
}
#define yuv2planeX_float(template, dest_type, BE_LE) \
static void yuv2planeX_float ## BE_LE ## _c(const int16_t *filter, int filterSize, \
const int16_t **src, uint8_t *dest, int dstW, \
const uint8_t *dither, int offset) \
{ \
template(filter, filterSize, (const int32_t **)src, (dest_type *)dest, dstW); \
}
#if HAVE_BIGENDIAN
yuv2plane1_float
(
yuv2plane1_float_c_template
,
float
,
BE
)
yuv2plane1_float
(
yuv2plane1_float_bswap_c_template
,
uint32_t
,
LE
)
yuv2planeX_float
(
yuv2planeX_float_c_template
,
float
,
BE
)
yuv2planeX_float
(
yuv2planeX_float_bswap_c_template
,
uint32_t
,
LE
)
#else
yuv2plane1_float
(
yuv2plane1_float_c_template
,
float
,
LE
)
yuv2plane1_float
(
yuv2plane1_float_bswap_c_template
,
uint32_t
,
BE
)
yuv2planeX_float
(
yuv2planeX_float_c_template
,
float
,
LE
)
yuv2planeX_float
(
yuv2planeX_float_bswap_c_template
,
uint32_t
,
BE
)
#endif
#undef output_pixel
#undef output_pixel
#define output_pixel(pos, val) \
#define output_pixel(pos, val) \
...
@@ -2303,6 +2402,12 @@ av_cold void ff_sws_init_output_funcs(SwsContext *c,
...
@@ -2303,6 +2402,12 @@ av_cold void ff_sws_init_output_funcs(SwsContext *c,
*
yuv2plane1
=
isBE
(
dstFormat
)
?
yuv2plane1_14BE_c
:
yuv2plane1_14LE_c
;
*
yuv2plane1
=
isBE
(
dstFormat
)
?
yuv2plane1_14BE_c
:
yuv2plane1_14LE_c
;
}
else
}
else
av_assert0
(
0
);
av_assert0
(
0
);
}
else
if
(
dstFormat
==
AV_PIX_FMT_GRAYF32BE
)
{
*
yuv2planeX
=
yuv2planeX_floatBE_c
;
*
yuv2plane1
=
yuv2plane1_floatBE_c
;
}
else
if
(
dstFormat
==
AV_PIX_FMT_GRAYF32LE
)
{
*
yuv2planeX
=
yuv2planeX_floatLE_c
;
*
yuv2plane1
=
yuv2plane1_floatLE_c
;
}
else
{
}
else
{
*
yuv2plane1
=
yuv2plane1_8_c
;
*
yuv2plane1
=
yuv2plane1_8_c
;
*
yuv2planeX
=
yuv2planeX_8_c
;
*
yuv2planeX
=
yuv2planeX_8_c
;
...
...
libswscale/ppc/swscale_altivec.c
View file @
582bc5a3
...
@@ -339,6 +339,7 @@ av_cold void ff_sws_init_swscale_ppc(SwsContext *c)
...
@@ -339,6 +339,7 @@ av_cold void ff_sws_init_swscale_ppc(SwsContext *c)
}
}
if
(
!
is16BPS
(
dstFormat
)
&&
!
isNBPS
(
dstFormat
)
&&
if
(
!
is16BPS
(
dstFormat
)
&&
!
isNBPS
(
dstFormat
)
&&
dstFormat
!=
AV_PIX_FMT_NV12
&&
dstFormat
!=
AV_PIX_FMT_NV21
&&
dstFormat
!=
AV_PIX_FMT_NV12
&&
dstFormat
!=
AV_PIX_FMT_NV21
&&
dstFormat
!=
AV_PIX_FMT_GRAYF32BE
&&
dstFormat
!=
AV_PIX_FMT_GRAYF32LE
&&
!
c
->
needAlpha
)
{
!
c
->
needAlpha
)
{
c
->
yuv2planeX
=
yuv2planeX_altivec
;
c
->
yuv2planeX
=
yuv2planeX_altivec
;
}
}
...
...
libswscale/swscale_internal.h
View file @
582bc5a3
...
@@ -336,6 +336,8 @@ typedef struct SwsContext {
...
@@ -336,6 +336,8 @@ typedef struct SwsContext {
uint32_t
pal_yuv
[
256
];
uint32_t
pal_yuv
[
256
];
uint32_t
pal_rgb
[
256
];
uint32_t
pal_rgb
[
256
];
float
uint2float_lut
[
256
];
/**
/**
* @name Scaled horizontal lines ring buffer.
* @name Scaled horizontal lines ring buffer.
* The horizontal scaler keeps just enough scaled lines in a ring buffer
* The horizontal scaler keeps just enough scaled lines in a ring buffer
...
@@ -764,6 +766,13 @@ static av_always_inline int isAnyRGB(enum AVPixelFormat pix_fmt)
...
@@ -764,6 +766,13 @@ static av_always_inline int isAnyRGB(enum AVPixelFormat pix_fmt)
pix_fmt
==
AV_PIX_FMT_MONOBLACK
||
pix_fmt
==
AV_PIX_FMT_MONOWHITE
;
pix_fmt
==
AV_PIX_FMT_MONOBLACK
||
pix_fmt
==
AV_PIX_FMT_MONOWHITE
;
}
}
static
av_always_inline
int
isFloat
(
enum
AVPixelFormat
pix_fmt
)
{
const
AVPixFmtDescriptor
*
desc
=
av_pix_fmt_desc_get
(
pix_fmt
);
av_assert0
(
desc
);
return
desc
->
flags
&
AV_PIX_FMT_FLAG_FLOAT
;
}
static
av_always_inline
int
isALPHA
(
enum
AVPixelFormat
pix_fmt
)
static
av_always_inline
int
isALPHA
(
enum
AVPixelFormat
pix_fmt
)
{
{
const
AVPixFmtDescriptor
*
desc
=
av_pix_fmt_desc_get
(
pix_fmt
);
const
AVPixFmtDescriptor
*
desc
=
av_pix_fmt_desc_get
(
pix_fmt
);
...
...
libswscale/swscale_unscaled.c
View file @
582bc5a3
...
@@ -1467,6 +1467,46 @@ static int yvu9ToYv12Wrapper(SwsContext *c, const uint8_t *src[],
...
@@ -1467,6 +1467,46 @@ static int yvu9ToYv12Wrapper(SwsContext *c, const uint8_t *src[],
return
srcSliceH
;
return
srcSliceH
;
}
}
static
int
uint_y_to_float_y_wrapper
(
SwsContext
*
c
,
const
uint8_t
*
src
[],
int
srcStride
[],
int
srcSliceY
,
int
srcSliceH
,
uint8_t
*
dst
[],
int
dstStride
[])
{
int
y
,
x
;
ptrdiff_t
dstStrideFloat
=
dstStride
[
0
]
>>
2
;
const
uint8_t
*
srcPtr
=
src
[
0
];
float
*
dstPtr
=
(
float
*
)(
dst
[
0
]
+
dstStride
[
0
]
*
srcSliceY
);
for
(
y
=
0
;
y
<
srcSliceH
;
++
y
){
for
(
x
=
0
;
x
<
c
->
srcW
;
++
x
){
dstPtr
[
x
]
=
c
->
uint2float_lut
[
srcPtr
[
x
]];
}
srcPtr
+=
srcStride
[
0
];
dstPtr
+=
dstStrideFloat
;
}
return
srcSliceH
;
}
static
int
float_y_to_uint_y_wrapper
(
SwsContext
*
c
,
const
uint8_t
*
src
[],
int
srcStride
[],
int
srcSliceY
,
int
srcSliceH
,
uint8_t
*
dst
[],
int
dstStride
[])
{
int
y
,
x
;
ptrdiff_t
srcStrideFloat
=
srcStride
[
0
]
>>
2
;
const
float
*
srcPtr
=
(
const
float
*
)
src
[
0
];
uint8_t
*
dstPtr
=
dst
[
0
]
+
dstStride
[
0
]
*
srcSliceY
;
for
(
y
=
0
;
y
<
srcSliceH
;
++
y
){
for
(
x
=
0
;
x
<
c
->
srcW
;
++
x
){
dstPtr
[
x
]
=
av_clip_uint8
(
lrintf
(
255
.
0
f
*
srcPtr
[
x
]));
}
srcPtr
+=
srcStrideFloat
;
dstPtr
+=
dstStride
[
0
];
}
return
srcSliceH
;
}
/* unscaled copy like stuff (assumes nearly identical formats) */
/* unscaled copy like stuff (assumes nearly identical formats) */
static
int
packedCopyWrapper
(
SwsContext
*
c
,
const
uint8_t
*
src
[],
static
int
packedCopyWrapper
(
SwsContext
*
c
,
const
uint8_t
*
src
[],
int
srcStride
[],
int
srcSliceY
,
int
srcSliceH
,
int
srcStride
[],
int
srcSliceY
,
int
srcSliceH
,
...
@@ -1899,6 +1939,16 @@ void ff_get_unscaled_swscale(SwsContext *c)
...
@@ -1899,6 +1939,16 @@ void ff_get_unscaled_swscale(SwsContext *c)
c
->
swscale
=
yuv422pToUyvyWrapper
;
c
->
swscale
=
yuv422pToUyvyWrapper
;
}
}
/* uint Y to float Y */
if
(
srcFormat
==
AV_PIX_FMT_GRAY8
&&
dstFormat
==
AV_PIX_FMT_GRAYF32
){
c
->
swscale
=
uint_y_to_float_y_wrapper
;
}
/* float Y to uint Y */
if
(
srcFormat
==
AV_PIX_FMT_GRAYF32
&&
dstFormat
==
AV_PIX_FMT_GRAY8
){
c
->
swscale
=
float_y_to_uint_y_wrapper
;
}
/* LQ converters if -sws 0 or -sws 4*/
/* LQ converters if -sws 0 or -sws 4*/
if
(
c
->
flags
&
(
SWS_FAST_BILINEAR
|
SWS_POINT
))
{
if
(
c
->
flags
&
(
SWS_FAST_BILINEAR
|
SWS_POINT
))
{
/* yv12_to_yuy2 */
/* yv12_to_yuy2 */
...
@@ -1925,13 +1975,13 @@ void ff_get_unscaled_swscale(SwsContext *c)
...
@@ -1925,13 +1975,13 @@ void ff_get_unscaled_swscale(SwsContext *c)
if
(
srcFormat
==
dstFormat
||
if
(
srcFormat
==
dstFormat
||
(
srcFormat
==
AV_PIX_FMT_YUVA420P
&&
dstFormat
==
AV_PIX_FMT_YUV420P
)
||
(
srcFormat
==
AV_PIX_FMT_YUVA420P
&&
dstFormat
==
AV_PIX_FMT_YUV420P
)
||
(
srcFormat
==
AV_PIX_FMT_YUV420P
&&
dstFormat
==
AV_PIX_FMT_YUVA420P
)
||
(
srcFormat
==
AV_PIX_FMT_YUV420P
&&
dstFormat
==
AV_PIX_FMT_YUVA420P
)
||
(
isPlanarYUV
(
srcFormat
)
&&
isPlanarGray
(
dstFormat
))
||
(
is
Float
(
srcFormat
)
==
isFloat
(
dstFormat
))
&&
((
is
PlanarYUV
(
srcFormat
)
&&
isPlanarGray
(
dstFormat
))
||
(
isPlanarYUV
(
dstFormat
)
&&
isPlanarGray
(
srcFormat
))
||
(
isPlanarYUV
(
dstFormat
)
&&
isPlanarGray
(
srcFormat
))
||
(
isPlanarGray
(
dstFormat
)
&&
isPlanarGray
(
srcFormat
))
||
(
isPlanarGray
(
dstFormat
)
&&
isPlanarGray
(
srcFormat
))
||
(
isPlanarYUV
(
srcFormat
)
&&
isPlanarYUV
(
dstFormat
)
&&
(
isPlanarYUV
(
srcFormat
)
&&
isPlanarYUV
(
dstFormat
)
&&
c
->
chrDstHSubSample
==
c
->
chrSrcHSubSample
&&
c
->
chrDstHSubSample
==
c
->
chrSrcHSubSample
&&
c
->
chrDstVSubSample
==
c
->
chrSrcVSubSample
&&
c
->
chrDstVSubSample
==
c
->
chrSrcVSubSample
&&
!
isSemiPlanarYUV
(
srcFormat
)
&&
!
isSemiPlanarYUV
(
dstFormat
)))
!
isSemiPlanarYUV
(
srcFormat
)
&&
!
isSemiPlanarYUV
(
dstFormat
)))
)
{
{
if
(
isPacked
(
c
->
srcFormat
))
if
(
isPacked
(
c
->
srcFormat
))
c
->
swscale
=
packedCopyWrapper
;
c
->
swscale
=
packedCopyWrapper
;
...
...
libswscale/utils.c
View file @
582bc5a3
...
@@ -258,6 +258,8 @@ static const FormatEntry format_entries[AV_PIX_FMT_NB] = {
...
@@ -258,6 +258,8 @@ static const FormatEntry format_entries[AV_PIX_FMT_NB] = {
[
AV_PIX_FMT_P010BE
]
=
{
1
,
1
},
[
AV_PIX_FMT_P010BE
]
=
{
1
,
1
},
[
AV_PIX_FMT_P016LE
]
=
{
1
,
1
},
[
AV_PIX_FMT_P016LE
]
=
{
1
,
1
},
[
AV_PIX_FMT_P016BE
]
=
{
1
,
1
},
[
AV_PIX_FMT_P016BE
]
=
{
1
,
1
},
[
AV_PIX_FMT_GRAYF32LE
]
=
{
1
,
1
},
[
AV_PIX_FMT_GRAYF32BE
]
=
{
1
,
1
},
};
};
int
sws_isSupportedInput
(
enum
AVPixelFormat
pix_fmt
)
int
sws_isSupportedInput
(
enum
AVPixelFormat
pix_fmt
)
...
@@ -1173,6 +1175,7 @@ av_cold int sws_init_context(SwsContext *c, SwsFilter *srcFilter,
...
@@ -1173,6 +1175,7 @@ av_cold int sws_init_context(SwsContext *c, SwsFilter *srcFilter,
const
AVPixFmtDescriptor
*
desc_dst
;
const
AVPixFmtDescriptor
*
desc_dst
;
int
ret
=
0
;
int
ret
=
0
;
enum
AVPixelFormat
tmpFmt
;
enum
AVPixelFormat
tmpFmt
;
static
const
float
float_mult
=
1
.
0
f
/
255
.
0
f
;
cpu_flags
=
av_get_cpu_flags
();
cpu_flags
=
av_get_cpu_flags
();
flags
=
c
->
flags
;
flags
=
c
->
flags
;
...
@@ -1537,6 +1540,19 @@ av_cold int sws_init_context(SwsContext *c, SwsFilter *srcFilter,
...
@@ -1537,6 +1540,19 @@ av_cold int sws_init_context(SwsContext *c, SwsFilter *srcFilter,
}
}
}
}
if
(
unscaled
&&
c
->
srcBpc
==
8
&&
dstFormat
==
AV_PIX_FMT_GRAYF32
){
for
(
i
=
0
;
i
<
256
;
++
i
){
c
->
uint2float_lut
[
i
]
=
(
float
)
i
*
float_mult
;
}
}
// float will be converted to uint16_t
if
((
srcFormat
==
AV_PIX_FMT_GRAYF32BE
||
srcFormat
==
AV_PIX_FMT_GRAYF32LE
)
&&
(
!
unscaled
||
unscaled
&&
dstFormat
!=
srcFormat
&&
(
srcFormat
!=
AV_PIX_FMT_GRAYF32
||
dstFormat
!=
AV_PIX_FMT_GRAY8
))){
c
->
srcBpc
=
16
;
}
if
(
CONFIG_SWSCALE_ALPHA
&&
isALPHA
(
srcFormat
)
&&
!
isALPHA
(
dstFormat
))
{
if
(
CONFIG_SWSCALE_ALPHA
&&
isALPHA
(
srcFormat
)
&&
!
isALPHA
(
dstFormat
))
{
enum
AVPixelFormat
tmpFormat
=
alphaless_fmt
(
srcFormat
);
enum
AVPixelFormat
tmpFormat
=
alphaless_fmt
(
srcFormat
);
...
@@ -1793,7 +1809,9 @@ av_cold int sws_init_context(SwsContext *c, SwsFilter *srcFilter,
...
@@ -1793,7 +1809,9 @@ av_cold int sws_init_context(SwsContext *c, SwsFilter *srcFilter,
/* unscaled special cases */
/* unscaled special cases */
if
(
unscaled
&&
!
usesHFilter
&&
!
usesVFilter
&&
if
(
unscaled
&&
!
usesHFilter
&&
!
usesVFilter
&&
(
c
->
srcRange
==
c
->
dstRange
||
isAnyRGB
(
dstFormat
)))
{
(
c
->
srcRange
==
c
->
dstRange
||
isAnyRGB
(
dstFormat
)
||
srcFormat
==
AV_PIX_FMT_GRAYF32
&&
dstFormat
==
AV_PIX_FMT_GRAY8
||
srcFormat
==
AV_PIX_FMT_GRAY8
&&
dstFormat
==
AV_PIX_FMT_GRAYF32
))
{
ff_get_unscaled_swscale
(
c
);
ff_get_unscaled_swscale
(
c
);
if
(
c
->
swscale
)
{
if
(
c
->
swscale
)
{
...
...
libswscale/x86/swscale_template.c
View file @
582bc5a3
...
@@ -1500,7 +1500,8 @@ static av_cold void RENAME(sws_init_swscale)(SwsContext *c)
...
@@ -1500,7 +1500,8 @@ static av_cold void RENAME(sws_init_swscale)(SwsContext *c)
c
->
use_mmx_vfilter
=
0
;
c
->
use_mmx_vfilter
=
0
;
if
(
!
is16BPS
(
dstFormat
)
&&
!
isNBPS
(
dstFormat
)
&&
dstFormat
!=
AV_PIX_FMT_NV12
if
(
!
is16BPS
(
dstFormat
)
&&
!
isNBPS
(
dstFormat
)
&&
dstFormat
!=
AV_PIX_FMT_NV12
&&
dstFormat
!=
AV_PIX_FMT_NV21
&&
!
(
c
->
flags
&
SWS_BITEXACT
))
{
&&
dstFormat
!=
AV_PIX_FMT_NV21
&&
dstFormat
!=
AV_PIX_FMT_GRAYF32BE
&&
dstFormat
!=
AV_PIX_FMT_GRAYF32LE
&&
!
(
c
->
flags
&
SWS_BITEXACT
))
{
if
(
c
->
flags
&
SWS_ACCURATE_RND
)
{
if
(
c
->
flags
&
SWS_ACCURATE_RND
)
{
if
(
!
(
c
->
flags
&
SWS_FULL_CHR_H_INT
))
{
if
(
!
(
c
->
flags
&
SWS_FULL_CHR_H_INT
))
{
switch
(
c
->
dstFormat
)
{
switch
(
c
->
dstFormat
)
{
...
...
tests/ref/fate/filter-pixdesc-grayf32be
0 → 100644
View file @
582bc5a3
pixdesc-grayf32be 381c8d0f19d286809b91cd6e6c0048ab
tests/ref/fate/filter-pixdesc-grayf32le
0 → 100644
View file @
582bc5a3
pixdesc-grayf32le 381c8d0f19d286809b91cd6e6c0048ab
tests/ref/fate/filter-pixfmts-copy
View file @
582bc5a3
...
@@ -47,6 +47,8 @@ gray16be 08d997a3faa25a3db9d6be272d282eef
...
@@ -47,6 +47,8 @@ gray16be 08d997a3faa25a3db9d6be272d282eef
gray16le df65eb804360795e3e38a2701fa9641a
gray16le df65eb804360795e3e38a2701fa9641a
gray9be 6382a14594a8b68f0ec7de25531f9334
gray9be 6382a14594a8b68f0ec7de25531f9334
gray9le 4eb1dda58706436e3b69aef29b0089db
gray9le 4eb1dda58706436e3b69aef29b0089db
grayf32be f3bf178835f8146aa09d1da94bba4d8a
grayf32le fb6ea85bfbc8cd21c51fc0e110197294
monob 8b04f859fee6a0be856be184acd7a0b5
monob 8b04f859fee6a0be856be184acd7a0b5
monow 54d16d2c01abfd72ecdb5e51e283937c
monow 54d16d2c01abfd72ecdb5e51e283937c
nv12 8e24feb2c544dc26a20047a71e4c27aa
nv12 8e24feb2c544dc26a20047a71e4c27aa
...
...
tests/ref/fate/filter-pixfmts-crop
View file @
582bc5a3
...
@@ -47,6 +47,8 @@ gray16be 38f599da990224de86e3dc7a543121a9
...
@@ -47,6 +47,8 @@ gray16be 38f599da990224de86e3dc7a543121a9
gray16le 9ff7c866bd98def4e6c91542c1c45f80
gray16le 9ff7c866bd98def4e6c91542c1c45f80
gray9be 8ffcb18d699480f55414bfc21ab33321
gray9be 8ffcb18d699480f55414bfc21ab33321
gray9le 4d1932d4968a248584f5e39c25f1dd43
gray9le 4d1932d4968a248584f5e39c25f1dd43
grayf32be cf40ec06a8abe54852b7f85a00549eec
grayf32le b672526c9da9c8959ab881f242f6890a
nv12 92cda427f794374731ec0321ee00caac
nv12 92cda427f794374731ec0321ee00caac
nv21 1bcfc197f4fb95de85ba58182d8d2f69
nv21 1bcfc197f4fb95de85ba58182d8d2f69
p010be 8b2de2eb6b099bbf355bfc55a0694ddc
p010be 8b2de2eb6b099bbf355bfc55a0694ddc
...
...
tests/ref/fate/filter-pixfmts-field
View file @
582bc5a3
...
@@ -47,6 +47,8 @@ gray16be e1700e056de9917744a7ff4ab2ca63fd
...
@@ -47,6 +47,8 @@ gray16be e1700e056de9917744a7ff4ab2ca63fd
gray16le 338de7ac5f7d36d5ad5ac2c8d5bbea68
gray16le 338de7ac5f7d36d5ad5ac2c8d5bbea68
gray9be 25e50940fa300a8f09edfb6eba4fd250
gray9be 25e50940fa300a8f09edfb6eba4fd250
gray9le 1146cfc1b92bfd07ed238e65ffcd134f
gray9le 1146cfc1b92bfd07ed238e65ffcd134f
grayf32be 72fbfa47b2863658a8a80d588f23b3e7
grayf32le 6b856bdbf2a2bfcd2bc7d50f109daaf0
monob 2129cc72a484d7e10a44de9117aa9f80
monob 2129cc72a484d7e10a44de9117aa9f80
monow 03d783611d265cae78293f88ea126ea1
monow 03d783611d265cae78293f88ea126ea1
nv12 16f7a46708ef25ebd0b72e47920cc11e
nv12 16f7a46708ef25ebd0b72e47920cc11e
...
...
tests/ref/fate/filter-pixfmts-fieldorder
View file @
582bc5a3
...
@@ -47,6 +47,8 @@ gray16be 293a36548ce16543494790f8f7f76a05
...
@@ -47,6 +47,8 @@ gray16be 293a36548ce16543494790f8f7f76a05
gray16le 84f83f5fcbb5d458efb8395a50a3797e
gray16le 84f83f5fcbb5d458efb8395a50a3797e
gray9be ec877f5bcf0ea275a6f36c12cc9adf11
gray9be ec877f5bcf0ea275a6f36c12cc9adf11
gray9le fba944fde7923d5089f4f52d12988b9e
gray9le fba944fde7923d5089f4f52d12988b9e
grayf32be 1aa7960131f880c54fe3c77f13448674
grayf32le 4029ac9d197f255794c1b9e416520fc7
rgb0 2e3d8c91c7a83d451593dfd06607ff39
rgb0 2e3d8c91c7a83d451593dfd06607ff39
rgb24 b82577f8215d3dc2681be60f1da247af
rgb24 b82577f8215d3dc2681be60f1da247af
rgb444be 1c3afc3a0c53c51139c76504f59bb1f4
rgb444be 1c3afc3a0c53c51139c76504f59bb1f4
...
...
tests/ref/fate/filter-pixfmts-hflip
View file @
582bc5a3
...
@@ -47,6 +47,8 @@ gray16be cf7294d9aa23e1b838692ec01ade587b
...
@@ -47,6 +47,8 @@ gray16be cf7294d9aa23e1b838692ec01ade587b
gray16le d91ce41e304419bcf32ac792f01bd64f
gray16le d91ce41e304419bcf32ac792f01bd64f
gray9be ac8d260669479ae720a5b6d4d8639e34
gray9be ac8d260669479ae720a5b6d4d8639e34
gray9le 424fc581947bc8c357c9ec5e3c1c04d1
gray9le 424fc581947bc8c357c9ec5e3c1c04d1
grayf32be a69add7bbf892a71fe81b3b75982dbe2
grayf32le 4563e176a35dc8a8a07e0829fad5eb88
nv12 801e58f1be5fd0b5bc4bf007c604b0b4
nv12 801e58f1be5fd0b5bc4bf007c604b0b4
nv21 9f10dfff8963dc327d3395af21f0554f
nv21 9f10dfff8963dc327d3395af21f0554f
p010be 744b13e44d39e1ff7588983fa03e0101
p010be 744b13e44d39e1ff7588983fa03e0101
...
...
tests/ref/fate/filter-pixfmts-il
View file @
582bc5a3
...
@@ -47,6 +47,8 @@ gray16be 92c3b09f371b610cc1b6a9776034f4d0
...
@@ -47,6 +47,8 @@ gray16be 92c3b09f371b610cc1b6a9776034f4d0
gray16le 1db278d23a554e01910cedacc6c02521
gray16le 1db278d23a554e01910cedacc6c02521
gray9be ed7db5bb2ddc09bc26068c8b858db204
gray9be ed7db5bb2ddc09bc26068c8b858db204
gray9le 2ec9188f0dcfefef76a09f371d7beb8e
gray9le 2ec9188f0dcfefef76a09f371d7beb8e
grayf32be f36197c9e2ef5c50a995e980c1a37203
grayf32le 8bf3d295c3ffd53da0e06d0702e7c1ca
monob faba75df28033ba7ce3d82ff2a99ee68
monob faba75df28033ba7ce3d82ff2a99ee68
monow 6e9cfb8d3a344c5f0c3e1d5e1297e580
monow 6e9cfb8d3a344c5f0c3e1d5e1297e580
nv12 3c3ba9b1b4c4dfff09c26f71b51dd146
nv12 3c3ba9b1b4c4dfff09c26f71b51dd146
...
...
tests/ref/fate/filter-pixfmts-null
View file @
582bc5a3
...
@@ -47,6 +47,8 @@ gray16be 08d997a3faa25a3db9d6be272d282eef
...
@@ -47,6 +47,8 @@ gray16be 08d997a3faa25a3db9d6be272d282eef
gray16le df65eb804360795e3e38a2701fa9641a
gray16le df65eb804360795e3e38a2701fa9641a
gray9be 6382a14594a8b68f0ec7de25531f9334
gray9be 6382a14594a8b68f0ec7de25531f9334
gray9le 4eb1dda58706436e3b69aef29b0089db
gray9le 4eb1dda58706436e3b69aef29b0089db
grayf32be f3bf178835f8146aa09d1da94bba4d8a
grayf32le fb6ea85bfbc8cd21c51fc0e110197294
monob 8b04f859fee6a0be856be184acd7a0b5
monob 8b04f859fee6a0be856be184acd7a0b5
monow 54d16d2c01abfd72ecdb5e51e283937c
monow 54d16d2c01abfd72ecdb5e51e283937c
nv12 8e24feb2c544dc26a20047a71e4c27aa
nv12 8e24feb2c544dc26a20047a71e4c27aa
...
...
tests/ref/fate/filter-pixfmts-scale
View file @
582bc5a3
...
@@ -47,6 +47,8 @@ gray16be 32891cb0928b1119d8d43a6e1bef0e2b
...
@@ -47,6 +47,8 @@ gray16be 32891cb0928b1119d8d43a6e1bef0e2b
gray16le f96cfb5652b090dad52615930f0ce65f
gray16le f96cfb5652b090dad52615930f0ce65f
gray9be 779dec0c6c2df008128b91622a20daf8
gray9be 779dec0c6c2df008128b91622a20daf8
gray9le fa87a96ca275f82260358635f838b514
gray9le fa87a96ca275f82260358635f838b514
grayf32be 5e4c715519f53c15f1345df90481e5f5
grayf32le 2ff1b84023e820307b1ba7a9550115bc
monob f01cb0b623357387827902d9d0963435
monob f01cb0b623357387827902d9d0963435
monow 35c68b86c226d6990b2dcb573a05ff6b
monow 35c68b86c226d6990b2dcb573a05ff6b
nv12 b118d24a3653fe66e5d9e079033aef79
nv12 b118d24a3653fe66e5d9e079033aef79
...
...
tests/ref/fate/filter-pixfmts-transpose
View file @
582bc5a3
...
@@ -47,6 +47,8 @@ gray16be 4aef307021a91b1de67f1d4381a39132
...
@@ -47,6 +47,8 @@ gray16be 4aef307021a91b1de67f1d4381a39132
gray16le 76f2afe156edca7ae05cfa4e5867126e
gray16le 76f2afe156edca7ae05cfa4e5867126e
gray9be 2c425fa532c940d226822da8b3592310
gray9be 2c425fa532c940d226822da8b3592310
gray9le bcc575942910b3c72eaa72e8794f3acd
gray9le bcc575942910b3c72eaa72e8794f3acd
grayf32be 823288e1ec497bb1f22c070e502e5272
grayf32le 6e9ec0e1cac3617f3041e681afd2c575
nv12 1965e3826144686748f2f6b516fca5ba
nv12 1965e3826144686748f2f6b516fca5ba
nv21 292adaf5271c5c8516b71640458c01f4
nv21 292adaf5271c5c8516b71640458c01f4
p010be ad0de2cc9bff81688b182a870fcf7000
p010be ad0de2cc9bff81688b182a870fcf7000
...
...
tests/ref/fate/filter-pixfmts-vflip
View file @
582bc5a3
...
@@ -47,6 +47,8 @@ gray16be 29f24ba7cb0fc4fd2ae78963d008f6e6
...
@@ -47,6 +47,8 @@ gray16be 29f24ba7cb0fc4fd2ae78963d008f6e6
gray16le a37e9c4ea76e8eeddc2af8f600ba2c10
gray16le a37e9c4ea76e8eeddc2af8f600ba2c10
gray9be dda11d4ffd62b414012ffc4667fb4971
gray9be dda11d4ffd62b414012ffc4667fb4971
gray9le 159bf6482d217b2b8276eb2216cd7a09
gray9le 159bf6482d217b2b8276eb2216cd7a09
grayf32be c1ba5943a0d24d70e6a280f37e4f4593
grayf32le 8e6c048a5b3b8b26d3a5ddfce255f3f6
monob 7810c4857822ccfc844d78f5e803269a
monob 7810c4857822ccfc844d78f5e803269a
monow 90a947bfcd5f2261e83b577f48ec57b1
monow 90a947bfcd5f2261e83b577f48ec57b1
nv12 261ebe585ae2aa4e70d39a10c1679294
nv12 261ebe585ae2aa4e70d39a10c1679294
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment