mirror of
https://github.com/f4exb/sdrangel.git
synced 2024-11-25 09:18:54 -05:00
DATV demod: implemented audio and video mute. Corrected audio volume
This commit is contained in:
parent
9e668f5f22
commit
2d6730678d
BIN
doc/img/film.xcf
BIN
doc/img/film.xcf
Binary file not shown.
@ -961,6 +961,13 @@ void DATVDemod::applySettings(const DATVDemodSettings& settings, bool force)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((settings.m_videoMute) != (m_settings.m_videoMute) || force)
|
||||||
|
{
|
||||||
|
if (m_objRegisteredVideoRender) {
|
||||||
|
m_objRegisteredVideoRender->setVideoMute(settings.m_videoMute);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (m_settings.isDifferent(settings) || force)
|
if (m_settings.isDifferent(settings) || force)
|
||||||
{
|
{
|
||||||
m_objSettingsMutex.lock();
|
m_objSettingsMutex.lock();
|
||||||
|
@ -186,10 +186,10 @@ DATVDemodGUI::DATVDemodGUI(PluginAPI* objPluginAPI, DeviceUISet *deviceUISet, Ba
|
|||||||
m_deviceUISet->addChannelMarker(&m_objChannelMarker);
|
m_deviceUISet->addChannelMarker(&m_objChannelMarker);
|
||||||
m_deviceUISet->addRollupWidget(this);
|
m_deviceUISet->addRollupWidget(this);
|
||||||
|
|
||||||
QPixmap pixmapTarget = QPixmap(":/film.png");
|
// QPixmap pixmapTarget = QPixmap(":/film.png");
|
||||||
pixmapTarget = pixmapTarget.scaled(16, 16, Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
// pixmapTarget = pixmapTarget.scaled(16, 16, Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
||||||
ui->videoPlay->setAlignment(Qt::AlignCenter);
|
// ui->videoPlay->setAlignment(Qt::AlignCenter);
|
||||||
ui->videoPlay->setPixmap(pixmapTarget);
|
// ui->videoPlay->setPixmap(pixmapTarget);
|
||||||
|
|
||||||
CRightClickEnabler *audioMuteRightClickEnabler = new CRightClickEnabler(ui->audioMute);
|
CRightClickEnabler *audioMuteRightClickEnabler = new CRightClickEnabler(ui->audioMute);
|
||||||
connect(audioMuteRightClickEnabler, SIGNAL(rightClick(const QPoint &)), this, SLOT(audioSelect()));
|
connect(audioMuteRightClickEnabler, SIGNAL(rightClick(const QPoint &)), this, SLOT(audioSelect()));
|
||||||
@ -234,9 +234,9 @@ void DATVDemodGUI::displaySettings()
|
|||||||
ui->rfBandwidth->setValue(m_settings.m_rfBandwidth);
|
ui->rfBandwidth->setValue(m_settings.m_rfBandwidth);
|
||||||
ui->spiSymbolRate->setValue(m_settings.m_symbolRate);
|
ui->spiSymbolRate->setValue(m_settings.m_symbolRate);
|
||||||
ui->spiExcursion->setValue(m_settings.m_excursion);
|
ui->spiExcursion->setValue(m_settings.m_excursion);
|
||||||
ui->audioMute->setChecked(m_settings.m_audioMute);
|
|
||||||
ui->audioVolume->setValue(m_settings.m_audioVolume);
|
ui->audioVolume->setValue(m_settings.m_audioVolume);
|
||||||
ui->audioVolumeText->setText(tr("%1").arg(m_settings.m_audioVolume));
|
ui->audioVolumeText->setText(tr("%1").arg(m_settings.m_audioVolume));
|
||||||
|
ui->videoMute->setChecked(m_settings.m_videoMute);
|
||||||
|
|
||||||
blockApplySettings(false);
|
blockApplySettings(false);
|
||||||
m_objChannelMarker.blockSignals(false);
|
m_objChannelMarker.blockSignals(false);
|
||||||
@ -352,6 +352,7 @@ void DATVDemodGUI::applySettings(bool force)
|
|||||||
m_settings.m_excursion = ui->spiExcursion->value();
|
m_settings.m_excursion = ui->spiExcursion->value();
|
||||||
m_settings.m_audioMute = ui->audioMute->isChecked();
|
m_settings.m_audioMute = ui->audioMute->isChecked();
|
||||||
m_settings.m_audioVolume = ui->audioVolume->value();
|
m_settings.m_audioVolume = ui->audioVolume->value();
|
||||||
|
m_settings.m_videoMute = ui->videoMute->isChecked();
|
||||||
|
|
||||||
QString msg = tr("DATVDemodGUI::applySettings: force: %1").arg(force);
|
QString msg = tr("DATVDemodGUI::applySettings: force: %1").arg(force);
|
||||||
m_settings.debug(msg);
|
m_settings.debug(msg);
|
||||||
@ -639,6 +640,12 @@ void DATVDemodGUI::on_audioMute_toggled(bool checked)
|
|||||||
applySettings();
|
applySettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DATVDemodGUI::on_videoMute_toggled(bool checked)
|
||||||
|
{
|
||||||
|
(void) checked;
|
||||||
|
applySettings();
|
||||||
|
}
|
||||||
|
|
||||||
void DATVDemodGUI::on_audioVolume_valueChanged(int value)
|
void DATVDemodGUI::on_audioVolume_valueChanged(int value)
|
||||||
{
|
{
|
||||||
ui->audioVolumeText->setText(tr("%1").arg(value));
|
ui->audioVolumeText->setText(tr("%1").arg(value));
|
||||||
@ -669,9 +676,9 @@ void DATVDemodGUI::on_StreamMetaDataChanged(DataTSMetaData2 *objMetaData)
|
|||||||
ui->chkDecoding->setChecked(objMetaData->OK_Decoding);
|
ui->chkDecoding->setChecked(objMetaData->OK_Decoding);
|
||||||
|
|
||||||
if (objMetaData->OK_Decoding) {
|
if (objMetaData->OK_Decoding) {
|
||||||
ui->videoPlay->setStyleSheet("QLabel { background-color : green; }");
|
ui->videoMute->setStyleSheet("QToolButton { background-color : green; }");
|
||||||
} else {
|
} else {
|
||||||
ui->videoPlay->setStyleSheet("QLabel { background:rgb(79,79,79); }");
|
ui->videoMute->setStyleSheet("QToolButton { background:rgb(79,79,79); }");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (objMetaData->Height > 0) {
|
if (objMetaData->Height > 0) {
|
||||||
|
@ -94,6 +94,7 @@ private slots:
|
|||||||
void on_rfBandwidth_changed(qint64 value);
|
void on_rfBandwidth_changed(qint64 value);
|
||||||
void on_audioMute_toggled(bool checked);
|
void on_audioMute_toggled(bool checked);
|
||||||
void on_audioVolume_valueChanged(int value);
|
void on_audioVolume_valueChanged(int value);
|
||||||
|
void on_videoMute_toggled(bool checked);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::DATVDemodGUI* ui;
|
Ui::DATVDemodGUI* ui;
|
||||||
|
@ -204,7 +204,7 @@
|
|||||||
<enum>QTabWidget::West</enum>
|
<enum>QTabWidget::West</enum>
|
||||||
</property>
|
</property>
|
||||||
<property name="currentIndex">
|
<property name="currentIndex">
|
||||||
<number>1</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QWidget" name="datvTab">
|
<widget class="QWidget" name="datvTab">
|
||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
@ -913,34 +913,15 @@
|
|||||||
<string>Audio mute (right click: Audio select)</string>
|
<string>Audio mute (right click: Audio select)</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>...</string>
|
<string/>
|
||||||
</property>
|
</property>
|
||||||
<property name="icon">
|
<property name="icon">
|
||||||
<iconset resource="../../../sdrgui/resources/res.qrc">
|
<iconset resource="../../../sdrgui/resources/res.qrc">
|
||||||
<normaloff>:/sound_on.png</normaloff>
|
<normaloff>:/sound_on.png</normaloff>
|
||||||
<normalon>:/sound_off.png</normalon>:/sound_on.png</iconset>
|
<normalon>:/sound_off.png</normalon>:/sound_on.png</iconset>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
<property name="checkable">
|
||||||
<widget class="QLabel" name="videoPlay">
|
<bool>true</bool>
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>400</x>
|
|
||||||
<y>300</y>
|
|
||||||
<width>24</width>
|
|
||||||
<height>24</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>Video play indicator</string>
|
|
||||||
</property>
|
|
||||||
<property name="frameShape">
|
|
||||||
<enum>QFrame::StyledPanel</enum>
|
|
||||||
</property>
|
|
||||||
<property name="frameShadow">
|
|
||||||
<enum>QFrame::Plain</enum>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string/>
|
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QSlider" name="audioVolume">
|
<widget class="QSlider" name="audioVolume">
|
||||||
@ -956,14 +937,17 @@
|
|||||||
<string>Audio volume control</string>
|
<string>Audio volume control</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="minimum">
|
<property name="minimum">
|
||||||
<number>-32</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="maximum">
|
<property name="maximum">
|
||||||
<number>32</number>
|
<number>100</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="pageStep">
|
<property name="pageStep">
|
||||||
<number>1</number>
|
<number>1</number>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<number>80</number>
|
||||||
|
</property>
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Horizontal</enum>
|
<enum>Qt::Horizontal</enum>
|
||||||
</property>
|
</property>
|
||||||
@ -981,12 +965,36 @@
|
|||||||
<string>Audio volume</string>
|
<string>Audio volume</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>-32</string>
|
<string>100</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
|
<widget class="QToolButton" name="videoMute">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>400</x>
|
||||||
|
<y>300</y>
|
||||||
|
<width>24</width>
|
||||||
|
<height>24</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Video mute</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../../../sdrgui/resources/res.qrc">
|
||||||
|
<normaloff>:/film.png</normaloff>
|
||||||
|
<normalon>:/no_film.png</normalon>:/film.png</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="checkable">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
|
@ -50,6 +50,7 @@ void DATVDemodSettings::resetToDefaults()
|
|||||||
m_audioMute = false;
|
m_audioMute = false;
|
||||||
m_audioDeviceName = AudioDeviceManager::m_defaultDeviceName;
|
m_audioDeviceName = AudioDeviceManager::m_defaultDeviceName;
|
||||||
m_audioVolume = 0;
|
m_audioVolume = 0;
|
||||||
|
m_videoMute = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray DATVDemodSettings::serialize() const
|
QByteArray DATVDemodSettings::serialize() const
|
||||||
@ -79,6 +80,7 @@ QByteArray DATVDemodSettings::serialize() const
|
|||||||
s.writeS32(19, m_excursion);
|
s.writeS32(19, m_excursion);
|
||||||
s.writeString(20, m_audioDeviceName);
|
s.writeString(20, m_audioDeviceName);
|
||||||
s.writeS32(21, m_audioVolume);
|
s.writeS32(21, m_audioVolume);
|
||||||
|
s.writeBool(22, m_videoMute);
|
||||||
|
|
||||||
return s.final();
|
return s.final();
|
||||||
}
|
}
|
||||||
@ -139,6 +141,7 @@ bool DATVDemodSettings::deserialize(const QByteArray& data)
|
|||||||
d.readS32(19, &m_excursion, 10);
|
d.readS32(19, &m_excursion, 10);
|
||||||
d.readString(20, &m_audioDeviceName, AudioDeviceManager::m_defaultDeviceName);
|
d.readString(20, &m_audioDeviceName, AudioDeviceManager::m_defaultDeviceName);
|
||||||
d.readS32(21, &m_audioVolume, 0);
|
d.readS32(21, &m_audioVolume, 0);
|
||||||
|
d.readBool(22, &m_videoMute, false);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -168,7 +171,8 @@ void DATVDemodSettings::debug(const QString& msg) const
|
|||||||
<< " m_excursion: " << m_excursion
|
<< " m_excursion: " << m_excursion
|
||||||
<< " m_audioMute: " << m_audioMute
|
<< " m_audioMute: " << m_audioMute
|
||||||
<< " m_audioDeviceName: " << m_audioDeviceName
|
<< " m_audioDeviceName: " << m_audioDeviceName
|
||||||
<< " m_audioVolume: " << m_audioVolume;
|
<< " m_audioVolume: " << m_audioVolume
|
||||||
|
<< " m_videoMute: " << m_videoMute;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DATVDemodSettings::isDifferent(const DATVDemodSettings& other)
|
bool DATVDemodSettings::isDifferent(const DATVDemodSettings& other)
|
||||||
|
@ -73,6 +73,7 @@ struct DATVDemodSettings
|
|||||||
bool m_viterbi;
|
bool m_viterbi;
|
||||||
int m_excursion;
|
int m_excursion;
|
||||||
int m_audioVolume;
|
int m_audioVolume;
|
||||||
|
bool m_videoMute;
|
||||||
|
|
||||||
DATVDemodSettings();
|
DATVDemodSettings();
|
||||||
void resetToDefaults();
|
void resetToDefaults();
|
||||||
|
@ -37,8 +37,6 @@ DATVideoRender::DATVideoRender(QWidget *parent) : TVScreen(true, parent)
|
|||||||
m_formatCtx = nullptr;
|
m_formatCtx = nullptr;
|
||||||
m_videoDecoderCtx = nullptr;
|
m_videoDecoderCtx = nullptr;
|
||||||
m_swsCtx = nullptr;
|
m_swsCtx = nullptr;
|
||||||
m_audioBuffer.resize(1 << 14);
|
|
||||||
m_audioBufferFill = 0;
|
|
||||||
m_audioFifo = nullptr;
|
m_audioFifo = nullptr;
|
||||||
m_audioSWR = nullptr;
|
m_audioSWR = nullptr;
|
||||||
m_audioSampleRate = 48000;
|
m_audioSampleRate = 48000;
|
||||||
@ -46,6 +44,7 @@ DATVideoRender::DATVideoRender(QWidget *parent) : TVScreen(true, parent)
|
|||||||
m_videoStreamIndex = -1;
|
m_videoStreamIndex = -1;
|
||||||
m_audioStreamIndex = -1;
|
m_audioStreamIndex = -1;
|
||||||
m_audioMute = false;
|
m_audioMute = false;
|
||||||
|
m_videoMute = false;
|
||||||
m_audioVolume = 0;
|
m_audioVolume = 0;
|
||||||
m_updateAudioResampler = false;
|
m_updateAudioResampler = false;
|
||||||
|
|
||||||
@ -481,7 +480,7 @@ bool DATVideoRender::RenderStream()
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Video channel
|
//Video channel
|
||||||
if (packet.stream_index == m_videoStreamIndex)
|
if ((packet.stream_index == m_videoStreamIndex) && (!m_videoMute))
|
||||||
{
|
{
|
||||||
memset(m_frame, 0, sizeof(AVFrame));
|
memset(m_frame, 0, sizeof(AVFrame));
|
||||||
av_frame_unref(m_frame);
|
av_frame_unref(m_frame);
|
||||||
@ -580,7 +579,7 @@ bool DATVideoRender::RenderStream()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Audio channel
|
// Audio channel
|
||||||
else if ((packet.stream_index == m_audioStreamIndex) && (m_audioFifo) && (swr_is_initialized(m_audioSWR)))
|
else if ((packet.stream_index == m_audioStreamIndex) && (m_audioFifo) && (swr_is_initialized(m_audioSWR)) && (!m_audioMute))
|
||||||
{
|
{
|
||||||
if (m_updateAudioResampler)
|
if (m_updateAudioResampler)
|
||||||
{
|
{
|
||||||
@ -597,37 +596,45 @@ bool DATVideoRender::RenderStream()
|
|||||||
{
|
{
|
||||||
if (gotFrame)
|
if (gotFrame)
|
||||||
{
|
{
|
||||||
uint16_t *audioBuffer;
|
int16_t *audioBuffer;
|
||||||
av_samples_alloc((uint8_t**) &audioBuffer, nullptr, 2, m_frame->nb_samples, AV_SAMPLE_FMT_S16, 0);
|
av_samples_alloc((uint8_t**) &audioBuffer, nullptr, 2, m_frame->nb_samples, AV_SAMPLE_FMT_S16, 0);
|
||||||
int frame_count = swr_convert(m_audioSWR, (uint8_t**) &audioBuffer, m_frame->nb_samples, (const uint8_t**) m_frame->data, m_frame->nb_samples);
|
int frame_count = swr_convert(m_audioSWR, (uint8_t**) &audioBuffer, m_frame->nb_samples, (const uint8_t**) m_frame->data, m_frame->nb_samples);
|
||||||
|
|
||||||
|
// direct writing:
|
||||||
// int ret = m_audioFifo->write((const quint8*) &audioBuffer[0], frame_count);
|
// int ret = m_audioFifo->write((const quint8*) &audioBuffer[0], frame_count);
|
||||||
|
|
||||||
// if (ret < frame_count) {
|
// if (ret < frame_count) {
|
||||||
// qDebug("DATVideoRender::RenderStream: audio frames missing %d vs %d", ret, frame_count);
|
// qDebug("DATVideoRender::RenderStream: audio frames missing %d vs %d", ret, frame_count);
|
||||||
// }
|
// }
|
||||||
|
|
||||||
if (m_audioFifoBufferIndex + frame_count < m_audioFifoBufferSize)
|
// buffered writing:
|
||||||
{
|
// if (m_audioFifoBufferIndex + frame_count < m_audioFifoBufferSize)
|
||||||
std::copy(&audioBuffer[0], &audioBuffer[2*frame_count], &m_audioFifoBuffer[2*m_audioFifoBufferIndex]);
|
|
||||||
m_audioFifoBufferIndex += frame_count;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
int remainder = m_audioFifoBufferSize - m_audioFifoBufferIndex;
|
|
||||||
std::copy(&audioBuffer[0], &audioBuffer[2*remainder], &m_audioFifoBuffer[2*m_audioFifoBufferIndex]);
|
|
||||||
m_audioFifo->write((const quint8*) &m_audioFifoBuffer[0], m_audioFifoBufferSize);
|
|
||||||
std::copy(&audioBuffer[2*remainder], &audioBuffer[2*frame_count], &m_audioFifoBuffer[0]);
|
|
||||||
m_audioFifoBufferIndex = frame_count - remainder;
|
|
||||||
}
|
|
||||||
|
|
||||||
// m_audioFifoBufferIndex += frame_count;
|
|
||||||
|
|
||||||
// if (m_audioFifoBufferIndex >= m_audioFifoBufferSize)
|
|
||||||
// {
|
// {
|
||||||
// m_audioFifo->write((const quint8*)&m_audioFifoBuffer[0], m_audioFifoBufferSize);
|
// std::copy(&audioBuffer[0], &audioBuffer[2*frame_count], &m_audioFifoBuffer[2*m_audioFifoBufferIndex]);
|
||||||
// m_audioFifoBufferIndex -= m_audioFifoBufferSize;
|
// m_audioFifoBufferIndex += frame_count;
|
||||||
// }
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// int remainder = m_audioFifoBufferSize - m_audioFifoBufferIndex;
|
||||||
|
// std::copy(&audioBuffer[0], &audioBuffer[2*remainder], &m_audioFifoBuffer[2*m_audioFifoBufferIndex]);
|
||||||
|
// m_audioFifo->write((const quint8*) &m_audioFifoBuffer[0], m_audioFifoBufferSize);
|
||||||
|
// std::copy(&audioBuffer[2*remainder], &audioBuffer[2*frame_count], &m_audioFifoBuffer[0]);
|
||||||
|
// m_audioFifoBufferIndex = frame_count - remainder;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// Apply volume:
|
||||||
|
for (int i = 0; i < frame_count; i++)
|
||||||
|
{
|
||||||
|
m_audioFifoBuffer[2*m_audioFifoBufferIndex] = m_audioVolume * audioBuffer[2*i];
|
||||||
|
m_audioFifoBuffer[2*m_audioFifoBufferIndex+1] = m_audioVolume * audioBuffer[2*i+1];
|
||||||
|
m_audioFifoBufferIndex++;
|
||||||
|
|
||||||
|
if (m_audioFifoBufferIndex >= m_audioFifoBufferSize)
|
||||||
|
{
|
||||||
|
m_audioFifo->write((const quint8*) &m_audioFifoBuffer[0], m_audioFifoBufferSize);
|
||||||
|
m_audioFifoBufferIndex = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -647,8 +654,8 @@ bool DATVideoRender::RenderStream()
|
|||||||
|
|
||||||
void DATVideoRender::setAudioVolume(int audioVolume)
|
void DATVideoRender::setAudioVolume(int audioVolume)
|
||||||
{
|
{
|
||||||
m_audioVolume = audioVolume < -32 ? -32 : audioVolume > 32 ? 32 : audioVolume;
|
int audioVolumeConstrained = audioVolume < 0 ? 0 : audioVolume > 100 ? 100 : audioVolume;
|
||||||
m_updateAudioResampler = true;
|
m_audioVolume = audioVolumeConstrained / 100.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DATVideoRender::setResampler()
|
void DATVideoRender::setResampler()
|
||||||
@ -666,9 +673,6 @@ void DATVideoRender::setResampler()
|
|||||||
av_opt_set_int(m_audioSWR, "out_sample_rate", m_audioSampleRate, 0);
|
av_opt_set_int(m_audioSWR, "out_sample_rate", m_audioSampleRate, 0);
|
||||||
av_opt_set_sample_fmt(m_audioSWR, "in_sample_fmt", m_audioDecoderCtx->sample_fmt, 0);
|
av_opt_set_sample_fmt(m_audioSWR, "in_sample_fmt", m_audioDecoderCtx->sample_fmt, 0);
|
||||||
av_opt_set_sample_fmt(m_audioSWR, "out_sample_fmt", AV_SAMPLE_FMT_S16, 0);
|
av_opt_set_sample_fmt(m_audioSWR, "out_sample_fmt", AV_SAMPLE_FMT_S16, 0);
|
||||||
av_opt_set_int(m_audioSWR, "center_mix_level", m_audioVolume, 0);
|
|
||||||
av_opt_set_int(m_audioSWR, "surround_mix_level", m_audioVolume, 0);
|
|
||||||
av_opt_set_int(m_audioSWR, "lfe_mix_level", m_audioVolume, 0);
|
|
||||||
|
|
||||||
swr_init(m_audioSWR);
|
swr_init(m_audioSWR);
|
||||||
|
|
||||||
@ -680,10 +684,7 @@ void DATVideoRender::setResampler()
|
|||||||
<< " in_sample_rate: " << m_audioDecoderCtx->sample_rate
|
<< " in_sample_rate: " << m_audioDecoderCtx->sample_rate
|
||||||
<< " out_sample_rate: " << m_audioSampleRate
|
<< " out_sample_rate: " << m_audioSampleRate
|
||||||
<< " in_sample_fmt: " << m_audioDecoderCtx->sample_fmt
|
<< " in_sample_fmt: " << m_audioDecoderCtx->sample_fmt
|
||||||
<< " out_sample_fmt: " << AV_SAMPLE_FMT_S16
|
<< " out_sample_fmt: " << AV_SAMPLE_FMT_S16;
|
||||||
<< " center_mix_level: " << m_audioVolume
|
|
||||||
<< " surround_mix_level: " << m_audioVolume
|
|
||||||
<< " lfe_mix_level: " << m_audioVolume;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DATVideoRender::CloseStream(QIODevice *device)
|
bool DATVideoRender::CloseStream(QIODevice *device)
|
||||||
|
@ -100,6 +100,7 @@ class DATVideoRender : public TVScreen
|
|||||||
int getAudioStreamIndex() const { return m_audioStreamIndex; }
|
int getAudioStreamIndex() const { return m_audioStreamIndex; }
|
||||||
|
|
||||||
void setAudioMute(bool audioMute) { m_audioMute = audioMute; }
|
void setAudioMute(bool audioMute) { m_audioMute = audioMute; }
|
||||||
|
void setVideoMute(bool videoMute) { m_videoMute = videoMute; }
|
||||||
void setAudioVolume(int audioVolume);
|
void setAudioVolume(int audioVolume);
|
||||||
|
|
||||||
struct DataTSMetaData2 MetaData;
|
struct DataTSMetaData2 MetaData;
|
||||||
@ -116,16 +117,15 @@ class DATVideoRender : public TVScreen
|
|||||||
AVCodecContext *m_videoDecoderCtx;
|
AVCodecContext *m_videoDecoderCtx;
|
||||||
AVCodecContext *m_audioDecoderCtx;
|
AVCodecContext *m_audioDecoderCtx;
|
||||||
AVFrame *m_frame;
|
AVFrame *m_frame;
|
||||||
AudioVector m_audioBuffer;
|
|
||||||
uint32_t m_audioBufferFill;
|
|
||||||
AudioFifo *m_audioFifo;
|
AudioFifo *m_audioFifo;
|
||||||
struct SwrContext* m_audioSWR;
|
struct SwrContext* m_audioSWR;
|
||||||
int m_audioSampleRate;
|
int m_audioSampleRate;
|
||||||
static const int m_audioFifoBufferSize = 16000;
|
static const int m_audioFifoBufferSize = 16000;
|
||||||
uint16_t m_audioFifoBuffer[m_audioFifoBufferSize*2]; // 2 channels
|
int16_t m_audioFifoBuffer[m_audioFifoBufferSize*2]; // 2 channels
|
||||||
int m_audioFifoBufferIndex;
|
int m_audioFifoBufferIndex;
|
||||||
bool m_audioMute;
|
bool m_audioMute;
|
||||||
int m_audioVolume;
|
bool m_videoMute;
|
||||||
|
float m_audioVolume;
|
||||||
bool m_updateAudioResampler;
|
bool m_updateAudioResampler;
|
||||||
|
|
||||||
uint8_t *m_pbytDecodedData[4];
|
uint8_t *m_pbytDecodedData[4];
|
||||||
|
BIN
sdrgui/resources/no_film.png
Normal file
BIN
sdrgui/resources/no_film.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 445 B |
@ -1,5 +1,6 @@
|
|||||||
<RCC>
|
<RCC>
|
||||||
<qresource prefix="/">
|
<qresource prefix="/">
|
||||||
|
<file>no_film.png</file>
|
||||||
<file>gps.png</file>
|
<file>gps.png</file>
|
||||||
<file>linear.png</file>
|
<file>linear.png</file>
|
||||||
<file>logarithmic.png</file>
|
<file>logarithmic.png</file>
|
||||||
|
Loading…
Reference in New Issue
Block a user