[Scummvm-cvs-logs] SF.net SVN: scummvm:[47051] scummvm/trunk/sound

robinwatts at users.sourceforge.net robinwatts at users.sourceforge.net
Tue Jan 5 22:56:14 CET 2010


Revision: 47051
          http://scummvm.svn.sourceforge.net/scummvm/?rev=47051&view=rev
Author:   robinwatts
Date:     2010-01-05 21:56:13 +0000 (Tue, 05 Jan 2010)

Log Message:
-----------
Update ARM version of rate filler code in line with LordHoto's change
in revision 47014.

Revision Links:
--------------
    http://scummvm.svn.sourceforge.net/scummvm/?rev=47014&view=rev

Modified Paths:
--------------
    scummvm/trunk/sound/rate_arm.cpp
    scummvm/trunk/sound/rate_arm_asm.s

Modified: scummvm/trunk/sound/rate_arm.cpp
===================================================================
--- scummvm/trunk/sound/rate_arm.cpp	2010-01-05 21:52:28 UTC (rev 47050)
+++ scummvm/trunk/sound/rate_arm.cpp	2010-01-05 21:56:13 UTC (rev 47051)
@@ -137,7 +137,8 @@
 #endif
 }
 
-extern "C" void ARM_SimpleRate_M(AudioStream       &input,
+extern "C" st_sample_t *ARM_SimpleRate_M(
+                                 AudioStream       &input,
                                  int (*fn)(Audio::AudioStream&,int16*,int),
                                  SimpleRateDetails *sr,
                                  st_sample_t       *obuf,
@@ -145,7 +146,8 @@
                                  st_volume_t        vol_l,
                                  st_volume_t        vol_r);
 
-extern "C" void ARM_SimpleRate_S(AudioStream       &input,
+extern "C" st_sample_t *ARM_SimpleRate_S(
+                                 AudioStream       &input,
                                  int (*fn)(Audio::AudioStream&,int16*,int),
                                  SimpleRateDetails *sr,
                                  st_sample_t       *obuf,
@@ -153,7 +155,8 @@
                                  st_volume_t        vol_l,
                                  st_volume_t        vol_r);
 
-extern "C" void ARM_SimpleRate_R(AudioStream       &input,
+extern "C" st_sample_t *ARM_SimpleRate_R(
+                                 AudioStream       &input,
                                  int (*fn)(Audio::AudioStream&,int16*,int),
                                  SimpleRateDetails *sr,
                                  st_sample_t       *obuf,
@@ -178,23 +181,25 @@
 fprintf(stderr, "Simple st=%d rev=%d\n", stereo, reverseStereo);
 fflush(stderr);
 #endif
+	st_sample_t *ostart = obuf;
+
 	if (!stereo) {
-		ARM_SimpleRate_M(input,
-		                 &SimpleRate_readFudge,
-		                 &sr,
-				 obuf, osamp, vol_l, vol_r);
+		obuf = ARM_SimpleRate_M(input,
+		                        &SimpleRate_readFudge,
+		                        &sr,
+			                obuf, osamp, vol_l, vol_r);
 	} else if (reverseStereo) {
-		ARM_SimpleRate_R(input,
-		                 &SimpleRate_readFudge,
-		                 &sr,
-				 obuf, osamp, vol_l, vol_r);
+		obuf = ARM_SimpleRate_R(input,
+		                        &SimpleRate_readFudge,
+		                        &sr,
+				        obuf, osamp, vol_l, vol_r);
 	} else {
-		ARM_SimpleRate_S(input,
-		                 &SimpleRate_readFudge,
-		                 &sr,
-				 obuf, osamp, vol_l, vol_r);
+		obuf = ARM_SimpleRate_S(input,
+		                        &SimpleRate_readFudge,
+		                        &sr,
+				        obuf, osamp, vol_l, vol_r);
 	}
-	return (ST_SUCCESS);
+	return (obuf-ostart)/2;
 }
 
 /**
@@ -236,7 +241,8 @@
 #endif
 }
 
-extern "C" void ARM_LinearRate_M(AudioStream       &input,
+extern "C" st_sample_t *ARM_LinearRate_M(
+                                 AudioStream       &input,
                                  int (*fn)(Audio::AudioStream&,int16*,int),
                                  LinearRateDetails *lr,
                                  st_sample_t       *obuf,
@@ -244,7 +250,8 @@
                                  st_volume_t        vol_l,
                                  st_volume_t        vol_r);
 
-extern "C" void ARM_LinearRate_S(AudioStream       &input,
+extern "C" st_sample_t *ARM_LinearRate_S(
+                                 AudioStream       &input,
                                  int (*fn)(Audio::AudioStream&,int16*,int),
                                  LinearRateDetails *lr,
                                  st_sample_t       *obuf,
@@ -252,7 +259,8 @@
                                  st_volume_t        vol_l,
                                  st_volume_t        vol_r);
 
-extern "C" void ARM_LinearRate_R(AudioStream       &input,
+extern "C" st_sample_t *ARM_LinearRate_R(
+                                 AudioStream       &input,
                                  int (*fn)(Audio::AudioStream&,int16*,int),
                                  LinearRateDetails *lr,
                                  st_sample_t       *obuf,
@@ -304,7 +312,7 @@
 
 /*
  * Processed signed long samples from ibuf to obuf.
- * Return number of samples processed.
+ * Return number of sample pairs processed.
  */
 template<bool stereo, bool reverseStereo>
 int LinearRateConverter<stereo, reverseStereo>::flow(AudioStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol_l, st_volume_t vol_r) {
@@ -313,23 +321,25 @@
 fprintf(stderr, "Linear st=%d rev=%d\n", stereo, reverseStereo);
 fflush(stderr);
 #endif
+	st_sample_t *ostart = obuf;
+
 	if (!stereo) {
-		ARM_LinearRate_M(input,
-		                 &SimpleRate_readFudge,
-		                 &lr,
-				 obuf, osamp, vol_l, vol_r);
+		obuf = ARM_LinearRate_M(input,
+		                        &SimpleRate_readFudge,
+		                        &lr,
+				        obuf, osamp, vol_l, vol_r);
 	} else if (reverseStereo) {
-		ARM_LinearRate_R(input,
-		                 &SimpleRate_readFudge,
-		                 &lr,
-				 obuf, osamp, vol_l, vol_r);
+		obuf = ARM_LinearRate_R(input,
+		                        &SimpleRate_readFudge,
+		                        &lr,
+				        obuf, osamp, vol_l, vol_r);
 	} else {
-		ARM_LinearRate_S(input,
-		                 &SimpleRate_readFudge,
-		                 &lr,
-				 obuf, osamp, vol_l, vol_r);
+		obuf = ARM_LinearRate_S(input,
+		                        &SimpleRate_readFudge,
+		                        &lr,
+				        obuf, osamp, vol_l, vol_r);
 	}
-	return (ST_SUCCESS);
+	return (obuf-ostart)/2;
 }
 
 
@@ -347,19 +357,22 @@
 #endif
 }
 
-extern "C" void ARM_CopyRate_M(st_size_t    len,
+extern "C" st_sample_t *ARM_CopyRate_M(
+                               st_size_t    len,
                                st_sample_t *obuf,
                                st_volume_t  vol_l,
                                st_volume_t  vol_r,
                                st_sample_t *_buffer);
 
-extern "C" void ARM_CopyRate_S(st_size_t    len,
+extern "C" st_sample_t *ARM_CopyRate_S(
+                               st_size_t    len,
                                st_sample_t *obuf,
                                st_volume_t  vol_l,
                                st_volume_t  vol_r,
                                st_sample_t *_buffer);
 
-extern "C" void ARM_CopyRate_R(st_size_t    len,
+extern "C" st_sample_t *ARM_CopyRate_R(
+                               st_size_t    len,
                                st_sample_t *obuf,
                                st_volume_t  vol_l,
                                st_volume_t  vol_r,
@@ -384,6 +397,7 @@
 fflush(stderr);
 #endif
 		st_size_t len;
+                st_sample_t *ostart = obuf;
 
 		if (stereo)
 			osamp *= 2;
@@ -398,17 +412,17 @@
 		// Read up to 'osamp' samples into our temporary buffer
 		len = input.readBuffer(_buffer, osamp);
 		if (len <= 0)
-			return (ST_SUCCESS);
+			return 0;
 
 		// Mix the data into the output buffer
 		if (stereo && reverseStereo)
-			ARM_CopyRate_R(len, obuf, vol_l, vol_r, _buffer);
+			obuf = ARM_CopyRate_R(len, obuf, vol_l, vol_r, _buffer);
 		else if (stereo)
-			ARM_CopyRate_S(len, obuf, vol_l, vol_r, _buffer);
+			obuf = ARM_CopyRate_S(len, obuf, vol_l, vol_r, _buffer);
 		else
-			ARM_CopyRate_M(len, obuf, vol_l, vol_r, _buffer);
+			obuf = ARM_CopyRate_M(len, obuf, vol_l, vol_r, _buffer);
 
-		return (ST_SUCCESS);
+		return (obuf-ostart)/2;
 	}
 	virtual int drain(st_sample_t *obuf, st_size_t osamp, st_volume_t vol) {
 		return (ST_SUCCESS);

Modified: scummvm/trunk/sound/rate_arm_asm.s
===================================================================
--- scummvm/trunk/sound/rate_arm_asm.s	2010-01-05 21:52:28 UTC (rev 47050)
+++ scummvm/trunk/sound/rate_arm_asm.s	2010-01-05 21:56:13 UTC (rev 47051)
@@ -72,6 +72,8 @@
         SUBS    r0,r0,#1                @ len--
         BGT     CopyRate_M_loop         @ and loop
 
+	MOV	r0, r1			@ return obuf
+
         LDMFD   r13!,{r4-r7,PC}
 
 _ARM_CopyRate_S:
@@ -108,6 +110,8 @@
         SUBS    r0,r0,#2                @ len -= 2
         BGT     CopyRate_S_loop         @ and loop
 
+	MOV	r0, r1			@ return obuf
+
         LDMFD   r13!,{r4-r7,PC}
 
 _ARM_CopyRate_R:
@@ -144,6 +148,8 @@
         SUBS    r0,r0,#2                @ len -= 2
         BGT     CopyRate_R_loop         @ and loop
 
+	MOV	r0, r1			@ return obuf
+
         LDMFD   r13!,{r4-r7,PC}
 
 _ARM_SimpleRate_M:
@@ -199,6 +205,9 @@
         LDR     r14,[r13,#8]            @ r14 = sr
         ADD     r13,r13,#12             @ Skip over r0-r2 on stack
         STMIA   r14,{r0,r1,r2}          @ Store back updated values
+
+	MOV	r0, r3			@ return obuf
+
         LDMFD   r13!,{r4-r8,r10-r11,PC}
 SimpleRate_M_read:
         LDR     r0, [r13,#8]            @ r0 = sr (8 = 4*2)
@@ -283,6 +292,7 @@
         LDR     r14,[r13,#8]            @ r14 = sr
         ADD     r13,r13,#12             @ skip over r0-r2 on stack
         STMIA   r14,{r0,r1,r2}          @ store back updated values
+	MOV	r0, r3			@ return obuf
         LDMFD   r13!,{r4-r8,r10-r11,PC}
 SimpleRate_S_read:
         LDR     r0, [r13,#8]            @ r0 = sr (8 = 4*2)
@@ -367,6 +377,7 @@
         LDR     r14,[r13,#8]            @ r14 = sr
         ADD     r13,r13,#12             @ Skip over r0-r2 on stack
         STMIA   r14,{r0,r1,r2}          @ Store back updated values
+	MOV	r0, r3			@ return obuf
         LDMFD   r13!,{r4-r8,r10-r11,PC}
 SimpleRate_R_read:
         LDR     r0, [r13,#8]            @ r0 = sr (8 = 4*2)
@@ -469,6 +480,7 @@
 LinearRate_M_end:
         ADD     r13,r13,#8
         STMIA   r2,{r0,r1,r8}
+	MOV	r0, r3			@ return obuf
         LDMFD   r13!,{r4-r11,PC}
 LinearRate_M_read:
         ADD     r0, r2, #28             @ r0 = inPtr = inBuf
@@ -576,6 +588,7 @@
 LinearRate_S_end:
         ADD     r13,r13,#8
         STMIA   r2,{r0,r1,r8}
+	MOV	r0, r3			@ return obuf
         LDMFD   r13!,{r4-r11,PC}
 LinearRate_S_read:
         ADD     r0, r2, #28             @ r0 = inPtr = inBuf
@@ -680,6 +693,7 @@
 LinearRate_R_end:
         ADD     r13,r13,#8
         STMIA   r2,{r0,r1,r8}
+	MOV	r0, r3			@ return obuf
         LDMFD   r13!,{r4-r11,PC}
 LinearRate_R_read:
         ADD     r0, r2, #28             @ r0 = inPtr = inBuf


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list