-sws 0 && -ssf chs fixed
[libav.git] / postproc / swscale.c
index 508bf01..9b9d98f 100644 (file)
@@ -1710,7 +1710,7 @@ SwsContext *sws_getContext(int srcW, int srcH, int origSrcFormat, int dstW, int
 
        SwsContext *c;
        int i;
-       int usesFilter;
+       int usesVFilter, usesHFilter;
        int unscaled, needsDither;
        int srcFormat, dstFormat;
        SwsFilter dummyFilter= {NULL, NULL, NULL, NULL};
@@ -1779,15 +1779,15 @@ SwsContext *sws_getContext(int srcW, int srcH, int origSrcFormat, int dstW, int
        c->origSrcFormat= origSrcFormat;
         c->vRounder= 4* 0x0001000100010001ULL;
 
-       usesFilter=0;
-       if(dstFilter->lumV!=NULL && dstFilter->lumV->length>1) usesFilter=1;
-       if(dstFilter->lumH!=NULL && dstFilter->lumH->length>1) usesFilter=1;
-       if(dstFilter->chrV!=NULL && dstFilter->chrV->length>1) usesFilter=1;
-       if(dstFilter->chrH!=NULL && dstFilter->chrH->length>1) usesFilter=1;
-       if(srcFilter->lumV!=NULL && srcFilter->lumV->length>1) usesFilter=1;
-       if(srcFilter->lumH!=NULL && srcFilter->lumH->length>1) usesFilter=1;
-       if(srcFilter->chrV!=NULL && srcFilter->chrV->length>1) usesFilter=1;
-       if(srcFilter->chrH!=NULL && srcFilter->chrH->length>1) usesFilter=1;
+       usesHFilter= usesVFilter= 0;
+       if(dstFilter->lumV!=NULL && dstFilter->lumV->length>1) usesVFilter=1;
+       if(dstFilter->lumH!=NULL && dstFilter->lumH->length>1) usesHFilter=1;
+       if(dstFilter->chrV!=NULL && dstFilter->chrV->length>1) usesVFilter=1;
+       if(dstFilter->chrH!=NULL && dstFilter->chrH->length>1) usesHFilter=1;
+       if(srcFilter->lumV!=NULL && srcFilter->lumV->length>1) usesVFilter=1;
+       if(srcFilter->lumH!=NULL && srcFilter->lumH->length>1) usesHFilter=1;
+       if(srcFilter->chrV!=NULL && srcFilter->chrV->length>1) usesVFilter=1;
+       if(srcFilter->chrH!=NULL && srcFilter->chrH->length>1) usesHFilter=1;
 
        getSubSampleFactors(&c->chrSrcHSubSample, &c->chrSrcVSubSample, srcFormat);
        getSubSampleFactors(&c->chrDstHSubSample, &c->chrDstVSubSample, dstFormat);
@@ -1815,7 +1815,7 @@ SwsContext *sws_getContext(int srcW, int srcH, int origSrcFormat, int dstW, int
        sws_setColorspaceDetails(c, Inverse_Table_6_9[SWS_CS_DEFAULT], 0, Inverse_Table_6_9[SWS_CS_DEFAULT] /* FIXME*/, 0, 0, 1<<16, 1<<16); 
 
        /* unscaled special Cases */
-       if(unscaled && !usesFilter)
+       if(unscaled && !usesHFilter && !usesVFilter)
        {
                /* yv12_to_nv12 */
                if(srcFormat == IMGFMT_YV12 && dstFormat == IMGFMT_NV12)
@@ -1887,6 +1887,7 @@ SwsContext *sws_getContext(int srcW, int srcH, int origSrcFormat, int dstW, int
                        if(flags&SWS_PRINT_INFO)
                                MSG_INFO("SwScaler: output Width is not a multiple of 32 -> no MMX2 scaler\n");
                }
+               if(usesHFilter) c->canMMX2BeUsed=0;
        }
        else
                c->canMMX2BeUsed=0;