Forráskód Böngészése

* libdts bug! I added a small work around for that in the header file
* a52 header cleanup
* madopenal sample fix
* extended modplug headers

git-svn-id: trunk@4698 -

ivost 19 éve
szülő
commit
acab962bb3

+ 4 - 4
packages/extra/a52/a52.pas

@@ -337,13 +337,13 @@ type
 
   pa52_decoder = ^a52_decoder;
   a52_decoder = record
-    inbuf       : array[0..4095] of cuint8;
+    inbuf       : array[0..4096-1] of cuint8;
     inbuf_ptr   : pcuint8;
     frame_size  : cint;
     state       : pa52_state_t;
     fsamples    : pa52_sample_t; // internal samples buffer of a52 (returned by a52_samples)
 
-    samples     : array[0..1,0..1535] of cint16;
+    samples     : array[0..1,0..6*256-1] of cint16;
     samplecnt   : cint;
     sampleofs   : cint;
     user        : pointer;
@@ -431,7 +431,7 @@ begin
         if len = 0 then
         begin
           (* no sync found : move by one byte (inefficient, but simple!) *)
-          Move(decoder^.inbuf[1], decoder^.inbuf[0], PtrInt(decoder^.inbuf_ptr) - PtrInt(@decoder^.inbuf) - 1);
+          Move(decoder^.inbuf[1], decoder^.inbuf[0], ptrint(decoder^.inbuf_ptr) - ptrint(@decoder^.inbuf) - 1);
           Dec(decoder^.inbuf_ptr, 1);
         end else begin
           decoder^.frame_size := len;
@@ -480,7 +480,7 @@ begin
       end;
 
       (* skip decoded frame *)
-      Move(decoder^.inbuf[decoder^.frame_size], decoder^.inbuf[0], PtrInt(decoder^.inbuf_ptr) - PtrInt(@decoder^.inbuf) - decoder^.frame_size);
+      Move(decoder^.inbuf[decoder^.frame_size], decoder^.inbuf[0], ptrint(decoder^.inbuf_ptr) - ptrint(@decoder^.inbuf) - decoder^.frame_size);
       Dec(decoder^.inbuf_ptr, decoder^.frame_size);
       decoder^.frame_size := 0;
 

+ 10 - 14
packages/extra/dts/dts.pas

@@ -355,13 +355,13 @@ type
 
   pdts_decoder = ^dts_decoder;
   dts_decoder = record
-    inbuf       : array[0..4095] of cuint8;
+    inbuf       : array[0..24576-1] of cuint8;
     inbuf_ptr   : pcuint8;
     frame_size  : cint;
     state       : pdts_state_t;
     fsamples    : pdts_sample_t; // internal samples buffer of dts (returned by dts_samples)
 
-    samples     : array[0..1,0..1535] of cint16;
+    samples     : array[0..1,0..6*256-1] of cint16;
     samplecnt   : cint;
     sampleofs   : cint;
     user        : pointer;
@@ -443,15 +443,12 @@ begin
       if decoder^.frame_size = 0 then
       begin
         (* no header seen : find one. We need at least 7 bytes to parse it *)
-        //WriteLn('no header seen (', len, ')');
 
         len := dts_syncinfo(decoder^.state, @decoder^.inbuf, decoder^.flags, sample_rate, bit_rate, i{dummy});
-        WriteLn('dts_syncinfo ', len);
-
         if len = 0 then
         begin
           (* no sync found : move by one byte (inefficient, but simple!) *)
-          Move(decoder^.inbuf[1], decoder^.inbuf[0], PtrInt(decoder^.inbuf_ptr) - PtrInt(@decoder^.inbuf) - 1);
+          Move(decoder^.inbuf[1], decoder^.inbuf[0], ptrint(decoder^.inbuf_ptr) - ptrint(@decoder^.inbuf) - 1);
           Dec(decoder^.inbuf_ptr, 1);
         end else begin
           decoder^.frame_size := len;
@@ -463,7 +460,7 @@ begin
           if decoder^.flags and A52_LFE <> 0 then
             Inc(decoder^.channels);}
 
-         {WriteLn('  frame_size  : ', decoder^.frame_size);
+          {WriteLn('  frame_size  : ', decoder^.frame_size);
           WriteLn('  sample_rate : ', sample_rate);
           WriteLn('  bit_rate    : ', bit_rate);
           WriteLn('  channels    : ', decoder^.channels);}
@@ -473,8 +470,9 @@ begin
       end;
 
       (* decode the frame *)
-      flags := DTS_STEREO;//decoder^.flags;
-      level := High(Smallint)-30;
+      flags := DTS_STEREO or DTS_ADJUST_LEVEL;//decoder^.flags;
+      level := 0;//High(Smallint)-30;
+      (* FIXME dts_frame dont care on level parameters, so I set it to zero and multiply with High(Smallint) later *)
 
       if dts_frame(decoder^.state, @decoder^.inbuf, flags, level, 0) <> 0 then
       begin
@@ -484,8 +482,6 @@ begin
       end;
 
       len := dts_blocks_num(decoder^.state);
-      WriteLn('dts_blocks_num ', len);
-
       for i := 0 to len - 1 do
       begin
         if dts_block(decoder^.state) <> 0 then
@@ -497,13 +493,13 @@ begin
 
         for j := 0 to 255 do
         begin
-          decoder^.samples[0, i*256+j] := Round(decoder^.fsamples[j + 000]);
-          decoder^.samples[1, i*256+j] := Round(decoder^.fsamples[j + 256]);
+          decoder^.samples[0, i*256+j] := Round(High(Smallint)*decoder^.fsamples[j + 000]);
+          decoder^.samples[1, i*256+j] := Round(High(Smallint)*decoder^.fsamples[j + 256]);
         end;
       end;
 
       (* skip decoded frame *)
-      Move(decoder^.inbuf[decoder^.frame_size], decoder^.inbuf[0], PtrInt(decoder^.inbuf_ptr) - PtrInt(@decoder^.inbuf) - decoder^.frame_size);
+      Move(decoder^.inbuf[decoder^.frame_size], decoder^.inbuf[0], ptrint(decoder^.inbuf_ptr) - ptrint(@decoder^.inbuf) - decoder^.frame_size);
       Dec(decoder^.inbuf_ptr, decoder^.frame_size);
       decoder^.frame_size := 0;
 

+ 4 - 4
packages/extra/modplug/modplug.pas

@@ -117,17 +117,17 @@ procedure ModPlug_SetSettings(const settings: PModPlug_Settings); cdecl; externa
 
 
 // libc functions
-function _new(s: cuint): pointer; cdecl;
-procedure _delete(p: pointer); cdecl;
+//function _new(s: cuint): pointer; cdecl;
+//procedure _delete(p: pointer); cdecl;
 
 implementation
 
-function _new(s: cuint): pointer; cdecl;
+{function _new(s: cuint): pointer; cdecl;
 begin
 end;
 
 procedure _delete(p: pointer); cdecl;
 begin
-end;
+end;}
 
 end.

+ 9 - 7
packages/extra/openal/examples/madopenal.pas

@@ -121,7 +121,9 @@ function dts_read(const Buffer: Pointer; const Count: Longword): Longword;
 var
   Res: cint;
 begin
+  //WriteLn('enter dts_decoder_read');
   Res := dts_decoder_read(dts_decoder, Buffer, Count);
+  //WriteLn('leave dts_decoder_read ', Res);
   if Res < 0 then
     Result := 0 else
     Result := Res;
@@ -178,7 +180,7 @@ begin
   end;
 
   // Under windows, AL_LOOPING = AL_TRUE breaks queueing, no idea why
-  alSourcei(al_source, AL_LOOPING, AL_FALSE);
+  alSourcei(al_source, AL_LOOPING, {AL_FALSE}AL_TRUE);
   alSourcePlay(al_source);
 end;
 
@@ -197,6 +199,8 @@ begin
   alGetSourcei(al_source, AL_BUFFERS_PROCESSED, processed);
   while (processed > 0) and (processed <= al_bufcount) do
   begin
+    Write('.');
+
     alSourceUnqueueBuffers(al_source, 1, @buffer);
 
     if codec_read(al_readbuf, al_bufsize) = 0 then
@@ -221,17 +225,17 @@ var
   tmp: pointer;
 begin
 // define codec
-  WriteLn('Define codec');
+  {WriteLn('Define codec');
   Writeln('  (1) mp3');
   Writeln('  (2) ogg');
   Writeln('  (3) ac3');
   Writeln('  (4) dts');
   Writeln('  (5) xm,mod,it,s3m');
   Write('Enter: '); ReadLn(codec);
-  Write('File: '); ReadLn(Filename);
+  Write('File: '); ReadLn(Filename);}
 
-  {codec := 3;
-  Filename := 'test4.ac3';}
+  codec := 4;
+  Filename := 'test.dts';
 
 
 // load file
@@ -324,10 +328,8 @@ begin
 
 // play
   alPlay;
-  writeln('begin process');
   while alProcess do
     Sleep(al_polltime);
-  writeln('end process');
 
 // finalize openal
   alDeleteSources(1, @al_source);