mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-26 19:01:44 +02:00
sws: factorize v*Filter use
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
4d31f42020
commit
74fdb7a0f8
@ -2473,8 +2473,6 @@ static int swScale(SwsContext *c, const uint8_t* src[],
|
|||||||
int16_t *vChrFilterPos= c->vChrFilterPos;
|
int16_t *vChrFilterPos= c->vChrFilterPos;
|
||||||
int16_t *hLumFilterPos= c->hLumFilterPos;
|
int16_t *hLumFilterPos= c->hLumFilterPos;
|
||||||
int16_t *hChrFilterPos= c->hChrFilterPos;
|
int16_t *hChrFilterPos= c->hChrFilterPos;
|
||||||
int16_t *vLumFilter= c->vLumFilter;
|
|
||||||
int16_t *vChrFilter= c->vChrFilter;
|
|
||||||
int16_t *hLumFilter= c->hLumFilter;
|
int16_t *hLumFilter= c->hLumFilter;
|
||||||
int16_t *hChrFilter= c->hChrFilter;
|
int16_t *hChrFilter= c->hChrFilter;
|
||||||
int32_t *lumMmxFilter= c->lumMmxFilter;
|
int32_t *lumMmxFilter= c->lumMmxFilter;
|
||||||
@ -2662,27 +2660,32 @@ static int swScale(SwsContext *c, const uint8_t* src[],
|
|||||||
const int16_t **chrUSrcPtr= (const int16_t **) chrUPixBuf + chrBufIndex + firstChrSrcY - lastInChrBuf + vChrBufSize;
|
const int16_t **chrUSrcPtr= (const int16_t **) chrUPixBuf + chrBufIndex + firstChrSrcY - lastInChrBuf + vChrBufSize;
|
||||||
const int16_t **chrVSrcPtr= (const int16_t **) chrVPixBuf + chrBufIndex + firstChrSrcY - lastInChrBuf + vChrBufSize;
|
const int16_t **chrVSrcPtr= (const int16_t **) chrVPixBuf + chrBufIndex + firstChrSrcY - lastInChrBuf + vChrBufSize;
|
||||||
const int16_t **alpSrcPtr= (CONFIG_SWSCALE_ALPHA && alpPixBuf) ? (const int16_t **) alpPixBuf + lumBufIndex + firstLumSrcY - lastInLumBuf + vLumBufSize : NULL;
|
const int16_t **alpSrcPtr= (CONFIG_SWSCALE_ALPHA && alpPixBuf) ? (const int16_t **) alpPixBuf + lumBufIndex + firstLumSrcY - lastInLumBuf + vLumBufSize : NULL;
|
||||||
|
int16_t *vLumFilter= c->vLumFilter;
|
||||||
|
int16_t *vChrFilter= c->vChrFilter;
|
||||||
|
|
||||||
if (isPlanarYUV(dstFormat) || dstFormat==PIX_FMT_GRAY8) { //YV12 like
|
if (isPlanarYUV(dstFormat) || dstFormat==PIX_FMT_GRAY8) { //YV12 like
|
||||||
const int chrSkipMask= (1<<c->chrDstVSubSample)-1;
|
const int chrSkipMask= (1<<c->chrDstVSubSample)-1;
|
||||||
|
|
||||||
|
vLumFilter += dstY * vLumFilterSize;
|
||||||
|
vChrFilter += chrDstY * vChrFilterSize;
|
||||||
|
|
||||||
if (vLumFilterSize == 1) {
|
if (vLumFilterSize == 1) {
|
||||||
yuv2plane1(lumSrcPtr[0], dest[0], dstW, c->lumDither8, 0);
|
yuv2plane1(lumSrcPtr[0], dest[0], dstW, c->lumDither8, 0);
|
||||||
} else {
|
} else {
|
||||||
yuv2planeX(vLumFilter + dstY * vLumFilterSize, vLumFilterSize,
|
yuv2planeX(vLumFilter, vLumFilterSize,
|
||||||
lumSrcPtr, dest[0], dstW, c->lumDither8, 0);
|
lumSrcPtr, dest[0], dstW, c->lumDither8, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!((dstY&chrSkipMask) || isGray(dstFormat))) {
|
if (!((dstY&chrSkipMask) || isGray(dstFormat))) {
|
||||||
if (yuv2nv12cX) {
|
if (yuv2nv12cX) {
|
||||||
yuv2nv12cX(c, vChrFilter + chrDstY * vChrFilterSize, vChrFilterSize, chrUSrcPtr, chrVSrcPtr, dest[1], chrDstW);
|
yuv2nv12cX(c, vChrFilter, vChrFilterSize, chrUSrcPtr, chrVSrcPtr, dest[1], chrDstW);
|
||||||
} else if (vChrFilterSize == 1) {
|
} else if (vChrFilterSize == 1) {
|
||||||
yuv2plane1(chrUSrcPtr[0], dest[1], chrDstW, c->chrDither8, 0);
|
yuv2plane1(chrUSrcPtr[0], dest[1], chrDstW, c->chrDither8, 0);
|
||||||
yuv2plane1(chrVSrcPtr[0], dest[2], chrDstW, c->chrDither8, 3);
|
yuv2plane1(chrVSrcPtr[0], dest[2], chrDstW, c->chrDither8, 3);
|
||||||
} else {
|
} else {
|
||||||
yuv2planeX(vChrFilter + chrDstY * vChrFilterSize, vChrFilterSize,
|
yuv2planeX(vChrFilter, vChrFilterSize,
|
||||||
chrUSrcPtr, dest[1], chrDstW, c->chrDither8, 0);
|
chrUSrcPtr, dest[1], chrDstW, c->chrDither8, 0);
|
||||||
yuv2planeX(vChrFilter + chrDstY * vChrFilterSize, vChrFilterSize,
|
yuv2planeX(vChrFilter, vChrFilterSize,
|
||||||
chrVSrcPtr, dest[2], chrDstW, c->chrDither8, 3);
|
chrVSrcPtr, dest[2], chrDstW, c->chrDither8, 3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2691,7 +2694,7 @@ static int swScale(SwsContext *c, const uint8_t* src[],
|
|||||||
if (vLumFilterSize == 1) {
|
if (vLumFilterSize == 1) {
|
||||||
yuv2plane1(alpSrcPtr[0], dest[3], dstW, c->lumDither8, 0);
|
yuv2plane1(alpSrcPtr[0], dest[3], dstW, c->lumDither8, 0);
|
||||||
} else {
|
} else {
|
||||||
yuv2planeX(vLumFilter + dstY * vLumFilterSize, vLumFilterSize,
|
yuv2planeX(vLumFilter, vLumFilterSize,
|
||||||
alpSrcPtr, dest[3], dstW, c->lumDither8, 0);
|
alpSrcPtr, dest[3], dstW, c->lumDither8, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user