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 + -
显示快捷键?