Пример #1
0
void GetNewFileName(char *lpstrFilename)
{
char temp2[MAX_PATH];
char *t,*p;

	GetWindowText(out.hMainWindow,temp2,sizeof(temp2));
	t=temp2;
	
	t=scanstr_back(temp2,"-",NULL);
	if (t) t[-1]=0;
	
	if (temp2[0] && temp2[1] == '.')
	{
		char *p1,*p2;
		p1=lpstrFilename;
		p2=temp2;
		while (*p2) *p1++=*p2++;
		*p1=0;
		p1 = temp2+1;
		p2 = lpstrFilename;
		while (*p2)
		{
			*p1++ = *p2++;
		}
		*p1=0;
		temp2[0] = '0';
	}
	p=temp2;
	while (*p != '.' && *p) p++;
	if (*p == '.') 
	{
		*p = '-';
		p=CharNext(p);
	}
	while (*p)
	{
		if (*p == '.' || *p == '/' || *p == '\\' || *p == '*' || 
			*p == '?' || *p == ':' || *p == '+' || *p == '\"' || 
			*p == '\'' || *p == '|' || *p == '<' || *p == '>') *p = '_';
		p=CharNext(p);
	}
	
	p=config_AACoutdir;
	if (p[0]) while (p[1]) p++;
	
	if (!config_AACoutdir[0] || config_AACoutdir[0] == ' ')
		Config(out.hMainWindow);
	if (!config_AACoutdir[0])
		wsprintf(lpstrFilename,"%s.aac",temp2);
	else if (p[0]=='\\')
		wsprintf(lpstrFilename,"%s%s.aac",config_AACoutdir,temp2);
	else
		wsprintf(lpstrFilename,"%s\\%s.aac",config_AACoutdir,temp2);
}
Пример #2
0
int C_RenderTransitionClass::render(char visdata[2][2][576], int isBeat, int *framebuffer, int *fbout, int w, int h)
{
  if (_dotransitionflag||enabled) g_rnd_cnt=0;
  if (_dotransitionflag==2 || _dotransitionflag == 3)
  {
    int notext=_dotransitionflag==3;
    _dotransitionflag=0;
    if (cfg_transitions&last_which)
    {
      curtrans = (cfg_transition_mode&0x7fff) ? (cfg_transition_mode&0x7fff) : (rand() % ((sizeof(transitionmodes)/sizeof(transitionmodes[0]))-1))+1;
      if (cfg_transition_mode&0x8000) curtrans|=0x8000;
      ep[0]=0;
      ep[1]=2;
      mask=0;
      start_time=0;
      enabled=1;
    }
    C_RenderListClass *temp=g_render_effects;
    g_render_effects=g_render_effects2;
    g_render_effects2=temp;
    extern int need_repop;
    extern char *extension(char *fn);
    need_repop=1;
    PostMessage(g_hwndDlg,WM_USER+20,0,0);
    if (!notext && stricmp("aph",extension(last_file)))
    {
      char buf[512];
      strncpy(buf,scanstr_back(last_file,"\\",last_file-1)+1,510);
      buf[510]=0;
      scanstr_back(buf,".",buf+strlen(buf))[0]=0;
      strcat(buf," ");
      DDraw_SetStatusText(buf);
    }
  }

	if (!enabled) 
  {
    int x;
    l_w=w;
    l_h=h;
    if (fbs[0]) for (x = 0; x < 4; x ++)
    {
      if (fbs[x]) 
        {
        GlobalFree(fbs[x]);
        fbs[x]=NULL;
      }
    }
    if (!initThread && g_render_effects2->getNumRenders()) 
    {
      g_render_effects2->clearRenders();
      g_render_effects2->freeBuffers();
    }
    return g_render_effects->render(visdata,isBeat,framebuffer,fbout,w,h);
  }

	// handle resize
  if (l_w != w || l_h != h || !fbs[0])
  {
    l_w=w;
    l_h=h;
    int x;
    for (x = 0; x < 4; x ++)
    {
      if (fbs[x]) GlobalFree(fbs[x]);
      fbs[x]=(int*)GlobalAlloc(GPTR,l_w*l_h*sizeof(int));
    }
  }

	if (start_time == 0)
	{
		memcpy(fbs[ep[0]],framebuffer,sizeof(int)*l_w*l_h);
    memcpy(fbs[ep[1]],framebuffer,sizeof(int)*l_w*l_h);
	}


	// maybe there's a faster way than using 3 more buffers without screwing
	// any effect... justin ?
  if (curtrans&0x8000)
	  ep[1]^=g_render_effects2->render(visdata,isBeat,fbs[ep[1]],fbs[ep[1]^1],w,h)&1;
  ep[0]^=g_render_effects->render(visdata,isBeat,fbs[ep[0]],fbs[ep[0]^1],w,h)&1;

	int *p = fbs[ep[1]];
  int *d = fbs[ep[0]];
	int *o = framebuffer;
  int x=w*h;

  int ttime=250*cfg_transitions_speed;
  if (ttime<100) ttime=100;

  int n;
  if (!start_time) { n=0; start_time=GetTickCount(); }
  else n=MulDiv(GetTickCount()-start_time,256,ttime);

  if (n >= 255) n=255;

	float sintrans = (float)(sin(((float)n/255)*PI-PI/2)/2+0.5); // used for smoothing transitions
																															 // now sintrans does a smooth curve
																															 // from 0 to 1
  switch (curtrans&0x7fff)
  {
    case 1: // Crossfade
      mmx_adjblend_block(o,d,p,x,n);
    break;
    case 2: // Left to right push
				{
				  int i = (int)(sintrans*w);
				  int j;
				  for (j=0;j<h;j++)
          {
					  memcpy(framebuffer+(j*w), d+(j*w)+(w-i), i*4);
					  memcpy(framebuffer+(j*w)+i, p+(j*w), (w-i)*4);
          }
				}
	    break;
    case 3: // Right to left push
				{
				  int i = (int)(sintrans*w);
				  int j;
				  for (j=0;j<h;j++)
          {
						memcpy(framebuffer+(j*w), p+(i+j*w), (w-i)*4);
						memcpy(framebuffer+(j*w)+(w-i), d+(j*w), i*4);          
          }
				}
	    break;
		case 4: // Top to bottom push
				{
				int i = (int)(sintrans*h);
				memcpy(framebuffer, d+(h-i)*w, w*i*4);
				memcpy(framebuffer+w*i, p, w*(h-i)*4);
				}
	    break;
		case 5: // Bottom to Top push
				{
				int i = (int)(sintrans*h);
				memcpy(framebuffer,p+i*w, w*(h-i)*4);
				memcpy(framebuffer+w*(h-i), d, w*i*4);
				}
	    break;
    case 6: // 9 random blocks
				{
          if (!(mask&(1<<(10+n/28))))
					{
						int r=0;
						if ((mask & 0x1ff) != 0x1ff) 
            {
              do 
              {
							  r = rand()%9; 
              }
							while ((1 << r) & mask);
            }
						mask |= (1<<r)|(1<<(10+n/28));
					}
				  int j;
				  int tw=w/3, th=h/3;
				  int twr=w-2*tw;
				  memcpy(framebuffer, p, w*h*4);
				  int i;
				  for (i=0;i<9;i++)
					{
					  if (mask & (1<<i))
            {
              int end=i/3*th+th;
              if (i > 5) end=h;
						  for (j=i/3*th;j<end;j++)
							  memcpy(framebuffer+(j*w)+(i%3)*tw, d+(j*w)+(i%3)*tw, (i%3==2) ? twr*4 : tw*4);
            }
          }
				}
	    break;
		case 7: // Left/Right to Right/Left
				{
				int i = (int)(sintrans*w);
				int j;
				for (j=0;j<h/2;j++)
        {
						memcpy(framebuffer+(i+j*w), p+(j*w), (w-i)*4);
						memcpy(framebuffer+(j*w), d+((j+1)*w)-i, i*4);
        }
				for (j=h/2;j<h;j++)
        {
						memcpy(framebuffer+(j*w), p+(i+j*w), (w-i)*4);
						memcpy(framebuffer+(j*w)+(w-i), d+(j*w), i*4);
        }
				}
	    break;
		case 8: // Left/Right to Center
				{
				int i = (int)(sintrans*w/2);
				int j;
				for (j=0;j<h;j++)
        {
						memcpy(framebuffer+(j*w), d+((j+1)*w-i-w/2), i*4);
						memcpy(framebuffer+((j+1)*w-i), d+(j*w+w/2), i*4);
						memcpy(framebuffer+(j*w)+i, p+(j*w)+i, (w-i*2)*4);
        }
				}
	    break;
		case 9: // Left/Right to Center, squeeze
				{
	  			int i = (int)(sintrans*w/2);
		  		int j;
			  	for (j=0;j<h;j++)
          {
            if (i) 
            {
              int xl=i;
              int xp=0;
              int dxp=((w/2)<<16)/xl;
              int *ot=framebuffer+(j*w);
              int *it=d+(j*w);
              while (xl--)
              {
                *ot++=it[xp>>16];
                xp+=dxp;
              }
            }

            if (i*2 != w) 
            {
              int xl=w-i*2;
              int xp=0;
              int dxp=(w<<16)/xl;
              int *ot=framebuffer+(j*w)+i;
              int *it=p+(j*w);
              while (xl--)
              {
                *ot++=it[xp>>16];
                xp+=dxp;
              }
            }
            if (i) 
            {
              int xl=i;
              int xp=0;
              int dxp=((w/2)<<16)/xl;
              int *ot=framebuffer+(j*w)+w-i;
              int *it=d+(j*w)+w/2;
              while (xl--)
              {
                *ot++=it[xp>>16];
                xp+=dxp;
              }
            }


          }
				}
	    break;
    case 10: // Left to right wipe
				{
				int i = (int)(sintrans*w);
				int j;
				for (j=0;j<h;j++)
        {
						memcpy(framebuffer+(i+j*w), p+(j*w)+i, (w-i)*4);
						memcpy(framebuffer+(j*w), d+(j*w), i*4);
        }
				}
	    break;
    case 11: // Right to left wipe
				{
				int i = (int)(sintrans*w);
				int j;
				for (j=0;j<h;j++)
        {
						memcpy(framebuffer+(j*w), p+(j*w), (w-i)*4);
						memcpy(framebuffer+(j*w)+(w-i), d+(j*w)+(w-i), i*4);
        }
				}
	    break;
    case 12: // Top to bottom wipe
				{
				int i = (int)(sintrans*h);
				memcpy(framebuffer, d, w*i*4);
				memcpy(framebuffer+w*i, p+w*i, w*(h-i)*4);
				}
	    break;
    case 13: // Bottom to top wipe
				{
				int i = (int)(sintrans*h);
				memcpy(framebuffer, p, w*(h-i)*4);
				memcpy(framebuffer+w*(h-i), d+w*(h-i), w*i*4);
				}
	    break;
    case 14: // dot dissolve
      {
        int i=((int)(sintrans*5))-5;
        int j;
        int t=0;
        int dir=1;
        
        if (i < 0)
        {
          dir=!dir;
          i++;
          i=-i;
        }
        i=1<<i;
        for (j = 0; j < h; j ++)
        {
          if (t++==i)
          {
            int x=w;
            t=0;
            int t2=0;
            int *of=framebuffer+j*w;
            int *p2=(dir?p:d)+j*w;
            int *d2=(dir?d:p)+j*w;
            while (x--)
            {
              if (t2++==i)
              {
                of[0]=p2[0];
                t2=0;
              }
              else of[0]=d2[0];
              p2++;
              d2++;
              of++;            
            }
          }
          else
            memcpy(framebuffer+j*w,(dir?d:p)+j*w,w*sizeof(int));
        }
      }
    break;
    default:
		  break;
  }
Пример #3
0
int C_RenderTransitionClass::LoadPreset(char *file, int which, C_UndoItem *item)
{
  if (initThread)
  {
    if (WaitForSingleObject(initThread,0)==WAIT_TIMEOUT) 
    {
      DDraw_SetStatusText("loading [wait]...",1000*100);
      return 2;
    }
    CloseHandle(initThread);
    initThread=0;
  }


  EnterCriticalSection(&g_render_cs);
  if (enabled)
  {
    enabled=0;
  }

	int r = 0;
  
  if (item) 
  {
    g_render_effects2->__LoadPresetFromUndo(*item,1);
    last_which=which;
    _dotransitionflag=2;
  }
  else
  {
    lstrcpyn(last_file,file,sizeof(last_file));
    if (file[0]) r=g_render_effects2->__LoadPreset(file,1);
    else 
    {
      g_render_effects2->clearRenders();
    }
    if (!r && l_w && l_h && (cfg_transitions2&which) && ((cfg_transitions2&128)||DDraw_IsFullScreen()))
    {
      DWORD id;
      last_which=which;
      _dotransitionflag=1;
      initThread=(HANDLE)_beginthreadex(NULL,0,m_initThread,(LPVOID)this,0,(unsigned int*)&id);
      DDraw_SetStatusText("loading...",1000*100);
    }
    else
    {
      last_which=which;
      _dotransitionflag=2;
    }

    if (r)
    {
      char s[MAX_PATH*2];
      wsprintf(s,"error loading: %s",scanstr_back(last_file,"\\",last_file-1)+1);
      DDraw_SetStatusText(s);
      _dotransitionflag=3;
    }
    C_UndoStack::clear();
    C_UndoStack::saveundo(1);
    C_UndoStack::cleardirty();
  }
  LeaveCriticalSection(&g_render_cs);

  return !!r;
}