1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2025-07-29 20:22:26 -04:00

Merge pull request #2473 from srcejon/fix_2470

RemoteTCP: Add support for SDR_RX_SAMPLE_24BIT=OFF
This commit is contained in:
Edouard Griffiths 2025-06-24 00:53:30 +02:00 committed by GitHub
commit 61608067f4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 74 additions and 2 deletions

View File

@ -276,29 +276,49 @@ void RemoteTCPSinkSink::processOneSample(Complex &ci)
if (m_settings.m_sampleBits == 8)
{
#ifdef SDR_RX_SAMPLE_24BIT
iqBuf[0] = (qint32) (ci.real() / 65536.0f);
iqBuf[1] = (qint32) (ci.imag() / 65536.0f);
#else
iqBuf[0] = (qint32) (ci.real() / 256.0f);
iqBuf[1] = (qint32) (ci.imag() / 256.0f);
#endif
iqBuf[0] = clamp8(iqBuf[0]);
iqBuf[1] = clamp8(iqBuf[1]);
}
else if (m_settings.m_sampleBits == 16)
{
#ifdef SDR_RX_SAMPLE_24BIT
iqBuf[0] = (qint32) (ci.real() / 256.0f);
iqBuf[1] = (qint32) (ci.imag() / 256.0f);
#else
iqBuf[0] = (qint32) ci.real();
iqBuf[1] = (qint32) ci.imag();
#endif
iqBuf[0] = clamp16(iqBuf[0]);
iqBuf[1] = clamp16(iqBuf[1]);
}
else if (m_settings.m_sampleBits == 24)
{
#ifdef SDR_RX_SAMPLE_24BIT
iqBuf[0] = (qint32) ci.real();
iqBuf[1] = (qint32) ci.imag();
#else
iqBuf[0] = (qint32) (ci.real() * 256.0f);
iqBuf[1] = (qint32) (ci.imag() * 256.0f);
#endif
iqBuf[0] = clamp24(iqBuf[0]);
iqBuf[1] = clamp24(iqBuf[1]);
}
else
{
#ifdef SDR_RX_SAMPLE_24BIT
iqBuf[0] = (qint32) ci.real();
iqBuf[1] = (qint32) ci.imag();
#else
iqBuf[0] = (qint32) (ci.real() * 256.0f);
iqBuf[1] = (qint32) (ci.imag() * 256.0f);
#endif
}
int bytes = 2 * m_settings.m_sampleBits / 8;
m_bytesUncompressed += bytes;

View File

@ -896,6 +896,58 @@ FLAC__StreamDecoderWriteStatus RemoteTCPInputTCPHandler::flacWrite(const FLAC__S
}
m_uncompressedData.write(reinterpret_cast<quint8*>(m_converterBuffer), nbSamples*sizeof(Sample));
}
else if ((frame->header.bits_per_sample == 8) && (SDR_RX_SAMP_SZ == 16) && (frame->header.channels == 2))
{
qint16 *out = (qint16 *)m_converterBuffer;
const qint32 *inI = buffer[0];
const qint32 *inQ = buffer[1];
for (int i = 0; i < nbSamples; i++)
{
*out++ = *inI++ << 8;
*out++ = *inQ++ << 8;
}
m_uncompressedData.write(reinterpret_cast<quint8*>(m_converterBuffer), nbSamples*sizeof(Sample));
}
else if ((frame->header.bits_per_sample == 16) && (SDR_RX_SAMP_SZ == 16) && (frame->header.channels == 2))
{
qint16 *out = (qint16 *)m_converterBuffer;
const qint32 *inI = buffer[0];
const qint32 *inQ = buffer[1];
for (int i = 0; i < nbSamples; i++)
{
*out++ = *inI++;
*out++ = *inQ++;
}
m_uncompressedData.write(reinterpret_cast<quint8*>(m_converterBuffer), nbSamples*sizeof(Sample));
}
else if ((frame->header.bits_per_sample == 24) && (SDR_RX_SAMP_SZ == 16) && (frame->header.channels == 2))
{
qint16 *out = (qint16 *)m_converterBuffer;
const qint32 *inI = buffer[0];
const qint32 *inQ = buffer[1];
for (int i = 0; i < nbSamples; i++)
{
*out++ = *inI++ >> 8;
*out++ = *inQ++ >> 8;
}
m_uncompressedData.write(reinterpret_cast<quint8*>(m_converterBuffer), nbSamples*sizeof(Sample));
}
else if ((frame->header.bits_per_sample == 32) && (SDR_RX_SAMP_SZ == 16) && (frame->header.channels == 2))
{
qint16 *out = (qint16 *)m_converterBuffer;
const qint32 *inI = buffer[0];
const qint32 *inQ = buffer[1];
for (int i = 0; i < nbSamples; i++)
{
*out++ = *inI++ >> 8;
*out++ = *inQ++ >> 8;
}
m_uncompressedData.write(reinterpret_cast<quint8*>(m_converterBuffer), nbSamples*sizeof(Sample));
}
else
{
qDebug() << "RemoteTCPInputTCPHandler::flacWrite: Unsupported format";
@ -1848,7 +1900,7 @@ void RemoteTCPInputTCPHandler::processCommands()
float latitude = RemoteTCPProtocol::extractFloat((const quint8 *) &pos[0]);
float longitude = RemoteTCPProtocol::extractFloat((const quint8 *) &pos[4]);
float altitude = RemoteTCPProtocol::extractFloat((const quint8 *) &pos[8]);
qDebug() << "RemoteTCPInputTCPHandler::processCommands: Position " << latitude << longitude << altitude;
//qDebug() << "RemoteTCPInputTCPHandler::processCommands: Position " << latitude << longitude << altitude;
if (m_messageQueueToInput) {
m_messageQueueToInput->push(RemoteTCPInput::MsgReportPosition::create(latitude, longitude, altitude));
}
@ -1869,7 +1921,7 @@ void RemoteTCPInputTCPHandler::processCommands()
float isotropic = RemoteTCPProtocol::extractUInt32((const quint8 *) &dir[0]);
float azimuth = RemoteTCPProtocol::extractFloat((const quint8 *) &dir[4]);
float elevation = RemoteTCPProtocol::extractFloat((const quint8 *) &dir[8]);
qDebug() << "RemoteTCPInputTCPHandler::processCommands: Direction " << isotropic << azimuth << elevation;
//qDebug() << "RemoteTCPInputTCPHandler::processCommands: Direction " << isotropic << azimuth << elevation;
if (m_messageQueueToInput) {
m_messageQueueToInput->push(RemoteTCPInput::MsgReportDirection::create(isotropic, azimuth, elevation));
}