PREMIUMAPP-854: NPLB Test- SbMediaCanPlayMimeAndKeySystem.ValidatePerformance failure Reason for change: Caching supported decorders in platform for passing SbMediaCanPlayMimeAndKeySystem.ValidatePerformance nplb test. Test Procedure: Refer ticket Risks: None Signed-off-by: Vaisakh Anand <vaisakh_anand@comcast.com> Change-Id: I6fee781957eed50121e17bc5eacc1758eedba481
diff --git a/src/third_party/starboard/rdk/shared/media/gst_media_utils.cc b/src/third_party/starboard/rdk/shared/media/gst_media_utils.cc index 4f19891..934c5c8 100644 --- a/src/third_party/starboard/rdk/shared/media/gst_media_utils.cc +++ b/src/third_party/starboard/rdk/shared/media/gst_media_utils.cc
@@ -15,6 +15,7 @@ // // SPDX-License-Identifier: Apache-2.0 #include <memory> +#include <map> #include <type_traits> #include <glib.h> @@ -56,18 +57,14 @@ } template <typename C> -bool GstRegistryHasElementForCodec(C codec) { +bool GstRegistryHasElementForCodecImpl(C codec) { static_assert(std::is_same<C, SbMediaVideoCodec>::value || std::is_same<C, SbMediaAudioCodec>::value, "Invalid codec"); auto type = std::is_same<C, SbMediaVideoCodec>::value ? GST_ELEMENT_FACTORY_TYPE_MEDIA_VIDEO : GST_ELEMENT_FACTORY_TYPE_MEDIA_AUDIO; - UniqueFeatureList parser_factories{gst_element_factory_list_get_elements( - GST_ELEMENT_FACTORY_TYPE_PARSER | type, GST_RANK_MARGINAL)}; UniqueFeatureList decoder_factories{gst_element_factory_list_get_elements( GST_ELEMENT_FACTORY_TYPE_DECODER | type, GST_RANK_MARGINAL)}; - // UniqueFeatureList demuxer_factories{gst_element_factory_list_get_elements( - // GST_ELEMENT_FACTORY_TYPE_DEMUXER, GST_RANK_MARGINAL)}; UniqueFeatureList elements; std::vector<std::string> caps; @@ -93,6 +90,9 @@ return true; } + UniqueFeatureList parser_factories{gst_element_factory_list_get_elements( + GST_ELEMENT_FACTORY_TYPE_PARSER | type, GST_RANK_MARGINAL)}; + SB_DLOG(INFO) << "No decoder for codec " << codec << ". Falling back to parsers."; // No decoder. Check if there's a parser and a decoder accepting its caps. for (auto single_caps : caps) { @@ -129,6 +129,17 @@ return false; } +template <typename C> +bool GstRegistryHasElementForCodec(C codec) { + static std::map<C, bool> cache; + auto it = cache.find(codec); + if (it != cache.end()) + return it->second; + bool r = GstRegistryHasElementForCodecImpl(codec); + cache[codec] = r; + return r; +} + } // namespace bool GstRegistryHasElementForMediaType(SbMediaVideoCodec codec) {