2,新增“Apps”; 3,新增“Common”; 4,新增“FileList”; 5,新增“MediaX”; 6,新增“OpenSource”; 7,新增“Samples”; 8,新增“SoftwareBusinessLines”.
176 lines
4.4 KiB
C++
176 lines
4.4 KiB
C++
#include "GLWidget.h"
|
|
#include <QMouseEvent>
|
|
#include <QDebug>
|
|
#include <QTimer>
|
|
#include <QMouseEvent>
|
|
#define StatusBackImgShowInterval 1000 //毫秒
|
|
#define RealImgShowInterval 5 // 毫秒
|
|
|
|
|
|
|
|
GLWidget::GLWidget(QWidget* parent)
|
|
: QOpenGLWidget(parent), texture(nullptr)
|
|
{
|
|
m_bIsOpenGLInit = false;
|
|
m_bStartNewImg = false;
|
|
SetStatusBackImg(Normal);
|
|
connect(&m_varTimer, &QTimer::timeout, this, &GLWidget::OnTimer_UpdataVideoView);
|
|
m_varTimer.setTimerType(Qt::PreciseTimer);
|
|
m_varTimer.start(StatusBackImgShowInterval);
|
|
this->setVisible(true);
|
|
}
|
|
|
|
GLWidget::~GLWidget()
|
|
{
|
|
if (texture)
|
|
{
|
|
delete texture;
|
|
}
|
|
}
|
|
|
|
void GLWidget::SetStatusBackImg(GLBackgorundImgType type)
|
|
{
|
|
switch (type)
|
|
{
|
|
case Normal:
|
|
m_varBackImg.load(":/skin/image/blue/GLBackImg/Normal.png");
|
|
m_varTimer.start(StatusBackImgShowInterval);
|
|
break;
|
|
case ChannelFailLink:
|
|
m_varBackImg.load(":/skin/image/blue/GLBackImg/ChannelLinkFail.png");
|
|
break;
|
|
case ChannelFailEncode:
|
|
m_varBackImg.load(":/skin/image/blue/GLBackImg/ChannelEncodeFail.png");
|
|
break;
|
|
case FailLinkAndFailEncode:
|
|
m_varBackImg.load(":/skin/image/blue/GLBackImg/LinkFailAndEncodeFail.png");
|
|
break;
|
|
case WrongImgSize:
|
|
m_varBackImg.load(":/skin/image/blue/GLBackImg/WrongImgSize.png");
|
|
break;
|
|
case NoInterEvent:
|
|
m_varBackImg.load(":/skin/image/blue/GLBackImg/NoInterEvent.png");
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
m_varBackImg.convertToFormat(QImage::Format_RGBA8888);
|
|
m_bStartNewImg = false;
|
|
}
|
|
|
|
void GLWidget::Init(int iWidth, int iHeight)
|
|
{
|
|
m_iWidth = iWidth;
|
|
m_iHeight = iHeight;
|
|
m_varDataQueue.InitQueue(iWidth * iHeight * 4, 2);
|
|
m_varTimer.start(RealImgShowInterval);
|
|
}
|
|
|
|
bool GLWidget::UpdateImageData(byte* pFrameData)
|
|
{
|
|
if (nullptr != pFrameData)
|
|
{
|
|
int nRes = 0;
|
|
m_varDataQueue.PushBack(pFrameData, m_iWidth * m_iHeight * 4, nRes);
|
|
m_bStartNewImg = true;
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
void GLWidget::initializeGL()
|
|
{
|
|
initializeOpenGLFunctions();
|
|
glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // 设置清屏颜色
|
|
glEnable(GL_TEXTURE_2D); // 启用2D纹理映射
|
|
m_bIsOpenGLInit = true;
|
|
}
|
|
|
|
void GLWidget::paintGL()
|
|
{
|
|
glClear(GL_COLOR_BUFFER_BIT);
|
|
if (texture)
|
|
{
|
|
// 绑定纹理
|
|
texture->bind();
|
|
// 绘制矩形
|
|
glBegin(GL_QUADS);
|
|
glTexCoord2f(0.0f, 0.0f); glVertex2f(-1.0f, 1.0f);
|
|
glTexCoord2f(1.0f, 0.0f); glVertex2f(1.0f, 1.0f);
|
|
glTexCoord2f(1.0f, 1.0f); glVertex2f(1.0f, -1.0f);
|
|
glTexCoord2f(0.0f, 1.0f); glVertex2f(-1.0f, -1.0f);
|
|
glEnd();
|
|
// 解绑纹理
|
|
texture->release();
|
|
}
|
|
}
|
|
|
|
void GLWidget::resizeGL(int width, int height)
|
|
{
|
|
glViewport(0, 0, width, height);
|
|
}
|
|
|
|
//void GLWidget::mousePressEvent(QMouseEvent* event)
|
|
//{
|
|
// // 处理鼠标点击事件
|
|
// if (event->button() == Qt::LeftButton)
|
|
// {
|
|
// int aa = 1;
|
|
//
|
|
// }
|
|
// else if (event->button() == Qt::RightButton)
|
|
// {
|
|
//
|
|
// }
|
|
//
|
|
// QOpenGLWidget::mousePressEvent(event);
|
|
//}
|
|
|
|
void GLWidget::setTextureImage(const QImage& image)
|
|
{
|
|
if (!m_bIsOpenGLInit)
|
|
{
|
|
// 如果尚未初始化,则延迟设置纹理图像
|
|
return;
|
|
}
|
|
makeCurrent();
|
|
if (!texture)
|
|
{
|
|
// 创建纹理对象
|
|
texture = new QOpenGLTexture(QOpenGLTexture::Target2D);
|
|
texture->setMinificationFilter(QOpenGLTexture::Linear);
|
|
texture->setMagnificationFilter(QOpenGLTexture::Linear);
|
|
texture->setWrapMode(QOpenGLTexture::ClampToEdge);
|
|
}
|
|
else
|
|
{
|
|
// 销毁现有的纹理对象并重新创建
|
|
texture->destroy();
|
|
texture->create();
|
|
}
|
|
texture->setSize(image.width(), image.height());
|
|
texture->setFormat(QOpenGLTexture::RGBA8_UNorm);
|
|
texture->setData(image);
|
|
doneCurrent();
|
|
update();
|
|
}
|
|
|
|
|
|
|
|
void GLWidget::OnTimer_UpdataVideoView()
|
|
{
|
|
if (m_bStartNewImg)
|
|
{
|
|
unsigned char* cTemp = m_varDataQueue.GetFrontPoint();
|
|
if (cTemp != NULL)
|
|
{
|
|
m_varImage = QImage((byte*)cTemp, m_iWidth, m_iHeight, QImage::Format_RGBA8888);
|
|
setTextureImage(m_varImage);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
setTextureImage(m_varBackImg);
|
|
}
|
|
}
|