mfvideosrc: Use only the first video stream per device
authorSeungha Yang <seungha@centricular.com>
Tue, 6 Oct 2020 20:05:25 +0000 (05:05 +0900)
committerGStreamer Merge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Thu, 8 Oct 2020 20:43:58 +0000 (20:43 +0000)
Non-first video stream might not be working with current
implementation. It could be non-video (e.g., photo source) and then
ReadSample() might be blocked forever.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1661>

sys/mediafoundation/gstmfsourcereader.cpp

index a93d396..3d6dd63 100644 (file)
@@ -180,7 +180,14 @@ gst_mf_enum_media_type_from_source_reader (IMFSourceReader * source_reader,
   g_return_val_if_fail (source_reader != NULL, FALSE);
   g_return_val_if_fail (media_types != NULL, FALSE);
 
-  for (i = 0;; i++) {
+  {
+    /* Retrive only the first video stream. non-first video stream might be
+     * photo stream which doesn't seem to be working propertly in this implementation.
+     *
+     * Note: Chromium seems to be using the first video stream
+     * https://github.com/chromium/chromium/blob/ccd149af47315e4c6f2fc45d55be1b271f39062c/media/capture/video/win/video_capture_device_factory_win.cc
+     */
+    i = MF_SOURCE_READER_FIRST_VIDEO_STREAM;
     for (j = 0;; j++) {
       ComPtr<IMFMediaType> media_type;