OSDN Git Service

[OSD][Qt][SOUND] .
authorK.Ohta <whatisthis.sowhat@gmail.com>
Tue, 16 Aug 2022 18:49:08 +0000 (03:49 +0900)
committerK.Ohta <whatisthis.sowhat@gmail.com>
Tue, 16 Aug 2022 18:49:08 +0000 (03:49 +0900)
source/src/qt/osd_sound.cpp
source/src/qt/osd_sound_mod_template.cpp
source/src/qt/osd_sound_mod_template.h

index fcd0fc7..9bcb983 100644 (file)
@@ -451,34 +451,48 @@ void OSD_BASE::release_sound()
 void OSD_BASE::initialize_sound(int rate, int samples, int* presented_rate, int* presented_samples)
 {
 #if 0
+
+       int latency_ms = (samples * 1000) / rate;
        std::shared_ptr<SOUND_OUTPUT_MODULE_BASE>out_driver = m_output_driver;
-       disconnect(this, SIGNAL(sig_set_volume(double)), nullptr, nullptr);
-       disconnect(this, SIGNAL(sig_snd_reset_to_default()), nullptr, nullptr);
        
        if(out_driver.get() != nullptr) {
-               int latency_ms = (samples * 1000) / rate;
-               if(out_driver->reconfig_sound(rate, 2)) { // ToDo: Channels.
-                       out_driver->update_latency(latency_ms, true);
-                       rate = out_driver->get_sample_rate();
-                       latency_ms = out_driver->get_latency_ms();
-                       samples = (latency_ms * 1000) / rate;
-               }
-               sound_us_before_rendered = out_driver->driver_processed_usec();
-               elapsed_us_before_rendered = out_driver->driver_elapsed_usec();
-               
-               connect(this, SIGNAL(sig_snd_set_volume(double)), out_driver->get_real_driver(), SLOT(set_volume(double)));
-               connect(this, SIGNAL(sig_snd_reset_to_default()), out_driver->get_real_driver(), SLOT(reset_to_default()));
-               
-               connect(this, SIGNAL(sig_snd_request_to_release()), out_driver.get(), SLOT(request_to_release()));
-               
+               disconnect(out_driver.get());
+               if((out_driver->get_latency_ms() != latency_ms) || (out_driver->get_sample_rate() != rate)) {
+                       if(out_driver->reconfig_sound(rate, 2)) { // ToDo: Channels.
+                               out_driver->update_latency(latency_ms, true);
+                               rate = out_driver->get_sample_rate();
+                               latency_ms = out_driver->get_latency_ms();
+                               samples = (latency_ms * 1000) / rate;
+                       }
+                       sound_us_before_rendered = out_driver->driver_processed_usec();
+                       elapsed_us_before_rendered = out_driver->driver_elapsed_usec();
+               }
+               //sound_us_before_rendered = out_driver->driver_processed_usec();
+               //elapsed_us_before_rendered = out_driver->driver_elapsed_usec();
+       } else {
+               sound_us_before_rendered = 0;
+               elapsed_us_before_rendered = 0;
+               // ToDo:
+               m_output_driver.reset(new SOUND_OUTPUT_MODULE_BASE(this,
+                                                                                                                  nullptr,
+                                                                                                                  rate, latency_ms, 2,
+                                                                                                                  nullptr, 0));
+               out_driver = m_output_driver;           
+       }
+
+       if(out_driver.get() != nullptr) {
+               rate = out_driver->get_sample_rate();
+               latency_ms = out_driver->get_latency_ms();
+               samples = (latency_ms * 1000) / rate;
                //connect(this, SIGNAL(sig_snd_update_rate(int)), out_driver.get(), SLOT(update_rate(int)), Qt::QueuedConnection);
                //connect(this, SIGNAL(sig_snd_update_channels(int)), out_driver.get(), SLOT(update_channels(int)), Qt::QueuedConnection);
                //connect(this, SIGNAL(sig_snd_update_latency(int)), out_driver.get(), SLOT(update_latency(int)), Qt::QueuedConnection);
                //connect(this, SIGNAL(sig_snd_update_latency(int, bool)), out_driver.get(), SLOT(update_latency(int, bool)), Qt::QueuedConnection);
                //connect(this, SIGNAL(sig_snd_reconfig(int, int)), out_driver.get(), SLOT(reconfig_sound(int, int)), Qt::QueuedConnection);
-       } else {
-               sound_us_before_rendered = 0;
-               elapsed_us_before_rendered = 0;
+               connect(this, SIGNAL(sig_snd_set_volume(double)), out_driver.get(), SLOT(set_volume(double)));
+               connect(this, SIGNAL(sig_snd_reset_to_default()), out_driver.get(), SLOT(reset_to_default()));
+               connect(this, SIGNAL(sig_snd_request_to_release()), out_driver.get(), SLOT(request_to_release()));
+               
        }
 #else  
        // ToDo: Sound Input
@@ -608,9 +622,13 @@ void OSD_BASE::release_sound()
        sound_exit = true;
        sound_initialized = false;
 #if 0
-       m_output_driver->stop();
-       m_output_driver->reset_to_default();
-       disconnect(this, nullptr, m_output_driver.get(), nullptr);
+       if(m_output_driver.get() != nullptr) {
+               m_output_driver->stop();
+               m_output_driver->reset_to_default();
+               disconnect(m_output_driver.get());
+       }
+       m_output_driver.reset();
+
 #else  
        m_audioOutputSink->stop();
        m_audioOutputSink->disconnect();
index 8fd5727..ccbc225 100644 (file)
@@ -6,13 +6,15 @@ SOUND_OUTPUT_MODULE_BASE::SOUND_OUTPUT_MODULE_BASE(OSD_BASE *parent,
                                                                                                   int base_rate,
                                                                                                   int base_latency_ms,
                                                                                                   int base_channels,
-                                                                                                  void *extra_config_values)
+                                                                                                  void *extra_config_values,
+                                                                                                  int extra_config_bytes)
        : 
          m_config_ok(false),
          m_rate(base_rate),
          m_latency_ms(base_latency_ms),
          m_channels(base_channels),
-         m_extconfig(extra_config_values),
+         m_extconfig_ptr(extra_config_values),
+         m_extconfig_bytes(extra_config_bytes),
          m_wordsize(sizeof(int16_t)),
          QObject(qobject_cast<QObject*>parent)
 {
@@ -164,7 +166,11 @@ bool SOUND_OUTPUT_MODULE_BASE::start()
        bool _stat = false;
        
        if(q.get() != nullptr) {
-               _stat = q->open(QIODeviceBase::Write | QIODeviceBase::Unbuffered);
+               #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+               _stat = q->open(QIODeviceBase::ReadWrite | QIODeviceBase::Truncate | QIODeviceBase::Unbuffered);
+               #else
+               _stat = q->open(QIODevice::ReadWrite | QIODevice::Truncate | QIODevice::Unbuffered);
+               #endif          
                update_driver_fileio();
        }       
        if(_stat) {
index 56491ee..bd3ca0f 100644 (file)
@@ -76,7 +76,9 @@ public:
                                                         int base_rate = 48000,
                                                         int base_latency_ms = 100,
                                                         int base_channels = 2,
-                                                        void *extra_config_values = nullptr);
+                                                        void *extra_config_values = nullptr,
+                                                        int extra_config_bytes = 0);
+       
        ~SOUND_OUTPUT_MODULE_BASE();
 
        std::recursive_timed_mutex                              m_locker;