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
b9b1a2c3
Commit
b9b1a2c3
authored
Jul 14, 2013
by
clook
Committed by
Michael Niedermayer
Jul 22, 2013
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
libswscale: Adding RGB => XYZ support
parent
419a3d8a
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
95 additions
and
17 deletions
+95
-17
swscale.c
libswscale/swscale.c
+62
-0
swscale_internal.h
libswscale/swscale_internal.h
+3
-0
utils.c
libswscale/utils.c
+14
-3
filter-pixdesc
tests/ref/fate/filter-pixdesc
+2
-0
filter-pixfmts-copy
tests/ref/fate/filter-pixfmts-copy
+2
-2
filter-pixfmts-crop
tests/ref/fate/filter-pixfmts-crop
+2
-2
filter-pixfmts-field
tests/ref/fate/filter-pixfmts-field
+2
-2
filter-pixfmts-hflip
tests/ref/fate/filter-pixfmts-hflip
+2
-2
filter-pixfmts-il
tests/ref/fate/filter-pixfmts-il
+2
-2
filter-pixfmts-null
tests/ref/fate/filter-pixfmts-null
+2
-2
filter-pixfmts-scale
tests/ref/fate/filter-pixfmts-scale
+2
-2
No files found.
libswscale/swscale.c
View file @
b9b1a2c3
...
@@ -849,6 +849,62 @@ static void xyz12Torgb48(struct SwsContext *c, uint16_t *dst,
...
@@ -849,6 +849,62 @@ static void xyz12Torgb48(struct SwsContext *c, uint16_t *dst,
}
}
}
}
static
void
rgb48Toxyz12
(
struct
SwsContext
*
c
,
uint16_t
*
dst
,
const
uint16_t
*
src
,
int
stride
,
int
h
)
{
int
xp
,
yp
;
const
AVPixFmtDescriptor
*
desc
=
av_pix_fmt_desc_get
(
c
->
srcFormat
);
for
(
yp
=
0
;
yp
<
h
;
yp
++
)
{
for
(
xp
=
0
;
xp
+
2
<
stride
;
xp
+=
3
)
{
int
x
,
y
,
z
,
r
,
g
,
b
;
if
(
desc
->
flags
&
AV_PIX_FMT_FLAG_BE
)
{
r
=
AV_RB16
(
src
+
xp
+
0
);
g
=
AV_RB16
(
src
+
xp
+
1
);
b
=
AV_RB16
(
src
+
xp
+
2
);
}
else
{
r
=
AV_RL16
(
src
+
xp
+
0
);
g
=
AV_RL16
(
src
+
xp
+
1
);
b
=
AV_RL16
(
src
+
xp
+
2
);
}
r
=
c
->
rgbgammainv
[
r
>>
4
];
g
=
c
->
rgbgammainv
[
g
>>
4
];
b
=
c
->
rgbgammainv
[
b
>>
4
];
// convert from sRGBlinear to XYZlinear
x
=
c
->
rgb2xyz_matrix
[
0
][
0
]
*
r
+
c
->
rgb2xyz_matrix
[
0
][
1
]
*
g
+
c
->
rgb2xyz_matrix
[
0
][
2
]
*
b
>>
12
;
y
=
c
->
rgb2xyz_matrix
[
1
][
0
]
*
r
+
c
->
rgb2xyz_matrix
[
1
][
1
]
*
g
+
c
->
rgb2xyz_matrix
[
1
][
2
]
*
b
>>
12
;
z
=
c
->
rgb2xyz_matrix
[
2
][
0
]
*
r
+
c
->
rgb2xyz_matrix
[
2
][
1
]
*
g
+
c
->
rgb2xyz_matrix
[
2
][
2
]
*
b
>>
12
;
// limit values to 12-bit depth
x
=
av_clip_c
(
x
,
0
,
4095
);
y
=
av_clip_c
(
y
,
0
,
4095
);
z
=
av_clip_c
(
z
,
0
,
4095
);
// convert from XYZlinear to X'Y'Z' and scale from 12bit to 16bit
if
(
desc
->
flags
&
AV_PIX_FMT_FLAG_BE
)
{
AV_WB16
(
dst
+
xp
+
0
,
c
->
xyzgammainv
[
x
]
<<
4
);
AV_WB16
(
dst
+
xp
+
1
,
c
->
xyzgammainv
[
y
]
<<
4
);
AV_WB16
(
dst
+
xp
+
2
,
c
->
xyzgammainv
[
z
]
<<
4
);
}
else
{
AV_WL16
(
dst
+
xp
+
0
,
c
->
xyzgammainv
[
x
]
<<
4
);
AV_WL16
(
dst
+
xp
+
1
,
c
->
xyzgammainv
[
y
]
<<
4
);
AV_WL16
(
dst
+
xp
+
2
,
c
->
xyzgammainv
[
z
]
<<
4
);
}
}
src
+=
stride
;
dst
+=
stride
;
}
}
/**
/**
* swscale wrapper, so we don't need to export the SwsContext.
* swscale wrapper, so we don't need to export the SwsContext.
* Assumes planar YUV to be in YUV order instead of YVU.
* Assumes planar YUV to be in YUV order instead of YVU.
...
@@ -1045,6 +1101,12 @@ int attribute_align_arg sws_scale(struct SwsContext *c,
...
@@ -1045,6 +1101,12 @@ int attribute_align_arg sws_scale(struct SwsContext *c,
srcSliceH
,
dst2
,
dstStride2
);
srcSliceH
,
dst2
,
dstStride2
);
}
}
if
(
c
->
dstXYZ
&&
!
(
c
->
srcXYZ
&&
c
->
srcW
==
c
->
dstW
&&
c
->
srcH
==
c
->
dstH
))
{
/* replace on the same data */
rgb48Toxyz12
(
c
,
(
uint16_t
*
)
dst2
[
0
],
(
const
uint16_t
*
)
dst2
[
0
],
dstStride
[
0
]
/
2
,
ret
);
}
av_free
(
rgb0_tmp
);
av_free
(
rgb0_tmp
);
return
ret
;
return
ret
;
}
}
...
...
libswscale/swscale_internal.h
View file @
b9b1a2c3
...
@@ -484,7 +484,10 @@ typedef struct SwsContext {
...
@@ -484,7 +484,10 @@ typedef struct SwsContext {
#define RGB_GAMMA (2.2f)
#define RGB_GAMMA (2.2f)
int16_t
*
xyzgamma
;
int16_t
*
xyzgamma
;
int16_t
*
rgbgamma
;
int16_t
*
rgbgamma
;
int16_t
*
xyzgammainv
;
int16_t
*
rgbgammainv
;
int16_t
xyz2rgb_matrix
[
3
][
4
];
int16_t
xyz2rgb_matrix
[
3
][
4
];
int16_t
rgb2xyz_matrix
[
3
][
4
];
/* function pointers for swScale() */
/* function pointers for swScale() */
yuv2planar1_fn
yuv2plane1
;
yuv2planar1_fn
yuv2plane1
;
...
...
libswscale/utils.c
View file @
b9b1a2c3
...
@@ -201,8 +201,8 @@ static const FormatEntry format_entries[AV_PIX_FMT_NB] = {
...
@@ -201,8 +201,8 @@ static const FormatEntry format_entries[AV_PIX_FMT_NB] = {
[
AV_PIX_FMT_GBRP14BE
]
=
{
1
,
1
},
[
AV_PIX_FMT_GBRP14BE
]
=
{
1
,
1
},
[
AV_PIX_FMT_GBRP16LE
]
=
{
1
,
0
},
[
AV_PIX_FMT_GBRP16LE
]
=
{
1
,
0
},
[
AV_PIX_FMT_GBRP16BE
]
=
{
1
,
0
},
[
AV_PIX_FMT_GBRP16BE
]
=
{
1
,
0
},
[
AV_PIX_FMT_XYZ12BE
]
=
{
1
,
0
,
1
},
[
AV_PIX_FMT_XYZ12BE
]
=
{
1
,
1
,
1
},
[
AV_PIX_FMT_XYZ12LE
]
=
{
1
,
0
,
1
},
[
AV_PIX_FMT_XYZ12LE
]
=
{
1
,
1
,
1
},
[
AV_PIX_FMT_GBRAP
]
=
{
1
,
1
},
[
AV_PIX_FMT_GBRAP
]
=
{
1
,
1
},
[
AV_PIX_FMT_GBRAP16LE
]
=
{
1
,
0
},
[
AV_PIX_FMT_GBRAP16LE
]
=
{
1
,
0
},
[
AV_PIX_FMT_GBRAP16BE
]
=
{
1
,
0
},
[
AV_PIX_FMT_GBRAP16BE
]
=
{
1
,
0
},
...
@@ -924,15 +924,24 @@ static void fill_xyztables(struct SwsContext *c)
...
@@ -924,15 +924,24 @@ static void fill_xyztables(struct SwsContext *c)
int
i
;
int
i
;
double
xyzgamma
=
XYZ_GAMMA
;
double
xyzgamma
=
XYZ_GAMMA
;
double
rgbgamma
=
1
.
0
/
RGB_GAMMA
;
double
rgbgamma
=
1
.
0
/
RGB_GAMMA
;
double
xyzgammainv
=
1
.
0
/
XYZ_GAMMA
;
double
rgbgammainv
=
RGB_GAMMA
;
static
const
int16_t
xyz2rgb_matrix
[
3
][
4
]
=
{
static
const
int16_t
xyz2rgb_matrix
[
3
][
4
]
=
{
{
13270
,
-
6295
,
-
2041
},
{
13270
,
-
6295
,
-
2041
},
{
-
3969
,
7682
,
170
},
{
-
3969
,
7682
,
170
},
{
228
,
-
835
,
4329
}
};
{
228
,
-
835
,
4329
}
};
static
int16_t
xyzgamma_tab
[
4096
],
rgbgamma_tab
[
4096
];
static
const
int16_t
rgb2xyz_matrix
[
3
][
4
]
=
{
{
1689
,
1464
,
739
},
{
871
,
2929
,
296
},
{
79
,
488
,
3891
}
};
static
int16_t
xyzgamma_tab
[
4096
],
rgbgamma_tab
[
4096
],
xyzgammainv_tab
[
4096
],
rgbgammainv_tab
[
4096
];
memcpy
(
c
->
xyz2rgb_matrix
,
xyz2rgb_matrix
,
sizeof
(
c
->
xyz2rgb_matrix
));
memcpy
(
c
->
xyz2rgb_matrix
,
xyz2rgb_matrix
,
sizeof
(
c
->
xyz2rgb_matrix
));
memcpy
(
c
->
rgb2xyz_matrix
,
rgb2xyz_matrix
,
sizeof
(
c
->
rgb2xyz_matrix
));
c
->
xyzgamma
=
xyzgamma_tab
;
c
->
xyzgamma
=
xyzgamma_tab
;
c
->
rgbgamma
=
rgbgamma_tab
;
c
->
rgbgamma
=
rgbgamma_tab
;
c
->
xyzgammainv
=
xyzgammainv_tab
;
c
->
rgbgammainv
=
rgbgammainv_tab
;
if
(
rgbgamma_tab
[
4095
])
if
(
rgbgamma_tab
[
4095
])
return
;
return
;
...
@@ -941,6 +950,8 @@ static void fill_xyztables(struct SwsContext *c)
...
@@ -941,6 +950,8 @@ static void fill_xyztables(struct SwsContext *c)
for
(
i
=
0
;
i
<
4096
;
i
++
)
{
for
(
i
=
0
;
i
<
4096
;
i
++
)
{
xyzgamma_tab
[
i
]
=
lrint
(
pow
(
i
/
4095
.
0
,
xyzgamma
)
*
4095
.
0
);
xyzgamma_tab
[
i
]
=
lrint
(
pow
(
i
/
4095
.
0
,
xyzgamma
)
*
4095
.
0
);
rgbgamma_tab
[
i
]
=
lrint
(
pow
(
i
/
4095
.
0
,
rgbgamma
)
*
4095
.
0
);
rgbgamma_tab
[
i
]
=
lrint
(
pow
(
i
/
4095
.
0
,
rgbgamma
)
*
4095
.
0
);
xyzgammainv_tab
[
i
]
=
lrint
(
pow
(
i
/
4095
.
0
,
xyzgammainv
)
*
4095
.
0
);
rgbgammainv_tab
[
i
]
=
lrint
(
pow
(
i
/
4095
.
0
,
rgbgammainv
)
*
4095
.
0
);
}
}
}
}
...
...
tests/ref/fate/filter-pixdesc
View file @
b9b1a2c3
...
@@ -48,6 +48,8 @@ rgba 53796fa4c392a1b2659595b6a284f8c4
...
@@ -48,6 +48,8 @@ rgba 53796fa4c392a1b2659595b6a284f8c4
rgba64be c05fbb1ada1b48fb1eb192fc200af2b6
rgba64be c05fbb1ada1b48fb1eb192fc200af2b6
rgba64le 1b826cc613666f545274e8a7799d69f1
rgba64le 1b826cc613666f545274e8a7799d69f1
uyvy422 3f411f947e3ac8f842c88e717d68bd9a
uyvy422 3f411f947e3ac8f842c88e717d68bd9a
xyz12be 71f608adceed8e8997aa463203b1a648
xyz12le dc524e3726ba1df0d2f406db3a2c08aa
yuv410p 7dcf3f4770c8b494290ceacd2c2ce6db
yuv410p 7dcf3f4770c8b494290ceacd2c2ce6db
yuv411p 9461b188dab6f8b90d9a27e353a89f58
yuv411p 9461b188dab6f8b90d9a27e353a89f58
yuv420p 61fffd2d8425759a33ae07e718d0242d
yuv420p 61fffd2d8425759a33ae07e718d0242d
...
...
tests/ref/fate/filter-pixfmts-copy
View file @
b9b1a2c3
...
@@ -49,8 +49,8 @@ rgba 53796fa4c392a1b2659595b6a284f8c4
...
@@ -49,8 +49,8 @@ rgba 53796fa4c392a1b2659595b6a284f8c4
rgba64be c05fbb1ada1b48fb1eb192fc200af2b6
rgba64be c05fbb1ada1b48fb1eb192fc200af2b6
rgba64le 1b826cc613666f545274e8a7799d69f1
rgba64le 1b826cc613666f545274e8a7799d69f1
uyvy422 3f411f947e3ac8f842c88e717d68bd9a
uyvy422 3f411f947e3ac8f842c88e717d68bd9a
xyz12be
e1e6718ae1c83e904fbdf903d62e5808
xyz12be
b91ff224254afceb4a8f803d56eb52a1
xyz12le
24e8a22c1bd7d637edb731d10b7c54d0
xyz12le
dc524e3726ba1df0d2f406db3a2c08aa
yuv410p 7dcf3f4770c8b494290ceacd2c2ce6db
yuv410p 7dcf3f4770c8b494290ceacd2c2ce6db
yuv411p 9461b188dab6f8b90d9a27e353a89f58
yuv411p 9461b188dab6f8b90d9a27e353a89f58
yuv420p 61fffd2d8425759a33ae07e718d0242d
yuv420p 61fffd2d8425759a33ae07e718d0242d
...
...
tests/ref/fate/filter-pixfmts-crop
View file @
b9b1a2c3
...
@@ -46,8 +46,8 @@ rgb8 87cf541b110e35a6f9a983e9cde85e15
...
@@ -46,8 +46,8 @@ rgb8 87cf541b110e35a6f9a983e9cde85e15
rgba 7abe1af7b97f5b9a7aa5ad3e4bf32f76
rgba 7abe1af7b97f5b9a7aa5ad3e4bf32f76
rgba64be 2eed28b61af25790c02cc658e5f86b9b
rgba64be 2eed28b61af25790c02cc658e5f86b9b
rgba64le de8bc34c6d573488d87e87ce8c7ad07f
rgba64le de8bc34c6d573488d87e87ce8c7ad07f
xyz12be
1de64f52c6e2e7ff0b5da20c78910304
xyz12be
7ea4ce13143195dfe1ed340bc9e86b2f
xyz12le
f7b79cf87ad69dfc24056468e6dffaea
xyz12le
e4e86ef100e07cda561a22811f242e5d
yuv410p 126e0da1da4fd89be28087b8367bbb36
yuv410p 126e0da1da4fd89be28087b8367bbb36
yuv411p b94f0af107fc4796aca70c0a36d374c5
yuv411p b94f0af107fc4796aca70c0a36d374c5
yuv420p 74c6b331bd30f005e6c75a192423ad90
yuv420p 74c6b331bd30f005e6c75a192423ad90
...
...
tests/ref/fate/filter-pixfmts-field
View file @
b9b1a2c3
...
@@ -49,8 +49,8 @@ rgba d0ebdf1495bc6b7e9d3bfbe2813a9d16
...
@@ -49,8 +49,8 @@ rgba d0ebdf1495bc6b7e9d3bfbe2813a9d16
rgba64be 53363baf266592e0ac02b3f8242ec4fb
rgba64be 53363baf266592e0ac02b3f8242ec4fb
rgba64le a630eaa38545b2be741f000ab58451e5
rgba64le a630eaa38545b2be741f000ab58451e5
uyvy422 a6a52504a16f09b8f2ec2405bc8190b5
uyvy422 a6a52504a16f09b8f2ec2405bc8190b5
xyz12be
9d904fb640dd024e668acb9dc7b3f11f
xyz12be
33d0b7ef124a9e94d2d13a2cad1dfc00
xyz12le
7f93c7d2981f1976108e941afa1363f
8
xyz12le
bab6403abf58e69575900802ffef8f3
8
yuv410p 3feb55b1e2a385b488c82e808a12587b
yuv410p 3feb55b1e2a385b488c82e808a12587b
yuv411p ab3dd8e6cf1452afe2d2e976e4726370
yuv411p ab3dd8e6cf1452afe2d2e976e4726370
yuv420p 52e26ad198368e2326bef97cdfa6a2bb
yuv420p 52e26ad198368e2326bef97cdfa6a2bb
...
...
tests/ref/fate/filter-pixfmts-hflip
View file @
b9b1a2c3
...
@@ -46,8 +46,8 @@ rgb8 22fdbd14ce296c1afa9bb4a6ea09b3fe
...
@@ -46,8 +46,8 @@ rgb8 22fdbd14ce296c1afa9bb4a6ea09b3fe
rgba a37789c4df73c3bd8648ad1fe9d3f991
rgba a37789c4df73c3bd8648ad1fe9d3f991
rgba64be 286067334e4bca33fba7ebb1706890a2
rgba64be 286067334e4bca33fba7ebb1706890a2
rgba64le 2a8b3dd5045df299259636d8e6b62589
rgba64le 2a8b3dd5045df299259636d8e6b62589
xyz12be
4738d2cb5321376d5eed70930f47a953
xyz12be
079dac329f0d93df7a7e71b260f13dd9
xyz12le
51288f3440c8584406b332545d69c5a9
xyz12le
31c4f953548326b27920c5939bcf2cce
yuv410p a1280c2b9b562dba3c2d35a1e5fc4b23
yuv410p a1280c2b9b562dba3c2d35a1e5fc4b23
yuv411p 6bf10756ac5c7841db63a97106ff911b
yuv411p 6bf10756ac5c7841db63a97106ff911b
yuv420p 45f4a06481f2cd8e28fb29c7c151e110
yuv420p 45f4a06481f2cd8e28fb29c7c151e110
...
...
tests/ref/fate/filter-pixfmts-il
View file @
b9b1a2c3
...
@@ -48,8 +48,8 @@ rgba 8ca9c8db589615ebbaa964be4ce62d08
...
@@ -48,8 +48,8 @@ rgba 8ca9c8db589615ebbaa964be4ce62d08
rgba64be 576dfc2fd1937f9e594c4004fafd83f2
rgba64be 576dfc2fd1937f9e594c4004fafd83f2
rgba64le 7938eccc1f05f13710ec351767b47a36
rgba64le 7938eccc1f05f13710ec351767b47a36
uyvy422 8be40aded4b407ff66305911ba5ce2ce
uyvy422 8be40aded4b407ff66305911ba5ce2ce
xyz12be
1cbb1f72c6875934e66f50f499a62cc3
xyz12be
ba8a8152ca6e8b338e1dc5ace0a729b6
xyz12le
ba8c6eab49e58eace392ef0aeedbf677
xyz12le
1f20849dcf44539ce351346c73bdff1a
yuv410p 92112d85ba4f74cbd3044945c0f33402
yuv410p 92112d85ba4f74cbd3044945c0f33402
yuv411p b6b22000e5275c92baf5afc417c32a70
yuv411p b6b22000e5275c92baf5afc417c32a70
yuv420p fca7fbbff753612a718ee13e1dfe2af2
yuv420p fca7fbbff753612a718ee13e1dfe2af2
...
...
tests/ref/fate/filter-pixfmts-null
View file @
b9b1a2c3
...
@@ -49,8 +49,8 @@ rgba 53796fa4c392a1b2659595b6a284f8c4
...
@@ -49,8 +49,8 @@ rgba 53796fa4c392a1b2659595b6a284f8c4
rgba64be c05fbb1ada1b48fb1eb192fc200af2b6
rgba64be c05fbb1ada1b48fb1eb192fc200af2b6
rgba64le 1b826cc613666f545274e8a7799d69f1
rgba64le 1b826cc613666f545274e8a7799d69f1
uyvy422 3f411f947e3ac8f842c88e717d68bd9a
uyvy422 3f411f947e3ac8f842c88e717d68bd9a
xyz12be
e1e6718ae1c83e904fbdf903d62e5808
xyz12be
b91ff224254afceb4a8f803d56eb52a1
xyz12le
24e8a22c1bd7d637edb731d10b7c54d0
xyz12le
dc524e3726ba1df0d2f406db3a2c08aa
yuv410p 7dcf3f4770c8b494290ceacd2c2ce6db
yuv410p 7dcf3f4770c8b494290ceacd2c2ce6db
yuv411p 9461b188dab6f8b90d9a27e353a89f58
yuv411p 9461b188dab6f8b90d9a27e353a89f58
yuv420p 61fffd2d8425759a33ae07e718d0242d
yuv420p 61fffd2d8425759a33ae07e718d0242d
...
...
tests/ref/fate/filter-pixfmts-scale
View file @
b9b1a2c3
...
@@ -49,8 +49,8 @@ rgba de6a65b8c01bdad84e575202ca8b66a0
...
@@ -49,8 +49,8 @@ rgba de6a65b8c01bdad84e575202ca8b66a0
rgba64be 5ce6f591ac8be4edcf5c3350d2d2d3f5
rgba64be 5ce6f591ac8be4edcf5c3350d2d2d3f5
rgba64le 12baab5162019de2053db39a3bfca868
rgba64le 12baab5162019de2053db39a3bfca868
uyvy422 479105bc4c7fbb4a33ca8745aa8c2de8
uyvy422 479105bc4c7fbb4a33ca8745aa8c2de8
xyz12be
e9be06091b6dd0b67598eaf8bd86a78
e
xyz12be
6769a0b3b3b6d7a674542c8cd3e3644
e
xyz12le
05a9bbd16d81183ef3db04447648e3b
1
xyz12le
b4f967df71db5c38c222f9236c34103
1
yuv410p d0daa93f5cee83360e219e39563ab6da
yuv410p d0daa93f5cee83360e219e39563ab6da
yuv411p e5c8f3ca024a88dd07e0a92db3e2133d
yuv411p e5c8f3ca024a88dd07e0a92db3e2133d
yuv420p 485d9af8608f926ffffbf42230b4150d
yuv420p 485d9af8608f926ffffbf42230b4150d
...
...
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