mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-13 21:28:01 +02:00
swscale: make access to filter data conditional on filter type.
Prevents crashes on 1-tap filter (unscaled). Also rename "bguf" argument to "vbuf", seems that was a typo.
This commit is contained in:
parent
a95e3fa90b
commit
1bab6f852c
@ -1088,14 +1088,15 @@ static void RENAME(yuv2yuyv422_2)(SwsContext *c, const int16_t *buf[2],
|
|||||||
* YV12 to RGB without scaling or interpolating
|
* YV12 to RGB without scaling or interpolating
|
||||||
*/
|
*/
|
||||||
static void RENAME(yuv2rgb32_1)(SwsContext *c, const int16_t *buf0,
|
static void RENAME(yuv2rgb32_1)(SwsContext *c, const int16_t *buf0,
|
||||||
const int16_t *ubuf[2], const int16_t *bguf[2],
|
const int16_t *ubuf[2], const int16_t *vbuf[2],
|
||||||
const int16_t *abuf0, uint8_t *dest,
|
const int16_t *abuf0, uint8_t *dest,
|
||||||
int dstW, int uvalpha, int y)
|
int dstW, int uvalpha, int y)
|
||||||
{
|
{
|
||||||
const int16_t *ubuf0 = ubuf[0], *ubuf1 = ubuf[1];
|
const int16_t *ubuf0 = ubuf[0];
|
||||||
const int16_t *buf1= buf0; //FIXME needed for RGB1/BGR1
|
const int16_t *buf1= buf0; //FIXME needed for RGB1/BGR1
|
||||||
|
|
||||||
if (uvalpha < 2048) { // note this is not correct (shifts chrominance by 0.5 pixels) but it is a bit faster
|
if (uvalpha < 2048) { // note this is not correct (shifts chrominance by 0.5 pixels) but it is a bit faster
|
||||||
|
const int16_t *ubuf1 = ubuf[0];
|
||||||
if (CONFIG_SWSCALE_ALPHA && c->alpPixBuf) {
|
if (CONFIG_SWSCALE_ALPHA && c->alpPixBuf) {
|
||||||
__asm__ volatile(
|
__asm__ volatile(
|
||||||
"mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
|
"mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
|
||||||
@ -1124,6 +1125,7 @@ static void RENAME(yuv2rgb32_1)(SwsContext *c, const int16_t *buf0,
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
const int16_t *ubuf1 = ubuf[1];
|
||||||
if (CONFIG_SWSCALE_ALPHA && c->alpPixBuf) {
|
if (CONFIG_SWSCALE_ALPHA && c->alpPixBuf) {
|
||||||
__asm__ volatile(
|
__asm__ volatile(
|
||||||
"mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
|
"mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
|
||||||
@ -1155,14 +1157,15 @@ static void RENAME(yuv2rgb32_1)(SwsContext *c, const int16_t *buf0,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void RENAME(yuv2bgr24_1)(SwsContext *c, const int16_t *buf0,
|
static void RENAME(yuv2bgr24_1)(SwsContext *c, const int16_t *buf0,
|
||||||
const int16_t *ubuf[2], const int16_t *bguf[2],
|
const int16_t *ubuf[2], const int16_t *vbuf[2],
|
||||||
const int16_t *abuf0, uint8_t *dest,
|
const int16_t *abuf0, uint8_t *dest,
|
||||||
int dstW, int uvalpha, int y)
|
int dstW, int uvalpha, int y)
|
||||||
{
|
{
|
||||||
const int16_t *ubuf0 = ubuf[0], *ubuf1 = ubuf[1];
|
const int16_t *ubuf0 = ubuf[0];
|
||||||
const int16_t *buf1= buf0; //FIXME needed for RGB1/BGR1
|
const int16_t *buf1= buf0; //FIXME needed for RGB1/BGR1
|
||||||
|
|
||||||
if (uvalpha < 2048) { // note this is not correct (shifts chrominance by 0.5 pixels) but it is a bit faster
|
if (uvalpha < 2048) { // note this is not correct (shifts chrominance by 0.5 pixels) but it is a bit faster
|
||||||
|
const int16_t *ubuf1 = ubuf[0];
|
||||||
__asm__ volatile(
|
__asm__ volatile(
|
||||||
"mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
|
"mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
|
||||||
"mov %4, %%"REG_b" \n\t"
|
"mov %4, %%"REG_b" \n\t"
|
||||||
@ -1176,6 +1179,7 @@ static void RENAME(yuv2bgr24_1)(SwsContext *c, const int16_t *buf0,
|
|||||||
"a" (&c->redDither)
|
"a" (&c->redDither)
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
|
const int16_t *ubuf1 = ubuf[1];
|
||||||
__asm__ volatile(
|
__asm__ volatile(
|
||||||
"mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
|
"mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
|
||||||
"mov %4, %%"REG_b" \n\t"
|
"mov %4, %%"REG_b" \n\t"
|
||||||
@ -1192,14 +1196,15 @@ static void RENAME(yuv2bgr24_1)(SwsContext *c, const int16_t *buf0,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void RENAME(yuv2rgb555_1)(SwsContext *c, const int16_t *buf0,
|
static void RENAME(yuv2rgb555_1)(SwsContext *c, const int16_t *buf0,
|
||||||
const int16_t *ubuf[2], const int16_t *bguf[2],
|
const int16_t *ubuf[2], const int16_t *vbuf[2],
|
||||||
const int16_t *abuf0, uint8_t *dest,
|
const int16_t *abuf0, uint8_t *dest,
|
||||||
int dstW, int uvalpha, int y)
|
int dstW, int uvalpha, int y)
|
||||||
{
|
{
|
||||||
const int16_t *ubuf0 = ubuf[0], *ubuf1 = ubuf[1];
|
const int16_t *ubuf0 = ubuf[0];
|
||||||
const int16_t *buf1= buf0; //FIXME needed for RGB1/BGR1
|
const int16_t *buf1= buf0; //FIXME needed for RGB1/BGR1
|
||||||
|
|
||||||
if (uvalpha < 2048) { // note this is not correct (shifts chrominance by 0.5 pixels) but it is a bit faster
|
if (uvalpha < 2048) { // note this is not correct (shifts chrominance by 0.5 pixels) but it is a bit faster
|
||||||
|
const int16_t *ubuf1 = ubuf[0];
|
||||||
__asm__ volatile(
|
__asm__ volatile(
|
||||||
"mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
|
"mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
|
||||||
"mov %4, %%"REG_b" \n\t"
|
"mov %4, %%"REG_b" \n\t"
|
||||||
@ -1219,6 +1224,7 @@ static void RENAME(yuv2rgb555_1)(SwsContext *c, const int16_t *buf0,
|
|||||||
"a" (&c->redDither)
|
"a" (&c->redDither)
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
|
const int16_t *ubuf1 = ubuf[1];
|
||||||
__asm__ volatile(
|
__asm__ volatile(
|
||||||
"mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
|
"mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
|
||||||
"mov %4, %%"REG_b" \n\t"
|
"mov %4, %%"REG_b" \n\t"
|
||||||
@ -1241,14 +1247,15 @@ static void RENAME(yuv2rgb555_1)(SwsContext *c, const int16_t *buf0,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void RENAME(yuv2rgb565_1)(SwsContext *c, const int16_t *buf0,
|
static void RENAME(yuv2rgb565_1)(SwsContext *c, const int16_t *buf0,
|
||||||
const int16_t *ubuf[2], const int16_t *bguf[2],
|
const int16_t *ubuf[2], const int16_t *vbuf[2],
|
||||||
const int16_t *abuf0, uint8_t *dest,
|
const int16_t *abuf0, uint8_t *dest,
|
||||||
int dstW, int uvalpha, int y)
|
int dstW, int uvalpha, int y)
|
||||||
{
|
{
|
||||||
const int16_t *ubuf0 = ubuf[0], *ubuf1 = ubuf[1];
|
const int16_t *ubuf0 = ubuf[0];
|
||||||
const int16_t *buf1= buf0; //FIXME needed for RGB1/BGR1
|
const int16_t *buf1= buf0; //FIXME needed for RGB1/BGR1
|
||||||
|
|
||||||
if (uvalpha < 2048) { // note this is not correct (shifts chrominance by 0.5 pixels) but it is a bit faster
|
if (uvalpha < 2048) { // note this is not correct (shifts chrominance by 0.5 pixels) but it is a bit faster
|
||||||
|
const int16_t *ubuf1 = ubuf[0];
|
||||||
__asm__ volatile(
|
__asm__ volatile(
|
||||||
"mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
|
"mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
|
||||||
"mov %4, %%"REG_b" \n\t"
|
"mov %4, %%"REG_b" \n\t"
|
||||||
@ -1268,6 +1275,7 @@ static void RENAME(yuv2rgb565_1)(SwsContext *c, const int16_t *buf0,
|
|||||||
"a" (&c->redDither)
|
"a" (&c->redDither)
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
|
const int16_t *ubuf1 = ubuf[1];
|
||||||
__asm__ volatile(
|
__asm__ volatile(
|
||||||
"mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
|
"mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
|
||||||
"mov %4, %%"REG_b" \n\t"
|
"mov %4, %%"REG_b" \n\t"
|
||||||
@ -1327,14 +1335,15 @@ static void RENAME(yuv2rgb565_1)(SwsContext *c, const int16_t *buf0,
|
|||||||
#define YSCALEYUV2PACKED1b(index, c) REAL_YSCALEYUV2PACKED1b(index, c)
|
#define YSCALEYUV2PACKED1b(index, c) REAL_YSCALEYUV2PACKED1b(index, c)
|
||||||
|
|
||||||
static void RENAME(yuv2yuyv422_1)(SwsContext *c, const int16_t *buf0,
|
static void RENAME(yuv2yuyv422_1)(SwsContext *c, const int16_t *buf0,
|
||||||
const int16_t *ubuf[2], const int16_t *bguf[2],
|
const int16_t *ubuf[2], const int16_t *vbuf[2],
|
||||||
const int16_t *abuf0, uint8_t *dest,
|
const int16_t *abuf0, uint8_t *dest,
|
||||||
int dstW, int uvalpha, int y)
|
int dstW, int uvalpha, int y)
|
||||||
{
|
{
|
||||||
const int16_t *ubuf0 = ubuf[0], *ubuf1 = ubuf[1];
|
const int16_t *ubuf0 = ubuf[0];
|
||||||
const int16_t *buf1= buf0; //FIXME needed for RGB1/BGR1
|
const int16_t *buf1= buf0; //FIXME needed for RGB1/BGR1
|
||||||
|
|
||||||
if (uvalpha < 2048) { // note this is not correct (shifts chrominance by 0.5 pixels) but it is a bit faster
|
if (uvalpha < 2048) { // note this is not correct (shifts chrominance by 0.5 pixels) but it is a bit faster
|
||||||
|
const int16_t *ubuf1 = ubuf[0];
|
||||||
__asm__ volatile(
|
__asm__ volatile(
|
||||||
"mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
|
"mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
|
||||||
"mov %4, %%"REG_b" \n\t"
|
"mov %4, %%"REG_b" \n\t"
|
||||||
@ -1347,6 +1356,7 @@ static void RENAME(yuv2yuyv422_1)(SwsContext *c, const int16_t *buf0,
|
|||||||
"a" (&c->redDither)
|
"a" (&c->redDither)
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
|
const int16_t *ubuf1 = ubuf[1];
|
||||||
__asm__ volatile(
|
__asm__ volatile(
|
||||||
"mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
|
"mov %%"REG_b", "ESP_OFFSET"(%5) \n\t"
|
||||||
"mov %4, %%"REG_b" \n\t"
|
"mov %4, %%"REG_b" \n\t"
|
||||||
|
Loading…
Reference in New Issue
Block a user