| Index: patched-ffmpeg-mt/libswscale/utils.c
|
| ===================================================================
|
| --- patched-ffmpeg-mt/libswscale/utils.c (revision 41250)
|
| +++ patched-ffmpeg-mt/libswscale/utils.c (working copy)
|
| @@ -92,6 +92,10 @@
|
| || (x)==PIX_FMT_YUV444P \
|
| || (x)==PIX_FMT_YUV422P \
|
| || (x)==PIX_FMT_YUV411P \
|
| + || (x)==PIX_FMT_YUVJ420P \
|
| + || (x)==PIX_FMT_YUVJ422P \
|
| + || (x)==PIX_FMT_YUVJ440P \
|
| + || (x)==PIX_FMT_YUVJ444P \
|
| || (x)==PIX_FMT_PAL8 \
|
| || (x)==PIX_FMT_BGR8 \
|
| || (x)==PIX_FMT_RGB8 \
|
| @@ -121,8 +125,11 @@
|
| || (x)==PIX_FMT_YUV444P \
|
| || (x)==PIX_FMT_YUV422P \
|
| || (x)==PIX_FMT_YUV411P \
|
| - || isRGB(x) \
|
| - || isBGR(x) \
|
| + || (x)==PIX_FMT_YUVJ420P \
|
| + || (x)==PIX_FMT_YUVJ422P \
|
| + || (x)==PIX_FMT_YUVJ440P \
|
| + || (x)==PIX_FMT_YUVJ444P \
|
| + || isAnyRGB(x) \
|
| || (x)==PIX_FMT_NV12 \
|
| || (x)==PIX_FMT_NV21 \
|
| || (x)==PIX_FMT_GRAY16BE \
|
| @@ -143,8 +150,6 @@
|
| return isSupportedOut(pix_fmt);
|
| }
|
|
|
| -#define usePal(x) (av_pix_fmt_descriptors[x].flags & PIX_FMT_PAL)
|
| -
|
| extern const int32_t ff_yuv2rgb_coeffs[8][4];
|
|
|
| const char *sws_format_name(enum PixelFormat format)
|
| @@ -780,7 +785,6 @@
|
| int dstW, int dstH, enum PixelFormat dstFormat, int flags,
|
| SwsFilter *srcFilter, SwsFilter *dstFilter, const double *param)
|
| {
|
| -
|
| SwsContext *c;
|
| int i;
|
| int usesVFilter, usesHFilter;
|
| @@ -858,28 +862,27 @@
|
| c->srcFormatBpp = av_get_bits_per_pixel(&av_pix_fmt_descriptors[srcFormat]);
|
| c->vRounder= 4* 0x0001000100010001ULL;
|
|
|
| - usesHFilter= usesVFilter= 0;
|
| - if (dstFilter->lumV && dstFilter->lumV->length>1) usesVFilter=1;
|
| - if (dstFilter->lumH && dstFilter->lumH->length>1) usesHFilter=1;
|
| - if (dstFilter->chrV && dstFilter->chrV->length>1) usesVFilter=1;
|
| - if (dstFilter->chrH && dstFilter->chrH->length>1) usesHFilter=1;
|
| - if (srcFilter->lumV && srcFilter->lumV->length>1) usesVFilter=1;
|
| - if (srcFilter->lumH && srcFilter->lumH->length>1) usesHFilter=1;
|
| - if (srcFilter->chrV && srcFilter->chrV->length>1) usesVFilter=1;
|
| - if (srcFilter->chrH && srcFilter->chrH->length>1) usesHFilter=1;
|
| + usesVFilter = (srcFilter->lumV && srcFilter->lumV->length>1) ||
|
| + (srcFilter->chrV && srcFilter->chrV->length>1) ||
|
| + (dstFilter->lumV && dstFilter->lumV->length>1) ||
|
| + (dstFilter->chrV && dstFilter->chrV->length>1);
|
| + usesHFilter = (srcFilter->lumH && srcFilter->lumH->length>1) ||
|
| + (srcFilter->chrH && srcFilter->chrH->length>1) ||
|
| + (dstFilter->lumH && dstFilter->lumH->length>1) ||
|
| + (dstFilter->chrH && dstFilter->chrH->length>1);
|
|
|
| getSubSampleFactors(&c->chrSrcHSubSample, &c->chrSrcVSubSample, srcFormat);
|
| getSubSampleFactors(&c->chrDstHSubSample, &c->chrDstVSubSample, dstFormat);
|
|
|
| // reuse chroma for 2 pixels RGB/BGR unless user wants full chroma interpolation
|
| - if ((isBGR(dstFormat) || isRGB(dstFormat)) && !(flags&SWS_FULL_CHR_H_INT)) c->chrDstHSubSample=1;
|
| + if (isAnyRGB(dstFormat) && !(flags&SWS_FULL_CHR_H_INT)) c->chrDstHSubSample=1;
|
|
|
| // drop some chroma lines if the user wants it
|
| c->vChrDrop= (flags&SWS_SRC_V_CHR_DROP_MASK)>>SWS_SRC_V_CHR_DROP_SHIFT;
|
| c->chrSrcVSubSample+= c->vChrDrop;
|
|
|
| // drop every other pixel for chroma calculation unless user wants full chroma
|
| - if ((isBGR(srcFormat) || isRGB(srcFormat)) && !(flags&SWS_FULL_CHR_H_INP)
|
| + if (isAnyRGB(srcFormat) && !(flags&SWS_FULL_CHR_H_INP)
|
| && srcFormat!=PIX_FMT_RGB8 && srcFormat!=PIX_FMT_BGR8
|
| && srcFormat!=PIX_FMT_RGB4 && srcFormat!=PIX_FMT_BGR4
|
| && srcFormat!=PIX_FMT_RGB4_BYTE && srcFormat!=PIX_FMT_BGR4_BYTE
|
| @@ -903,7 +906,7 @@
|
| sws_setColorspaceDetails(c, ff_yuv2rgb_coeffs[SWS_CS_DEFAULT], srcRange, ff_yuv2rgb_coeffs[SWS_CS_DEFAULT] /* FIXME*/, dstRange, 0, 1<<16, 1<<16);
|
|
|
| /* unscaled special cases */
|
| - if (unscaled && !usesHFilter && !usesVFilter && (srcRange == dstRange || isBGR(dstFormat) || isRGB(dstFormat))) {
|
| + if (unscaled && !usesHFilter && !usesVFilter && (srcRange == dstRange || isAnyRGB(dstFormat))) {
|
| ff_get_unscaled_swscale(c);
|
|
|
| if (c->swScale) {
|
| @@ -965,6 +968,8 @@
|
| c->chrMmx2FilterCode = av_malloc(c->chrMmx2FilterCodeSize);
|
| #endif
|
|
|
| + if (!c->lumMmx2FilterCode || !c->chrMmx2FilterCode)
|
| + goto fail;
|
| FF_ALLOCZ_OR_GOTO(c, c->hLumFilter , (dstW /8+8)*sizeof(int16_t), fail);
|
| FF_ALLOCZ_OR_GOTO(c, c->hChrFilter , (c->chrDstW /4+8)*sizeof(int16_t), fail);
|
| FF_ALLOCZ_OR_GOTO(c, c->hLumFilterPos, (dstW /2/8+8)*sizeof(int32_t), fail);
|
| @@ -1126,9 +1131,7 @@
|
| av_log(c, AV_LOG_INFO, "using AltiVec\n");
|
| else
|
| av_log(c, AV_LOG_INFO, "using C\n");
|
| - }
|
|
|
| - if (flags & SWS_PRINT_INFO) {
|
| if (flags & SWS_CPU_CAPS_MMX) {
|
| if (c->canMMX2BeUsed && (flags&SWS_FAST_BILINEAR))
|
| av_log(c, AV_LOG_VERBOSE, "using FAST_BILINEAR MMX2 scaler for horizontal scaling\n");
|
| @@ -1308,7 +1311,7 @@
|
| return sws_getConstVec(1.0, 1);
|
| }
|
|
|
| -double sws_dcVec(SwsVector *a)
|
| +static double sws_dcVec(SwsVector *a)
|
| {
|
| int i;
|
| double sum=0;
|
| @@ -1537,8 +1540,8 @@
|
| if (c->lumMmx2FilterCode) munmap(c->lumMmx2FilterCode, c->lumMmx2FilterCodeSize);
|
| if (c->chrMmx2FilterCode) munmap(c->chrMmx2FilterCode, c->chrMmx2FilterCodeSize);
|
| #elif HAVE_VIRTUALALLOC
|
| - if (c->lumMmx2FilterCode) VirtualFree(c->lumMmx2FilterCode, c->lumMmx2FilterCodeSize, MEM_RELEASE);
|
| - if (c->chrMmx2FilterCode) VirtualFree(c->chrMmx2FilterCode, c->chrMmx2FilterCodeSize, MEM_RELEASE);
|
| + if (c->lumMmx2FilterCode) VirtualFree(c->lumMmx2FilterCode, 0, MEM_RELEASE);
|
| + if (c->chrMmx2FilterCode) VirtualFree(c->chrMmx2FilterCode, 0, MEM_RELEASE);
|
| #else
|
| av_free(c->lumMmx2FilterCode);
|
| av_free(c->chrMmx2FilterCode);
|
| @@ -1562,17 +1565,20 @@
|
| if (!param)
|
| param = default_param;
|
|
|
| - if (context) {
|
| - if (context->srcW != srcW || context->srcH != srcH ||
|
| - context->srcFormat != srcFormat ||
|
| - context->dstW != dstW || context->dstH != dstH ||
|
| - context->dstFormat != dstFormat || context->flags != flags ||
|
| - context->param[0] != param[0] || context->param[1] != param[1])
|
| - {
|
| - sws_freeContext(context);
|
| - context = NULL;
|
| - }
|
| + if (context &&
|
| + (context->srcW != srcW ||
|
| + context->srcH != srcH ||
|
| + context->srcFormat != srcFormat ||
|
| + context->dstW != dstW ||
|
| + context->dstH != dstH ||
|
| + context->dstFormat != dstFormat ||
|
| + context->flags != flags ||
|
| + context->param[0] != param[0] ||
|
| + context->param[1] != param[1])) {
|
| + sws_freeContext(context);
|
| + context = NULL;
|
| }
|
| +
|
| if (!context) {
|
| return sws_getContext(srcW, srcH, srcFormat,
|
| dstW, dstH, dstFormat, flags,
|
|
|