comparison postproc/swscale.c @ 11379:7f02819e58e0

-sws 0 && -ssf chs fixed
author michael
date Tue, 04 Nov 2003 13:52:12 +0000
parents b45214b33cb7
children b352fe84ce64
comparison
equal deleted inserted replaced
11378:20f205d23141 11379:7f02819e58e0
1708 SwsContext *sws_getContext(int srcW, int srcH, int origSrcFormat, int dstW, int dstH, int origDstFormat, int flags, 1708 SwsContext *sws_getContext(int srcW, int srcH, int origSrcFormat, int dstW, int dstH, int origDstFormat, int flags,
1709 SwsFilter *srcFilter, SwsFilter *dstFilter){ 1709 SwsFilter *srcFilter, SwsFilter *dstFilter){
1710 1710
1711 SwsContext *c; 1711 SwsContext *c;
1712 int i; 1712 int i;
1713 int usesFilter; 1713 int usesVFilter, usesHFilter;
1714 int unscaled, needsDither; 1714 int unscaled, needsDither;
1715 int srcFormat, dstFormat; 1715 int srcFormat, dstFormat;
1716 SwsFilter dummyFilter= {NULL, NULL, NULL, NULL}; 1716 SwsFilter dummyFilter= {NULL, NULL, NULL, NULL};
1717 #ifdef ARCH_X86 1717 #ifdef ARCH_X86
1718 if(flags & SWS_CPU_CAPS_MMX) 1718 if(flags & SWS_CPU_CAPS_MMX)
1777 c->srcFormat= srcFormat; 1777 c->srcFormat= srcFormat;
1778 c->origDstFormat= origDstFormat; 1778 c->origDstFormat= origDstFormat;
1779 c->origSrcFormat= origSrcFormat; 1779 c->origSrcFormat= origSrcFormat;
1780 c->vRounder= 4* 0x0001000100010001ULL; 1780 c->vRounder= 4* 0x0001000100010001ULL;
1781 1781
1782 usesFilter=0; 1782 usesHFilter= usesVFilter= 0;
1783 if(dstFilter->lumV!=NULL && dstFilter->lumV->length>1) usesFilter=1; 1783 if(dstFilter->lumV!=NULL && dstFilter->lumV->length>1) usesVFilter=1;
1784 if(dstFilter->lumH!=NULL && dstFilter->lumH->length>1) usesFilter=1; 1784 if(dstFilter->lumH!=NULL && dstFilter->lumH->length>1) usesHFilter=1;
1785 if(dstFilter->chrV!=NULL && dstFilter->chrV->length>1) usesFilter=1; 1785 if(dstFilter->chrV!=NULL && dstFilter->chrV->length>1) usesVFilter=1;
1786 if(dstFilter->chrH!=NULL && dstFilter->chrH->length>1) usesFilter=1; 1786 if(dstFilter->chrH!=NULL && dstFilter->chrH->length>1) usesHFilter=1;
1787 if(srcFilter->lumV!=NULL && srcFilter->lumV->length>1) usesFilter=1; 1787 if(srcFilter->lumV!=NULL && srcFilter->lumV->length>1) usesVFilter=1;
1788 if(srcFilter->lumH!=NULL && srcFilter->lumH->length>1) usesFilter=1; 1788 if(srcFilter->lumH!=NULL && srcFilter->lumH->length>1) usesHFilter=1;
1789 if(srcFilter->chrV!=NULL && srcFilter->chrV->length>1) usesFilter=1; 1789 if(srcFilter->chrV!=NULL && srcFilter->chrV->length>1) usesVFilter=1;
1790 if(srcFilter->chrH!=NULL && srcFilter->chrH->length>1) usesFilter=1; 1790 if(srcFilter->chrH!=NULL && srcFilter->chrH->length>1) usesHFilter=1;
1791 1791
1792 getSubSampleFactors(&c->chrSrcHSubSample, &c->chrSrcVSubSample, srcFormat); 1792 getSubSampleFactors(&c->chrSrcHSubSample, &c->chrSrcVSubSample, srcFormat);
1793 getSubSampleFactors(&c->chrDstHSubSample, &c->chrDstVSubSample, dstFormat); 1793 getSubSampleFactors(&c->chrDstHSubSample, &c->chrDstVSubSample, dstFormat);
1794 1794
1795 // reuse chroma for 2 pixles rgb/bgr unless user wants full chroma interpolation 1795 // reuse chroma for 2 pixles rgb/bgr unless user wants full chroma interpolation
1813 c->chrDstH= -((-dstH) >> c->chrDstVSubSample); 1813 c->chrDstH= -((-dstH) >> c->chrDstVSubSample);
1814 1814
1815 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); 1815 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);
1816 1816
1817 /* unscaled special Cases */ 1817 /* unscaled special Cases */
1818 if(unscaled && !usesFilter) 1818 if(unscaled && !usesHFilter && !usesVFilter)
1819 { 1819 {
1820 /* yv12_to_nv12 */ 1820 /* yv12_to_nv12 */
1821 if(srcFormat == IMGFMT_YV12 && dstFormat == IMGFMT_NV12) 1821 if(srcFormat == IMGFMT_YV12 && dstFormat == IMGFMT_NV12)
1822 { 1822 {
1823 c->swScale= PlanarToNV12Wrapper; 1823 c->swScale= PlanarToNV12Wrapper;
1885 if(!c->canMMX2BeUsed && dstW >=srcW && (srcW&15)==0 && (flags&SWS_FAST_BILINEAR)) 1885 if(!c->canMMX2BeUsed && dstW >=srcW && (srcW&15)==0 && (flags&SWS_FAST_BILINEAR))
1886 { 1886 {
1887 if(flags&SWS_PRINT_INFO) 1887 if(flags&SWS_PRINT_INFO)
1888 MSG_INFO("SwScaler: output Width is not a multiple of 32 -> no MMX2 scaler\n"); 1888 MSG_INFO("SwScaler: output Width is not a multiple of 32 -> no MMX2 scaler\n");
1889 } 1889 }
1890 if(usesHFilter) c->canMMX2BeUsed=0;
1890 } 1891 }
1891 else 1892 else
1892 c->canMMX2BeUsed=0; 1893 c->canMMX2BeUsed=0;
1893 1894
1894 c->chrXInc= ((c->chrSrcW<<16) + (c->chrDstW>>1))/c->chrDstW; 1895 c->chrXInc= ((c->chrSrcW<<16) + (c->chrDstW>>1))/c->chrDstW;