Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: So Apr 28, 2024 19:35

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 
Autor Nachricht
 Betreff des Beitrags: Delphi spinnt??
BeitragVerfasst: Di Jul 21, 2009 18:47 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 31, 2007 18:32
Beiträge: 150
Programmiersprache: Pascal
Ich benutze Delphi 7 Enterprise jetzt schon einige Zeit, aber sowas ist mir noch nicht unter gekommen...

Hier ist FFileData.DataSource = ADataStorage
Code:
  1.  
  2. procedure TOGG.LoadHeader(ADataStorage: TDataStorage);
  3. begin
  4.   OV_Open_Callbacks(ADataStorage, FFileData, nil, 0, Callbacks);
  5.   if OV_Info(FFileData, -1)^.channels = 1
  6.     then FFormat := sbf_MONO16
  7.     else FFormat := sbf_STEREO16;
  8. end;
  9.  

Das hier wird später aufgerufen
Code:
  1.  
  2. procedure TOGG.UpdateBuffer(ABuffer : TBuffer);
  3. var
  4.   Section: Integer;
  5.   Size: Integer;
  6.   Res: Integer;
  7. begin
  8.   if not (ABuffer is TSoundBuffer) then Exit;
  9.   if FFileData.Offset >= FFileData.End_V then Exit;
  10.   Size := 0;
  11.   while (Size < ABuffer.Size) do
  12.     begin
  13.       Res := OV_Read(FFileData, PByteArray(ABuffer.Data)^[Size], ABuffer.Size - Size, 0, 2, 1, @Section);
  14.       if Res <= 0 then Break;
  15.       Inc(Size, Res)
  16.     end;
  17.   if Size = 0 then Exit;
  18.   TSoundBuffer(ABuffer).Format   := FFormat;
  19.   TSoundBuffer(ABuffer).Frequenz := OV_Info(FFileData, -1)^.Rate;
  20.   ABuffer.Update;
  21. end;
  22.  


Wird nach OV_Open_Callbacks und nach OV_Read ich unterscheide nur zwischen den beiden da sich beim debuggen gezeigt hat das sich nach OV_Read das verhalten der folgenden Methode drastisch verändert...
Code:
  1.  
  2. function Read_Func(var Ptr; Size, nmemb : Cardinal; const Datasource) : Cardinal; cdecl;
  3. begin
  4.   Result := 0;
  5.   if (Size * nmemb = 0) then Exit;
  6.   TDataStorage(Datasource).Read(Ptr, Size * nmemb);
  7.   if (TDataStorage(Datasource).Size - TDataStorage(Datasource).Position) > nmemb
  8.     then Result := nmemb;
  9. end;
  10.  

TDataStorage(Datasource).Read führt nicht mehr wie gewoht die Read methode der Klasse TDataStorage aus nein ich lande nach OV_Read in der Klasse TStreamResource.LoadResource....

Ich hoffe auf eure hilfe..

PS: ich habe überprüft bei jedem aufruf von Read_Func ist @Datasource gleich

// Edit

Ich hab das ganze hinbekommen...
Der Klasse ein Feld FDataStorage vom Type TDataStorage gegeben und die Methode so geändert
Code:
  1.  
  2. procedure TOGG.LoadHeader(ADataStorage: TDataStorage);
  3. begin
  4.   FDataStorage := ADataStorage;
  5.   OV_Open_Callbacks(FDataStorage , FFileData, nil, 0, Callbacks);
  6.   if OV_Info(FFileData, -1)^.channels = 1
  7.     then FFormat := sbf_MONO16
  8.     else FFormat := sbf_STEREO16;
  9. end;
  10.  


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 25 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.016s | 17 Queries | GZIP : On ]