home *** CD-ROM | disk | FTP | other *** search
/ PC World 2007 April / PCWorld_2007-04_cd.bin / audio-video / kmplayer / kmp.exe / SDK / Exam_Delphi / dsp_TestPas.dpr < prev    next >
Text File  |  2002-09-02  |  7KB  |  250 lines

  1. library dsp_TestPas;
  2.  
  3. { Important note about DLL memory management: ShareMem must be the
  4.   first unit in your library's USES clause AND your project's (select
  5.   Project-View Source) USES clause if your DLL exports any procedures or
  6.   functions that pass strings as parameters or function results. This
  7.   applies to all strings passed to and from your DLL--even those that
  8.   are nested in records and classes. ShareMem is the interface unit to
  9.   the BORLNDMM.DLL shared memory manager, which must be deployed along
  10.   with your DLL. To avoid using BORLNDMM.DLL, pass string information
  11.   using PChar or ShortString parameters. }
  12.  
  13. uses
  14.   SysUtils,
  15.   Classes,
  16.   Graphics,
  17.   Types,
  18.   KMPPlgIn in '..\KMPPlgIn.pas';
  19.  
  20. {$R *.res}
  21.  
  22. var
  23.  winampDSPHeader : TwinampDSPHeader;
  24.  winampDSPModule : TwinampDSPModule;
  25.  
  26.  kmpDSPHeader : TkmpDSPHeader;
  27.  kmpDSPModule : array[0..2] of TkmpDSPModule;
  28.  
  29.  
  30. function getwinampDSPModule(num : integer) : PwinampDSPModule; cdecl;
  31. begin
  32.  if num=0 then Result:=@winampDSPModule
  33.  else Result:=nil;
  34. end;
  35.  
  36. function ModifyAudio(this_mod : PwinampDSPModule;samples : PByte;
  37.   numsamples,bps,nch,srate : integer) : integer; cdecl;
  38. var
  39.  i,rr,aa : integer;
  40.  ps : pSmallint;
  41.  pb : pByte;
  42. begin
  43.  if bps=16 then begin
  44.    ps:=pSmallint(samples);
  45.    if nch=2 then begin
  46.      for i:=0 to numsamples-1 do begin
  47.        rr:=Random($8fff div 5);
  48.        aa:=ps^+rr;
  49.        if aa<-32768 then aa:=-32768
  50.        else if aa>32767 then aa:=32767;
  51.        ps^:=aa;
  52.        inc(ps);
  53.        rr:=Random($8fff div 5);
  54.        aa:=ps^+rr;
  55.        if aa<-32768 then aa:=-32768
  56.        else if aa>32767 then aa:=32767;
  57.        ps^:=aa;
  58.        inc(ps);
  59.      end;
  60.    end
  61.    else if nch=1 then begin
  62.      for i:=0 to numsamples-1 do begin
  63.        rr:=Random($8fff div 5);
  64.        aa:=ps^+rr;
  65.        if aa<-32768 then aa:=-32768
  66.        else if aa>32767 then aa:=32767;
  67.        ps^:=aa;
  68.        inc(ps);
  69.      end;
  70.    end;
  71.  end
  72.  else if bps=8 then begin
  73.    pb:=samples;
  74.    if nch=2 then begin
  75.      for i:=0 to numsamples-1 do begin
  76.        rr:=Random($7f div 5);
  77.        aa:=pb^+rr;
  78.        if aa<0 then aa:=0
  79.        else if aa>255 then aa:=255;
  80.        pb^:=aa;
  81.        inc(pb);
  82.        rr:=Random($7f div 5);
  83.        aa:=pb^+rr;
  84.        if aa<0 then aa:=0
  85.        else if aa>255 then aa:=255;
  86.        pb^:=aa;
  87.        inc(pb);
  88.      end;
  89.    end
  90.    else if nch=1 then begin
  91.      for i:=0 to numsamples-1 do begin
  92.        rr:=Random($7f div 5);
  93.        aa:=pb^+rr;
  94.        if aa<0 then aa:=0
  95.        else if aa>255 then aa:=255;
  96.        pb^:=aa;
  97.        inc(pb);
  98.      end;
  99.    end;
  100.  end;
  101.  
  102.  Result:=numsamples;
  103. end;
  104.  
  105. function getkmpDSPModule(num : integer) : PkmpDSPModule; cdecl;
  106. begin
  107.  if num=0 then Result:=@kmpDSPModule[0]
  108.  else if num=1 then Result:=@kmpDSPModule[1]
  109.  else if num=2 then Result:=@kmpDSPModule[2]
  110.  else Result:=nil;
  111. end;
  112.  
  113. function ModifyVideoHori(this_mod : PkmpDSPModule;image : PkmpYV12Image; ewidth : integer) : integer; cdecl;
  114. var
  115.  i,j : integer;
  116.  ps,pd : pByte;
  117. begin
  118.  ps:=image^.y_plain;
  119.  for i:=0 to image^.Height-1 do begin
  120.    pd:=ps;
  121.    for j:=0 to ewidth-1 do begin
  122.      if (j and 3)=0 then pd^:=0;
  123.      inc(pd);
  124.    end;
  125.    inc(ps,image^.Width);
  126.  end;
  127.  Result:=0;
  128. end;
  129.  
  130. function ModifyVideoVert(this_mod : PkmpDSPModule;image : PkmpYV12Image; ewidth : integer) : integer; cdecl;
  131. var
  132.  i : integer;
  133.  pp : pByte;
  134. begin
  135.  pp:=image^.y_plain;
  136.  for i:=0 to image^.Height-1 do begin
  137.    if (i and 3)=0 then FillChar(pp^,ewidth,0);
  138.    inc(pp,image^.Width);
  139.  end;
  140.  Result:=0;
  141. end;
  142.  
  143. function TimeDisplay(this_mod : PkmpDSPModule;image : PkmpYV12Image; ewidth : integer) : integer; cdecl;
  144. var
  145.  Bmp : TBitmap;
  146.  Img : PkmpYV12Image;
  147.  p : Pointer;
  148.  RR : TRect;
  149. begin
  150.  Bmp:=TBitmap.Create;
  151.  try
  152.    Bmp.Width:=image^.Width;
  153.    Bmp.Height:=20;
  154.    Bmp.HandleType:=bmDIB;
  155.    Bmp.PixelFormat:=pf32bit; // 32Bit└╟ DIB╕ª ╕╕╡Θ▒Γ └º╟╪╝¡ ╝│┴ñ╟╤┤┘.
  156.    RR:=Rect(0,0,Bmp.Width,Bmp.Height);
  157.    Bmp.Canvas.Brush.Color:=clBlack;
  158.    Bmp.Canvas.Font.Color:=clWhite;
  159.    Bmp.Canvas.FillRect(RR);
  160.    Bmp.Canvas.TextOut(2,2,TimeToStr(Now));
  161.    p:=Bmp.ScanLine[Bmp.Height-1]; // DIB└╠▒Γ╢º╣«┐í └τ└╧ │í└╠ ├│└╜└╠┤┘...
  162.    if this_mod.ImageProcessor<>nil then begin
  163.      this_mod.ImageProcessor.kmpAllocYV12Image(Bmp.Width,Bmp.Height,Img);
  164.      try // YV12└╠╣╠┴÷╕ª ╕╕╡Θ░φ
  165.        this_mod.ImageProcessor.kmpRGB32ToYV12(p,Bmp.Width,Bmp.Height,Img);
  166.        // DIB32╕ª YV12╖╬ ║»╚»╟╤┤┘.
  167.        this_mod.ImageProcessor.kmpYV12BlendTransDraw(Img,image,@RR,0,0,200);
  168.        // ╣▌┼⌡╕φ/ ╣Φ░µ┼⌡╕φ╚┐░·╖╬ ▒╫╕░┤┘.
  169.      finally
  170.        this_mod.ImageProcessor.kmpFreeYV12Image(Img);
  171.      end;
  172.    end;
  173.  finally
  174.    Bmp.Free;
  175.  end;
  176.  
  177.  Result:=0;
  178. end;
  179.  
  180.  
  181. function winampDSPGetHeader2 : PwinampDSPHeader; cdecl;
  182. begin
  183.  // For Audio
  184.  winampDSPHeader.version:=$20;
  185.  winampDSPHeader.description:='Test for Audio Plugin K-MultimediaPlayer';
  186.  winampDSPHeader.winampDSPModule:=getwinampDSPModule;
  187.  
  188.  winampDSPModule.description:='Add noise v0.001 for K-MultimediaPlayer';
  189.  winampDSPModule.hwndParent:=0;
  190.  winampDSPModule.hDllInstance:=0;
  191.  winampDSPModule.Config:=nil;
  192.  winampDSPModule.Init:=nil;
  193.  winampDSPModule.ModifySamples:=ModifyAudio;
  194.  winampDSPModule.Quit:=nil;
  195.  winampDSPModule.userData:=nil;
  196.  
  197.  Randomize;
  198.  Result:=@winampDSPHeader;
  199. end;
  200.  
  201.  
  202. function kmpDSPGetHeader2 : PkmpDSPHeader; cdecl;
  203. begin
  204.  // For Video
  205.  kmpDSPHeader.version:=$20;
  206.  kmpDSPHeader.description:='Test for Video Plugin K-MultimediaPlayer';
  207.  kmpDSPHeader.kmpDSPModule:=getkmpDSPModule;
  208.  
  209.  kmpDSPModule[0].description:='Hori Scanline v0.001 for K-MultimediaPlayer';
  210.  kmpDSPModule[0].hwndParent:=0;
  211.  kmpDSPModule[0].hDllInstance:=0;
  212.  kmpDSPModule[0].Config:=nil;
  213.  kmpDSPModule[0].Init:=nil;
  214.  kmpDSPModule[0].BeforeModifyImage:=nil;
  215.  kmpDSPModule[0].AfterModifyImage:=ModifyVideoHori;
  216.  kmpDSPModule[0].Quit:=nil;
  217.  kmpDSPModule[0].userData:=nil;
  218.  
  219.  kmpDSPModule[1].description:='Hori Scanline v0.001 for K-MultimediaPlayer';
  220.  kmpDSPModule[1].hwndParent:=0;
  221.  kmpDSPModule[1].hDllInstance:=0;
  222.  kmpDSPModule[1].Config:=nil;
  223.  kmpDSPModule[1].Init:=nil;
  224.  kmpDSPModule[1].BeforeModifyImage:=nil;
  225.  kmpDSPModule[1].AfterModifyImage:=ModifyVideoVert;
  226.  kmpDSPModule[1].Quit:=nil;
  227.  kmpDSPModule[1].userData:=nil;
  228.  
  229.  kmpDSPModule[2].description:='Time Display v0.001 for K-MultimediaPlayer';
  230.  kmpDSPModule[2].hwndParent:=0;
  231.  kmpDSPModule[2].hDllInstance:=0;
  232.  kmpDSPModule[2].Config:=nil;
  233.  kmpDSPModule[2].Init:=nil;
  234.  kmpDSPModule[2].BeforeModifyImage:=nil;
  235.  kmpDSPModule[2].AfterModifyImage:=TimeDisplay;
  236.  kmpDSPModule[2].Quit:=nil;
  237.  kmpDSPModule[2].userData:=nil;
  238.  
  239.  Result:=@kmpDSPHeader;
  240. end;
  241.  
  242.  
  243. exports // ╟╘╝÷ │δ├Γ
  244.  winampDSPGetHeader2,
  245.  kmpDSPGetHeader2;
  246.  
  247. begin
  248.  
  249. end.
  250.