/** * \fn VideoOutWindow::EmbedInWidget(const QRect &rect) * \brief Tells video output to embed video in an existing window. * \param rect new display_video_rect * \sa StopEmbedding() */ void VideoOutWindow::EmbedInWidget(const QRect &new_video_rect) { if (!allowpreviewepg && pip_state == kPIPOff) return; bool save_visible_rect = !embedding; embedding = true; display_video_rect = new_video_rect; ResizeDisplayWindow(display_video_rect, save_visible_rect); }
bool VideoOutputOpenGL::SetupOpenGL(void) { if (!gl_context) return false; const QRect dvr = window.GetDisplayVisibleRect(); if (video_codec_id == kCodec_NONE) { gl_context->SetViewPort(QRect(QPoint(),dvr.size())); return true; } if (window.GetPIPState() >= kPIPStandAlone) { QRect tmprect = QRect(QPoint(0,0), dvr.size()); ResizeDisplayWindow(tmprect, true); } bool success = false; OpenGLLocker ctx_lock(gl_context); gl_videochain = new OpenGLVideo(); QString options = GetFilters(); if (gl_opengl_lite) options += " preferycbcr"; success = gl_videochain->Init(gl_context, &videoColourSpace, window.GetVideoDim(), window.GetVideoDispDim(), dvr, window.GetDisplayVideoRect(), window.GetVideoRect(), true, options, !codec_is_std(video_codec_id)); if (success) { bool temp_deinterlacing = m_deinterlacing; if (!m_deintfiltername.isEmpty() && !m_deintfiltername.contains("opengl")) { gl_videochain->SetSoftwareDeinterlacer(m_deintfiltername); } SetDeinterlacingEnabled(true); if (!temp_deinterlacing) { SetDeinterlacingEnabled(false); } } return success; }
bool VideoOutputOpenGL::SetupOpenGL(void) { if (!gl_context) return false; QRect dvr = window.GetDisplayVisibleRect(); MythMainWindow *mainWin = GetMythMainWindow(); QSize mainSize = mainWin->size(); // If the Video screen mode has vertically less pixels // than the GUI screen mode - OpenGL coordinate adjustments // must be made to put the video at the top of the display // area instead of at the bottom. if (dvr.height() < mainSize.height()) dvr.setTop(dvr.top()-mainSize.height()+dvr.height()); // If the Video screen mode has horizontally less pixels // than the GUI screen mode - OpenGL width must be set // as the higher GUI width so that the Program Guide // invoked from playback is not cut off. if (dvr.width() < mainSize.width()) dvr.setWidth(mainSize.width()); if (video_codec_id == kCodec_NONE) { gl_context->SetViewPort(QRect(QPoint(),dvr.size())); return true; } if (window.GetPIPState() >= kPIPStandAlone) { QRect tmprect = QRect(QPoint(0,0), dvr.size()); ResizeDisplayWindow(tmprect, true); } bool success = false; OpenGLLocker ctx_lock(gl_context); gl_videochain = new OpenGLVideo(); QString options = GetFilters(); if (gl_opengl_lite) options += " preferycbcr"; success = gl_videochain->Init(gl_context, &videoColourSpace, window.GetVideoDim(), window.GetVideoDispDim(), dvr, window.GetDisplayVideoRect(), window.GetVideoRect(), true, options, !codec_sw_copy(video_codec_id)); if (success) { bool temp_deinterlacing = m_deinterlacing; if (!m_deintfiltername.isEmpty() && !m_deintfiltername.contains("opengl")) { gl_videochain->SetSoftwareDeinterlacer(m_deintfiltername); } SetDeinterlacingEnabled(true); if (!temp_deinterlacing) { SetDeinterlacingEnabled(false); } } return success; }