⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tresizeaspectsettings.cpp

📁 ffshow源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    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 + -