separate enable camera and video and use enableCamera when user activates webcam (fix #LINQT-2216)

This commit is contained in:
Gaelle Braud 2025-12-01 16:59:48 +01:00
parent c8428d6ade
commit 2d3957139a
12 changed files with 177 additions and 138 deletions

View file

@ -111,6 +111,7 @@ CallCore::CallCore(const std::shared_ptr<linphone::Call> &call) : QObject(nullpt
auto videoDirection = callParams->getVideoDirection();
mLocalVideoEnabled =
videoDirection == linphone::MediaDirection::SendOnly || videoDirection == linphone::MediaDirection::SendRecv;
mCameraEnabled = callParams->cameraEnabled();
auto remoteParams = call->getRemoteParams();
videoDirection = remoteParams ? remoteParams->getVideoDirection() : linphone::MediaDirection::Inactive;
mRemoteVideoEnabled =
@ -194,8 +195,8 @@ void CallCore::setSelf(QSharedPointer<CallCore> me) {
mCallModelConnection->makeConnectToModel(&CallModel::speakerMutedChanged, [this](bool isMuted) {
mCallModelConnection->invokeToCore([this, isMuted]() { setSpeakerMuted(isMuted); });
});
mCallModelConnection->makeConnectToCore(&CallCore::lSetLocalVideoEnabled, [this](bool enabled) {
mCallModelConnection->invokeToModel([this, enabled]() { mCallModel->setLocalVideoEnabled(enabled); });
mCallModelConnection->makeConnectToCore(&CallCore::lSetCameraEnabled, [this](bool enabled) {
mCallModelConnection->invokeToModel([this, enabled]() { mCallModel->setCameraEnabled(enabled); });
});
mCallModelConnection->makeConnectToCore(&CallCore::lStartRecording, [this]() {
mCallModelConnection->invokeToModel([this]() { mCallModel->startRecording(); });
@ -245,6 +246,9 @@ void CallCore::setSelf(QSharedPointer<CallCore> me) {
mCallModelConnection->makeConnectToModel(&CallModel::localVideoEnabledChanged, [this](bool enabled) {
mCallModelConnection->invokeToCore([this, enabled]() { setLocalVideoEnabled(enabled); });
});
mCallModelConnection->makeConnectToModel(&CallModel::cameraEnabledChanged, [this](bool enabled) {
mCallModelConnection->invokeToCore([this, enabled]() { setCameraEnabled(enabled); });
});
mCallModelConnection->makeConnectToModel(&CallModel::durationChanged, [this](int duration) {
mCallModelConnection->invokeToCore([this, duration]() { setDuration(duration); });
});
@ -561,6 +565,18 @@ void CallCore::setLocalVideoEnabled(bool enabled) {
}
}
bool CallCore::getCameraEnabled() const {
return mCameraEnabled;
}
void CallCore::setCameraEnabled(bool enabled) {
if (mCameraEnabled != enabled) {
mCameraEnabled = enabled;
lDebug() << "CameraEnabled: " << mCameraEnabled;
emit cameraEnabledChanged();
}
}
bool CallCore::getPaused() const {
return mPaused;
}

View file

@ -117,8 +117,8 @@ public:
Q_PROPERTY(QStringList remoteTokens WRITE setRemoteTokens MEMBER mRemoteTokens NOTIFY remoteTokensChanged)
Q_PROPERTY(
bool remoteVideoEnabled READ getRemoteVideoEnabled WRITE setRemoteVideoEnabled NOTIFY remoteVideoEnabledChanged)
Q_PROPERTY(
bool localVideoEnabled READ getLocalVideoEnabled WRITE lSetLocalVideoEnabled NOTIFY localVideoEnabledChanged)
Q_PROPERTY(bool localVideoEnabled READ getLocalVideoEnabled NOTIFY localVideoEnabledChanged)
Q_PROPERTY(bool cameraEnabled READ getCameraEnabled WRITE lSetCameraEnabled NOTIFY cameraEnabledChanged)
Q_PROPERTY(bool recording READ getRecording WRITE setRecording NOTIFY recordingChanged)
Q_PROPERTY(bool remoteRecording READ getRemoteRecording WRITE setRemoteRecording NOTIFY remoteRecordingChanged)
Q_PROPERTY(bool recordable READ getRecordable WRITE setRecordable NOTIFY recordableChanged)
@ -201,6 +201,9 @@ public:
bool getLocalVideoEnabled() const;
void setLocalVideoEnabled(bool enabled);
bool getCameraEnabled() const;
void setCameraEnabled(bool enabled);
bool getRecording() const;
void setRecording(bool recording);
@ -255,6 +258,7 @@ signals:
void remoteTokensChanged();
void remoteVideoEnabledChanged(bool remoteVideoEnabled);
void localVideoEnabledChanged();
void cameraEnabledChanged();
void recordingChanged();
void remoteRecordingChanged();
void recordableChanged();
@ -275,7 +279,7 @@ signals:
void lTerminateAllCalls(); // Hangup all calls
void lSetSpeakerMuted(bool muted);
void lSetMicrophoneMuted(bool isMuted);
void lSetLocalVideoEnabled(bool enabled);
void lSetCameraEnabled(bool enabled);
void lSetVideoEnabled(bool enabled);
void lSetPaused(bool paused);
void lTransferCall(QString address);
@ -331,6 +335,7 @@ private:
bool mSpeakerMuted = false;
bool mMicrophoneMuted = false;
bool mLocalVideoEnabled = false;
bool mCameraEnabled = false;
bool mVideoEnabled = false;
bool mPaused = false;
bool mRemoteVideoEnabled = false;

View file

@ -752,30 +752,30 @@
<translation>Nur Anwendungs-Logs ausgeben</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="1407"/>
<location filename="../../core/App.cpp" line="1408"/>
<source>hide_action</source>
<extracomment>&quot;Cacher&quot; &quot;Afficher&quot;</extracomment>
<translation>Ausblenden</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="1407"/>
<location filename="../../core/App.cpp" line="1408"/>
<source>show_action</source>
<translation>Zeigen</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="1422"/>
<location filename="../../core/App.cpp" line="1423"/>
<source>quit_action</source>
<extracomment>&quot;Quitter&quot;</extracomment>
<translation>Beenden</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="1440"/>
<location filename="../../core/App.cpp" line="1441"/>
<source>check_for_update</source>
<extracomment>Check for update</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../core/App.cpp" line="1558"/>
<location filename="../../core/App.cpp" line="1559"/>
<source>mark_all_read_action</source>
<translation type="unfinished"></translation>
</message>
@ -821,76 +821,76 @@
<context>
<name>CallCore</name>
<message>
<location filename="../../core/call/CallCore.cpp" line="213"/>
<location filename="../../core/call/CallCore.cpp" line="214"/>
<source>call_record_end_message</source>
<extracomment>&quot;Enregistrement terminé&quot;</extracomment>
<translation>Aufnahme beendet</translation>
</message>
<message>
<location filename="../../core/call/CallCore.cpp" line="215"/>
<location filename="../../core/call/CallCore.cpp" line="216"/>
<source>call_record_saved_in_file_message</source>
<extracomment>&quot;L&apos;appel a é enregistré dans le fichier : %1&quot;</extracomment>
<translation>Die Aufnahme wurde in der folgenden Datei gespeichert: %1</translation>
</message>
<message>
<location filename="../../core/call/CallCore.cpp" line="396"/>
<location filename="../../core/call/CallCore.cpp" line="421"/>
<location filename="../../core/call/CallCore.cpp" line="400"/>
<location filename="../../core/call/CallCore.cpp" line="425"/>
<source>call_stats_codec_label</source>
<extracomment>&quot;Codec: %1 / %2 kHz&quot;</extracomment>
<translation>Codec: %1 / %2 kHz</translation>
</message>
<message>
<location filename="../../core/call/CallCore.cpp" line="400"/>
<location filename="../../core/call/CallCore.cpp" line="424"/>
<location filename="../../core/call/CallCore.cpp" line="404"/>
<location filename="../../core/call/CallCore.cpp" line="428"/>
<source>call_stats_bandwidth_label</source>
<extracomment>&quot;Bande passante : %1 %2 kbits/s %3 %4 kbits/s&quot;</extracomment>
<translation>Bandbreite: %1 %2 kbits/s %3 %4 kbits/s</translation>
</message>
<message>
<location filename="../../core/call/CallCore.cpp" line="406"/>
<location filename="../../core/call/CallCore.cpp" line="429"/>
<location filename="../../core/call/CallCore.cpp" line="410"/>
<location filename="../../core/call/CallCore.cpp" line="433"/>
<source>call_stats_loss_rate_label</source>
<extracomment>&quot;Taux de perte: %1% %2%&quot;</extracomment>
<translation>Verlustquote: %1% %2%</translation>
</message>
<message>
<location filename="../../core/call/CallCore.cpp" line="411"/>
<location filename="../../core/call/CallCore.cpp" line="415"/>
<source>call_stats_jitter_buffer_label</source>
<extracomment>&quot;Tampon de gigue: %1 ms&quot;</extracomment>
<translation>Jitter-Puffer: %1 ms</translation>
</message>
<message>
<location filename="../../core/call/CallCore.cpp" line="438"/>
<location filename="../../core/call/CallCore.cpp" line="442"/>
<source>call_stats_resolution_label</source>
<extracomment>&quot;Définition vidéo : %1 %2 %3 %4&quot;</extracomment>
<translation>Videoauflösung: %1 %2 %3 %4</translation>
</message>
<message>
<location filename="../../core/call/CallCore.cpp" line="444"/>
<location filename="../../core/call/CallCore.cpp" line="448"/>
<source>call_stats_fps_label</source>
<extracomment>&quot;FPS : %1 %2 %3 %4&quot;</extracomment>
<translation>FPS : %1 %2 %3 %4</translation>
</message>
<message>
<location filename="../../core/call/CallCore.cpp" line="657"/>
<location filename="../../core/call/CallCore.cpp" line="673"/>
<source>media_encryption_dtls</source>
<extracomment>DTLS</extracomment>
<translation>DTLS</translation>
</message>
<message>
<location filename="../../core/call/CallCore.cpp" line="660"/>
<location filename="../../core/call/CallCore.cpp" line="676"/>
<source>media_encryption_none</source>
<extracomment>None</extracomment>
<translation>Nichts</translation>
</message>
<message>
<location filename="../../core/call/CallCore.cpp" line="663"/>
<location filename="../../core/call/CallCore.cpp" line="679"/>
<source>media_encryption_srtp</source>
<extracomment>SRTP</extracomment>
<translation>SRTP</translation>
</message>
<message>
<location filename="../../core/call/CallCore.cpp" line="666"/>
<location filename="../../core/call/CallCore.cpp" line="682"/>
<source>media_encryption_post_quantum</source>
<extracomment>&quot;ZRTP - Post quantique&quot;</extracomment>
<translation>Post-quantum ZRTP</translation>
@ -1027,24 +1027,24 @@
<translation>Der Anrufer hat das Gespräch beendet</translation>
</message>
<message>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="159"/>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="158"/>
<source>conference_call_empty</source>
<extracomment>&quot;En attente d&apos;autres participants&quot;</extracomment>
<translation>Warten auf weitere Teilnehmer</translation>
</message>
<message>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="177"/>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="176"/>
<source>conference_share_link_title</source>
<extracomment>&quot;Partager le lien&quot;</extracomment>
<translation>Link teilen</translation>
</message>
<message>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="183"/>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="182"/>
<source>copied</source>
<translation>Kopiert</translation>
</message>
<message>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="185"/>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="184"/>
<source>information_popup_meeting_address_copied_to_clipboard</source>
<extracomment>Le lien de la réunion a é copié dans le presse-papier</extracomment>
<translation>Der Besprechungs-Link wurde in die Zwischenablage kopiert</translation>
@ -1129,67 +1129,67 @@
<context>
<name>CallModel</name>
<message>
<location filename="../../model/call/CallModel.cpp" line="361"/>
<location filename="../../model/call/CallModel.cpp" line="372"/>
<source>call_error_no_response_toast</source>
<extracomment>&quot;No response&quot;</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../model/call/CallModel.cpp" line="365"/>
<location filename="../../model/call/CallModel.cpp" line="376"/>
<source>call_error_forbidden_resource_toast</source>
<extracomment>&quot;403 : Forbidden resource&quot;</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../model/call/CallModel.cpp" line="369"/>
<location filename="../../model/call/CallModel.cpp" line="380"/>
<source>call_error_not_answered_toast</source>
<extracomment>&quot;Request timeout&quot;</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../model/call/CallModel.cpp" line="373"/>
<location filename="../../model/call/CallModel.cpp" line="384"/>
<source>call_error_user_declined_toast</source>
<extracomment>&quot;User declined the call&quot;</extracomment>
<translation>Der Benutzer hat den Anruf abgelehnt</translation>
</message>
<message>
<location filename="../../model/call/CallModel.cpp" line="377"/>
<location filename="../../model/call/CallModel.cpp" line="388"/>
<source>call_error_user_not_found_toast</source>
<extracomment>&quot;User was not found&quot;</extracomment>
<translation>Benutzer nicht gefunden</translation>
</message>
<message>
<location filename="../../model/call/CallModel.cpp" line="381"/>
<location filename="../../model/call/CallModel.cpp" line="392"/>
<source>call_error_user_busy_toast</source>
<extracomment>&quot;User is busy&quot;</extracomment>
<translation>Der Benutzer ist beschäftigt</translation>
</message>
<message>
<location filename="../../model/call/CallModel.cpp" line="385"/>
<location filename="../../model/call/CallModel.cpp" line="396"/>
<source>call_error_incompatible_media_params_toast</source>
<extracomment>&quot;User can&amp;apos;t accept your call&quot;</extracomment>
<translation>Der Benutzer kann Ihren Anruf nicht annehmen</translation>
</message>
<message>
<location filename="../../model/call/CallModel.cpp" line="389"/>
<location filename="../../model/call/CallModel.cpp" line="400"/>
<source>call_error_io_error_toast</source>
<extracomment>&quot;Unavailable service or network error&quot;</extracomment>
<translation>Dienst nicht verfügbar oder Netzwerkfehler</translation>
</message>
<message>
<location filename="../../model/call/CallModel.cpp" line="393"/>
<location filename="../../model/call/CallModel.cpp" line="404"/>
<source>call_error_do_not_disturb_toast</source>
<extracomment>&quot;Le correspondant ne peut être dérangé&quot;</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../model/call/CallModel.cpp" line="397"/>
<location filename="../../model/call/CallModel.cpp" line="408"/>
<source>call_error_temporarily_unavailable_toast</source>
<extracomment>&quot;Temporarily unavailable&quot;</extracomment>
<translation>Vorübergehend nicht verfügbar</translation>
</message>
<message>
<location filename="../../model/call/CallModel.cpp" line="401"/>
<location filename="../../model/call/CallModel.cpp" line="412"/>
<source>call_error_server_timeout_toast</source>
<extracomment>&quot;Server tiemout&quot;</extracomment>
<translation>Server-Zeitüberschreitung</translation>
@ -1852,29 +1852,29 @@
<translation>Video aktivieren</translation>
</message>
<message>
<location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1468"/>
<location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1471"/>
<location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1467"/>
<location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1470"/>
<source>call_activate_microphone</source>
<extracomment>&quot;Activer le micro&quot;</extracomment>
<translation>Mikrofon aktivieren</translation>
</message>
<message>
<location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1469"/>
<location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1470"/>
<location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1471"/>
<source>call_deactivate_microphone</source>
<extracomment>&quot;Désactiver le micro&quot;</extracomment>
<translation>Mikrofon stummschalten</translation>
</message>
<message>
<location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1487"/>
<location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1488"/>
<location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1489"/>
<source>call_share_screen_hint</source>
<extracomment>Partager l&apos;écran</extracomment>
<translation>Bildschirm teilen</translation>
</message>
<message>
<location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1510"/>
<location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1511"/>
<location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1512"/>
<source>call_open_chat_hint</source>
<extracomment>Open chat</extracomment>
<translation type="unfinished"></translation>

View file

@ -757,30 +757,30 @@
<translation>Print only logs from the application</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="1407"/>
<location filename="../../core/App.cpp" line="1408"/>
<source>hide_action</source>
<extracomment>&quot;Cacher&quot; &quot;Afficher&quot;</extracomment>
<translation>Hide</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="1407"/>
<location filename="../../core/App.cpp" line="1408"/>
<source>show_action</source>
<translation>Show</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="1422"/>
<location filename="../../core/App.cpp" line="1423"/>
<source>quit_action</source>
<extracomment>&quot;Quitter&quot;</extracomment>
<translation>Quit</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="1440"/>
<location filename="../../core/App.cpp" line="1441"/>
<source>check_for_update</source>
<extracomment>Check for update</extracomment>
<translation>Check for update</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="1558"/>
<location filename="../../core/App.cpp" line="1559"/>
<source>mark_all_read_action</source>
<translation>Marquer tout comme lu</translation>
</message>
@ -826,76 +826,76 @@
<context>
<name>CallCore</name>
<message>
<location filename="../../core/call/CallCore.cpp" line="213"/>
<location filename="../../core/call/CallCore.cpp" line="214"/>
<source>call_record_end_message</source>
<extracomment>&quot;Enregistrement terminé&quot;</extracomment>
<translation>Recording ended</translation>
</message>
<message>
<location filename="../../core/call/CallCore.cpp" line="215"/>
<location filename="../../core/call/CallCore.cpp" line="216"/>
<source>call_record_saved_in_file_message</source>
<extracomment>&quot;L&apos;appel a é enregistré dans le fichier : %1&quot;</extracomment>
<translation>Recording has been saved in file : %1</translation>
</message>
<message>
<location filename="../../core/call/CallCore.cpp" line="396"/>
<location filename="../../core/call/CallCore.cpp" line="421"/>
<location filename="../../core/call/CallCore.cpp" line="400"/>
<location filename="../../core/call/CallCore.cpp" line="425"/>
<source>call_stats_codec_label</source>
<extracomment>&quot;Codec: %1 / %2 kHz&quot;</extracomment>
<translation>Codec: %1 / %2 kHz</translation>
</message>
<message>
<location filename="../../core/call/CallCore.cpp" line="400"/>
<location filename="../../core/call/CallCore.cpp" line="424"/>
<location filename="../../core/call/CallCore.cpp" line="404"/>
<location filename="../../core/call/CallCore.cpp" line="428"/>
<source>call_stats_bandwidth_label</source>
<extracomment>&quot;Bande passante : %1 %2 kbits/s %3 %4 kbits/s&quot;</extracomment>
<translation>Bandwidth : %1 %2 kbits/s %3 %4 kbits/s</translation>
</message>
<message>
<location filename="../../core/call/CallCore.cpp" line="406"/>
<location filename="../../core/call/CallCore.cpp" line="429"/>
<location filename="../../core/call/CallCore.cpp" line="410"/>
<location filename="../../core/call/CallCore.cpp" line="433"/>
<source>call_stats_loss_rate_label</source>
<extracomment>&quot;Taux de perte: %1% %2%&quot;</extracomment>
<translation>Loss rate: %1% %2%</translation>
</message>
<message>
<location filename="../../core/call/CallCore.cpp" line="411"/>
<location filename="../../core/call/CallCore.cpp" line="415"/>
<source>call_stats_jitter_buffer_label</source>
<extracomment>&quot;Tampon de gigue: %1 ms&quot;</extracomment>
<translation>Jitter buffer : %1 ms</translation>
</message>
<message>
<location filename="../../core/call/CallCore.cpp" line="438"/>
<location filename="../../core/call/CallCore.cpp" line="442"/>
<source>call_stats_resolution_label</source>
<extracomment>&quot;Définition vidéo : %1 %2 %3 %4&quot;</extracomment>
<translation>Video resolution: %1 %2 %3 %4</translation>
</message>
<message>
<location filename="../../core/call/CallCore.cpp" line="444"/>
<location filename="../../core/call/CallCore.cpp" line="448"/>
<source>call_stats_fps_label</source>
<extracomment>&quot;FPS : %1 %2 %3 %4&quot;</extracomment>
<translation>FPS : %1 %2 %3 %4</translation>
</message>
<message>
<location filename="../../core/call/CallCore.cpp" line="657"/>
<location filename="../../core/call/CallCore.cpp" line="673"/>
<source>media_encryption_dtls</source>
<extracomment>DTLS</extracomment>
<translation>DTLS</translation>
</message>
<message>
<location filename="../../core/call/CallCore.cpp" line="660"/>
<location filename="../../core/call/CallCore.cpp" line="676"/>
<source>media_encryption_none</source>
<extracomment>None</extracomment>
<translation>None</translation>
</message>
<message>
<location filename="../../core/call/CallCore.cpp" line="663"/>
<location filename="../../core/call/CallCore.cpp" line="679"/>
<source>media_encryption_srtp</source>
<extracomment>SRTP</extracomment>
<translation>SRTP</translation>
</message>
<message>
<location filename="../../core/call/CallCore.cpp" line="666"/>
<location filename="../../core/call/CallCore.cpp" line="682"/>
<source>media_encryption_post_quantum</source>
<extracomment>&quot;ZRTP - Post quantique&quot;</extracomment>
<translation>Post quantum ZRTP</translation>
@ -1032,24 +1032,24 @@
<translation>Your caller has ended the call</translation>
</message>
<message>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="159"/>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="158"/>
<source>conference_call_empty</source>
<extracomment>&quot;En attente d&apos;autres participants&quot;</extracomment>
<translation>Waiting for other participants</translation>
</message>
<message>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="177"/>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="176"/>
<source>conference_share_link_title</source>
<extracomment>&quot;Partager le lien&quot;</extracomment>
<translation>Share link</translation>
</message>
<message>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="183"/>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="182"/>
<source>copied</source>
<translation>Copied</translation>
</message>
<message>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="185"/>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="184"/>
<source>information_popup_meeting_address_copied_to_clipboard</source>
<extracomment>Le lien de la réunion a é copié dans le presse-papier</extracomment>
<translation>The meeting link has been copied to the clipboard</translation>
@ -1134,67 +1134,67 @@
<context>
<name>CallModel</name>
<message>
<location filename="../../model/call/CallModel.cpp" line="361"/>
<location filename="../../model/call/CallModel.cpp" line="372"/>
<source>call_error_no_response_toast</source>
<extracomment>&quot;No response&quot;</extracomment>
<translation>No response</translation>
</message>
<message>
<location filename="../../model/call/CallModel.cpp" line="365"/>
<location filename="../../model/call/CallModel.cpp" line="376"/>
<source>call_error_forbidden_resource_toast</source>
<extracomment>&quot;403 : Forbidden resource&quot;</extracomment>
<translation>403 : Forbidden resource</translation>
</message>
<message>
<location filename="../../model/call/CallModel.cpp" line="369"/>
<location filename="../../model/call/CallModel.cpp" line="380"/>
<source>call_error_not_answered_toast</source>
<extracomment>&quot;Request timeout&quot;</extracomment>
<translation>Request timeout</translation>
</message>
<message>
<location filename="../../model/call/CallModel.cpp" line="373"/>
<location filename="../../model/call/CallModel.cpp" line="384"/>
<source>call_error_user_declined_toast</source>
<extracomment>&quot;User declined the call&quot;</extracomment>
<translation>User declined the call</translation>
</message>
<message>
<location filename="../../model/call/CallModel.cpp" line="377"/>
<location filename="../../model/call/CallModel.cpp" line="388"/>
<source>call_error_user_not_found_toast</source>
<extracomment>&quot;User was not found&quot;</extracomment>
<translation>User was not found</translation>
</message>
<message>
<location filename="../../model/call/CallModel.cpp" line="381"/>
<location filename="../../model/call/CallModel.cpp" line="392"/>
<source>call_error_user_busy_toast</source>
<extracomment>&quot;User is busy&quot;</extracomment>
<translation>User is busy</translation>
</message>
<message>
<location filename="../../model/call/CallModel.cpp" line="385"/>
<location filename="../../model/call/CallModel.cpp" line="396"/>
<source>call_error_incompatible_media_params_toast</source>
<extracomment>&quot;User can&amp;apos;t accept your call&quot;</extracomment>
<translation>User can&apos;t accept your call</translation>
</message>
<message>
<location filename="../../model/call/CallModel.cpp" line="389"/>
<location filename="../../model/call/CallModel.cpp" line="400"/>
<source>call_error_io_error_toast</source>
<extracomment>&quot;Unavailable service or network error&quot;</extracomment>
<translation>Unavailable service or network error</translation>
</message>
<message>
<location filename="../../model/call/CallModel.cpp" line="393"/>
<location filename="../../model/call/CallModel.cpp" line="404"/>
<source>call_error_do_not_disturb_toast</source>
<extracomment>&quot;Le correspondant ne peut être dérangé&quot;</extracomment>
<translation>User cannot be disturbed</translation>
</message>
<message>
<location filename="../../model/call/CallModel.cpp" line="397"/>
<location filename="../../model/call/CallModel.cpp" line="408"/>
<source>call_error_temporarily_unavailable_toast</source>
<extracomment>&quot;Temporarily unavailable&quot;</extracomment>
<translation>Temporarily unavailable</translation>
</message>
<message>
<location filename="../../model/call/CallModel.cpp" line="401"/>
<location filename="../../model/call/CallModel.cpp" line="412"/>
<source>call_error_server_timeout_toast</source>
<extracomment>&quot;Server tiemout&quot;</extracomment>
<translation>Server tiemout</translation>
@ -1839,29 +1839,29 @@
<translation>Enable video</translation>
</message>
<message>
<location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1468"/>
<location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1471"/>
<location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1467"/>
<location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1470"/>
<source>call_activate_microphone</source>
<extracomment>&quot;Activer le micro&quot;</extracomment>
<translation>Activate microphone</translation>
</message>
<message>
<location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1469"/>
<location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1470"/>
<location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1471"/>
<source>call_deactivate_microphone</source>
<extracomment>&quot;Désactiver le micro&quot;</extracomment>
<translation>Mute microphone</translation>
</message>
<message>
<location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1487"/>
<location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1488"/>
<location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1489"/>
<source>call_share_screen_hint</source>
<extracomment>Partager l&apos;écran</extracomment>
<translation>Share screen</translation>
</message>
<message>
<location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1510"/>
<location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1511"/>
<location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1512"/>
<source>call_open_chat_hint</source>
<extracomment>Open chat</extracomment>
<translation>Open conversation</translation>

View file

@ -757,30 +757,30 @@
<translation>Print only logs from the application</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="1407"/>
<location filename="../../core/App.cpp" line="1408"/>
<source>hide_action</source>
<extracomment>&quot;Cacher&quot; &quot;Afficher&quot;</extracomment>
<translation>Cacher</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="1407"/>
<location filename="../../core/App.cpp" line="1408"/>
<source>show_action</source>
<translation>Afficher</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="1422"/>
<location filename="../../core/App.cpp" line="1423"/>
<source>quit_action</source>
<extracomment>&quot;Quitter&quot;</extracomment>
<translation>Quitter</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="1440"/>
<location filename="../../core/App.cpp" line="1441"/>
<source>check_for_update</source>
<extracomment>Check for update</extracomment>
<translation>Rechercher une mise à jour</translation>
</message>
<message>
<location filename="../../core/App.cpp" line="1558"/>
<location filename="../../core/App.cpp" line="1559"/>
<source>mark_all_read_action</source>
<translation>Marquer tout comme lu</translation>
</message>
@ -826,76 +826,76 @@
<context>
<name>CallCore</name>
<message>
<location filename="../../core/call/CallCore.cpp" line="213"/>
<location filename="../../core/call/CallCore.cpp" line="214"/>
<source>call_record_end_message</source>
<extracomment>&quot;Enregistrement terminé&quot;</extracomment>
<translation>Enregistrement terminé</translation>
</message>
<message>
<location filename="../../core/call/CallCore.cpp" line="215"/>
<location filename="../../core/call/CallCore.cpp" line="216"/>
<source>call_record_saved_in_file_message</source>
<extracomment>&quot;L&apos;appel a é enregistré dans le fichier : %1&quot;</extracomment>
<translation>L&apos;appel a é enregistré dans le fichier : %1</translation>
</message>
<message>
<location filename="../../core/call/CallCore.cpp" line="396"/>
<location filename="../../core/call/CallCore.cpp" line="421"/>
<location filename="../../core/call/CallCore.cpp" line="400"/>
<location filename="../../core/call/CallCore.cpp" line="425"/>
<source>call_stats_codec_label</source>
<extracomment>&quot;Codec: %1 / %2 kHz&quot;</extracomment>
<translation>Codec: %1 / %2 kHz</translation>
</message>
<message>
<location filename="../../core/call/CallCore.cpp" line="400"/>
<location filename="../../core/call/CallCore.cpp" line="424"/>
<location filename="../../core/call/CallCore.cpp" line="404"/>
<location filename="../../core/call/CallCore.cpp" line="428"/>
<source>call_stats_bandwidth_label</source>
<extracomment>&quot;Bande passante : %1 %2 kbits/s %3 %4 kbits/s&quot;</extracomment>
<translation>Bande passante : %1 %2 kbits/s %3 %4 kbits/s</translation>
</message>
<message>
<location filename="../../core/call/CallCore.cpp" line="406"/>
<location filename="../../core/call/CallCore.cpp" line="429"/>
<location filename="../../core/call/CallCore.cpp" line="410"/>
<location filename="../../core/call/CallCore.cpp" line="433"/>
<source>call_stats_loss_rate_label</source>
<extracomment>&quot;Taux de perte: %1% %2%&quot;</extracomment>
<translation>Taux de perte: %1% %2%</translation>
</message>
<message>
<location filename="../../core/call/CallCore.cpp" line="411"/>
<location filename="../../core/call/CallCore.cpp" line="415"/>
<source>call_stats_jitter_buffer_label</source>
<extracomment>&quot;Tampon de gigue: %1 ms&quot;</extracomment>
<translation>Tampon de gigue: %1 ms</translation>
</message>
<message>
<location filename="../../core/call/CallCore.cpp" line="438"/>
<location filename="../../core/call/CallCore.cpp" line="442"/>
<source>call_stats_resolution_label</source>
<extracomment>&quot;Définition vidéo : %1 %2 %3 %4&quot;</extracomment>
<translation>Définition vidéo : %1 %2 %3 %4</translation>
</message>
<message>
<location filename="../../core/call/CallCore.cpp" line="444"/>
<location filename="../../core/call/CallCore.cpp" line="448"/>
<source>call_stats_fps_label</source>
<extracomment>&quot;FPS : %1 %2 %3 %4&quot;</extracomment>
<translation>FPS : %1 %2 %3 %4</translation>
</message>
<message>
<location filename="../../core/call/CallCore.cpp" line="657"/>
<location filename="../../core/call/CallCore.cpp" line="673"/>
<source>media_encryption_dtls</source>
<extracomment>DTLS</extracomment>
<translation>DTLS</translation>
</message>
<message>
<location filename="../../core/call/CallCore.cpp" line="660"/>
<location filename="../../core/call/CallCore.cpp" line="676"/>
<source>media_encryption_none</source>
<extracomment>None</extracomment>
<translation>None</translation>
</message>
<message>
<location filename="../../core/call/CallCore.cpp" line="663"/>
<location filename="../../core/call/CallCore.cpp" line="679"/>
<source>media_encryption_srtp</source>
<extracomment>SRTP</extracomment>
<translation>SRTP</translation>
</message>
<message>
<location filename="../../core/call/CallCore.cpp" line="666"/>
<location filename="../../core/call/CallCore.cpp" line="682"/>
<source>media_encryption_post_quantum</source>
<extracomment>&quot;ZRTP - Post quantique&quot;</extracomment>
<translation>ZRTP - Post quantique</translation>
@ -1032,24 +1032,24 @@
<translation>Votre correspondant a terminé l&apos;appel</translation>
</message>
<message>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="159"/>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="158"/>
<source>conference_call_empty</source>
<extracomment>&quot;En attente d&apos;autres participants&quot;</extracomment>
<translation>En attente d&apos;autres participants</translation>
</message>
<message>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="177"/>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="176"/>
<source>conference_share_link_title</source>
<extracomment>&quot;Partager le lien&quot;</extracomment>
<translation>Partager le lien</translation>
</message>
<message>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="183"/>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="182"/>
<source>copied</source>
<translation>Copié</translation>
</message>
<message>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="185"/>
<location filename="../../view/Control/Container/Call/CallLayout.qml" line="184"/>
<source>information_popup_meeting_address_copied_to_clipboard</source>
<extracomment>Le lien de la réunion a é copié dans le presse-papier</extracomment>
<translation>Le lien de la réunion a é copié dans le presse-papier</translation>
@ -1134,67 +1134,67 @@
<context>
<name>CallModel</name>
<message>
<location filename="../../model/call/CallModel.cpp" line="361"/>
<location filename="../../model/call/CallModel.cpp" line="372"/>
<source>call_error_no_response_toast</source>
<extracomment>&quot;No response&quot;</extracomment>
<translation>Pas de réponse</translation>
</message>
<message>
<location filename="../../model/call/CallModel.cpp" line="365"/>
<location filename="../../model/call/CallModel.cpp" line="376"/>
<source>call_error_forbidden_resource_toast</source>
<extracomment>&quot;403 : Forbidden resource&quot;</extracomment>
<translation>403 : Forbidden resource</translation>
</message>
<message>
<location filename="../../model/call/CallModel.cpp" line="369"/>
<location filename="../../model/call/CallModel.cpp" line="380"/>
<source>call_error_not_answered_toast</source>
<extracomment>&quot;Request timeout&quot;</extracomment>
<translation>La requête a expiré</translation>
</message>
<message>
<location filename="../../model/call/CallModel.cpp" line="373"/>
<location filename="../../model/call/CallModel.cpp" line="384"/>
<source>call_error_user_declined_toast</source>
<extracomment>&quot;User declined the call&quot;</extracomment>
<translation>Le correspondant a décliné l&apos;appel</translation>
</message>
<message>
<location filename="../../model/call/CallModel.cpp" line="377"/>
<location filename="../../model/call/CallModel.cpp" line="388"/>
<source>call_error_user_not_found_toast</source>
<extracomment>&quot;User was not found&quot;</extracomment>
<translation>Le correspondant n&apos;a pas é trouvé</translation>
</message>
<message>
<location filename="../../model/call/CallModel.cpp" line="381"/>
<location filename="../../model/call/CallModel.cpp" line="392"/>
<source>call_error_user_busy_toast</source>
<extracomment>&quot;User is busy&quot;</extracomment>
<translation>Le correspondant est occupé</translation>
</message>
<message>
<location filename="../../model/call/CallModel.cpp" line="385"/>
<location filename="../../model/call/CallModel.cpp" line="396"/>
<source>call_error_incompatible_media_params_toast</source>
<extracomment>&quot;User can&amp;apos;t accept your call&quot;</extracomment>
<translation>Le correspondant ne peut accepter votre appel</translation>
</message>
<message>
<location filename="../../model/call/CallModel.cpp" line="389"/>
<location filename="../../model/call/CallModel.cpp" line="400"/>
<source>call_error_io_error_toast</source>
<extracomment>&quot;Unavailable service or network error&quot;</extracomment>
<translation>Service indisponible ou erreur réseau</translation>
</message>
<message>
<location filename="../../model/call/CallModel.cpp" line="393"/>
<location filename="../../model/call/CallModel.cpp" line="404"/>
<source>call_error_do_not_disturb_toast</source>
<extracomment>&quot;Le correspondant ne peut être dérangé&quot;</extracomment>
<translation>Le correspondant ne peut être dérangé</translation>
</message>
<message>
<location filename="../../model/call/CallModel.cpp" line="397"/>
<location filename="../../model/call/CallModel.cpp" line="408"/>
<source>call_error_temporarily_unavailable_toast</source>
<extracomment>&quot;Temporarily unavailable&quot;</extracomment>
<translation>Temporairement indisponible</translation>
</message>
<message>
<location filename="../../model/call/CallModel.cpp" line="401"/>
<location filename="../../model/call/CallModel.cpp" line="412"/>
<source>call_error_server_timeout_toast</source>
<extracomment>&quot;Server tiemout&quot;</extracomment>
<translation>Délai d&apos;attente du serveur dépassé</translation>
@ -1839,29 +1839,29 @@
<translation>Activer la vidéo</translation>
</message>
<message>
<location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1468"/>
<location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1471"/>
<location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1467"/>
<location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1470"/>
<source>call_activate_microphone</source>
<extracomment>&quot;Activer le micro&quot;</extracomment>
<translation>Activer le micro</translation>
</message>
<message>
<location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1469"/>
<location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1470"/>
<location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1471"/>
<source>call_deactivate_microphone</source>
<extracomment>&quot;Désactiver le micro&quot;</extracomment>
<translation>Désactiver le micro</translation>
</message>
<message>
<location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1487"/>
<location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1488"/>
<location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1489"/>
<source>call_share_screen_hint</source>
<extracomment>Partager l&apos;écran</extracomment>
<translation>Partager l&apos;écran</translation>
</message>
<message>
<location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1510"/>
<location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1511"/>
<location filename="../../view/Page/Window/Call/CallsWindow.qml" line="1512"/>
<source>call_open_chat_hint</source>
<extracomment>Open chat</extracomment>
<translation>Ouvrir le chat</translation>

View file

@ -69,6 +69,7 @@ void CallModel::accept(bool withVideo) {
activateLocalVideo(params, withVideo);
mMonitor->acceptWithParams(params);
emit localVideoEnabledChanged(withVideo);
emit cameraEnabledChanged(params->cameraEnabled());
}
void CallModel::decline() {
@ -146,8 +147,9 @@ void CallModel::activateLocalVideo(std::shared_ptr<linphone::CallParams> &params
.arg("Updating call with video enabled and media direction set to %1")
.arg((int)params->getVideoDirection());
params->enableVideo(SettingsModel::getInstance()->getVideoEnabled());
auto videoDirection = enable ? linphone::MediaDirection::SendRecv : linphone::MediaDirection::RecvOnly;
params->setVideoDirection(videoDirection);
auto videoDirection = params->getVideoDirection();
params->setVideoDirection(enable || params->screenSharingEnabled() ? linphone::MediaDirection::SendRecv
: linphone::MediaDirection::RecvOnly);
}
void CallModel::setLocalVideoEnabled(bool enabled) {
@ -157,6 +159,15 @@ void CallModel::setLocalVideoEnabled(bool enabled) {
mMonitor->update(params);
}
void CallModel::setCameraEnabled(bool enabled) {
mustBeInLinphoneThread(log().arg(Q_FUNC_INFO));
auto params = CoreModel::getInstance()->getCore()->createCallParams(mMonitor);
activateLocalVideo(params, enabled);
lInfo() << log().arg("Enable camera :") << enabled;
params->enableCamera(enabled);
mMonitor->update(params);
}
void CallModel::startRecording() {
mustBeInLinphoneThread(log().arg(Q_FUNC_INFO));
mMonitor->startRecording();
@ -444,8 +455,11 @@ void CallModel::onStateChanged(const std::shared_ptr<linphone::Call> &call,
setConference(call->getConference());
mDurationTimer.start();
// After UpdatedByRemote, video direction could be changed.
auto videoDirection = call->getParams()->getVideoDirection();
auto params = call->getParams();
auto videoDirection = params->getVideoDirection();
auto remoteVideoDirection = call->getRemoteParams()->getVideoDirection();
lInfo() << log().arg("Camera enabled changed") << params->cameraEnabled();
emit cameraEnabledChanged(params->cameraEnabled());
emit localVideoEnabledChanged(videoDirection == linphone::MediaDirection::SendOnly ||
videoDirection == linphone::MediaDirection::SendRecv);
emit remoteVideoEnabledChanged(remoteVideoDirection == linphone::MediaDirection::SendOnly ||

View file

@ -45,6 +45,7 @@ public:
void setMicrophoneMuted(bool isMuted);
void setSpeakerMuted(bool isMuted);
void setLocalVideoEnabled(bool enabled);
void setCameraEnabled(bool enabled);
void startRecording();
void stopRecording();
void setRecordFile(const std::string &path);
@ -98,6 +99,7 @@ signals:
void microphoneVolumeChanged(float);
void pausedChanged(bool paused);
void remoteVideoEnabledChanged(bool remoteVideoEnabled);
void cameraEnabledChanged(bool enalbed);
void localVideoEnabledChanged(bool enabled);
void recordingChanged(const std::shared_ptr<linphone::Call> &call, bool recording);
void speakerVolumeGainChanged(float volume);

View file

@ -236,8 +236,8 @@ void ConferenceModel::onParticipantDeviceMediaCapabilityChanged(
void ConferenceModel::onParticipantDeviceMediaAvailabilityChanged(
const std::shared_ptr<linphone::Conference> &conference,
const std::shared_ptr<const linphone::ParticipantDevice> &participantDevice) {
lInfo() << "onParticipantDeviceMediaAvailabilityChanged: "
<< (int)participantDevice->getStreamAvailability(linphone::StreamType::Video)
lInfo() << "onParticipantDeviceMediaAvailabilityChanged: video stream available ="
<< participantDevice->getStreamAvailability(linphone::StreamType::Video)
<< ". Device: " << participantDevice->getAddress()->asString().c_str();
emit participantDeviceMediaAvailabilityChanged(participantDevice);
}

View file

@ -79,6 +79,9 @@ Item {
anchors.bottomMargin: Utils.getSizeWithScreenRatio(15)// Spacing
qmlName: 'S_'+index
visible: parent.visible
videoEnabled: (index === 0 && mainItem.call.core.cameraEnabled)
|| (!previewEnabled && call && call.core.remoteVideoEnabled)
|| (!previewEnabled && participantDevice && participantDevice.core.videoEnabled)
participantDevice: $modelData
displayAll: false
displayPresence: false

View file

@ -113,8 +113,7 @@ Item {
anchors.bottom: mainItem.bottom
anchors.rightMargin: Utils.getSizeWithScreenRatio(20)
anchors.bottomMargin: Utils.getSizeWithScreenRatio(10)
videoEnabled: preview.visible && mainItem.call && mainItem.call.core.localVideoEnabled
onVideoEnabledChanged: console.log("P : " +videoEnabled + " / " +visible +" / " +mainItem.call)
onVideoEnabledChanged: console.log("Preview : " +videoEnabled + " / " +visible +" / " +mainItem.call)
property var accountObj: UtilsCpp.findLocalAccountByAddress(mainItem.localAddress)
account: accountObj && accountObj.value || null
call: mainItem.call

View file

@ -58,7 +58,7 @@ Item {
property var contact: contactObj && contactObj.value || null
property var identityAddress: account ? UtilsCpp.getDisplayName(account.core.identityAddress) : null
property bool videoEnabled: (previewEnabled && call && call.core.localVideoEnabled)
property bool videoEnabled: (previewEnabled && call && call.core.cameraEnabled)
|| (!previewEnabled && call && call.core.remoteVideoEnabled)
|| (participantDevice && participantDevice.core.videoEnabled)
property string qmlName

View file

@ -27,7 +27,7 @@ AbstractWindow {
property ChatGui chat: chatObj ? chatObj.value : null
property int conferenceLayout: call && call.core.conferenceVideoLayout || 0
property bool localVideoEnabled: call && call.core.localVideoEnabled
property bool cameraEnabled: call && call.core.cameraEnabled
property bool remoteVideoEnabled: call && call.core.remoteVideoEnabled
property bool callTerminatedByUser: false
@ -1447,14 +1447,14 @@ AbstractWindow {
checkedIconUrl: AppIcons.videoCameraSlash
//: "Désactiver la vidéo"
//: "Activer la vidéo"
ToolTip.text: mainWindow.localVideoEnabled ? qsTr("call_deactivate_video_hint") : qsTr("call_activate_video_hint")
Accessible.name: mainWindow.localVideoEnabled ? qsTr("call_deactivate_video_hint") : qsTr("call_activate_video_hint")
checked: !mainWindow.localVideoEnabled
ToolTip.text: mainWindow.cameraEnabled ? qsTr("call_deactivate_video_hint") : qsTr("call_activate_video_hint")
Accessible.name: mainWindow.cameraEnabled ? qsTr("call_deactivate_video_hint") : qsTr("call_activate_video_hint")
checked: !mainWindow.cameraEnabled
Layout.preferredWidth: Utils.getSizeWithScreenRatio(55)
Layout.preferredHeight: Utils.getSizeWithScreenRatio(55)
icon.width: Utils.getSizeWithScreenRatio(32)
icon.height: Utils.getSizeWithScreenRatio(32)
onClicked: mainWindow.call.core.lSetLocalVideoEnabled(!mainWindow.call.core.localVideoEnabled)
onClicked: mainWindow.call.core.lSetCameraEnabled(!mainWindow.call.core.cameraEnabled)
}
// Audio microphone button