📄 tresizeaspectsettings.cpp
字号:
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -