add Autosave continuous backups by Andras Reuss and Andrew-R
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / adeviceprefs.C
index 4d93df694e2906e285255ffd1f4511ff4f4397ca..78cef42dfb012925800523987fc2c844b317f57d 100644 (file)
@@ -22,6 +22,7 @@
 #include "adeviceprefs.h"
 #include "audioalsa.h"
 #include "audiodevice.inc"
+#include "audiopulse.h"
 #include "bcsignals.h"
 #include "bitspopup.h"
 #include "edl.h"
@@ -62,6 +63,9 @@ void ADevicePrefs::reset()
        follow_audio_config = 0;
        firewire_path = 0;
        firewire_syt = 0;
+       channel_title = 0;
+       firewire_port = 0;
+       firewire_channel = 0;
        syt_title = 0;
        path_title = 0;
 
@@ -86,6 +90,9 @@ void ADevicePrefs::reset()
 
        cine_bits = 0;
        cine_path = 0;
+       server_title = 0;
+       port_title = 0;
+       port = 0;
 }
 
 int ADevicePrefs::initialize(int creation)
@@ -120,6 +127,9 @@ int ADevicePrefs::initialize(int creation)
        case AUDIO_ALSA:
                create_alsa_objs();
                break;
+       case AUDIO_PULSE:
+               create_pulse_objs();
+               break;
        case AUDIO_ESOUND:
                create_esound_objs();
                break;
@@ -161,8 +171,11 @@ int ADevicePrefs::delete_objects()
        case AUDIO_ALSA:
                delete_alsa_objs();
                break;
+       case AUDIO_PULSE:
+               delete_pulse_objs();
+               break;
        case AUDIO_ESOUND:
-                       delete_esound_objs();
+               delete_esound_objs();
                break;
        case AUDIO_1394:
        case AUDIO_DV1394:
@@ -199,9 +212,9 @@ int ADevicePrefs::delete_oss_objs()
 int ADevicePrefs::delete_esound_objs()
 {
        delete server_title;
+       delete server;
        delete port_title;
-       delete esound_server;
-       delete esound_port;
+       delete port;
        return 0;
 }
 
@@ -240,6 +253,15 @@ int ADevicePrefs::delete_alsa_objs()
        return 0;
 }
 
+int ADevicePrefs::delete_pulse_objs()
+{
+#ifdef HAVE_PULSE
+       delete server_title;
+       delete server;
+#endif
+       return 0;
+}
+
 int ADevicePrefs::delete_dvb_objs()
 {
        delete dvb_adapter_title;
@@ -348,6 +370,7 @@ int ADevicePrefs::create_alsa_objs()
        ArrayList<char*> *alsa_titles = new ArrayList<char*>;
        alsa_titles->set_array_delete();
        AudioALSA::list_devices(alsa_titles, 0, mode);
+       AudioALSA::add_pulse_devices(mode, alsa_titles, 0);
 
        alsa_drivers = new ArrayList<BC_ListBoxItem*>;
        for(int i = 0; i < alsa_titles->total; i++)
@@ -404,9 +427,7 @@ int ADevicePrefs::create_alsa_objs()
                                _("Stop playback locks up."));
                dialog->add_subwindow(alsa_workaround);
        }
-
 #endif
-
        return 0;
 }
 
@@ -431,8 +452,8 @@ int ADevicePrefs::create_esound_objs()
        server_title = new BC_Title(x1, y, _("Server:"),
                        MEDIUMFONT, resources->text_default);
        dialog->add_subwindow(server_title);
-       esound_server = new ADeviceTextBox(x1, y + yS(20), output_char);
-       dialog->add_subwindow(esound_server);
+       server = new ADeviceTextBox(x1, y + yS(20), output_char);
+       dialog->add_subwindow(server);
 
        switch(mode) {
        case MODEPLAY:
@@ -445,12 +466,12 @@ int ADevicePrefs::create_esound_objs()
                output_int = &out_config->esound_out_port;
                break;
        }
-       x1 += esound_server->get_w() + xS(5);
+       x1 += server->get_w() + xS(5);
        port_title = new BC_Title(x1, y, _("Port:"),
                        MEDIUMFONT, resources->text_default);
        dialog->add_subwindow(port_title);
-       esound_port = new ADeviceIntBox(x1, y + yS(20), output_int);
-       dialog->add_subwindow(esound_port);
+       port = new ADeviceIntBox(x1, y + yS(20), output_int);
+       dialog->add_subwindow(port);
        return 0;
 }
 
@@ -609,6 +630,29 @@ int ADevicePrefs::create_v4l2mpeg_objs()
 }
 
 
+int ADevicePrefs::create_pulse_objs()
+{
+#ifdef HAVE_PULSE
+       char *output_char = 0;
+       switch(mode) {
+       case MODEPLAY:
+               output_char = out_config->pulse_out_server;
+               break;
+       case MODERECORD:
+               output_char = in_config->pulse_in_server;
+               break;
+       }
+       int x1 = x, y1 = y;
+       x1 += menu->get_w() + xS(5);
+       dialog->add_subwindow(server_title = new BC_Title(x1, y1,
+               _("Server (blank for default):")));
+       y1 += server_title->get_h() + yS(5);
+       dialog->add_subwindow(server = new ADeviceTextBox(x1, y1, output_char));
+#endif
+       return 0;
+}
+
+
 ADriverMenu::ADriverMenu(int x, int y, ADevicePrefs *device_prefs,
        int do_input, int *output)
  : BC_PopupMenu(x, y, xS(125), adriver_to_string(*output), 1)
@@ -650,6 +694,9 @@ void ADriverMenu::create_objects()
 #ifdef HAVE_VIDEO4LINUX2
        if(do_input) add_item(new ADriverItem(this, AUDIO_V4L2MPEG_TITLE, AUDIO_V4L2MPEG));
 #endif
+#ifdef HAVE_PULSE
+       add_item(new ADriverItem(this, AUDIO_PULSE_TITLE, AUDIO_PULSE));
+#endif
 }
 
 char* ADriverMenu::adriver_to_string(int driver)
@@ -664,6 +711,9 @@ char* ADriverMenu::adriver_to_string(int driver)
        case AUDIO_ESOUND:
                sprintf(string, AUDIO_ESOUND_TITLE);
                break;
+       case AUDIO_PULSE:
+               sprintf(string, AUDIO_PULSE_TITLE);
+               break;
        case AUDIO_NAS:
                sprintf(string, AUDIO_NAS_TITLE);
                break;