1
1
// ------------------------------------------------------------------------
2
2
// eca-control-objects.cpp: Class for configuring libecasound objects
3
// Copyright (C) 2000-2004 Kai Vehmanen
3
// Copyright (C) 2000-2004,2006 Kai Vehmanen
4
4
// Copyright (C) 2005 Stuart Allie
7
// eca-style-version: 3
7
// eca-style-version: 3 (see Ecasound Programmer's Guide)
9
9
// This program is free software; you can redistribute it and/or modify
10
10
// it under the terms of the GNU General Public License as published by
323
323
/* 6. reload the edited chainsetup and reset runtime state */
324
324
load_chainsetup(filename);
325
remove(filename.c_str());
326
if (origfilename.empty() != true) {
327
set_chainsetup_filename(origfilename);
326
if (is_selected() != true) {
327
ECA_LOG_MSG(ECA_LOGGER::info,
328
std::string("Unable to parse chainsetup, keeping the temporary file ") + filename);
329
selected_chainsetup_repp->seek_position_in_samples(origpos);
331
if (hot_swap == true) {
332
/* 6.1 disconnect the chainsetup to be replaced */
333
disconnect_chainsetup();
335
/* 6.2 try to connect the edited chainsetup */
336
select_chainsetup("cs-edit-temp");
337
if (is_valid() == true) {
338
connect_chainsetup();
339
/* should succeed as is_valid() is true */
340
DBC_CHECK(is_connected() == true);
341
if (is_connected() == true) {
342
if (restart == true) {
343
DBC_CHECK(is_running() != true);
331
remove(filename.c_str());
332
if (origfilename.empty() != true) {
333
set_chainsetup_filename(origfilename);
336
if (selected_chainsetup_repp)
337
selected_chainsetup_repp->seek_position_in_samples(origpos);
339
if (hot_swap == true) {
340
/* 6.1 disconnect the chainsetup to be replaced */
341
disconnect_chainsetup();
343
/* 6.2 try to connect the edited chainsetup */
344
select_chainsetup("cs-edit-temp");
345
if (is_valid() == true) {
346
connect_chainsetup();
347
/* should succeed as is_valid() is true */
348
DBC_CHECK(is_connected() == true);
349
if (is_connected() == true) {
350
if (restart == true) {
351
DBC_CHECK(is_running() != true);
349
/* 6.3 if connecting the modified chainsetup fails */
350
if (is_connected() != true) {
351
ECA_LOG_MSG(ECA_LOGGER::info, "Can't connect; edited chainsetup is not valid.");
357
/* 6.3 if connecting the modified chainsetup fails */
358
if (is_connected() != true) {
359
ECA_LOG_MSG(ECA_LOGGER::info, "Can't connect; edited chainsetup is not valid.");
354
/* 6.4 remove the old chainsetup */
355
select_chainsetup(origname);
357
select_chainsetup("cs-edit-temp");
358
selected_chainsetup_repp->set_name(origname);
362
/* 6.4 remove the old chainsetup */
363
select_chainsetup(origname);
365
select_chainsetup("cs-edit-temp");
366
selected_chainsetup_repp->set_name(origname);
1239
1251
format.interleaved_channels());
1254
static AUDIO_IO* priv_select_audio_object(const std::vector<AUDIO_IO*>& objects, const std::string& name)
1256
AUDIO_IO* result = 0;
1258
/* NOTE: ugly, but needed to maintain compability with older 2.4.x
1259
* releases that allowed double-quoted filenames to ai/ao-select */
1260
std::string stripped_name;
1261
if (name.size() > 0 &&
1263
stripped_name = name;
1264
kvu_string_strip_outer_quotes(&stripped_name, '"');
1267
std::vector<AUDIO_IO*>::size_type p = 0;
1268
for(p = 0; p != objects.size(); p++) {
1269
if (objects[p]->label() == name ||
1270
objects[p]->label() == stripped_name) {
1271
result = objects[p];
1272
/* note: in case 'name' is not unique, the first matching
1273
* instance is selected */
1243
1282
* Selects an audio input
1251
1290
DBC_REQUIRE(is_selected() == true);
1254
selected_audio_input_repp = 0;
1255
std::vector<AUDIO_IO*>::size_type p = 0;
1256
for(p = 0; p != selected_chainsetup_repp->inputs.size(); p++) {
1257
if (selected_chainsetup_repp->inputs[p]->label() == name) {
1258
selected_audio_input_repp = selected_chainsetup_repp->inputs[p];
1293
selected_audio_input_repp =
1294
priv_select_audio_object(selected_chainsetup_repp->inputs, name);
1267
1301
* is_selected() == true
1269
void ECA_CONTROL_OBJECTS::select_audio_output(const string& name) {
1303
void ECA_CONTROL_OBJECTS::select_audio_output(const string& name)
1271
1306
DBC_REQUIRE(is_selected() == true);
1274
selected_audio_output_repp = 0;
1275
std::vector<AUDIO_IO*>::size_type p = 0;
1276
for(p = 0; p != selected_chainsetup_repp->outputs.size(); p++) {
1277
if (selected_chainsetup_repp->outputs[p]->label() == name) {
1278
selected_audio_output_repp = selected_chainsetup_repp->outputs[p];
1309
selected_audio_output_repp =
1310
priv_select_audio_object(selected_chainsetup_repp->outputs, name);