mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-19 10:32:02 -05:00
Attempting to trace the occasional crashes seen by a few users.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@3620 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
parent
a3fa7fd539
commit
e39c3f468b
142
Detector.cpp
142
Detector.cpp
@ -1,16 +1,16 @@
|
|||||||
#include "Detector.hpp"
|
#include "Detector.hpp"
|
||||||
|
|
||||||
#include <QDateTime>
|
#include <QDateTime>
|
||||||
#include <QtAlgorithms>
|
#include <QtAlgorithms>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
#include "commons.h"
|
#include "commons.h"
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
void fil4_(qint16*, qint32*, qint16*, qint32*);
|
void fil4_(qint16*, qint32*, qint16*, qint32*);
|
||||||
}
|
}
|
||||||
|
|
||||||
Detector::Detector (unsigned frameRate, unsigned periodLengthInSeconds, unsigned framesPerSignal, unsigned downSampleFactor, QObject * parent)
|
Detector::Detector (unsigned frameRate, unsigned periodLengthInSeconds,
|
||||||
|
unsigned framesPerSignal, unsigned downSampleFactor,
|
||||||
|
QObject * parent)
|
||||||
: AudioDevice (parent)
|
: AudioDevice (parent)
|
||||||
, m_frameRate (frameRate)
|
, m_frameRate (frameRate)
|
||||||
, m_period (periodLengthInSeconds)
|
, m_period (periodLengthInSeconds)
|
||||||
@ -18,7 +18,8 @@ Detector::Detector (unsigned frameRate, unsigned periodLengthInSeconds, unsigned
|
|||||||
, m_framesPerSignal (framesPerSignal)
|
, m_framesPerSignal (framesPerSignal)
|
||||||
, m_monitoring (false)
|
, m_monitoring (false)
|
||||||
, m_starting (false)
|
, m_starting (false)
|
||||||
, m_buffer ((downSampleFactor > 1) ? new short [framesPerSignal * downSampleFactor] : 0)
|
, m_buffer ((downSampleFactor > 1) ?
|
||||||
|
new short [framesPerSignal * downSampleFactor] : 0)
|
||||||
, m_bufferPos (0)
|
, m_bufferPos (0)
|
||||||
{
|
{
|
||||||
clear ();
|
clear ();
|
||||||
@ -44,79 +45,78 @@ void Detector::clear ()
|
|||||||
|
|
||||||
qint64 Detector::writeData (char const * data, qint64 maxSize)
|
qint64 Detector::writeData (char const * data, qint64 maxSize)
|
||||||
{
|
{
|
||||||
if (m_monitoring)
|
if (m_monitoring) {
|
||||||
{
|
// no torn frames
|
||||||
Q_ASSERT (!(maxSize % static_cast<qint64> (bytesPerFrame ()))); // no torn frames
|
Q_ASSERT (!(maxSize % static_cast<qint64> (bytesPerFrame ())));
|
||||||
|
// these are in terms of input frames (not down sampled)
|
||||||
|
size_t framesAcceptable ((sizeof (jt9com_.d2) /
|
||||||
|
sizeof (jt9com_.d2[0]) - jt9com_.kin) * m_downSampleFactor);
|
||||||
|
size_t framesAccepted (qMin (static_cast<size_t> (maxSize /
|
||||||
|
bytesPerFrame ()), framesAcceptable));
|
||||||
|
|
||||||
// these are in terms of input frames (not down sampled)
|
if (framesAccepted < static_cast<size_t> (maxSize / bytesPerFrame ())) {
|
||||||
size_t framesAcceptable ((sizeof (jt9com_.d2) / sizeof (jt9com_.d2[0]) - jt9com_.kin) * m_downSampleFactor);
|
qDebug () << "dropped " << maxSize / bytesPerFrame () - framesAccepted
|
||||||
size_t framesAccepted (qMin (static_cast<size_t> (maxSize / bytesPerFrame ()), framesAcceptable));
|
<< " frames of data on the floor!";
|
||||||
|
}
|
||||||
|
|
||||||
if (framesAccepted < static_cast<size_t> (maxSize / bytesPerFrame ()))
|
for (unsigned remaining = framesAccepted; remaining; ) {
|
||||||
{
|
size_t numFramesProcessed (qMin (m_framesPerSignal *
|
||||||
qDebug () << "dropped " << maxSize / bytesPerFrame () - framesAccepted << " frames of data on the floor!";
|
m_downSampleFactor - m_bufferPos, remaining));
|
||||||
}
|
|
||||||
|
|
||||||
for (unsigned remaining = framesAccepted; remaining; )
|
if(m_downSampleFactor > 1) {
|
||||||
{
|
store (&data[(framesAccepted - remaining) * bytesPerFrame ()],
|
||||||
size_t numFramesProcessed (qMin (m_framesPerSignal * m_downSampleFactor - m_bufferPos, remaining));
|
numFramesProcessed, &m_buffer[m_bufferPos]);
|
||||||
|
m_bufferPos += numFramesProcessed;
|
||||||
|
if(m_bufferPos==m_framesPerSignal*m_downSampleFactor && m_monitoring) {
|
||||||
|
qint32 framesToProcess (m_framesPerSignal * m_downSampleFactor);
|
||||||
|
qint32 framesAfterDownSample;
|
||||||
|
if(framesToProcess!=13824) qDebug() << "framesToProcess ="
|
||||||
|
<< framesToProcess;
|
||||||
|
if(jt9com_.kin<0 or jt9com_.kin>=1440000) qDebug() << "jt9com_.kin ="
|
||||||
|
<< jt9com_.kin;
|
||||||
|
fil4_(&m_buffer[0], &framesToProcess, &jt9com_.d2[jt9com_.kin],
|
||||||
|
&framesAfterDownSample);
|
||||||
|
Q_ASSERT(framesAfterDownSample==3456);
|
||||||
|
jt9com_.kin += framesAfterDownSample;
|
||||||
|
Q_EMIT framesWritten (jt9com_.kin);
|
||||||
|
m_bufferPos = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (m_downSampleFactor > 1)
|
} else {
|
||||||
{
|
store (&data[(framesAccepted - remaining) * bytesPerFrame ()],
|
||||||
store (&data[(framesAccepted - remaining) * bytesPerFrame ()], numFramesProcessed, &m_buffer[m_bufferPos]);
|
numFramesProcessed, &jt9com_.d2[jt9com_.kin]);
|
||||||
m_bufferPos += numFramesProcessed;
|
m_bufferPos += numFramesProcessed;
|
||||||
if (m_bufferPos == m_framesPerSignal * m_downSampleFactor && m_monitoring)
|
jt9com_.kin += numFramesProcessed;
|
||||||
{
|
if (m_bufferPos == static_cast<unsigned> (m_framesPerSignal) &&
|
||||||
qint32 framesToProcess (m_framesPerSignal * m_downSampleFactor);
|
m_monitoring) {
|
||||||
qint32 framesAfterDownSample;
|
Q_EMIT framesWritten (jt9com_.kin);
|
||||||
fil4_(&m_buffer[0], &framesToProcess, &jt9com_.d2[jt9com_.kin], &framesAfterDownSample);
|
m_bufferPos = 0;
|
||||||
jt9com_.kin += framesAfterDownSample;
|
}
|
||||||
Q_EMIT framesWritten (jt9com_.kin);
|
|
||||||
m_bufferPos = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
store (&data[(framesAccepted - remaining) * bytesPerFrame ()], numFramesProcessed, &jt9com_.d2[jt9com_.kin]);
|
|
||||||
m_bufferPos += numFramesProcessed;
|
|
||||||
jt9com_.kin += numFramesProcessed;
|
|
||||||
if (m_bufferPos == static_cast<unsigned> (m_framesPerSignal) && m_monitoring)
|
|
||||||
{
|
|
||||||
Q_EMIT framesWritten (jt9com_.kin);
|
|
||||||
m_bufferPos = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!secondInPeriod ())
|
|
||||||
{
|
|
||||||
if (!m_starting)
|
|
||||||
{
|
|
||||||
// next samples will be in new period so wrap around to
|
|
||||||
// start of buffer
|
|
||||||
//
|
|
||||||
// we don't bother calling reset () since we expect to fill
|
|
||||||
// the whole buffer and don't need to waste cycles zeroing
|
|
||||||
jt9com_.kin = 0;
|
|
||||||
m_bufferPos = 0;
|
|
||||||
m_starting = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (m_starting)
|
|
||||||
{
|
|
||||||
m_starting = false;
|
|
||||||
}
|
|
||||||
remaining -= numFramesProcessed;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
jt9com_.kin = 0;
|
|
||||||
m_bufferPos = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return maxSize; // we drop any data past the end of the buffer on
|
if (!secondInPeriod ()) {
|
||||||
// the floor until the next period starts
|
if (!m_starting) {
|
||||||
|
// next samples will be in new period so wrap around to
|
||||||
|
// start of buffer
|
||||||
|
//
|
||||||
|
// we don't bother calling reset () since we expect to fill
|
||||||
|
// the whole buffer and don't need to waste cycles zeroing
|
||||||
|
jt9com_.kin = 0;
|
||||||
|
m_bufferPos = 0;
|
||||||
|
m_starting = true;
|
||||||
|
}
|
||||||
|
} else if(m_starting) {
|
||||||
|
m_starting = false;
|
||||||
|
}
|
||||||
|
remaining -= numFramesProcessed;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
jt9com_.kin = 0;
|
||||||
|
m_bufferPos = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return maxSize; // we drop any data past the end of the buffer on
|
||||||
|
// the floor until the next period starts
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned Detector::secondInPeriod () const
|
unsigned Detector::secondInPeriod () const
|
||||||
|
@ -85,6 +85,7 @@ void Modulator::open (unsigned symbolsLength, double framesPerSymbol, unsigned f
|
|||||||
|
|
||||||
qint64 Modulator::readData (char * data, qint64 maxSize)
|
qint64 Modulator::readData (char * data, qint64 maxSize)
|
||||||
{
|
{
|
||||||
|
if(maxSize==0) return 0;
|
||||||
Q_ASSERT (!(maxSize % static_cast<qint64> (bytesPerFrame ()))); // no torn frames
|
Q_ASSERT (!(maxSize % static_cast<qint64> (bytesPerFrame ()))); // no torn frames
|
||||||
Q_ASSERT (isOpen ());
|
Q_ASSERT (isOpen ());
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ QTextEdit* pShortcuts;
|
|||||||
QTcpSocket* commanderSocket = new QTcpSocket(0);
|
QTcpSocket* commanderSocket = new QTcpSocket(0);
|
||||||
|
|
||||||
QString rev="$Rev$";
|
QString rev="$Rev$";
|
||||||
QString Program_Title_Version=" WSJT-X v1.2.1, r" + rev.mid(6,4) +
|
QString Program_Title_Version=" WSJT-X v1.2.2, r" + rev.mid(6,4) +
|
||||||
" by K1JT";
|
" by K1JT";
|
||||||
|
|
||||||
//-------------------------------------------------- MainWindow constructor
|
//-------------------------------------------------- MainWindow constructor
|
||||||
@ -49,7 +49,7 @@ MainWindow::MainWindow(QSettings * settings, QSharedMemory *shdmem, QString *the
|
|||||||
ui(new Ui::MainWindow),
|
ui(new Ui::MainWindow),
|
||||||
m_wideGraph (new WideGraph (settings)),
|
m_wideGraph (new WideGraph (settings)),
|
||||||
m_logDlg (new LogQSO (settings, this)),
|
m_logDlg (new LogQSO (settings, this)),
|
||||||
m_detector (RX_SAMPLE_RATE, NTMAX / 2, 6912 / 2, downSampleFactor),
|
m_detector (RX_SAMPLE_RATE, NTMAX/2, 6912/2, downSampleFactor),
|
||||||
m_audioInputDevice (QAudioDeviceInfo::defaultInputDevice ()), // start with default
|
m_audioInputDevice (QAudioDeviceInfo::defaultInputDevice ()), // start with default
|
||||||
m_modulator (TX_SAMPLE_RATE, NTMAX / 2),
|
m_modulator (TX_SAMPLE_RATE, NTMAX / 2),
|
||||||
m_audioOutputDevice (QAudioDeviceInfo::defaultOutputDevice ()), // start with default
|
m_audioOutputDevice (QAudioDeviceInfo::defaultOutputDevice ()), // start with default
|
||||||
@ -711,6 +711,7 @@ void MainWindow::dataSink(qint64 frames)
|
|||||||
jt9com_.ndiskdat=0;
|
jt9com_.ndiskdat=0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Get power, spectrum, and ihsym
|
// Get power, spectrum, and ihsym
|
||||||
trmin=m_TRperiod/60;
|
trmin=m_TRperiod/60;
|
||||||
slope=0.0;
|
slope=0.0;
|
||||||
|
@ -113,7 +113,7 @@ void PSK_Reporter::dnsLookupResult(QHostInfo info)
|
|||||||
{
|
{
|
||||||
if (!info.addresses().isEmpty()) {
|
if (!info.addresses().isEmpty()) {
|
||||||
m_pskReporterAddress = info.addresses().at(0);
|
m_pskReporterAddress = info.addresses().at(0);
|
||||||
qDebug() << "PSK Reporter IP: " << m_pskReporterAddress;
|
// qDebug() << "PSK Reporter IP: " << m_pskReporterAddress;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -78,6 +78,7 @@ void SoundOutput::startStream (QAudioDeviceInfo const& device, unsigned channels
|
|||||||
m_stream.reset (new QAudioOutput (device, format, this));
|
m_stream.reset (new QAudioOutput (device, format, this));
|
||||||
audioError ();
|
audioError ();
|
||||||
m_stream->setVolume (m_volume);
|
m_stream->setVolume (m_volume);
|
||||||
|
m_stream->setNotifyInterval(100);
|
||||||
|
|
||||||
connect (m_stream.data(), &QAudioOutput::stateChanged, this, &SoundOutput::handleStateChanged);
|
connect (m_stream.data(), &QAudioOutput::stateChanged, this, &SoundOutput::handleStateChanged);
|
||||||
|
|
||||||
@ -129,7 +130,7 @@ void SoundOutput::setAttenuation (qreal a)
|
|||||||
{
|
{
|
||||||
Q_ASSERT (0. <= a && a <= 99.);
|
Q_ASSERT (0. <= a && a <= 99.);
|
||||||
m_volume = qPow (10., -a / 10.);
|
m_volume = qPow (10., -a / 10.);
|
||||||
qDebug () << "SoundOut: attn = " << a << ", vol = " << m_volume;
|
// qDebug () << "SoundOut: attn = " << a << ", vol = " << m_volume;
|
||||||
if (m_stream)
|
if (m_stream)
|
||||||
{
|
{
|
||||||
m_stream->setVolume (m_volume);
|
m_stream->setVolume (m_volume);
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[Setup]
|
[Setup]
|
||||||
AppName=wsjtx
|
AppName=wsjtx
|
||||||
AppVerName=wsjtx Version 1.2.1 r3587
|
AppVerName=wsjtx Version 1.2.1a r3590
|
||||||
AppCopyright=Copyright (C) 2001-2013 by Joe Taylor, K1JT
|
AppCopyright=Copyright (C) 2001-2013 by Joe Taylor, K1JT
|
||||||
DefaultDirName=c:\wsjtx1.2
|
DefaultDirName=c:\wsjtx1.2
|
||||||
DefaultGroupName=wsjtx1.2
|
DefaultGroupName=wsjtx1.2
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
QT += network multimedia
|
QT += network multimedia
|
||||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||||
CONFIG += thread
|
CONFIG += thread
|
||||||
#CONFIG += console
|
CONFIG += console
|
||||||
|
|
||||||
TARGET = wsjtx
|
TARGET = wsjtx
|
||||||
#DESTDIR = ../qt4_install
|
#DESTDIR = ../qt4_install
|
||||||
|
Loading…
Reference in New Issue
Block a user