bool VideoOutputNullVDPAU::InitBuffers(void) { QMutexLocker locker(&m_lock); if (!m_render || !codec_is_vdpau_hw(video_codec_id)) return false; uint buffer_size = m_decoder_buffer_size + MIN_PROCESS_BUFFER; const QSize video_dim = window.GetActualVideoDim(); vbuffers.Init(buffer_size, false, 2, 1, 4, 1); bool ok = CreateVideoSurfaces(buffer_size); if (ok) { for (int i = 0; i < m_video_surfaces.size(); i++) ok &= vbuffers.CreateBuffer(video_dim.width(), video_dim.height(), i, m_render->GetRender(m_video_surfaces[i]), FMT_VDPAU); } if (!ok) { DeleteBuffers(); LOG(VB_GENERAL, LOG_ERR, LOC + "Unable to create VDPAU buffers"); return false; } LOG(VB_PLAYBACK, LOG_INFO, LOC + "Created VDPAU buffers"); return ok; }
bool VideoOutputVDPAU::InitBuffers(void) { QMutexLocker locker(&m_lock); if (!m_render) return false; uint buffer_size = m_decoder_buffer_size + m_process_buffer_size; const QSize video_dim = codec_is_std(video_codec_id) ? window.GetVideoDim() : window.GetActualVideoDim(); vbuffers.Init(buffer_size, false, 2, 1, 4, 1); bool ok = false; if (codec_is_vdpau(video_codec_id)) { ok = CreateVideoSurfaces(buffer_size); if (ok) { for (int i = 0; i < m_video_surfaces.size(); i++) ok &= vbuffers.CreateBuffer(video_dim.width(), video_dim.height(), i, m_render->GetRender(m_video_surfaces[i]), FMT_VDPAU); } } else if (codec_is_std(video_codec_id)) { ok = CreateVideoSurfaces(NUM_REFERENCE_FRAMES); if (ok) ok = vbuffers.CreateBuffers(FMT_YV12, video_dim.width(), video_dim.height()); } if (!ok) { LOG(VB_GENERAL, LOG_ERR, LOC + "Unable to create VDPAU buffers"); } else { m_video_mixer = m_render->CreateVideoMixer(video_dim, 2, m_mixer_features); ok = m_video_mixer; m_pause_surface = m_video_surfaces[0]; if (ok && (m_mixer_features & kVDPFeatSharpness)) m_render->SetMixerAttribute(m_video_mixer, kVDPAttribSharpness, m_sharpen); if (ok && (m_mixer_features & kVDPFeatDenoise)) m_render->SetMixerAttribute(m_video_mixer, kVDPAttribNoiseReduction, m_denoise); if (ok && m_skip_chroma) m_render->SetMixerAttribute(m_video_mixer, kVDPAttribSkipChroma, 1); if (ok && (db_letterbox_colour == kLetterBoxColour_Gray25)) m_render->SetMixerAttribute(m_video_mixer, kVDPAttribBackground, 0x7F7F7FFF); } if (!ok) { LOG(VB_GENERAL, LOG_ERR, LOC + "Unable to create VDPAU mixer"); DeleteBuffers(); } return ok; }