Commit a504ee70 by lenz su

物理按键一键开始和停止

parent 25d1f07f
......@@ -36,13 +36,16 @@ SOURCES += \
src/main.cpp \
src/Base/FunctionTransfer.cpp \
src/AppConfig.cpp \
src/mainwindow.cpp
src/mainwindow.cpp \
src/usb/USBOperator.cpp
HEADERS += \
src/AppConfig.h \
src/Base/FunctionTransfer.h \
src/Video/ShowVideoWidget.h \
src/mainwindow.h
src/mainwindow.h \
src/usb/USBOperator.h \
src/usb/hidapi.h
FORMS += \
src/Video/ShowVideoWidget.ui \
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.10.2, 2019-12-23T10:25:34. -->
<!-- Written by QtCreator 4.10.2, 2020-01-01T22:26:53. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
......@@ -71,7 +71,7 @@
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:/Users/sulin/Desktop/build-VideoDecode-Desktop_Qt_5_12_6_MinGW_32_bit-Debug</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:/Users/sulin/Documents/QT_PAIR_RECEIVE2/rjb</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
......@@ -307,7 +307,7 @@
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">VideoDecode</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">VideoDecode2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:C:/Users/sulin/Desktop/zz/VideoDecode/VideoDecode.pro</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:C:/Users/sulin/Documents/QT_PAIR_RECEIVE2/VideoDecode.pro</value>
<value type="QString" key="RunConfiguration.Arguments"></value>
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
......@@ -317,7 +317,7 @@
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory"></value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">C:/Users/sulin/Desktop/zz/VideoDecode/bin32</value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">C:/Users/sulin/Documents/QT_PAIR_RECEIVE2/bin32</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
......
......@@ -21,8 +21,7 @@ HEADERS += \
$$PWD/src/VideoReader/h265.h \
$$PWD/src/VideoReader/NALUParsing.h \
$$PWD/src/VideoReader/ReadVideoFileThread.h \
$$PWD/src/VideoReader/hid_thread.h \
$$PWD/src/VideoReader/hidapi.h
$$PWD/src/VideoReader/hid_thread.h
win32{
......
......@@ -5,7 +5,7 @@
*/
#include <thread>
#include "hidapi.h"
#include "usb/hidapi.h"
#include <QDebug>
#include "ReadVideoFileThread.h"
......@@ -83,3 +83,7 @@ void ReadVideoFileThread::doDisplayVideo(const uint8_t *yuv420Buffer, const int
mVideoCallBack->onDisplayVideo(videoFrame, frameNum);
}
}
void ReadVideoFileThread::setCallback(Func cb){
//mcb=cb;
}
......@@ -13,6 +13,7 @@
#include <QThread>
#include "NALUParsing.h"
typedef std::function<void(int s)> Func;
class ReadVideoFileThread:public QThread
{
public:
......@@ -26,7 +27,7 @@ public:
mNaluParsing=pNALUParsing;
ReadVideoFileThread();
}
void setCallback(Func cb);
/**
* @brief setVideoCallBack 设置视频回调函数
......
#include "hid_thread.h"
#include "hidapi.h"
#include <QDebug>
#include "usb/USBOperator.h"
#define MAX_PAYLOAD 1012
typedef struct USB_FRAM_S{
......@@ -19,8 +20,6 @@ void hid_thread::run()
pUsbFram1 =reinterpret_cast<usb_fram_t *>(buffer);
pUsbFram2 =reinterpret_cast<usb_fram_t *>(&buffer[1024]);
hid_init();
hid_device *hid_fd = hid_open(0x1d6d, 0x104, nullptr);
if ((hid_fd == nullptr)||(hid_set_nonblocking(hid_fd, 1) < 0)){
qDebug("usb hid error!");
return;
......@@ -28,16 +27,95 @@ void hid_thread::run()
int res = hid_read(hid_fd,buffer, 2048);
qDebug("res = %d", res);
FILE *h264Fp = fopen("out.log","wb");
// FILE *h264Fp = fopen("out.log","wb");
char buff[2048];
while(true) {
memset(buffer, 0, 2048);
//memset(buffer, 0, 2048);
res = hid_read(hid_fd,buffer, 2048);
if (res <=0) {
//qDebug("res error ");
msleep(10);
//cout<<"error"<<endl;
msleep(100);
continue;
}
cout<<"youle"<<endl;
cout<<"pUsbFram1:"<<pUsbFram1->id<<endl;
cout<<"pUsbFram1->buff[0]"<<pUsbFram1->head<<endl;
cout<<"pUsbFram1->buff[1]"<<pUsbFram1->length<<endl;
cout<<"pUsbFram2:"<<pUsbFram2->id<<endl;
cout<<"pUsbFram2->buff[0]"<<pUsbFram2->head<<endl;
cout<<"pUsbFram2->buff[1]"<<pUsbFram2->length<<endl;
if(0x44332222==pUsbFram1->head){
//查询角色返回
if((pUsbFram1->id==ROLE_INFO)&&(pUsbFram1->buff[0] == 0x01&&pUsbFram1->buff[1] == 0x01)){
if(pUsbFram1->buff[2]==ROLE_NOT_SET){
mcb(ROLE_NOT_SET);
}
if(pUsbFram1->buff[2]==ROLE_SEND){
mcb(ROLE_SEND);
}
if(pUsbFram1->buff[2]==ROLE_RECEIVE){
mcb(ROLE_RECEIVE);
}
}
if((pUsbFram1->id==SCREEN_SHOT)){
//开始投屏
if(pUsbFram1->buff[0] == 0x01&&pUsbFram1->buff[1] == 0x01){
cout<<"start screen shot"<<endl;
char usb_buf_re[2049] = {0};
memcpy(&usb_buf_re[1],buffer, 2048);
hid_write(hid_fd,(unsigned char *)usb_buf_re,2049);
mcb(SCREEN_SHOT_START);
}
if(pUsbFram1->buff[0] == 0x02&&pUsbFram1->buff[1] == 0x02){
cout<<"stop screen shot"<<endl;
char usb_buf_re[2049] = {0};
memcpy(&usb_buf_re[1],buffer, 2048);
hid_write(hid_fd,(unsigned char *)usb_buf_re,2049);
mcb(SCREEN_SHOT_STOP);
}
}
continue;
}
if(0x44332222==pUsbFram2->head){
//查询角色返回
if((pUsbFram2->id==ROLE_INFO)&&(pUsbFram2->buff[0] == 0x01&&pUsbFram2->buff[1] == 0x01)){
if(pUsbFram2->buff[2]==ROLE_NOT_SET){
mcb(ROLE_NOT_SET);
}
if(pUsbFram2->buff[2]==ROLE_SEND){
mcb(ROLE_SEND);
}
if(pUsbFram2->buff[2]==ROLE_RECEIVE){
mcb(ROLE_RECEIVE);
}
}
if((pUsbFram2->id==SCREEN_SHOT)){
//开始投屏
if(pUsbFram2->buff[0] == 0x01&&pUsbFram2->buff[1] == 0x01){
cout<<"start screen shot"<<endl;
char usb_buf_re[2049] = {0};
memcpy(&usb_buf_re[1024],buffer, 2048);
hid_write(hid_fd,(unsigned char *)usb_buf_re,2049);
mcb(SCREEN_SHOT_START);
}
if(pUsbFram2->buff[0] == 0x02&&pUsbFram2->buff[1] == 0x02){
cout<<"stop screen shot"<<endl;
char usb_buf_re[2049] = {0};
memcpy(&usb_buf_re[1024],buffer, 2048);
hid_write(hid_fd,(unsigned char *)usb_buf_re,2049);
mcb(SCREEN_SHOT_STOP);
}
}
continue;
}
if(pUsbFram1->head == 0x44332211) {
while (pNaluParsing->lock) {
qDebug("delay 1 ");
......@@ -47,7 +125,7 @@ void hid_thread::run()
qDebug("fram id:%d %d ", pUsbFram1->id, pUsbFram1->length);
memset(buff, 0x00, sizeof (buff));
sprintf(buff, "fram id:%d %d\n", pUsbFram1->id, pUsbFram1->length);
fwrite(buff, 1, strlen(buff), h264Fp);
// fwrite(buff, 1, strlen(buff), h264Fp);
if((frameId+1)!=pUsbFram1->id){
qDebug("fram id error current id %d real id %d",frameId, pUsbFram1->id);
}
......@@ -63,7 +141,7 @@ void hid_thread::run()
qDebug("fram id:%d %d ", pUsbFram2->id, pUsbFram2->length);
memset(buff, 0x00, sizeof (buff));
sprintf(buff, "fram id:%d %d\n", pUsbFram2->id, pUsbFram2->length);
fwrite(buff, 1, strlen(buff), h264Fp);
// fwrite(buff, 1, strlen(buff), h264Fp);
if((frameId+1)!=pUsbFram2->id){
qDebug("fram id error current id %d real id %d",frameId, pUsbFram2->id);
}
......@@ -71,5 +149,7 @@ void hid_thread::run()
}
}
}
void hid_thread::setCallback(Func cb){
mcb=cb;
}
......@@ -3,20 +3,28 @@
#include <QThread>
#include "NALUParsing.h"
#include "usb/hidapi.h"
#include "iostream"
using namespace std;
typedef std::function<void(int s)> Func;
class hid_thread:public QThread
{
public:
hid_device *hid_fd;
NALUParsing *pNaluParsing;
void setCallback(Func cb);
hid_thread(){
}
hid_thread(NALUParsing *p){
hid_thread(NALUParsing *p,hid_device *hid){
pNaluParsing=p;
hid_fd=hid;
hid_thread();
}
protected:
Func mcb;
void run() override;
};
......
No preview for this file type
This source diff could not be displayed because it is too large. You can view the blob instead.
QMAKE_CXX.QT_COMPILER_STDCXX = 201402L
QMAKE_CXX.QMAKE_GCC_MAJOR_VERSION = 7
QMAKE_CXX.QMAKE_GCC_MINOR_VERSION = 3
QMAKE_CXX.QMAKE_GCC_PATCH_VERSION = 0
QMAKE_CXX.COMPILER_MACROS = \
QT_COMPILER_STDCXX \
QMAKE_GCC_MAJOR_VERSION \
QMAKE_GCC_MINOR_VERSION \
QMAKE_GCC_PATCH_VERSION
QMAKE_CXX.INCDIRS = \
C:/Qt/Tools/mingw730_32/lib/gcc/i686-w64-mingw32/7.3.0/include/c++ \
C:/Qt/Tools/mingw730_32/lib/gcc/i686-w64-mingw32/7.3.0/include/c++/i686-w64-mingw32 \
C:/Qt/Tools/mingw730_32/lib/gcc/i686-w64-mingw32/7.3.0/include/c++/backward \
C:/Qt/Tools/mingw730_32/lib/gcc/i686-w64-mingw32/7.3.0/include \
C:/Qt/Tools/mingw730_32/lib/gcc/i686-w64-mingw32/7.3.0/include-fixed \
C:/Qt/Tools/mingw730_32/i686-w64-mingw32/include
QMAKE_CXX.LIBDIRS = \
C:/Qt/Tools/mingw730_32/lib/gcc/i686-w64-mingw32/7.3.0 \
C:/Qt/Tools/mingw730_32/lib/gcc \
C:/Qt/Tools/mingw730_32/i686-w64-mingw32/lib \
C:/Qt/Tools/mingw730_32/lib
This diff is collapsed. Click to expand it.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
/********************************************************************************
** Form generated from reading UI file 'ShowVideoWidget.ui'
**
** Created by: Qt User Interface Compiler version 5.12.6
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef UI_SHOWVIDEOWIDGET_H
#define UI_SHOWVIDEOWIDGET_H
#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QHBoxLayout>
#include <QtWidgets/QLabel>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QSpacerItem>
#include <QtWidgets/QVBoxLayout>
#include <QtWidgets/QWidget>
QT_BEGIN_NAMESPACE
class Ui_ShowVideoWidget
{
public:
QVBoxLayout *verticalLayout;
QWidget *widget_back;
QWidget *widget_name;
QHBoxLayout *horizontalLayout;
QSpacerItem *horizontalSpacer;
QLabel *label_name;
QWidget *widget_erro;
QHBoxLayout *horizontalLayout_2;
QSpacerItem *horizontalSpacer_2;
QLabel *label_erro;
QSpacerItem *horizontalSpacer_3;
QPushButton *pushButton_close;
void setupUi(QWidget *ShowVideoWidget)
{
if (ShowVideoWidget->objectName().isEmpty())
ShowVideoWidget->setObjectName(QString::fromUtf8("ShowVideoWidget"));
ShowVideoWidget->resize(412, 304);
ShowVideoWidget->setMouseTracking(true);
ShowVideoWidget->setFocusPolicy(Qt::ClickFocus);
verticalLayout = new QVBoxLayout(ShowVideoWidget);
verticalLayout->setSpacing(0);
verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
verticalLayout->setContentsMargins(0, 0, 0, 0);
widget_back = new QWidget(ShowVideoWidget);
widget_back->setObjectName(QString::fromUtf8("widget_back"));
widget_back->setStyleSheet(QString::fromUtf8("QWidget#widget_back\n"
"{\n"
"border:1px solid rgba(74, 108, 155, 0);\n"
"border-radius:2px;\n"
" background-color: rgba(74, 108, 155, 0);\n"
"}\n"
"\n"
""));
widget_name = new QWidget(widget_back);
widget_name->setObjectName(QString::fromUtf8("widget_name"));
widget_name->setGeometry(QRect(20, 250, 371, 22));
widget_name->setStyleSheet(QString::fromUtf8("QWidget#widget_name\n"
"{\n"
" background-color: rgba(220, 255, 193, 0);\n"
"}\n"
""));
horizontalLayout = new QHBoxLayout(widget_name);
horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout"));
horizontalLayout->setContentsMargins(-1, 0, 6, 0);
horizontalSpacer = new QSpacerItem(62, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
horizontalLayout->addItem(horizontalSpacer);
label_name = new QLabel(widget_name);
label_name->setObjectName(QString::fromUtf8("label_name"));
label_name->setMaximumSize(QSize(200, 16777215));
label_name->setStyleSheet(QString::fromUtf8(" font-family: \"\345\276\256\350\275\257\351\233\205\351\273\221\";\n"
" color:rgb(33,33,33);\n"
" font-size: 13px;\n"
"border:1px solid rgba(102, 102, 102, 92);\n"
" border-radius:1px;\n"
" \n"
"background-color: rgb(255, 255, 255);\n"
" \n"
" "));
horizontalLayout->addWidget(label_name);
widget_erro = new QWidget(widget_back);
widget_erro->setObjectName(QString::fromUtf8("widget_erro"));
widget_erro->setGeometry(QRect(20, 20, 331, 49));
widget_erro->setStyleSheet(QString::fromUtf8("QWidget#widget_erro\n"
"{\n"
" background-color: rgba(220, 255, 193, 0);\n"
"}\n"
""));
horizontalLayout_2 = new QHBoxLayout(widget_erro);
horizontalLayout_2->setObjectName(QString::fromUtf8("horizontalLayout_2"));
horizontalSpacer_2 = new QSpacerItem(63, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
horizontalLayout_2->addItem(horizontalSpacer_2);
label_erro = new QLabel(widget_erro);
label_erro->setObjectName(QString::fromUtf8("label_erro"));
label_erro->setStyleSheet(QString::fromUtf8(" font-family: \"\345\276\256\350\275\257\351\233\205\351\273\221\";\n"
" color:rgb(233,233,233);\n"
" font-size: 16px;\n"
"border:1px solid rgba(102, 102, 102, 92);\n"
" border-radius:1px;\n"
" padding-left:6px;\n"
"padding-right:6px;\n"
"background-color: rgb(255, 25, 25);\n"
" \n"
" "));
horizontalLayout_2->addWidget(label_erro);
horizontalSpacer_3 = new QSpacerItem(63, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
horizontalLayout_2->addItem(horizontalSpacer_3);
pushButton_close = new QPushButton(widget_back);
pushButton_close->setObjectName(QString::fromUtf8("pushButton_close"));
pushButton_close->setGeometry(QRect(240, 120, 36, 36));
pushButton_close->setCursor(QCursor(Qt::PointingHandCursor));
pushButton_close->setStyleSheet(QString::fromUtf8("QPushButton{ \n"
"image: url(:/image/closebtn_3.png);\n"
"background-color:rgba(200,80,6,0); \n"
"border-radius:18px; \n"
"color: rgb(255, 255, 255);\n"
"font-size:16px;\n"
"font-family:\"\345\276\256\350\275\257\351\233\205\351\273\221\"\n"
"} \n"
"QPushButton:hover{ \n"
"background-color:rgb(200,80,6); \n"
"} \n"
"QPushButton:pressed{ \n"
"background-color:rgb(200,80,6); \n"
"}\n"
""));
verticalLayout->addWidget(widget_back);
retranslateUi(ShowVideoWidget);
QMetaObject::connectSlotsByName(ShowVideoWidget);
} // setupUi
void retranslateUi(QWidget *ShowVideoWidget)
{
ShowVideoWidget->setWindowTitle(QApplication::translate("ShowVideoWidget", "Form", nullptr));
label_name->setText(QApplication::translate("ShowVideoWidget", "TextLabel", nullptr));
label_erro->setText(QApplication::translate("ShowVideoWidget", "\346\222\255\346\224\276\345\244\261\350\264\245\357\274\214\351\207\215\350\257\225\344\270\255...", nullptr));
pushButton_close->setText(QString());
} // retranslateUi
};
namespace Ui {
class ShowVideoWidget: public Ui_ShowVideoWidget {};
} // namespace Ui
QT_END_NAMESPACE
#endif // UI_SHOWVIDEOWIDGET_H
/********************************************************************************
** Form generated from reading UI file 'mainwindow.ui'
**
** Created by: Qt User Interface Compiler version 5.12.6
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef UI_MAINWINDOW_H
#define UI_MAINWINDOW_H
#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QHBoxLayout>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QMenuBar>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QSpacerItem>
#include <QtWidgets/QVBoxLayout>
#include <QtWidgets/QWidget>
#include "Video/ShowVideoWidget.h"
QT_BEGIN_NAMESPACE
class Ui_MainWindow
{
public:
QWidget *centralWidget;
QVBoxLayout *verticalLayout;
ShowVideoWidget *widget_videoPlayer;
QHBoxLayout *horizontalLayout;
QLabel *label_frameNum_2;
QLabel *label_frameNum;
QSpacerItem *horizontalSpacer;
QWidget *widget;
QHBoxLayout *horizontalLayout_2;
QLineEdit *lineEdit;
QPushButton *pushButton_open;
QPushButton *pushButton_play;
QMenuBar *menuBar;
void setupUi(QMainWindow *MainWindow)
{
if (MainWindow->objectName().isEmpty())
MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
MainWindow->resize(452, 305);
centralWidget = new QWidget(MainWindow);
centralWidget->setObjectName(QString::fromUtf8("centralWidget"));
verticalLayout = new QVBoxLayout(centralWidget);
verticalLayout->setSpacing(6);
verticalLayout->setContentsMargins(11, 11, 11, 11);
verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
widget_videoPlayer = new ShowVideoWidget(centralWidget);
widget_videoPlayer->setObjectName(QString::fromUtf8("widget_videoPlayer"));
widget_videoPlayer->setEnabled(true);
QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(widget_videoPlayer->sizePolicy().hasHeightForWidth());
widget_videoPlayer->setSizePolicy(sizePolicy);
widget_videoPlayer->setMouseTracking(true);
widget_videoPlayer->setStyleSheet(QString::fromUtf8("QWidget#widget_videoPlayer\n"
"{\n"
" background-color: rgb(255, 55, 195);\n"
"}"));
verticalLayout->addWidget(widget_videoPlayer);
horizontalLayout = new QHBoxLayout();
horizontalLayout->setSpacing(6);
horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout"));
horizontalLayout->setContentsMargins(-1, -1, -1, 0);
label_frameNum_2 = new QLabel(centralWidget);
label_frameNum_2->setObjectName(QString::fromUtf8("label_frameNum_2"));
horizontalLayout->addWidget(label_frameNum_2);
label_frameNum = new QLabel(centralWidget);
label_frameNum->setObjectName(QString::fromUtf8("label_frameNum"));
horizontalLayout->addWidget(label_frameNum);
horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
horizontalLayout->addItem(horizontalSpacer);
verticalLayout->addLayout(horizontalLayout);
widget = new QWidget(centralWidget);
widget->setObjectName(QString::fromUtf8("widget"));
widget->setMinimumSize(QSize(0, 32));
horizontalLayout_2 = new QHBoxLayout(widget);
horizontalLayout_2->setSpacing(6);
horizontalLayout_2->setContentsMargins(11, 11, 11, 11);
horizontalLayout_2->setObjectName(QString::fromUtf8("horizontalLayout_2"));
lineEdit = new QLineEdit(widget);
lineEdit->setObjectName(QString::fromUtf8("lineEdit"));
horizontalLayout_2->addWidget(lineEdit);
pushButton_open = new QPushButton(widget);
pushButton_open->setObjectName(QString::fromUtf8("pushButton_open"));
pushButton_open->setMaximumSize(QSize(36, 16777215));
horizontalLayout_2->addWidget(pushButton_open);
pushButton_play = new QPushButton(widget);
pushButton_play->setObjectName(QString::fromUtf8("pushButton_play"));
pushButton_play->setCheckable(true);
horizontalLayout_2->addWidget(pushButton_play);
verticalLayout->addWidget(widget);
MainWindow->setCentralWidget(centralWidget);
menuBar = new QMenuBar(MainWindow);
menuBar->setObjectName(QString::fromUtf8("menuBar"));
menuBar->setGeometry(QRect(0, 0, 452, 21));
MainWindow->setMenuBar(menuBar);
retranslateUi(MainWindow);
QMetaObject::connectSlotsByName(MainWindow);
} // setupUi
void retranslateUi(QMainWindow *MainWindow)
{
MainWindow->setWindowTitle(QApplication::translate("MainWindow", "MainWindow", nullptr));
label_frameNum_2->setText(QApplication::translate("MainWindow", "\345\270\247\345\272\217\345\217\267\357\274\232", nullptr));
label_frameNum->setText(QApplication::translate("MainWindow", "0", nullptr));
lineEdit->setText(QApplication::translate("MainWindow", "../data/test.h264", nullptr));
pushButton_open->setText(QApplication::translate("MainWindow", "...", nullptr));
pushButton_play->setText(QApplication::translate("MainWindow", "\345\274\200\345\247\213\346\222\255\346\224\276", nullptr));
} // retranslateUi
};
namespace Ui {
class MainWindow: public Ui_MainWindow {};
} // namespace Ui
QT_END_NAMESPACE
#endif // UI_MAINWINDOW_H
/****************************************************************************
** Meta object code from reading C++ file 'FunctionTransfer.h'
**
** Created by: The Qt Meta Object Compiler version 67 (Qt 5.12.6)
**
** WARNING! All changes made in this file will be lost!
*****************************************************************************/
#include "../../../src/Base/FunctionTransfer.h"
#include <QtCore/qbytearray.h>
#include <QtCore/qmetatype.h>
#if !defined(Q_MOC_OUTPUT_REVISION)
#error "The header file 'FunctionTransfer.h' doesn't include <QObject>."
#elif Q_MOC_OUTPUT_REVISION != 67
#error "This file was generated using the moc from 5.12.6. It"
#error "cannot be used with the include files from this version of Qt."
#error "(The moc has changed too much.)"
#endif
QT_BEGIN_MOC_NAMESPACE
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
struct qt_meta_stringdata_FunctionTransfer_t {
QByteArrayData data[7];
char stringdata0[75];
};
#define QT_MOC_LITERAL(idx, ofs, len) \
Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
qptrdiff(offsetof(qt_meta_stringdata_FunctionTransfer_t, stringdata0) + ofs \
- idx * sizeof(QByteArrayData)) \
)
static const qt_meta_stringdata_FunctionTransfer_t qt_meta_stringdata_FunctionTransfer = {
{
QT_MOC_LITERAL(0, 0, 16), // "FunctionTransfer"
QT_MOC_LITERAL(1, 17, 7), // "comming"
QT_MOC_LITERAL(2, 25, 0), // ""
QT_MOC_LITERAL(3, 26, 21), // "std::function<void()>"
QT_MOC_LITERAL(4, 48, 1), // "f"
QT_MOC_LITERAL(5, 50, 15), // "comming_noBlock"
QT_MOC_LITERAL(6, 66, 8) // "slotExec"
},
"FunctionTransfer\0comming\0\0"
"std::function<void()>\0f\0comming_noBlock\0"
"slotExec"
};
#undef QT_MOC_LITERAL
static const uint qt_meta_data_FunctionTransfer[] = {
// content:
8, // revision
0, // classname
0, 0, // classinfo
3, 14, // methods
0, 0, // properties
0, 0, // enums/sets
0, 0, // constructors
0, // flags
2, // signalCount
// signals: name, argc, parameters, tag, flags
1, 1, 29, 2, 0x06 /* Public */,
5, 1, 32, 2, 0x06 /* Public */,
// slots: name, argc, parameters, tag, flags
6, 1, 35, 2, 0x08 /* Private */,
// signals: parameters
QMetaType::Void, 0x80000000 | 3, 4,
QMetaType::Void, 0x80000000 | 3, 4,
// slots: parameters
QMetaType::Void, 0x80000000 | 3, 4,
0 // eod
};
void FunctionTransfer::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
{
if (_c == QMetaObject::InvokeMetaMethod) {
auto *_t = static_cast<FunctionTransfer *>(_o);
Q_UNUSED(_t)
switch (_id) {
case 0: _t->comming((*reinterpret_cast< std::function<void()>(*)>(_a[1]))); break;
case 1: _t->comming_noBlock((*reinterpret_cast< std::function<void()>(*)>(_a[1]))); break;
case 2: _t->slotExec((*reinterpret_cast< std::function<void()>(*)>(_a[1]))); break;
default: ;
}
} else if (_c == QMetaObject::IndexOfMethod) {
int *result = reinterpret_cast<int *>(_a[0]);
{
using _t = void (FunctionTransfer::*)(std::function<void()> );
if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&FunctionTransfer::comming)) {
*result = 0;
return;
}
}
{
using _t = void (FunctionTransfer::*)(std::function<void()> );
if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&FunctionTransfer::comming_noBlock)) {
*result = 1;
return;
}
}
}
}
QT_INIT_METAOBJECT const QMetaObject FunctionTransfer::staticMetaObject = { {
&QObject::staticMetaObject,
qt_meta_stringdata_FunctionTransfer.data,
qt_meta_data_FunctionTransfer,
qt_static_metacall,
nullptr,
nullptr
} };
const QMetaObject *FunctionTransfer::metaObject() const
{
return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
}
void *FunctionTransfer::qt_metacast(const char *_clname)
{
if (!_clname) return nullptr;
if (!strcmp(_clname, qt_meta_stringdata_FunctionTransfer.stringdata0))
return static_cast<void*>(this);
return QObject::qt_metacast(_clname);
}
int FunctionTransfer::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
_id = QObject::qt_metacall(_c, _id, _a);
if (_id < 0)
return _id;
if (_c == QMetaObject::InvokeMetaMethod) {
if (_id < 3)
qt_static_metacall(this, _c, _id, _a);
_id -= 3;
} else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
if (_id < 3)
*reinterpret_cast<int*>(_a[0]) = -1;
_id -= 3;
}
return _id;
}
// SIGNAL 0
void FunctionTransfer::comming(std::function<void()> _t1)
{
void *_a[] = { nullptr, const_cast<void*>(reinterpret_cast<const void*>(&_t1)) };
QMetaObject::activate(this, &staticMetaObject, 0, _a);
}
// SIGNAL 1
void FunctionTransfer::comming_noBlock(std::function<void()> _t1)
{
void *_a[] = { nullptr, const_cast<void*>(reinterpret_cast<const void*>(&_t1)) };
QMetaObject::activate(this, &staticMetaObject, 1, _a);
}
QT_WARNING_POP
QT_END_MOC_NAMESPACE
/****************************************************************************
** Meta object code from reading C++ file 'ShowVideoWidget.h'
**
** Created by: The Qt Meta Object Compiler version 67 (Qt 5.12.6)
**
** WARNING! All changes made in this file will be lost!
*****************************************************************************/
#include "../../../src/Video/ShowVideoWidget.h"
#include <QtCore/qbytearray.h>
#include <QtCore/qmetatype.h>
#if !defined(Q_MOC_OUTPUT_REVISION)
#error "The header file 'ShowVideoWidget.h' doesn't include <QObject>."
#elif Q_MOC_OUTPUT_REVISION != 67
#error "This file was generated using the moc from 5.12.6. It"
#error "cannot be used with the include files from this version of Qt."
#error "(The moc has changed too much.)"
#endif
QT_BEGIN_MOC_NAMESPACE
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
struct qt_meta_stringdata_ShowVideoWidget_t {
QByteArrayData data[6];
char stringdata0[58];
};
#define QT_MOC_LITERAL(idx, ofs, len) \
Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
qptrdiff(offsetof(qt_meta_stringdata_ShowVideoWidget_t, stringdata0) + ofs \
- idx * sizeof(QByteArrayData)) \
)
static const qt_meta_stringdata_ShowVideoWidget_t qt_meta_stringdata_ShowVideoWidget = {
{
QT_MOC_LITERAL(0, 0, 15), // "ShowVideoWidget"
QT_MOC_LITERAL(1, 16, 17), // "sig_CloseBtnClick"
QT_MOC_LITERAL(2, 34, 0), // ""
QT_MOC_LITERAL(3, 35, 8), // "sig_Drag"
QT_MOC_LITERAL(4, 44, 7), // "id_from"
QT_MOC_LITERAL(5, 52, 5) // "id_to"
},
"ShowVideoWidget\0sig_CloseBtnClick\0\0"
"sig_Drag\0id_from\0id_to"
};
#undef QT_MOC_LITERAL
static const uint qt_meta_data_ShowVideoWidget[] = {
// content:
8, // revision
0, // classname
0, 0, // classinfo
2, 14, // methods
0, 0, // properties
0, 0, // enums/sets
0, 0, // constructors
0, // flags
2, // signalCount
// signals: name, argc, parameters, tag, flags
1, 0, 24, 2, 0x06 /* Public */,
3, 2, 25, 2, 0x06 /* Public */,
// signals: parameters
QMetaType::Void,
QMetaType::Void, QMetaType::QString, QMetaType::QString, 4, 5,
0 // eod
};
void ShowVideoWidget::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
{
if (_c == QMetaObject::InvokeMetaMethod) {
auto *_t = static_cast<ShowVideoWidget *>(_o);
Q_UNUSED(_t)
switch (_id) {
case 0: _t->sig_CloseBtnClick(); break;
case 1: _t->sig_Drag((*reinterpret_cast< QString(*)>(_a[1])),(*reinterpret_cast< QString(*)>(_a[2]))); break;
default: ;
}
} else if (_c == QMetaObject::IndexOfMethod) {
int *result = reinterpret_cast<int *>(_a[0]);
{
using _t = void (ShowVideoWidget::*)();
if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&ShowVideoWidget::sig_CloseBtnClick)) {
*result = 0;
return;
}
}
{
using _t = void (ShowVideoWidget::*)(QString , QString );
if (*reinterpret_cast<_t *>(_a[1]) == static_cast<_t>(&ShowVideoWidget::sig_Drag)) {
*result = 1;
return;
}
}
}
}
QT_INIT_METAOBJECT const QMetaObject ShowVideoWidget::staticMetaObject = { {
&QOpenGLWidget::staticMetaObject,
qt_meta_stringdata_ShowVideoWidget.data,
qt_meta_data_ShowVideoWidget,
qt_static_metacall,
nullptr,
nullptr
} };
const QMetaObject *ShowVideoWidget::metaObject() const
{
return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
}
void *ShowVideoWidget::qt_metacast(const char *_clname)
{
if (!_clname) return nullptr;
if (!strcmp(_clname, qt_meta_stringdata_ShowVideoWidget.stringdata0))
return static_cast<void*>(this);
if (!strcmp(_clname, "QOpenGLFunctions"))
return static_cast< QOpenGLFunctions*>(this);
return QOpenGLWidget::qt_metacast(_clname);
}
int ShowVideoWidget::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
_id = QOpenGLWidget::qt_metacall(_c, _id, _a);
if (_id < 0)
return _id;
if (_c == QMetaObject::InvokeMetaMethod) {
if (_id < 2)
qt_static_metacall(this, _c, _id, _a);
_id -= 2;
} else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
if (_id < 2)
*reinterpret_cast<int*>(_a[0]) = -1;
_id -= 2;
}
return _id;
}
// SIGNAL 0
void ShowVideoWidget::sig_CloseBtnClick()
{
QMetaObject::activate(this, &staticMetaObject, 0, nullptr);
}
// SIGNAL 1
void ShowVideoWidget::sig_Drag(QString _t1, QString _t2)
{
void *_a[] = { nullptr, const_cast<void*>(reinterpret_cast<const void*>(&_t1)), const_cast<void*>(reinterpret_cast<const void*>(&_t2)) };
QMetaObject::activate(this, &staticMetaObject, 1, _a);
}
QT_WARNING_POP
QT_END_MOC_NAMESPACE
/****************************************************************************
** Meta object code from reading C++ file 'USBOperator.h'
**
** Created by: The Qt Meta Object Compiler version 67 (Qt 5.12.6)
**
** WARNING! All changes made in this file will be lost!
*****************************************************************************/
#include "../../../src/usb/USBOperator.h"
#include <QtCore/qbytearray.h>
#include <QtCore/qmetatype.h>
#if !defined(Q_MOC_OUTPUT_REVISION)
#error "The header file 'USBOperator.h' doesn't include <QObject>."
#elif Q_MOC_OUTPUT_REVISION != 67
#error "This file was generated using the moc from 5.12.6. It"
#error "cannot be used with the include files from this version of Qt."
#error "(The moc has changed too much.)"
#endif
QT_BEGIN_MOC_NAMESPACE
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
struct qt_meta_stringdata_USBOperator_t {
QByteArrayData data[1];
char stringdata0[12];
};
#define QT_MOC_LITERAL(idx, ofs, len) \
Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
qptrdiff(offsetof(qt_meta_stringdata_USBOperator_t, stringdata0) + ofs \
- idx * sizeof(QByteArrayData)) \
)
static const qt_meta_stringdata_USBOperator_t qt_meta_stringdata_USBOperator = {
{
QT_MOC_LITERAL(0, 0, 11) // "USBOperator"
},
"USBOperator"
};
#undef QT_MOC_LITERAL
static const uint qt_meta_data_USBOperator[] = {
// content:
8, // revision
0, // classname
0, 0, // classinfo
0, 0, // methods
0, 0, // properties
0, 0, // enums/sets
0, 0, // constructors
0, // flags
0, // signalCount
0 // eod
};
void USBOperator::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
{
Q_UNUSED(_o);
Q_UNUSED(_id);
Q_UNUSED(_c);
Q_UNUSED(_a);
}
QT_INIT_METAOBJECT const QMetaObject USBOperator::staticMetaObject = { {
&QThread::staticMetaObject,
qt_meta_stringdata_USBOperator.data,
qt_meta_data_USBOperator,
qt_static_metacall,
nullptr,
nullptr
} };
const QMetaObject *USBOperator::metaObject() const
{
return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
}
void *USBOperator::qt_metacast(const char *_clname)
{
if (!_clname) return nullptr;
if (!strcmp(_clname, qt_meta_stringdata_USBOperator.stringdata0))
return static_cast<void*>(this);
return QThread::qt_metacast(_clname);
}
int USBOperator::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
_id = QThread::qt_metacall(_c, _id, _a);
return _id;
}
QT_WARNING_POP
QT_END_MOC_NAMESPACE
/****************************************************************************
** Meta object code from reading C++ file 'mainwindow.h'
**
** Created by: The Qt Meta Object Compiler version 67 (Qt 5.12.6)
**
** WARNING! All changes made in this file will be lost!
*****************************************************************************/
#include "../../../src/mainwindow.h"
#include <QtCore/qbytearray.h>
#include <QtCore/qmetatype.h>
#if !defined(Q_MOC_OUTPUT_REVISION)
#error "The header file 'mainwindow.h' doesn't include <QObject>."
#elif Q_MOC_OUTPUT_REVISION != 67
#error "This file was generated using the moc from 5.12.6. It"
#error "cannot be used with the include files from this version of Qt."
#error "(The moc has changed too much.)"
#endif
QT_BEGIN_MOC_NAMESPACE
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
struct qt_meta_stringdata_MainWindow_t {
QByteArrayData data[8];
char stringdata0[82];
};
#define QT_MOC_LITERAL(idx, ofs, len) \
Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
qptrdiff(offsetof(qt_meta_stringdata_MainWindow_t, stringdata0) + ofs \
- idx * sizeof(QByteArrayData)) \
)
static const qt_meta_stringdata_MainWindow_t qt_meta_stringdata_MainWindow = {
{
QT_MOC_LITERAL(0, 0, 10), // "MainWindow"
QT_MOC_LITERAL(1, 11, 12), // "slotBtnClick"
QT_MOC_LITERAL(2, 24, 0), // ""
QT_MOC_LITERAL(3, 25, 9), // "isChecked"
QT_MOC_LITERAL(4, 35, 6), // "onRole"
QT_MOC_LITERAL(5, 42, 4), // "role"
QT_MOC_LITERAL(6, 47, 26), // "on_pushButton_play_clicked"
QT_MOC_LITERAL(7, 74, 7) // "checked"
},
"MainWindow\0slotBtnClick\0\0isChecked\0"
"onRole\0role\0on_pushButton_play_clicked\0"
"checked"
};
#undef QT_MOC_LITERAL
static const uint qt_meta_data_MainWindow[] = {
// content:
8, // revision
0, // classname
0, 0, // classinfo
4, 14, // methods
0, 0, // properties
0, 0, // enums/sets
0, 0, // constructors
0, // flags
0, // signalCount
// slots: name, argc, parameters, tag, flags
1, 1, 34, 2, 0x08 /* Private */,
4, 1, 37, 2, 0x08 /* Private */,
6, 0, 40, 2, 0x08 /* Private */,
6, 1, 41, 2, 0x08 /* Private */,
// slots: parameters
QMetaType::Void, QMetaType::Bool, 3,
QMetaType::Void, QMetaType::Int, 5,
QMetaType::Void,
QMetaType::Void, QMetaType::Bool, 7,
0 // eod
};
void MainWindow::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
{
if (_c == QMetaObject::InvokeMetaMethod) {
auto *_t = static_cast<MainWindow *>(_o);
Q_UNUSED(_t)
switch (_id) {
case 0: _t->slotBtnClick((*reinterpret_cast< bool(*)>(_a[1]))); break;
case 1: _t->onRole((*reinterpret_cast< int(*)>(_a[1]))); break;
default: ;
}
}
}
QT_INIT_METAOBJECT const QMetaObject MainWindow::staticMetaObject = { {
&QMainWindow::staticMetaObject,
qt_meta_stringdata_MainWindow.data,
qt_meta_data_MainWindow,
qt_static_metacall,
nullptr,
nullptr
} };
const QMetaObject *MainWindow::metaObject() const
{
return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
}
void *MainWindow::qt_metacast(const char *_clname)
{
if (!_clname) return nullptr;
if (!strcmp(_clname, qt_meta_stringdata_MainWindow.stringdata0))
return static_cast<void*>(this);
if (!strcmp(_clname, "VideoCallBack"))
return static_cast< VideoCallBack*>(this);
return QMainWindow::qt_metacast(_clname);
}
int MainWindow::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
_id = QMainWindow::qt_metacall(_c, _id, _a);
if (_id < 0)
return _id;
if (_c == QMetaObject::InvokeMetaMethod) {
if (_id < 4)
qt_static_metacall(this, _c, _id, _a);
_id -= 4;
} else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
if (_id < 4)
*reinterpret_cast<int*>(_a[0]) = -1;
_id -= 4;
}
return _id;
}
QT_WARNING_POP
QT_END_MOC_NAMESPACE
obj/Obj/VideoEventHandle.o
obj/Obj/VideoFrame.o
obj/Obj/Cond.o
obj/Obj/Mutex.o
obj/Obj/VideoDecoder.o
obj/Obj/NALUParsing.o
obj/Obj/ReadVideoFileThread.o
obj/Obj/hid_thread.o
obj/Obj/ShowVideoWidget.o
obj/Obj/main.o
obj/Obj/FunctionTransfer.o
obj/Obj/AppConfig.o
obj/Obj/mainwindow.o
obj/Obj/USBOperator.o
obj/Obj/moc_FunctionTransfer.o
obj/Obj/moc_ShowVideoWidget.o
obj/Obj/moc_mainwindow.o
obj/Obj/moc_USBOperator.o
obj/Obj/VideoEventHandle.o
obj/Obj/VideoFrame.o
obj/Obj/Cond.o
obj/Obj/Mutex.o
obj/Obj/VideoDecoder.o
obj/Obj/NALUParsing.o
obj/Obj/ReadVideoFileThread.o
obj/Obj/hid_thread.o
obj/Obj/ShowVideoWidget.o
obj/Obj/main.o
obj/Obj/FunctionTransfer.o
obj/Obj/AppConfig.o
obj/Obj/mainwindow.o
obj/Obj/USBOperator.o
obj/Obj/moc_FunctionTransfer.o
obj/Obj/moc_ShowVideoWidget.o
obj/Obj/moc_mainwindow.o
obj/Obj/moc_USBOperator.o
......@@ -11,11 +11,14 @@
#include <QMessageBox>
#include <QFileDialog>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
USBOperator *usb;
ReadVideoFileThread *mReadVideoFileThread;
hid_thread *hidThread;
bool isStart=false;
Ui::MainWindow *ui;
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent)
{
ui=new Ui::MainWindow;
ui->setupUi(this);
FunctionTransfer::init(QThread::currentThreadId());
......@@ -25,16 +28,43 @@ MainWindow::MainWindow(QWidget *parent) :
avdevice_register_all();
mNaluParsing = new NALUParsing();
mNaluParsing->setVideoType(T_NALU_H264);
hidThread=new hid_thread(mNaluParsing);
usb=new USBOperator;
// usb->setCallback(onRole);
// usb->start();
hidThread=new hid_thread(mNaluParsing,usb->getHidDevice());
hidThread->setCallback(onRole);
hidThread->start();
mReadVideoFileThread = new ReadVideoFileThread(mNaluParsing);
mReadVideoFileThread->setVideoCallBack(this);
// mReadH264FileThread->startRead((char*)"../data/test.h264");
mReadVideoFileThread->start();
// mReadH264FileThread->startRead((char*)"../data/test.h264");
connect(ui->pushButton_open, SIGNAL(clicked(bool)), this, SLOT(slotBtnClick(bool)));
connect(ui->pushButton_play, SIGNAL(clicked(bool)), this, SLOT(slotBtnClick(bool)));
}
void MainWindow::onRole(int s){
QString roleStr="未设置";
switch (s) {
case SCREEN_SHOT_START:
break;
case SCREEN_SHOT_STOP:
ui->widget_videoPlayer->clear();
break;
}
}
MainWindow::~MainWindow()
{
delete ui;
......@@ -45,7 +75,7 @@ void MainWindow::slotBtnClick(bool isChecked)
if (QObject::sender() == ui->pushButton_open)
{
QString s = QFileDialog::getOpenFileName(
this, "选择要播放的文件",
this, "选择要播放的文件",
QCoreApplication::applicationDirPath() + "/../data",//初始目录
QStringLiteral("H264/H265 Files (*.264 *.265 *.h264 *.h265);;")
+QStringLiteral("All Files (*.*)"));
......@@ -71,4 +101,8 @@ void MainWindow::onDisplayVideo(std::shared_ptr<VideoFrame> videoFrame, int fram
{
ui->label_frameNum->setText(QString("%1").arg(frameNum));
ui->widget_videoPlayer->inputOneFrame(videoFrame);
}
......@@ -11,7 +11,7 @@
#include <QMainWindow>
#include "VideoReader/hid_thread.h"
#include "VideoReader/ReadVideoFileThread.h"
#include "usb/USBOperator.h"
namespace Ui {
class MainWindow;
}
......@@ -25,16 +25,17 @@ public:
~MainWindow();
private:
Ui::MainWindow *ui;
ReadVideoFileThread *mReadVideoFileThread;
hid_thread *hidThread;
NALUParsing *mNaluParsing;
private slots:
void slotBtnClick(bool isChecked);
static void onRole(int role);
///以下函数,是播放器的回调函数,用于输出信息给界面
void on_pushButton_play_clicked();
void on_pushButton_play_clicked(bool checked);
protected:
///显示视频数据,此函数不宜做耗时操作,否则会影响播放的流畅性。
void onDisplayVideo(VideoFramePtr videoFrame, int frameNum);
......
#include "USBOperator.h"
#include "iostream"
#include <QDateTime>
using namespace std;
typedef struct USB_FRAM_S{
int head;
int id;
int length;
char buff[MAX_PAYLOAD];
}usb_fram_t;
USBOperator::USBOperator(QObject *parent) : QThread(parent){
hid_init();
hid_fd = hid_open(0x1d6d, 0x104, nullptr);
if (hid_fd == nullptr){
qDebug("usb hid open failed!");
}
if (hid_set_nonblocking(hid_fd, 1) < 0) {
qDebug("hid_set_nonblocking error");
}
QDateTime current_date_time =QDateTime::currentDateTime();
ssid ="pair-"+current_date_time.toString("yyyyMMddhhmmsszzz");
}
hid_device* USBOperator::getHidDevice(){
return hid_fd;
}
void USBOperator::getRole(){
static char usb_buf[1025] = {0};
usb_fram_t *usb_fram = (usb_fram_t *)&usb_buf[1];
usb_fram->head = 0x44332222;
usb_fram->id = 0x5555;
usb_fram->length = 2;
usb_fram->buff[0] = 0x01;
usb_fram->buff[1] = 0x01;
hid_write(hid_fd,(const unsigned char *)usb_buf,1025);
}
void USBOperator::setRole(int role){
if(hid_fd!=nullptr){
hid_close(hid_fd);
}
hid_fd = hid_open(0x1d6d, 0x104, nullptr);
if (hid_set_nonblocking(hid_fd, 1) < 0) {
qDebug("hid_set_nonblocking error");
return;
}
uchar usb_buf[1025] = {0};
usb_fram_t *usb_fram = (usb_fram_t *)&usb_buf[1];
usb_fram->head = 0x44332222;
usb_fram->id = 0x5555;
usb_fram->length = 3;
usb_fram->buff[0] = 0x02;
usb_fram->buff[1] = 0x02;
usb_fram->buff[2] = role;//(1:发送端 2:接收端)
QByteArray ssidBa = ssid.toLatin1();
memset(&usb_fram->buff[3], 0, ssidBa.length());
memcpy(&usb_fram->buff[3], ssidBa.data(), ssidBa.length());
usb_fram->buff[3+ssidBa.length()] = '\0';
QString pwd ="87654321";
QByteArray pwdBa = pwd.toLatin1();
memset(&usb_fram->buff[4+ssidBa.length()], 0, pwdBa.length());
memcpy(&usb_fram->buff[4+ssidBa.length()], pwdBa.data(), pwdBa.length());
usb_fram->buff[4+ssidBa.length()+pwdBa.length()] = '\0';
hid_write(hid_fd,(const unsigned char *)usb_buf,1025);
}
void USBOperator::run()
{
char *usb_buf[2048] = {0};
usb_fram_t *usb_fram = (usb_fram_t *)&usb_buf[0];
while (1) {
msleep(1000);
memset(usb_buf,0,2048);
if(hid_fd==nullptr){
cout<<"hid not open"<<endl;
continue;
}
int result= hid_read(hid_fd,(unsigned char *)usb_buf,2048);
if(result>=4){
cout<<"result "<< result<<endl;
cout<<"head "<< usb_fram->head<<endl;
cout<<"id "<< usb_fram->id<<endl;
cout<<"length "<< usb_fram->length<<endl;
//角色信息
if(1144201762==usb_fram->head){
//查询角色返回
if((usb_fram->id==ROLE_INFO)&&(usb_fram->buff[0] == 0x01&&usb_fram->buff[1] == 0x01)){
if(usb_fram->buff[2]==ROLE_NOT_SET){
mcb(ROLE_NOT_SET);
}
if(usb_fram->buff[2]==ROLE_SEND){
mcb(ROLE_SEND);
}
if(usb_fram->buff[2]==ROLE_RECEIVE){
mcb(ROLE_RECEIVE);
}
}
if((usb_fram->id==SCREEN_SHOT)){
//开始投屏
if(usb_fram->buff[0] == 0x01&&usb_fram->buff[1] == 0x01){
cout<<"start screen shot"<<endl;
char usb_buf_re[2049] = {0};
memcpy(&usb_buf_re[1],usb_buf, 2048);
hid_write(hid_fd,(unsigned char *)usb_buf_re,2049);
mcb(SCREEN_SHOT_START);
}
if(usb_fram->buff[0] == 0x02&&usb_fram->buff[1] == 0x02){
cout<<"stop screen shot"<<endl;
char usb_buf_re[2049] = {0};
memcpy(&usb_buf_re[1],usb_buf, 2048);
hid_write(hid_fd,(unsigned char *)usb_buf_re,2049);
mcb(SCREEN_SHOT_STOP);
}
}
}
}
// cout<<"runing"<<endl;
}
}
void USBOperator::setCallback(Func cb){
mcb=cb;
}
#ifndef USBOPERATOR_H
#define USBOPERATOR_H
#include "QThread"
#include <QObject>
#include <QString>
#include "hidapi.h"
#endif // USBOPERATOR_H
#define MAX_PAYLOAD 1012
#define ROLE_INFO 21845
#define SCREEN_SHOT 26214
#define MAX_PAYLOAD 1012
#define ROLE_NOT_SET 0
#define ROLE_SEND 1
#define ROLE_RECEIVE 2
#define SCREEN_SHOT_START 3
#define SCREEN_SHOT_STOP 4
typedef std::function<void(int s)> Func;
class USBOperator : public QThread{
Q_OBJECT
public:
explicit USBOperator(QObject *parent = 0);
virtual void run();
void getRole();
void setRole(int role);
void setCallback(Func cb);
hid_device* getHidDevice();
private:
Func mcb;
QString ssid;
hid_device *hid_fd;
};
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment