InterfaceGPS 0.1.0
Interface embarquée Qt pour navigation, multimédia, caméra et télémétrie
Chargement...
Recherche...
Aucune correspondance
camerapage.cpp
Aller à la documentation de ce fichier.
1
8#include "camerapage.h"
9#include "ui_camerapage.h"
10#include <QVBoxLayout>
11#include <QPixmap>
12#include <QDebug>
13#include <QNetworkDatagram>
14
15CameraPage::CameraPage(QWidget *parent)
16 : QWidget(parent)
17 , ui(new Ui::CameraPage)
18{
19 ui->setupUi(this);
20
21 // Initialisation du pointeur vers le conteneur d'image
22 videoLabel = ui->lblVideo;
23
24 // Configuration du label pour que l'image vidéo remplisse tout l'espace disponible
25 // tout en conservant son ratio (le ratio est géré en amont par le layout)
26 videoLabel->setScaledContents(true);
27 videoLabel->setAlignment(Qt::AlignCenter);
28
29 qDebug() << "[CAMERA] Constructeur OK. Label vidéo connecté à l'interface.";
30
31 // Initialisation du socket réseau UDP (sans l'ouvrir immédiatement)
32 udpSocket = new QUdpSocket(this);
33
34 // Connexion du signal de réception réseau au slot de décodage d'image
35 connect(udpSocket, &QUdpSocket::readyRead, this, &CameraPage::processPendingDatagrams);
36}
37
39{
40 delete ui;
41}
42
44{
45 // On s'assure que le port n'est pas déjà ouvert avant d'essayer de s'y lier
46 if (udpSocket->state() != QAbstractSocket::BoundState) {
47
48 // Écoute sur toutes les interfaces réseau (localhost, Wi-Fi, Ethernet) sur le port 4444
49 bool success = udpSocket->bind(QHostAddress::Any, 4444);
50
51 if (success) {
52 qDebug() << "CAMERA: Écoute démarrée sur le port 4444";
53 videoLabel->setText("Connexion en cours...");
54 } else {
55 qCritical() << "CAMERA: Échec de connexion au port 4444";
56 videoLabel->setText("Erreur: Port 4444 occupé");
57 }
58 }
59}
60
62{
63 // Libère le port réseau pour économiser les ressources système
64 // et éviter le traitement en arrière-plan d'images qui ne sont pas regardées.
65 if (udpSocket->isOpen()) {
66 udpSocket->close();
67 qDebug() << "CAMERA: Arrêt du flux";
68 }
69 videoLabel->clear(); // Vide l'image courante
70 videoLabel->setText("Caméra en pause");
71}
72
73
74void CameraPage::processPendingDatagrams()
75{
76 // Boucle de traitement : lit tous les paquets en attente dans le buffer réseau
77 while (udpSocket->hasPendingDatagrams()) {
78
79 // Extraction de la charge utile (payload) du datagramme UDP
80 QNetworkDatagram datagram = udpSocket->receiveDatagram();
81 QByteArray data = datagram.data();
82
83 // Tentative de conversion des données brutes en objet QPixmap (image)
84 // Le format attendu est explicitement défini à "JPG" pour accélérer le décodage
85 QPixmap pixmap;
86 if (pixmap.loadFromData(data, "JPG")) {
87 // Si le décodage réussit, on met à jour l'affichage avec la nouvelle "frame"
88 videoLabel->setPixmap(pixmap);
89 } else {
90 // Un paquet UDP peut être corrompu ou fragmenté (contrairement à TCP),
91 // on ignore silencieusement les images cassées sans crasher l'application.
92 qDebug() << "CAMERA: Image reçue invalide (paquet UDP corrompu ou incomplet)";
93 }
94 }
95}
Rôle architectural : Page UI dédiée à l'affichage du flux caméra embarqué (ex: vue recul ou Bird-eye)...
Contrôleur de la vue caméra. Cette classe écoute sur un port UDP spécifique (4444) pour recevoir des ...
Definition camerapage.h:29
CameraPage(QWidget *parent=nullptr)
Constructeur de la page Caméra. Initialise l'interface et prépare le socket UDP sans pour autant l'ou...
~CameraPage()
Destructeur. Libère l'interface générée.
void startStream()
Démarre l'écoute du flux vidéo entrant. Ouvre le port UDP 4444 et se met en attente de datagrammes....
void stopStream()
Arrête l'écoute du flux vidéo entrant. Ferme le port UDP et efface la dernière image affichée....