New menu option to enable linear scaling filter when using OpenGL. Default is to
use nearest neighbour
Signed-off-by: Ove Brynestad <ovebryne@cisco.com>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
#endif
}
+void CaptureWinGL::setLinearFilter(bool enable)
+{
+#ifdef HAVE_QTGL
+ m_videoSurface.setLinearFilter(enable);
+#endif
+}
+
#ifdef HAVE_QTGL
CaptureWinGLEngine::CaptureWinGLEngine() :
m_frameWidth(0),
m_formatChange(false),
m_frameFormat(0),
m_frameData(NULL),
- m_blending(false)
+ m_blending(false),
+ m_mag_filter(GL_NEAREST),
+ m_min_filter(GL_NEAREST)
{
m_glfunction.initializeGLFunctions(context());
}
m_formatChange = true;
}
+void CaptureWinGLEngine::setLinearFilter(bool enable)
+{
+ if (enable) {
+ m_mag_filter = GL_LINEAR;
+ m_min_filter = GL_LINEAR;
+ }
+ else {
+ m_mag_filter = GL_NEAREST;
+ m_min_filter = GL_NEAREST;
+ }
+ m_formatChange = true;
+}
+
void CaptureWinGLEngine::clearShader()
{
glDeleteTextures(m_screenTextureCount, m_screenTexture);
void CaptureWinGLEngine::configureTexture(size_t idx)
{
glBindTexture(GL_TEXTURE_2D, m_screenTexture[idx]);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, m_min_filter);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, m_mag_filter);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
}
void setDisplayColorspace(unsigned colorspace);
void setField(unsigned field);
void setBlending(bool enable) { m_blending = enable; }
+ void setLinearFilter(bool enable);
protected:
void paintGL();
QGLShaderProgram m_shaderProgram;
bool m_haveFramebufferSRGB;
bool m_blending;
+ GLint m_mag_filter;
+ GLint m_min_filter;
};
#endif
void setField(unsigned field);
void setDisplayColorspace(unsigned colorspace);
void setBlending(bool enable);
+ void setLinearFilter(bool enable);
protected:
void resizeEvent(QResizeEvent *event);
void setField(unsigned field) {}
void setDisplayColorspace(unsigned colorspace) {}
void setBlending(bool enable) {}
+ void setLinearFilter(bool enable) {}
protected:
void resizeEvent(QResizeEvent *event);
menu->addAction(m_appWin->m_resetScalingAct);
menu->addAction(m_appWin->m_useBlendingAct);
+ menu->addAction(m_appWin->m_useLinearAct);
menu->addAction(m_appWin->m_snapshotAct);
menu->addAction(m_appWin->m_showFramesAct);
virtual void setField(unsigned field) = 0;
virtual void setDisplayColorspace(unsigned colorspace) = 0;
virtual void setBlending(bool enable) = 0;
+ virtual void setLinearFilter(bool enable) = 0;
void setCropMethod(CropMethod crop);
void makeFullScreen(bool);
QAction *m_exitFullScreen;
m_useBlendingAct->setChecked(false);
connect(m_useBlendingAct, SIGNAL(toggled(bool)), this, SLOT(setBlending(bool)));
captureMenu->addAction(m_useBlendingAct);
+
+ m_useLinearAct = new QAction("Enable &Linear filter", this);
+ m_useLinearAct->setStatusTip("Enable linear scaling filter");
+ m_useLinearAct->setCheckable(true);
+ m_useLinearAct->setChecked(false);
+ connect(m_useLinearAct, SIGNAL(toggled(bool)), this, SLOT(setLinearFilter(bool)));
+ captureMenu->addAction(m_useLinearAct);
+
} else {
m_renderMethod = QV4L2_RENDER_QT;
}
m_capture->setBlending(checked);
}
+void ApplicationWindow::setLinearFilter(bool checked)
+{
+ if (m_capture)
+ m_capture->setLinearFilter(checked);
+}
+
void ApplicationWindow::setAudioBufferSize()
{
bool ok;
void saveRaw(bool);
void setRenderMethod(bool);
void setBlending(bool);
+ void setLinearFilter(bool);
void traceIoctls(bool);
void changeAudioDevice();
void updateLimRGBRange();
QAction *m_resetScalingAct;
QAction *m_useBlendingAct;
+ QAction *m_useLinearAct;
QAction *m_snapshotAct;
QAction *m_showFramesAct;