さきゅばす/いんきゅばす用libav(実験的)
Revision | 0af8a71d66305874bd6f0ebc84ebf99339b6a5d3 (tree) |
---|---|
Zeit | 2011-06-14 22:46:49 |
Autor | Michael Niedermayer <michaelni@gmx....> |
Commiter | Ronald S. Bultje |
swscale: fix JPEG-range YUV scaling artifacts.
YUV planes were marked as uint16_t, but they contained signed data.
Fixes issue 1108 and 675.
Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>
@@ -1701,7 +1701,7 @@ static void hScale_c(int16_t *dst, int dstW, const uint8_t *src, | ||
1701 | 1701 | |
1702 | 1702 | //FIXME all pal and rgb srcFormats could do this convertion as well |
1703 | 1703 | //FIXME all scalers more complex than bilinear could do half of this transform |
1704 | -static void chrRangeToJpeg_c(uint16_t *dstU, uint16_t *dstV, int width) | |
1704 | +static void chrRangeToJpeg_c(int16_t *dstU, int16_t *dstV, int width) | |
1705 | 1705 | { |
1706 | 1706 | int i; |
1707 | 1707 | for (i = 0; i < width; i++) { |
@@ -1709,7 +1709,7 @@ static void chrRangeToJpeg_c(uint16_t *dstU, uint16_t *dstV, int width) | ||
1709 | 1709 | dstV[i] = (FFMIN(dstV[i],30775)*4663 - 9289992)>>12; //-264 |
1710 | 1710 | } |
1711 | 1711 | } |
1712 | -static void chrRangeFromJpeg_c(uint16_t *dstU, uint16_t *dstV, int width) | |
1712 | +static void chrRangeFromJpeg_c(int16_t *dstU, int16_t *dstV, int width) | |
1713 | 1713 | { |
1714 | 1714 | int i; |
1715 | 1715 | for (i = 0; i < width; i++) { |
@@ -1717,13 +1717,13 @@ static void chrRangeFromJpeg_c(uint16_t *dstU, uint16_t *dstV, int width) | ||
1717 | 1717 | dstV[i] = (dstV[i]*1799 + 4081085)>>11; //1469 |
1718 | 1718 | } |
1719 | 1719 | } |
1720 | -static void lumRangeToJpeg_c(uint16_t *dst, int width) | |
1720 | +static void lumRangeToJpeg_c(int16_t *dst, int width) | |
1721 | 1721 | { |
1722 | 1722 | int i; |
1723 | 1723 | for (i = 0; i < width; i++) |
1724 | 1724 | dst[i] = (FFMIN(dst[i],30189)*19077 - 39057361)>>14; |
1725 | 1725 | } |
1726 | -static void lumRangeFromJpeg_c(uint16_t *dst, int width) | |
1726 | +static void lumRangeFromJpeg_c(int16_t *dst, int width) | |
1727 | 1727 | { |
1728 | 1728 | int i; |
1729 | 1729 | for (i = 0; i < width; i++) |
@@ -1752,7 +1752,7 @@ static av_always_inline void hyscale(SwsContext *c, uint16_t *dst, int dstWidth, | ||
1752 | 1752 | uint32_t *pal, int isAlpha) |
1753 | 1753 | { |
1754 | 1754 | void (*toYV12)(uint8_t *, const uint8_t *, int, uint32_t *) = isAlpha ? c->alpToYV12 : c->lumToYV12; |
1755 | - void (*convertRange)(uint16_t *, int) = isAlpha ? NULL : c->lumConvertRange; | |
1755 | + void (*convertRange)(int16_t *, int) = isAlpha ? NULL : c->lumConvertRange; | |
1756 | 1756 | |
1757 | 1757 | if (toYV12) { |
1758 | 1758 | toYV12(formatConvBuffer, src, srcW, pal); |
@@ -310,8 +310,8 @@ typedef struct SwsContext { | ||
310 | 310 | int xInc, const int16_t *filter, const int16_t *filterPos, |
311 | 311 | int filterSize); |
312 | 312 | |
313 | - void (*lumConvertRange)(uint16_t *dst, int width); ///< Color range conversion function for luma plane if needed. | |
314 | - void (*chrConvertRange)(uint16_t *dst1, uint16_t *dst2, int width); ///< Color range conversion function for chroma planes if needed. | |
313 | + void (*lumConvertRange)(int16_t *dst, int width); ///< Color range conversion function for luma plane if needed. | |
314 | + void (*chrConvertRange)(int16_t *dst1, int16_t *dst2, int width); ///< Color range conversion function for chroma planes if needed. | |
315 | 315 | |
316 | 316 | int needs_hcscale; ///< Set if there are chroma planes to be converted. |
317 | 317 |
@@ -10,9 +10,9 @@ ac68f9fdd9d55efd0306d9b004038761 *./tests/data/pixfmt/yuyv422.yuv | ||
10 | 10 | 304128 ./tests/data/pixfmt/yuv410p.yuv |
11 | 11 | 8594ea0b8d7c2c964525b0801b5351de *./tests/data/pixfmt/yuv411p.yuv |
12 | 12 | 304128 ./tests/data/pixfmt/yuv411p.yuv |
13 | -66673539adf8cda28e3b76068d3aae61 *./tests/data/pixfmt/yuvj420p.yuv | |
13 | +e176bd14185788110e055f945de7f95f *./tests/data/pixfmt/yuvj420p.yuv | |
14 | 14 | 304128 ./tests/data/pixfmt/yuvj420p.yuv |
15 | -572bf387dd1e3f073cbfd082e055ca81 *./tests/data/pixfmt/yuvj422p.yuv | |
15 | +472028e46a81c98d9b2477507def4723 *./tests/data/pixfmt/yuvj422p.yuv | |
16 | 16 | 304128 ./tests/data/pixfmt/yuvj422p.yuv |
17 | 17 | c10442da177c9f1d12be3c53be6fa12c *./tests/data/pixfmt/yuvj444p.yuv |
18 | 18 | 304128 ./tests/data/pixfmt/yuvj444p.yuv |
@@ -43,6 +43,6 @@ yuv444p16le 1262a0dc57ee147967fc896d04206313 | ||
43 | 43 | yuva420p a29884f3f3dfe1e00b961bc17bef3d47 |
44 | 44 | yuvj420p 32eec78ba51857b16ce9b813a49b7189 |
45 | 45 | yuvj422p 0dfa0ed434f73be51428758c69e082cb |
46 | -yuvj440p 9c3a093ff64a83ac4cf0b1e65390e236 | |
47 | -yuvj444p ede1e5882d5c5bba48ea33cf1209d231 | |
46 | +yuvj440p 657501a28004e27a592757a7509f5189 | |
47 | +yuvj444p 98d3d054f2ec09a75eeed5d328dc75b7 | |
48 | 48 | yuyv422 f2569f2b5069a0ee0cecae33de0455e3 |
@@ -43,6 +43,6 @@ yuv444p16le 1262a0dc57ee147967fc896d04206313 | ||
43 | 43 | yuva420p a29884f3f3dfe1e00b961bc17bef3d47 |
44 | 44 | yuvj420p 32eec78ba51857b16ce9b813a49b7189 |
45 | 45 | yuvj422p 0dfa0ed434f73be51428758c69e082cb |
46 | -yuvj440p 9c3a093ff64a83ac4cf0b1e65390e236 | |
47 | -yuvj444p ede1e5882d5c5bba48ea33cf1209d231 | |
46 | +yuvj440p 657501a28004e27a592757a7509f5189 | |
47 | +yuvj444p 98d3d054f2ec09a75eeed5d328dc75b7 | |
48 | 48 | yuyv422 f2569f2b5069a0ee0cecae33de0455e3 |
@@ -43,6 +43,6 @@ yuv444p16le 1262a0dc57ee147967fc896d04206313 | ||
43 | 43 | yuva420p a29884f3f3dfe1e00b961bc17bef3d47 |
44 | 44 | yuvj420p 32eec78ba51857b16ce9b813a49b7189 |
45 | 45 | yuvj422p 0dfa0ed434f73be51428758c69e082cb |
46 | -yuvj440p 9c3a093ff64a83ac4cf0b1e65390e236 | |
47 | -yuvj444p ede1e5882d5c5bba48ea33cf1209d231 | |
46 | +yuvj440p 657501a28004e27a592757a7509f5189 | |
47 | +yuvj444p 98d3d054f2ec09a75eeed5d328dc75b7 | |
48 | 48 | yuyv422 f2569f2b5069a0ee0cecae33de0455e3 |
@@ -34,5 +34,5 @@ yuv444p16le 70793e3d66d0c23a0cdedabe9c24c2a7 | ||
34 | 34 | yuva420p d83ec0c01498189f179ec574918185f1 |
35 | 35 | yuvj420p df3aaaec3bb157c3bde5f0365af30f4f |
36 | 36 | yuvj422p d113871528d510a192797af59df9c05c |
37 | -yuvj440p e8f7ed76e57c892a1e9e27a3f29452db | |
38 | -yuvj444p 2c3ae369607608c6dcb0d830f00f971a | |
37 | +yuvj440p 07f5ff12ced85aba1b5cf51692fff4bb | |
38 | +yuvj444p 8d95f6b4d4c9b4b0389d36df686bfa46 |
@@ -43,6 +43,6 @@ yuv444p16le 1262a0dc57ee147967fc896d04206313 | ||
43 | 43 | yuva420p a29884f3f3dfe1e00b961bc17bef3d47 |
44 | 44 | yuvj420p 32eec78ba51857b16ce9b813a49b7189 |
45 | 45 | yuvj422p 0dfa0ed434f73be51428758c69e082cb |
46 | -yuvj440p 9c3a093ff64a83ac4cf0b1e65390e236 | |
47 | -yuvj444p ede1e5882d5c5bba48ea33cf1209d231 | |
46 | +yuvj440p 657501a28004e27a592757a7509f5189 | |
47 | +yuvj444p 98d3d054f2ec09a75eeed5d328dc75b7 | |
48 | 48 | yuyv422 f2569f2b5069a0ee0cecae33de0455e3 |
@@ -13,5 +13,5 @@ yuv444p 45484f0411d336ce94636da0395f4692 | ||
13 | 13 | yuva420p 919722724765dc3a716c38fa53b20580 |
14 | 14 | yuvj420p 4f20e2799966c21a9d9e0788b0956925 |
15 | 15 | yuvj422p e4d84b0683f77a76f1c17d976eff127c |
16 | -yuvj440p 9ccc1f03d8d9a00dc4a5888bd77093ad | |
17 | -yuvj444p 7d202babcedf836e9ae9776163ee9425 | |
16 | +yuvj440p 33511c43339aa32533ab832861c150c3 | |
17 | +yuvj444p 82f0badd9d0c062bbfa0d9d73d7240a3 |
@@ -43,6 +43,6 @@ yuv444p16le 385d0cc5240d62da0871915be5d86f0a | ||
43 | 43 | yuva420p 8673a9131fb47de69788863f93a50eb7 |
44 | 44 | yuvj420p 30427bd6caf5bda93a173dbebe759e09 |
45 | 45 | yuvj422p fc8288f64fd149573f73cf8da05d8e6d |
46 | -yuvj440p 26d0b4713a87ab9637a4062c22e6e70d | |
47 | -yuvj444p 894e6184d987a5ec4dc6f77bb75ef38c | |
46 | +yuvj440p 508ac7a9ddeb6d1794a1100ba7a1664c | |
47 | +yuvj444p 73aebe144085b22d1189caf6ca07e18c | |
48 | 48 | yuyv422 169e19ac91b257bd84ace0fdf56559ad |
@@ -43,6 +43,6 @@ yuv444p16le 8f31557bc52adfe00ae8b40a9b8c23f8 | ||
43 | 43 | yuva420p c705d1cf061d8c6580ac690b55f92276 |
44 | 44 | yuvj420p 41fd02b204da0ab62452cd14b595e2e4 |
45 | 45 | yuvj422p 7f6ca9bc1812cde02036d7d29a7cce43 |
46 | -yuvj440p 40591908cca457f51dee30a86c3e8ffd | |
47 | -yuvj444p 77e5e095881c52a04fd9f5abd1d7b5ac | |
46 | +yuvj440p 25711c3c0fd15ec19c59a10784fcfb96 | |
47 | +yuvj444p e45dee2ac02276dfab92e8ebfbe52e00 | |
48 | 48 | yuyv422 e944ff7316cd03c42c091717ce74f602 |