[Scummvm-git-logs] scummvm master -> f4e399cf4fa5f56dabb52ea914e3cfd9f2b9ed17

sev- noreply at scummvm.org
Sat Nov 18 20:00:44 UTC 2023


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
f4e399cf4f AUDIO: Optimize case for !inStereo && outStereo


Commit: f4e399cf4fa5f56dabb52ea914e3cfd9f2b9ed17
    https://github.com/scummvm/scummvm/commit/f4e399cf4fa5f56dabb52ea914e3cfd9f2b9ed17
Author: Miro Kropacek (miro.kropacek at gmail.com)
Date: 2023-11-18T21:00:40+01:00

Commit Message:
AUDIO: Optimize case for !inStereo && outStereo

Changed paths:
    audio/rate.cpp
    audio/rate.h


diff --git a/audio/rate.cpp b/audio/rate.cpp
index a9770977162..98dea4d5cfd 100644
--- a/audio/rate.cpp
+++ b/audio/rate.cpp
@@ -122,7 +122,7 @@ int RateConverter_Impl<inStereo, outStereo, reverseStereo>::copyConvert(AudioStr
 		outL = (inL * (int)volL) / Audio::Mixer::kMaxMixerVolume;
 		outR = (inR * (int)volR) / Audio::Mixer::kMaxMixerVolume;
 
-		if (outStereo) {
+		if (inStereo && outStereo) {
 			// Output left channel
 			clampedAdd(outBuffer[reverseStereo    ], outL);
 
@@ -132,9 +132,12 @@ int RateConverter_Impl<inStereo, outStereo, reverseStereo>::copyConvert(AudioStr
 			outBuffer += 2;
 		} else {
 			// Output mono channel
-			clampedAdd(outBuffer[0], (outL + outR) / 2);
+			st_sample_t val = clampedAdd(outBuffer[0], (outL + outR) / 2);
 
 			outBuffer += 1;
+
+			if (outStereo)
+				*outBuffer++ = val;
 		}
 	}
 
@@ -182,7 +185,7 @@ int RateConverter_Impl<inStereo, outStereo, reverseStereo>::simpleConvert(AudioS
 		outL = (inL * (int)volL) / Audio::Mixer::kMaxMixerVolume;
 		outR = (inR * (int)volR) / Audio::Mixer::kMaxMixerVolume;
 
-		if (outStereo) {
+		if (inStereo && outStereo) {
 			// output left channel
 			clampedAdd(outBuffer[reverseStereo    ], outL);
 
@@ -192,9 +195,12 @@ int RateConverter_Impl<inStereo, outStereo, reverseStereo>::simpleConvert(AudioS
 			outBuffer += 2;
 		} else {
 			// output mono channel
-			clampedAdd(outBuffer[0], (outL + outR) / 2);
+			st_sample_t val = clampedAdd(outBuffer[0], (outL + outR) / 2);
 
 			outBuffer += 1;
+
+			if (outStereo)
+				*outBuffer++ = val;
 		}
 	}
 	return (outBuffer - outStart) / (outStereo ? 2 : 1);
@@ -247,7 +253,7 @@ int RateConverter_Impl<inStereo, outStereo, reverseStereo>::interpolateConvert(A
 			outL = (inL * (int)volL) / Audio::Mixer::kMaxMixerVolume;
 			outR = (inR * (int)volR) / Audio::Mixer::kMaxMixerVolume;
 
-			if (outStereo) {
+			if (inStereo && outStereo) {
 				// Output left channel
 				clampedAdd(outBuffer[reverseStereo    ], outL);
 
@@ -257,9 +263,12 @@ int RateConverter_Impl<inStereo, outStereo, reverseStereo>::interpolateConvert(A
 				outBuffer += 2;
 			} else {
 				// Output mono channel
-				clampedAdd(outBuffer[0], (outL + outR) / 2);
+				st_sample_t val = clampedAdd(outBuffer[0], (outL + outR) / 2);
 
 				outBuffer += 1;
+
+				if (outStereo)
+					*outBuffer++ = val;
 			}
 
 			// Increment output position
diff --git a/audio/rate.h b/audio/rate.h
index 7b0658c893b..f7f498de7b5 100644
--- a/audio/rate.h
+++ b/audio/rate.h
@@ -46,7 +46,7 @@ enum {
 	ST_SAMPLE_MIN = (-ST_SAMPLE_MAX - 1L)
 };
 
-static inline void clampedAdd(int16& a, int b) {
+static inline int16 clampedAdd(int16& a, int b) {
 	int val;
 #ifdef OUTPUT_UNSIGNED_AUDIO
 	val = (a ^ 0x8000) + b;
@@ -64,6 +64,7 @@ static inline void clampedAdd(int16& a, int b) {
 #else
 	a = val;
 #endif
+	return (int16)val;
 }
 
 /**




More information about the Scummvm-git-logs mailing list