add about and license
This commit is contained in:
@@ -21,6 +21,8 @@ qt_add_executable(gstreamerViewer
|
|||||||
cameracontrolwidget.h
|
cameracontrolwidget.h
|
||||||
videoviewerwidget.cpp
|
videoviewerwidget.cpp
|
||||||
videoviewerwidget.h
|
videoviewerwidget.h
|
||||||
|
aboutwidget.cpp
|
||||||
|
aboutwidget.h
|
||||||
)
|
)
|
||||||
|
|
||||||
target_include_directories(gstreamerViewer PRIVATE ${GSTREAMER_INCLUDE_DIRS})
|
target_include_directories(gstreamerViewer PRIVATE ${GSTREAMER_INCLUDE_DIRS})
|
||||||
|
|||||||
22
LICENSE
Normal file
22
LICENSE
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
GStreamer Camera Viewer
|
||||||
|
Copyright (c) 2025 Maik Jurischka
|
||||||
|
|
||||||
|
This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
|
||||||
|
|
||||||
|
You are free to:
|
||||||
|
- Share — copy and redistribute the material in any medium or format
|
||||||
|
- Adapt — remix, transform, and build upon the material
|
||||||
|
|
||||||
|
Under the following terms:
|
||||||
|
- Attribution — You must give appropriate credit, provide a link to the license, and indicate if changes were made.
|
||||||
|
- NonCommercial — You may not use the material for commercial purposes.
|
||||||
|
- ShareAlike — If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original.
|
||||||
|
|
||||||
|
No additional restrictions — You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits.
|
||||||
|
|
||||||
|
Full license text: https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
|
||||||
|
DISCLAIMER:
|
||||||
|
This software is provided "as is", without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software.
|
||||||
24
README.md
24
README.md
@@ -5,7 +5,9 @@ A Qt6-based GUI application for controlling and viewing video streams from camer
|
|||||||
## Features
|
## Features
|
||||||
|
|
||||||
- **Video Streaming Control**: Configure and start/stop camera streaming with GStreamer pipelines
|
- **Video Streaming Control**: Configure and start/stop camera streaming with GStreamer pipelines
|
||||||
- **Real-time Video Display**: View the streamed video in a separate window
|
- **Real-time Video Display**: View the streamed video with embedded display
|
||||||
|
- **Image Transformations**: Rotate (0°, 90°, 180°, 270°) and flip (horizontal/vertical) video
|
||||||
|
- **Zoom Support**: Zoom from 50% to 200%
|
||||||
- **Camera Parameter Control**: Adjust exposure, white balance, brightness, contrast, saturation, sharpness, gamma, and gain
|
- **Camera Parameter Control**: Adjust exposure, white balance, brightness, contrast, saturation, sharpness, gamma, and gain
|
||||||
- **Pipeline Presets**: Quick access to common pipeline configurations (MJPEG UDP, H.264 UDP, local display, etc.)
|
- **Pipeline Presets**: Quick access to common pipeline configurations (MJPEG UDP, H.264 UDP, local display, etc.)
|
||||||
- **Format Detection**: Automatically fetch and select supported camera formats
|
- **Format Detection**: Automatically fetch and select supported camera formats
|
||||||
@@ -330,7 +332,25 @@ Example commands:
|
|||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
[Specify your license here]
|
**CC BY-NC-SA 4.0** - Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International
|
||||||
|
|
||||||
|
Copyright (c) 2025 Maik Jurischka
|
||||||
|
|
||||||
|
This software is free to:
|
||||||
|
- **Use** for non-commercial purposes
|
||||||
|
- **Share** - copy and redistribute in any medium or format
|
||||||
|
- **Adapt** - remix, transform, and build upon the material
|
||||||
|
|
||||||
|
Under the following terms:
|
||||||
|
- **Attribution** - You must give appropriate credit and indicate if changes were made
|
||||||
|
- **NonCommercial** - You may not use the material for commercial purposes
|
||||||
|
- **ShareAlike** - Derivative works must be distributed under the same license
|
||||||
|
|
||||||
|
See [LICENSE](LICENSE) file for full license text.
|
||||||
|
|
||||||
|
Full license: https://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||||
|
|
||||||
|
**Disclaimer**: This software is provided "as is", without warranty of any kind, express or implied.
|
||||||
|
|
||||||
## Credits
|
## Credits
|
||||||
|
|
||||||
|
|||||||
94
aboutwidget.cpp
Normal file
94
aboutwidget.cpp
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
/*
|
||||||
|
* GStreamer Camera Viewer
|
||||||
|
* Copyright (c) 2025 Maik Jurischka
|
||||||
|
* Licensed under CC BY-NC-SA 4.0
|
||||||
|
* https://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "aboutwidget.h"
|
||||||
|
#include <QVBoxLayout>
|
||||||
|
#include <QGroupBox>
|
||||||
|
#include <QLabel>
|
||||||
|
#include <gst/gst.h>
|
||||||
|
|
||||||
|
AboutWidget::AboutWidget(QWidget *parent)
|
||||||
|
: QWidget(parent)
|
||||||
|
{
|
||||||
|
setupUI();
|
||||||
|
}
|
||||||
|
|
||||||
|
void AboutWidget::setupUI()
|
||||||
|
{
|
||||||
|
auto* mainLayout = new QVBoxLayout(this);
|
||||||
|
|
||||||
|
auto* aboutGroup = new QGroupBox("About GStreamer Camera Viewer", this);
|
||||||
|
auto* aboutLayout = new QVBoxLayout();
|
||||||
|
|
||||||
|
auto* titleLabel = new QLabel("<h2>GStreamer Camera Viewer</h2>", this);
|
||||||
|
aboutLayout->addWidget(titleLabel);
|
||||||
|
|
||||||
|
auto* versionLabel = new QLabel("<b>Version:</b> 0.5.0", this);
|
||||||
|
aboutLayout->addWidget(versionLabel);
|
||||||
|
|
||||||
|
auto* authorLabel = new QLabel("<b>Author:</b> Maik Jurischka", this);
|
||||||
|
aboutLayout->addWidget(authorLabel);
|
||||||
|
|
||||||
|
auto* descLabel = new QLabel(
|
||||||
|
"<p>A Qt6-based camera viewer application with GStreamer pipeline control.</p>"
|
||||||
|
"<p>Features:</p>"
|
||||||
|
"<ul>"
|
||||||
|
"<li>Real-time video streaming with embedded display</li>"
|
||||||
|
"<li>Configurable GStreamer pipelines</li>"
|
||||||
|
"<li>Camera parameter controls (exposure, white balance, etc.)</li>"
|
||||||
|
"<li>Image transformation (rotation, flip)</li>"
|
||||||
|
"<li>Zoom support (50-200%)</li>"
|
||||||
|
"</ul>", this);
|
||||||
|
descLabel->setWordWrap(true);
|
||||||
|
aboutLayout->addWidget(descLabel);
|
||||||
|
|
||||||
|
auto* licenseGroup = new QGroupBox("License", this);
|
||||||
|
auto* licenseLayout = new QVBoxLayout();
|
||||||
|
|
||||||
|
auto* licenseLabel = new QLabel(
|
||||||
|
"<b>CC BY-NC-SA 4.0</b>"
|
||||||
|
"<p>Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International</p>"
|
||||||
|
"<p style='font-size: small;'>"
|
||||||
|
"This software is free to use, share, and modify for non-commercial purposes. "
|
||||||
|
"Any derivative works must be shared under the same license."
|
||||||
|
"</p>"
|
||||||
|
"<p style='font-size: small;'>"
|
||||||
|
"<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/'>License Details</a>"
|
||||||
|
"</p>", this);
|
||||||
|
licenseLabel->setWordWrap(true);
|
||||||
|
licenseLabel->setOpenExternalLinks(true);
|
||||||
|
licenseLayout->addWidget(licenseLabel);
|
||||||
|
|
||||||
|
licenseGroup->setLayout(licenseLayout);
|
||||||
|
aboutLayout->addWidget(licenseGroup);
|
||||||
|
|
||||||
|
auto* techGroup = new QGroupBox("Technologies", this);
|
||||||
|
auto* techLayout = new QVBoxLayout();
|
||||||
|
|
||||||
|
guint major, minor, micro, nano;
|
||||||
|
gst_version(&major, &minor, µ, &nano);
|
||||||
|
QString gstVersion = QString("GStreamer %1.%2.%3").arg(major).arg(minor).arg(micro);
|
||||||
|
|
||||||
|
auto* qtLabel = new QLabel(QString("<b>Qt Version:</b> %1").arg(QT_VERSION_STR), this);
|
||||||
|
techLayout->addWidget(qtLabel);
|
||||||
|
|
||||||
|
auto* gstLabel = new QLabel(QString("<b>%1</b>").arg(gstVersion), this);
|
||||||
|
techLayout->addWidget(gstLabel);
|
||||||
|
|
||||||
|
techGroup->setLayout(techLayout);
|
||||||
|
aboutLayout->addWidget(techGroup);
|
||||||
|
|
||||||
|
aboutLayout->addStretch();
|
||||||
|
|
||||||
|
aboutGroup->setLayout(aboutLayout);
|
||||||
|
aboutGroup->setMaximumWidth(500);
|
||||||
|
|
||||||
|
mainLayout->addWidget(aboutGroup);
|
||||||
|
mainLayout->addStretch();
|
||||||
|
|
||||||
|
setLayout(mainLayout);
|
||||||
|
}
|
||||||
18
aboutwidget.h
Normal file
18
aboutwidget.h
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
#ifndef ABOUTWIDGET_H
|
||||||
|
#define ABOUTWIDGET_H
|
||||||
|
|
||||||
|
#include <QWidget>
|
||||||
|
#include <QLabel>
|
||||||
|
|
||||||
|
class AboutWidget : public QWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit AboutWidget(QWidget *parent = nullptr);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void setupUI();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // ABOUTWIDGET_H
|
||||||
@@ -1,3 +1,10 @@
|
|||||||
|
/*
|
||||||
|
* GStreamer Camera Viewer
|
||||||
|
* Copyright (c) 2025 Maik Jurischka
|
||||||
|
* Licensed under CC BY-NC-SA 4.0
|
||||||
|
* https://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||||
|
*/
|
||||||
|
|
||||||
#include "cameracontrolwidget.h"
|
#include "cameracontrolwidget.h"
|
||||||
#include <QVBoxLayout>
|
#include <QVBoxLayout>
|
||||||
#include <QHBoxLayout>
|
#include <QHBoxLayout>
|
||||||
|
|||||||
@@ -1,3 +1,10 @@
|
|||||||
|
/*
|
||||||
|
* GStreamer Camera Viewer
|
||||||
|
* Copyright (c) 2025 Maik Jurischka
|
||||||
|
* Licensed under CC BY-NC-SA 4.0
|
||||||
|
* https://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||||
|
*/
|
||||||
|
|
||||||
#include "gstreamerpipelinewidget.h"
|
#include "gstreamerpipelinewidget.h"
|
||||||
#include <QVBoxLayout>
|
#include <QVBoxLayout>
|
||||||
#include <QHBoxLayout>
|
#include <QHBoxLayout>
|
||||||
|
|||||||
7
main.cpp
7
main.cpp
@@ -1,3 +1,10 @@
|
|||||||
|
/*
|
||||||
|
* GStreamer Camera Viewer
|
||||||
|
* Copyright (c) 2025 Maik Jurischka
|
||||||
|
* Licensed under CC BY-NC-SA 4.0
|
||||||
|
* https://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||||
|
*/
|
||||||
|
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
|
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
|
|||||||
@@ -1,3 +1,10 @@
|
|||||||
|
/*
|
||||||
|
* GStreamer Camera Viewer
|
||||||
|
* Copyright (c) 2025 Maik Jurischka
|
||||||
|
* Licensed under CC BY-NC-SA 4.0
|
||||||
|
* https://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||||
|
*/
|
||||||
|
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
#include "ui_mainwindow.h"
|
#include "ui_mainwindow.h"
|
||||||
#include <QHBoxLayout>
|
#include <QHBoxLayout>
|
||||||
@@ -29,10 +36,12 @@ void MainWindow::setupUI()
|
|||||||
m_videoWidget = new VideoViewerWidget(this);
|
m_videoWidget = new VideoViewerWidget(this);
|
||||||
m_pipelineWidget = new GStreamerPipelineWidget(m_socketClient, this);
|
m_pipelineWidget = new GStreamerPipelineWidget(m_socketClient, this);
|
||||||
m_cameraWidget = new CameraControlWidget(m_socketClient, this);
|
m_cameraWidget = new CameraControlWidget(m_socketClient, this);
|
||||||
|
m_aboutWidget = new AboutWidget(this);
|
||||||
|
|
||||||
auto* controlTabs = new QTabWidget(this);
|
auto* controlTabs = new QTabWidget(this);
|
||||||
controlTabs->addTab(m_pipelineWidget, "Pipeline Control");
|
controlTabs->addTab(m_pipelineWidget, "Pipeline Control");
|
||||||
controlTabs->addTab(m_cameraWidget, "Camera Control");
|
controlTabs->addTab(m_cameraWidget, "Camera Control");
|
||||||
|
controlTabs->addTab(m_aboutWidget, "About");
|
||||||
|
|
||||||
auto* mainSplitter = new QSplitter(Qt::Horizontal, this);
|
auto* mainSplitter = new QSplitter(Qt::Horizontal, this);
|
||||||
mainSplitter->addWidget(m_videoWidget);
|
mainSplitter->addWidget(m_videoWidget);
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
#include "gstreamerpipelinewidget.h"
|
#include "gstreamerpipelinewidget.h"
|
||||||
#include "cameracontrolwidget.h"
|
#include "cameracontrolwidget.h"
|
||||||
#include "videoviewerwidget.h"
|
#include "videoviewerwidget.h"
|
||||||
|
#include "aboutwidget.h"
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
namespace Ui {
|
namespace Ui {
|
||||||
@@ -29,5 +30,6 @@ private:
|
|||||||
GStreamerPipelineWidget* m_pipelineWidget;
|
GStreamerPipelineWidget* m_pipelineWidget;
|
||||||
CameraControlWidget* m_cameraWidget;
|
CameraControlWidget* m_cameraWidget;
|
||||||
VideoViewerWidget* m_videoWidget;
|
VideoViewerWidget* m_videoWidget;
|
||||||
|
AboutWidget* m_aboutWidget;
|
||||||
};
|
};
|
||||||
#endif // MAINWINDOW_H
|
#endif // MAINWINDOW_H
|
||||||
|
|||||||
@@ -1,3 +1,10 @@
|
|||||||
|
/*
|
||||||
|
* GStreamer Camera Viewer
|
||||||
|
* Copyright (c) 2025 Maik Jurischka
|
||||||
|
* Licensed under CC BY-NC-SA 4.0
|
||||||
|
* https://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||||
|
*/
|
||||||
|
|
||||||
#include "socketclient.h"
|
#include "socketclient.h"
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <sys/un.h>
|
#include <sys/un.h>
|
||||||
|
|||||||
@@ -1,3 +1,10 @@
|
|||||||
|
/*
|
||||||
|
* GStreamer Camera Viewer
|
||||||
|
* Copyright (c) 2025 Maik Jurischka
|
||||||
|
* Licensed under CC BY-NC-SA 4.0
|
||||||
|
* https://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||||
|
*/
|
||||||
|
|
||||||
#include "videoviewerwidget.h"
|
#include "videoviewerwidget.h"
|
||||||
#include <QVBoxLayout>
|
#include <QVBoxLayout>
|
||||||
#include <QHBoxLayout>
|
#include <QHBoxLayout>
|
||||||
|
|||||||
Reference in New Issue
Block a user