From c3ecea0aa4e5b256cdccafaa5e5af278dba190d8 Mon Sep 17 00:00:00 2001 From: Seungha Yang Date: Tue, 21 Jul 2020 15:48:08 +0900 Subject: [PATCH] mfvideosrc: Don't expose unsupported formats Some UVC cameras support H.264 stream but we don't support it yet. Part-of: --- sys/mediafoundation/gstmfsourcereader.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/sys/mediafoundation/gstmfsourcereader.cpp b/sys/mediafoundation/gstmfsourcereader.cpp index b71c97e4d4..f2f2ec1d95 100644 --- a/sys/mediafoundation/gstmfsourcereader.cpp +++ b/sys/mediafoundation/gstmfsourcereader.cpp @@ -26,6 +26,9 @@ #include "gstmfsourcereader.h" #include #include +#include +#include +#include using namespace Microsoft::WRL; @@ -160,6 +163,7 @@ gst_mf_enum_media_type_from_source_reader (IMFSourceReader * source_reader, gint i, j; HRESULT hr; GList *list = NULL; + std::vector unhandled_caps; g_return_val_if_fail (source_reader != NULL, FALSE); g_return_val_if_fail (media_types != NULL, FALSE); @@ -173,6 +177,8 @@ gst_mf_enum_media_type_from_source_reader (IMFSourceReader * source_reader, if (SUCCEEDED (hr)) { GstMFStreamMediaType *mtype; GstCaps *caps = NULL; + GstStructure *s; + std::string name; caps = gst_mf_media_type_to_caps (media_type.Get ()); @@ -180,6 +186,19 @@ gst_mf_enum_media_type_from_source_reader (IMFSourceReader * source_reader, if (!caps) continue; + s = gst_caps_get_structure (caps, 0); + name = gst_structure_get_name (s); + if (name != "video/x-raw" && name != "image/jpeg") { + auto it = + std::find(unhandled_caps.begin(), unhandled_caps.end(), name); + if (it == unhandled_caps.end()) { + GST_FIXME ("Skip not supported format %s", name.c_str()); + unhandled_caps.push_back(name); + } + gst_caps_unref (caps); + continue; + } + mtype = g_new0 (GstMFStreamMediaType, 1); mtype->media_type = media_type.Detach ();