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) {