From 2f07b8f4822644cb08d17de4011b4cb9cebe2b12 Mon Sep 17 00:00:00 2001
From: Andrew Basterfield <abasterfield@gmail.com>
Date: Sat, 6 Oct 2018 20:18:19 +0100
Subject: [PATCH] Set cdrive speed hint for cdparanoia

---
 src/input/plugins/CdioParanoiaInputPlugin.cxx | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/src/input/plugins/CdioParanoiaInputPlugin.cxx b/src/input/plugins/CdioParanoiaInputPlugin.cxx
index 4b08cf990..221384df1 100644
--- a/src/input/plugins/CdioParanoiaInputPlugin.cxx
+++ b/src/input/plugins/CdioParanoiaInputPlugin.cxx
@@ -104,6 +104,7 @@ class CdioParanoiaInputStream final : public InputStream {
 static constexpr Domain cdio_domain("cdio");
 
 static bool default_reverse_endian;
+static unsigned speed = 0;
 
 static void
 input_cdio_init(EventLoop &, const ConfigBlock &block)
@@ -118,6 +119,7 @@ input_cdio_init(EventLoop &, const ConfigBlock &block)
 			throw FormatRuntimeError("Unrecognized 'default_byte_order' setting: %s",
 						 value);
 	}
+	speed = block.GetBlockValue("speed",0u);
 }
 
 struct cdio_uri {
@@ -209,6 +211,12 @@ input_cdio_open(const char *uri,
 	}
 
 	cdda_verbose_set(drv, CDDA_MESSAGE_FORGETIT, CDDA_MESSAGE_FORGETIT);
+	if (speed > 0) {
+		FormatDebug(cdio_domain,"Attempting to set CD speed to %dx",speed);
+		cdda_speed_set(drv,speed);
+	} else {
+		FormatDebug(cdio_domain,"Leaving CD speed alone");
+	}
 
 	if (0 != cdio_cddap_open(drv)) {
 		cdio_cddap_close_no_free_cdio(drv);