kylin-connectivity/projection/device/basedevice.h

198 lines
4.8 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef BASEDEVICE_H
#define BASEDEVICE_H
#include <QElapsedTimer>
#include <QPointer>
#include <QTime>
#include <QtDBus/QDBusInterface>
#include "baseserver.h"
#include "controlmsg.h"
class QMouseEvent;
class QWheelEvent;
class QKeyEvent;
// class Recorder;
class BaseServer;
class VideoBuffer;
class Decoder;
// class FileHandler;
class Stream;
class VideoForm;
class Controller;
struct AVFrame;
class BaseDevice : public QObject
{
Q_OBJECT
public:
struct DeviceParams
{
QString recordFileName = ""; // 视频录制文件名
QString recordPath = ""; // 视频保存路径
QString serial = ""; // 设备序列号
quint16 localPort = 27183; // reverse时本地监听端口
quint16 maxSize = 0; // 视频分辨率
quint32 bitRate = 8000000; // 视频比特率
quint32 maxFps = 60; // 视频最大帧率
bool closeScreen = false; // 启动时自动息屏
bool useReverse = true; // true:先使用adb reverse失败后自动使用adb forwardfalse:直接使用adb forward
bool display = true; // 是否显示画面(或者仅仅后台录制)
QString gameScript = ""; // 游戏映射脚本
bool renderExpiredFrames = false; // 是否渲染延迟视频帧
int lockVideoOrientation = -1; // 是否锁定视频方向
bool stayAwake = false; // 是否保持唤醒
bool framelessWindow = false; // 是否无边框窗口
int screenIndex = 0; // 扩展屏索引
};
enum GroupControlState {
GCS_FREE = 0,
GCS_HOST,
GCS_CLIENT,
};
BaseDevice(DeviceParams params, QObject *parent = nullptr);
virtual ~BaseDevice();
virtual VideoForm *getVideoForm();
virtual const QString &getSerial();
virtual const QSize frameSize();
BaseDevice::GroupControlState controlState();
virtual void updateScript(QString script);
virtual bool isCurrentCustomKeymap();
bool getDeviceStatus();
Q_SIGNALS:
void deviceDisconnect(QString serial);
// tool bar
void switchFullScreen();
void postGoBack();
void postGoHome();
void postGoMenu();
void postAppSwitch();
void postPower();
void postVolumeUp();
void postVolumeDown();
void postCopy();
void postCut();
void setScreenPowerMode(ControlMsg::ScreenPowerMode mode);
void expandNotificationPanel();
void collapsePanel();
void postBackOrScreenOn(bool down);
void postTextInput(QString &text);
void requestDeviceClipboard();
void setDeviceClipboard(bool pause = true);
void clipboardPaste();
void pushFileRequest(const QString &file, const QString &devicePath = "");
void installApkRequest(const QString &apkFile);
// key map
void mouseEvent(const QMouseEvent *from, const QSize &frameSize, const QSize &showSize);
void wheelEvent(const QWheelEvent *from, const QSize &frameSize, const QSize &showSize);
void keyEvent(const QKeyEvent *from, const QSize &frameSize, const QSize &showSize);
// self connect signal and slots
void screenshot();
void showTouch(bool show);
void setControlState(BaseDevice *device, BaseDevice::GroupControlState state);
void grabCursor(bool grab);
// for notify
void controlStateChange(BaseDevice *device, BaseDevice::GroupControlState oldState,
BaseDevice::GroupControlState newState);
// receive from ui
void sigSocketDisconnect();
// send to ui
void sigVideoClose();
void sigScreenConnected();
void sigInputChinese(const QString &input);
protected:
virtual void initSignals();
virtual void startServer();
bool saveFrame(const AVFrame *frame);
void startAudio();
void startVideo();
void showSupportControl();
public Q_SLOTS:
void onScreenshot();
void onShowTouch(bool show);
void onSetControlState(BaseDevice *device, BaseDevice::GroupControlState state);
void onGrabCursor(bool grab);
void onConnectToResult(bool success, const QString &deviceName, const QSize &size, const QString &clientIP);
protected:
// server relevant
QPointer<BaseServer> m_server;
QPointer<Decoder> m_decoder;
QPointer<Controller> m_controller;
// QPointer<FileHandler> m_fileHandler;
QPointer<Stream> m_stream;
VideoBuffer *m_vb = Q_NULLPTR;
// Recorder *m_recorder = Q_NULLPTR;
// ui
QPointer<VideoForm> m_videoForm;
QElapsedTimer m_startTimeCount;
DeviceParams m_params;
GroupControlState m_controlState = GCS_FREE;
QSize m_size;
QString m_clientIP = "";
bool isUsbDevice = false;
// QDBusInterface *m_interface = nullptr;
// quint32 m_inhibitValue = 0;
};
#endif // BASEDEVICE_H