summaryrefslogtreecommitdiff
path: root/lib/igt_chamelium.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/igt_chamelium.c')
-rw-r--r--lib/igt_chamelium.c80
1 files changed, 53 insertions, 27 deletions
diff --git a/lib/igt_chamelium.c b/lib/igt_chamelium.c
index 6ac7b722..ffc68f35 100644
--- a/lib/igt_chamelium.c
+++ b/lib/igt_chamelium.c
@@ -964,31 +964,6 @@ void chamelium_get_audio_channel_mapping(struct chamelium *chamelium,
xmlrpc_DECREF(res);
}
-/**
- * chamelium_start_capturing_audio:
- * @chamelium: the Chamelium instance
- * @port: the port to capture audio from (it must support audio)
- * @save_to_file: whether the captured audio data should be saved to a file on
- * the Chamelium device
- *
- * Starts capturing audio from a Chamelium port. To stop the capture, use
- * #chamelium_stop_capturing_audio. To retrieve the audio data, either use the
- * stream server or enable @save_to_file (the latter is mainly useful for
- * debugging purposes).
- *
- * It isn't possible to capture audio from multiple ports at the same time.
- */
-void chamelium_start_capturing_audio(struct chamelium *chamelium,
- struct chamelium_port *port,
- bool save_to_file)
-{
- xmlrpc_value *res;
-
- res = chamelium_rpc(chamelium, port, "StartCapturingAudio", "(ib)",
- port->id, save_to_file);
- xmlrpc_DECREF(res);
-}
-
static void audio_format_from_xml(struct chamelium *chamelium,
xmlrpc_value *res, int *rate, int *channels)
{
@@ -1008,8 +983,10 @@ static void audio_format_from_xml(struct chamelium *chamelium,
igt_assert(strcmp(sample_format, "S32_LE") == 0);
free(sample_format);
- xmlrpc_read_int(&chamelium->env, res_rate, rate);
- xmlrpc_read_int(&chamelium->env, res_channel, channels);
+ if (rate)
+ xmlrpc_read_int(&chamelium->env, res_rate, rate);
+ if (channels)
+ xmlrpc_read_int(&chamelium->env, res_channel, channels);
xmlrpc_DECREF(res_channel);
xmlrpc_DECREF(res_sample_format);
@@ -1018,6 +995,55 @@ static void audio_format_from_xml(struct chamelium *chamelium,
}
/**
+ * chamelium_get_audio_format:
+ * @chamelium: the Chamelium instance
+ * @port: the audio port
+ * @rate: if non-NULL, will be set to the sample rate in Hz
+ * @channels: if non-NULL, will be set to the number of channels
+ *
+ * Obtains the audio format of the captured data. Users should start sending an
+ * audio signal to the Chamelium device prior to calling this function.
+ *
+ * The captured data is guaranteed to be in the S32_LE format.
+ */
+void chamelium_get_audio_format(struct chamelium *chamelium,
+ struct chamelium_port *port,
+ int *rate, int *channels)
+{
+ xmlrpc_value *res;
+
+ res = chamelium_rpc(chamelium, port, "GetAudioFormat", "(i)",
+ port->id);
+ audio_format_from_xml(chamelium, res, rate, channels);
+ xmlrpc_DECREF(res);
+}
+
+/**
+ * chamelium_start_capturing_audio:
+ * @chamelium: the Chamelium instance
+ * @port: the port to capture audio from (it must support audio)
+ * @save_to_file: whether the captured audio data should be saved to a file on
+ * the Chamelium device
+ *
+ * Starts capturing audio from a Chamelium port. To stop the capture, use
+ * #chamelium_stop_capturing_audio. To retrieve the audio data, either use the
+ * stream server or enable @save_to_file (the latter is mainly useful for
+ * debugging purposes).
+ *
+ * It isn't possible to capture audio from multiple ports at the same time.
+ */
+void chamelium_start_capturing_audio(struct chamelium *chamelium,
+ struct chamelium_port *port,
+ bool save_to_file)
+{
+ xmlrpc_value *res;
+
+ res = chamelium_rpc(chamelium, port, "StartCapturingAudio", "(ib)",
+ port->id, save_to_file);
+ xmlrpc_DECREF(res);
+}
+
+/**
* chamelium_stop_capturing_audio:
* @chamelium: the Chamelium instance
* @port: the port from which audio is being captured