bool VideoOutputOpenGLVAAPI::InputChanged(const QSize &input_size, float aspect, MythCodecID av_codec_id, void *codec_private, bool &aspect_only) { LOG(VB_PLAYBACK, LOG_INFO, LOC + QString("InputChanged(%1,%2,%3) %4->%5") .arg(input_size.width()).arg(input_size.height()).arg(aspect) .arg(toString(video_codec_id)).arg(toString(av_codec_id))); if (!codec_is_vaapi(av_codec_id)) return VideoOutputOpenGL::InputChanged(input_size, aspect, av_codec_id, codec_private, aspect_only); QMutexLocker locker(&gl_context_lock); bool wasembedding = window.IsEmbedding(); QRect oldrect; if (wasembedding) { oldrect = window.GetEmbeddingRect(); StopEmbedding(); } bool cid_changed = (video_codec_id != av_codec_id); bool res_changed = input_size != window.GetActualVideoDim(); bool asp_changed = aspect != window.GetVideoAspect(); if (!res_changed && !cid_changed) { if (asp_changed) { aspect_only = true; VideoAspectRatioChanged(aspect); MoveResize(); if (wasembedding) EmbedInWidget(oldrect); } return true; } if (gCoreContext->IsUIThread()) TearDown(); else DestroyCPUResources(); QRect disp = window.GetDisplayVisibleRect(); if (Init(input_size.width(), input_size.height(), aspect, gl_parent_win, disp, av_codec_id)) { if (wasembedding) EmbedInWidget(oldrect); if (gCoreContext->IsUIThread()) BestDeint(); return true; } LOG(VB_GENERAL, LOG_ERR, LOC + "Failed to re-initialise video output."); errorState = kError_Unknown; return false; }
bool VideoOutputOpenGL::InputChanged(const QSize &video_dim_buf, const QSize &video_dim_disp, float aspect, MythCodecID av_codec_id, void */*codec_private*/, bool &aspect_only) { LOG(VB_PLAYBACK, LOG_INFO, LOC + QString("InputChanged(%1,%2,%3) %4->%5") .arg(video_dim_disp.width()).arg(video_dim_disp.height()) .arg(aspect) .arg(toString(video_codec_id)).arg(toString(av_codec_id))); QMutexLocker locker(&gl_context_lock); // Ensure we don't lose embedding through program changes. This duplicates // code in VideoOutput::Init but we need start here otherwise the embedding // is lost during window re-initialistion. bool wasembedding = window.IsEmbedding(); QRect oldrect; if (wasembedding) { oldrect = window.GetEmbeddingRect(); StopEmbedding(); } if (!codec_is_std(av_codec_id) && !codec_is_mediacodec(av_codec_id) && !codec_is_vaapi2(av_codec_id)) { LOG(VB_GENERAL, LOG_ERR, LOC + "New video codec is not supported."); errorState = kError_Unknown; return false; } bool cid_changed = (video_codec_id != av_codec_id); bool res_changed = video_dim_disp != window.GetActualVideoDim(); bool asp_changed = aspect != window.GetVideoAspect(); if (!res_changed && !cid_changed) { if (asp_changed) { aspect_only = true; VideoAspectRatioChanged(aspect); MoveResize(); } if (wasembedding) EmbedInWidget(oldrect); return true; } if (gCoreContext->IsUIThread()) TearDown(); else DestroyCPUResources(); QRect disp = window.GetDisplayVisibleRect(); if (Init(video_dim_buf, video_dim_disp, aspect, gl_parent_win, disp, av_codec_id)) { if (wasembedding) EmbedInWidget(oldrect); if (gCoreContext->IsUIThread()) BestDeint(); return true; } LOG(VB_GENERAL, LOG_ERR, LOC + "Failed to re-initialise video output."); errorState = kError_Unknown; return false; }
bool VideoOutputOpenGL::InputChanged(const QSize &input_size, float aspect, MythCodecID av_codec_id, void *codec_private, bool &aspect_only) { VERBOSE(VB_PLAYBACK, LOC + QString("InputChanged(%1,%2,%3) %4->%5") .arg(input_size.width()).arg(input_size.height()).arg(aspect) .arg(toString(video_codec_id)).arg(toString(av_codec_id))); QMutexLocker locker(&gl_context_lock); // Ensure we don't lose embedding through program changes. This duplicates // code in VideoOutput::Init but we need start here otherwise the embedding // is lost during window re-initialistion. bool wasembedding = window.IsEmbedding(); QRect oldrect; if (wasembedding) { oldrect = window.GetEmbeddingRect(); StopEmbedding(); } if (!codec_is_std(av_codec_id)) { VERBOSE(VB_IMPORTANT, LOC_ERR + QString("New video codec is not supported.")); errorState = kError_Unknown; return false; } if (input_size == window.GetActualVideoDim()) { aspect_only = video_codec_id == av_codec_id; if (window.GetVideoAspect() != aspect) { VideoAspectRatioChanged(aspect); MoveResize(); if (wasembedding) EmbedInWidget(oldrect); } return true; } TearDown(); QRect disp = window.GetDisplayVisibleRect(); if (Init(input_size.width(), input_size.height(), aspect, gl_parent_win, disp, av_codec_id)) { if (wasembedding) EmbedInWidget(oldrect); BestDeint(); return true; } VERBOSE(VB_IMPORTANT, LOC_ERR + QString("Failed to re-initialise video output.")); errorState = kError_Unknown; return false; }