|
|
|
@ -749,6 +749,7 @@ int sws_init_context(SwsContext *c, SwsFilter *srcFilter, SwsFilter *dstFilter) |
|
|
|
|
int srcH= c->srcH; |
|
|
|
|
int dstW= c->dstW; |
|
|
|
|
int dstH= c->dstH; |
|
|
|
|
int dst_stride = FFALIGN(dstW * sizeof(int16_t), 16), dst_stride_px = dst_stride >> 1; |
|
|
|
|
int flags, cpu_flags; |
|
|
|
|
enum PixelFormat srcFormat= c->srcFormat; |
|
|
|
|
enum PixelFormat dstFormat= c->dstFormat; |
|
|
|
@ -996,26 +997,24 @@ int sws_init_context(SwsContext *c, SwsFilter *srcFilter, SwsFilter *dstFilter) |
|
|
|
|
//Note we need at least one pixel more at the end because of the MMX code (just in case someone wanna replace the 4000/8000)
|
|
|
|
|
/* align at 16 bytes for AltiVec */ |
|
|
|
|
for (i=0; i<c->vLumBufSize; i++) { |
|
|
|
|
FF_ALLOCZ_OR_GOTO(c, c->lumPixBuf[i+c->vLumBufSize], VOF+1, fail); |
|
|
|
|
FF_ALLOCZ_OR_GOTO(c, c->lumPixBuf[i+c->vLumBufSize], dst_stride+1, fail); |
|
|
|
|
c->lumPixBuf[i] = c->lumPixBuf[i+c->vLumBufSize]; |
|
|
|
|
} |
|
|
|
|
c->uv_off = VOFW; |
|
|
|
|
c->uv_off = dst_stride_px; |
|
|
|
|
for (i=0; i<c->vChrBufSize; i++) { |
|
|
|
|
FF_ALLOC_OR_GOTO(c, c->chrUPixBuf[i+c->vChrBufSize], VOF*2+1, fail); |
|
|
|
|
FF_ALLOC_OR_GOTO(c, c->chrUPixBuf[i+c->vChrBufSize], dst_stride*2+1, fail); |
|
|
|
|
c->chrUPixBuf[i] = c->chrUPixBuf[i+c->vChrBufSize]; |
|
|
|
|
c->chrVPixBuf[i] = c->chrVPixBuf[i+c->vChrBufSize] = c->chrUPixBuf[i] + VOFW; |
|
|
|
|
c->chrVPixBuf[i] = c->chrVPixBuf[i+c->vChrBufSize] = c->chrUPixBuf[i] + dst_stride_px; |
|
|
|
|
} |
|
|
|
|
if (CONFIG_SWSCALE_ALPHA && c->alpPixBuf) |
|
|
|
|
for (i=0; i<c->vLumBufSize; i++) { |
|
|
|
|
FF_ALLOCZ_OR_GOTO(c, c->alpPixBuf[i+c->vLumBufSize], VOF+1, fail); |
|
|
|
|
FF_ALLOCZ_OR_GOTO(c, c->alpPixBuf[i+c->vLumBufSize], dst_stride+1, fail); |
|
|
|
|
c->alpPixBuf[i] = c->alpPixBuf[i+c->vLumBufSize]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//try to avoid drawing green stuff between the right end and the stride end
|
|
|
|
|
for (i=0; i<c->vChrBufSize; i++) |
|
|
|
|
memset(c->chrUPixBuf[i], 64, VOF*2+1); |
|
|
|
|
|
|
|
|
|
assert(2*VOFW == VOF); |
|
|
|
|
memset(c->chrUPixBuf[i], 64, dst_stride*2+1); |
|
|
|
|
|
|
|
|
|
assert(c->chrDstH <= dstH); |
|
|
|
|
|
|
|
|
|