tresizeaspectsettings.cpp.svn-base
来自「ffshow源码」· SVN-BASE 代码 · 共 548 行 · 第 1/2 页
SVN-BASE
548 行
break; case METHOD_SWS_LANCZOS: tsprintf(algParam,_l(", parameter: %-5.2f"),float(lanczosParam)); break; default: algParam[0]='\0'; break; } return algParam; }bool TresizeAspectSettings::getTip(unsigned int pageId,char_t *buf,size_t len){ if (pageId==1) { char_t tipS[256]; strcpy(tipS,_l("Resizing ")); switch (_if) { case 0: strcat(tipS,_l("always")); break; case 1: strcatf(tipS,_l("if source width is %s %i %s source height is %s %i"),getXcondStr(xcond),xval,getXYcondStr(xycond),getXcondStr(ycond),yval); break; case 2: strcatf(tipS,_l("if number of pixels is %s %i"),getPixCondStr(pixcond),pixval); break; } strcat(tipS,_l(" ")); switch (mode) { case 0: strcatf(tipS,_l("to size %ix%i"),dx,dy); break; case 1: strcatf(tipS,_l("to aspect ratio %i:%i"),a1,a2); break; case 2: strcatf(tipS,_l("to next multiply of %i"),multOf); break; case 3: strcatf(tipS,_l("by %g"),mult1000/1000.0f); break; } strcat(tipS,_l("\nAspect ratio: ")); switch (isAspect) { case 0: strcat(tipS,_l("no change")); break; case 1: strcat(tipS,_l("keeping original aspect ratio")); break; case 2: strcatf(tipS,_l("set to %3.2f:1"),aspectRatio/65536.0f); break; } strncpy(buf,tipS,len); buf[len-1]='\0'; } else if (pageId==2) { if (areBorders()) tsnprintf(buf,len,_l("%s borders %i%s,%i%s"),bordersInside?_l("Inside"):_l("Outside"),bordersUnits==0?bordersPercentX:bordersPixelsX,bordersUnits==0?_l("%"):_l(" pixels"),bordersUnits==0?bordersPercentY:bordersPixelsY,bordersUnits==0?_l("%"):_l(" pixels")); else tsnprintf(buf,len,_l("No borders")); buf[len-1]='\0'; } else if (pageId==3) { if (methodsProps[methodLuma].library==LIB_SWSCALER) { if (methodLuma==methodChroma || methodsLocked) { char_t algParam[256]; tsnprintf(buf,len,_l("Method: %s%s\n"),methodsProps[methodLuma].name,printSwsParams(algParam,methodLuma,bicubicLumaParam,gaussLumaParam,lanczosLumaParam)); } else { char_t algParam[256]; tsnprintf(buf,len,_l("Luma method: %s%s\n"),methodsProps[methodLuma].name,printSwsParams(algParam,methodLuma,bicubicLumaParam,gaussLumaParam,lanczosLumaParam)); strncatf(buf,len,_l("Chroma method: %s%s\n"),methodsProps[methodChroma].name,printSwsParams(algParam,methodChroma,bicubicChromaParam,gaussChromaParam,lanczosChromaParam)); } strncatf(buf,len,_l("Luma gaussian blur:%3.2f, luma sharpen:%3.2f\nChroma gaussian blur:%3.2f, chroma sharpen:%3.2f"),GblurLum/100.0f,sharpenLum/100.0f,GblurChrom/100.0f,sharpenChrom/100.0f); } else if (methodsProps[methodLuma].library==LIB_SIMPLE) { tsnprintf(buf,len,_l("Method: %s"),methodsProps[methodLuma].name); if (methodLuma==METHOD_WARPED) strncatf(buf,len,_l(", horizontal warp: %-5.3f, verticalWarp: %-5.3f"),simpleWarpXparam/1000.0f,simpleWarpYparam/1000.0f); } else tsnprintf(buf,len,_l("Method: %s"),methodsProps[methodLuma].name); buf[len-1]='\0'; } return true; }const char_t* TresizeAspectSettings::getXcondStr(int cond){ switch (cond) { case -1:return _l("<"); case 1:return _l(">"); default:return _l("="); }}const char_t* TresizeAspectSettings::getXYcondStr(int cond){ switch (cond) { case 0 :return _l("and"); case 1 :return _l("or"); default:return _l(""); }}const char_t* TresizeAspectSettings::getPixCondStr(int cond){ switch (cond) { case -1:return _l("less than"); case 1:return _l("greater than"); default:return _l(""); }} bool TresizeAspectSettings::ifResize(unsigned int AVIdx,unsigned int AVIdy) const{ switch (_if) { case 0: return true; case 1: { bool isX=(xcond==-1 && AVIdx<xval) || (xcond==1 && AVIdx>xval); bool isY=(ycond==-1 && AVIdy<yval) || (ycond==1 && AVIdy>yval); return (xycond==0 && (isX && isY)) || (xycond==1 && (isX || isY)); } case 2: { unsigned int pixnum=AVIdx*AVIdy; return (pixcond==-1 && pixnum<pixval) || (pixcond==1 && pixnum>pixval); } default:return true; }}void TresizeAspectSettings::calcNewRects(Trect *rectFull,Trect *rectClip) const{ //TODO: fix this mess! const Trect inRect=*(full?rectFull:rectClip); //resize if (is && ifResize(inRect.dx,inRect.dy)) if (methodsProps[methodLuma].library==LIB_SAI) { rectFull->dx*=2;rectFull->dy*=2; rectClip->x *=2;rectClip->y *=2; rectClip->dx*=2;rectClip->dy*=2; //return; } else { switch (mode) { case 1: Trect::calcNewSizeAspect(inRect,a1,a2,*rectFull); break; case 2: rectFull->dx=(1+(inRect.dx-1)/multOf)*multOf; rectFull->dy=(1+(inRect.dy-1)/multOf)*multOf; break; case 3: rectFull->dx=mult1000*inRect.dx/1000; rectFull->dy=mult1000*inRect.dy/1000; break; case 0: default: rectFull->dx=dx;rectFull->dy=dy; break; } rectFull->dx&=~1;rectFull->dy&=~1; } //aspect if (methodsProps[methodLuma].library==LIB_NONE) { rectClip->dx=std::min(inRect.dx,rectFull->dx); rectClip->x=std::max(0,int(rectFull->dx-rectClip->dx)/2)&~1; rectClip->dy=std::min(inRect.dy,rectFull->dy); rectClip->y=std::max(0,int(rectFull->dy-rectClip->dy)/2)&~1; } else if (isAspect==0 || methodsProps[methodLuma].library==LIB_SAI) *rectClip=*rectFull; else { int ax,ay; if (isAspect==1) { ax=inRect.dx; ay=inRect.dy; } else { ax=aspectRatio; ay=1<<16; } if (ax==0) ax=1;if (ay==0) ay=1; rectClip->dx=rectFull->dx; rectClip->dy=rectFull->dx*ay/ax; if (rectClip->dy>rectFull->dy) { rectClip->dx=rectFull->dy*ax/ay; rectClip->dy=rectFull->dy; } unsigned int mask=isAspect==1?_UI32_MAX:~1; rectClip->dx&=mask; rectClip->dy&=mask; rectClip->x=((rectFull->dx-rectClip->dx)/2)&mask; rectClip->y=((rectFull->dy-rectClip->dy)/2)&mask; } //borders unsigned int borderX=0,borderY=0; if (bordersUnits==0) { borderX=std::max(8U,(bordersInside?rectClip:rectFull)->dx*(100+(bordersInside?-1:1)*bordersPercentX)/100); borderY=std::max(8U,(bordersInside?rectClip:rectFull)->dy*(100+(bordersInside?-1:1)*bordersPercentY)/100); } else if (bordersUnits==1) { borderX=std::max(8,int(rectClip->dx+(bordersInside?-2:2)*bordersPixelsX)); borderY=std::max(8,int(rectClip->dy+(bordersInside?-2:2)*(bordersLocked?rectClip->dy*bordersPixelsY/rectClip->dx:bordersPixelsY))); } if (borderX || borderY) { if (bordersInside) { rectClip->dx=borderX&~1; rectClip->dy=borderY&~1; } else { rectFull->dx=borderX&~1; rectFull->dy=borderY&~1; } if (rectClip->dx>rectFull->dx) rectClip->dx=rectFull->dx; if (rectClip->dy>rectFull->dy) rectClip->dy=rectFull->dy; rectClip->x=((rectFull->dx-rectClip->dx)/2)&~1; rectClip->y=((rectFull->dy-rectClip->dy)/2)&~1; } }void TresizeAspectSettings::reg_op(TregOp &t){ TfilterSettingsVideo::reg_op(t); if (methodLuma==METHOD_SWS_BICUBLIN) { methodLuma=METHOD_SWS_BICUBIC, methodChroma=METHOD_SWS_BILINEAR; methodsLocked=0; } if (methodChroma==-1) { if (methodsProps[methodLuma].library==LIB_SWSCALER) methodChroma=methodLuma; else methodChroma=METHOD_SWS_BICUBIC; methodsLocked=1; } if (bicubicChromaParam==-1) bicubicChromaParam=bicubicLumaParam; if (gaussChromaParam==-1) gaussChromaParam=gaussLumaParam; if (lanczosChromaParam==-1) lanczosChromaParam=lanczosLumaParam;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?