diff --git a/media_softlet/linux/common/ddi/media_capstable_specific.cpp b/media_softlet/linux/common/ddi/media_capstable_specific.cpp index 59ea4cafa4..60439ddbed 100644 --- a/media_softlet/linux/common/ddi/media_capstable_specific.cpp +++ b/media_softlet/linux/common/ddi/media_capstable_specific.cpp @@ -246,6 +246,19 @@ VAStatus MediaCapsTableSpecific::CreateConfig( return ret; } +bool MediaCapsTableSpecific::IsProfileSupported( + VAProfile profile) +{ + return !(m_profileMap->find(profile) == m_profileMap->end()); +} + +bool MediaCapsTableSpecific::IsEntrypointSupported( + VAProfile profile, + VAEntrypoint entrypoint) +{ + return !(m_profileMap->at(profile)->find(entrypoint) == m_profileMap->at(profile)->end()); +} + bool MediaCapsTableSpecific::IsDecConfigId(VAConfigID configId) { VAConfigID curConfigId = REMOVE_CONFIG_ID_OFFSET(configId); diff --git a/media_softlet/linux/common/ddi/media_capstable_specific.h b/media_softlet/linux/common/ddi/media_capstable_specific.h index d3dd691c2e..377a357f21 100644 --- a/media_softlet/linux/common/ddi/media_capstable_specific.h +++ b/media_softlet/linux/common/ddi/media_capstable_specific.h @@ -205,6 +205,34 @@ class MediaCapsTableSpecific : public MediaCapsTable //! //! \return True if the configID is a valid decode config, otherwise false //! + bool IsProfileSupported( + VAProfile profile); + + //! + //! \brief Check if profile is supported + //! + //! \param [in] profile + //! VA profile + //! + //! \return bool + //! true if supported + //! + bool IsEntrypointSupported( + VAProfile profile, + VAEntrypoint entrypoint); + + //! + //! \brief Check if entrypoint is supported + //! + //! \param [in] profile + //! VA profile + //! + //! \param [in] entrypoint + //! VA entrypoint + //! + //! \return bool + //! true if supported + //! bool IsDecConfigId(VAConfigID configId); //! diff --git a/media_softlet/linux/common/ddi/media_libva_caps_next.cpp b/media_softlet/linux/common/ddi/media_libva_caps_next.cpp index bf6c7cdc89..d70df69733 100644 --- a/media_softlet/linux/common/ddi/media_libva_caps_next.cpp +++ b/media_softlet/linux/common/ddi/media_libva_caps_next.cpp @@ -355,6 +355,15 @@ VAStatus MediaLibvaCapsNext::GetConfigAttributes( DDI_CHK_NULL(m_capsTable, "Caps table is null", VA_STATUS_ERROR_INVALID_PARAMETER); DDI_CHK_NULL(attribList, "Null pointer", VA_STATUS_ERROR_INVALID_PARAMETER); + if (!(m_capsTable->IsProfileSupported(profile))) + { + return VA_STATUS_ERROR_UNSUPPORTED_PROFILE; + } + else if (!(m_capsTable->IsEntrypointSupported(profile, entrypoint))) + { + return VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT; + } + AttribList *supportedAttribList = nullptr; supportedAttribList = m_capsTable->QuerySupportedAttrib(profile, entrypoint); DDI_CHK_NULL(supportedAttribList, "AttribList in null, not supported attribute", VA_STATUS_ERROR_INVALID_PARAMETER);