Fix mediafoundation zero-copy capturer for cameras with no nv12 [chromium/src : main]

69 views
Skip to first unread message

Ilya Nikolaevskiy (Gerrit)

unread,
Jun 8, 2021, 9:07:06 AM6/8/21
to alexmo...@chromium.org, chfreme...@chromium.org, creis...@chromium.org, feature-me...@chromium.org, jophba...@chromium.org, mfoltz...@chromium.org, navigation...@chromium.org, poscia...@chromium.org, Isuru Pathirana, Rafael Cintron, Guido Urdaneta, Chromium LUCI CQ, Markus Handell, chromium...@chromium.org, Rijubrata Bhaumik

Attention is currently required from: Isuru Pathirana, Guido Urdaneta, Rafael Cintron.

View Change

    To view, visit change 2944882. To unsubscribe, or for help writing mail filters, visit settings.

    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: If81ca656be8217aa2f989f329c8693d1d7340785
    Gerrit-Change-Number: 2944882
    Gerrit-PatchSet: 1
    Gerrit-Owner: Ilya Nikolaevskiy <il...@chromium.org>
    Gerrit-Reviewer: Guido Urdaneta <gui...@chromium.org>
    Gerrit-Reviewer: Ilya Nikolaevskiy <il...@chromium.org>
    Gerrit-Reviewer: Isuru Pathirana <Isuru.P...@microsoft.com>
    Gerrit-Reviewer: Rafael Cintron <rafael....@microsoft.com>
    Gerrit-CC: Markus Handell <hand...@chromium.org>
    Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
    Gerrit-Attention: Isuru Pathirana <Isuru.P...@microsoft.com>
    Gerrit-Attention: Guido Urdaneta <gui...@chromium.org>
    Gerrit-Attention: Rafael Cintron <rafael....@microsoft.com>
    Gerrit-Comment-Date: Tue, 08 Jun 2021 13:06:57 +0000
    Gerrit-HasComments: No
    Gerrit-Has-Labels: No
    Gerrit-MessageType: comment

    Ilya Nikolaevskiy (Gerrit)

    unread,
    Jun 8, 2021, 9:07:06 AM6/8/21
    to Isuru Pathirana, Guido Urdaneta, Rafael Cintron, alexmo...@chromium.org, chfreme...@chromium.org, creis...@chromium.org, feature-me...@chromium.org, jophba...@chromium.org, mfoltz...@chromium.org, navigation...@chromium.org, poscia...@chromium.org

    Attention is currently required from: Isuru Pathirana, Guido Urdaneta, Rafael Cintron.

    Ilya Nikolaevskiy would like Isuru Pathirana, Guido Urdaneta and Rafael Cintron to review this change.

    View Change

    Fix mediafoundation zero-copy capturer for cameras with no nv12

    - Don't use GMB pool if format is not NV12
    - Don't fillter out non-nv12 buffers if there is no nv12 support

    Bug: 1214028
    Change-Id: If81ca656be8217aa2f989f329c8693d1d7340785
    ---
    M content/browser/renderer_host/media/service_video_capture_device_launcher.cc
    M media/capture/video/win/video_capture_device_factory_win.cc
    M media/capture/video/win/video_capture_device_mf_win.cc
    3 files changed, 18 insertions(+), 8 deletions(-)


    To view, visit change 2944882. To unsubscribe, or for help writing mail filters, visit settings.

    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: If81ca656be8217aa2f989f329c8693d1d7340785
    Gerrit-Change-Number: 2944882
    Gerrit-PatchSet: 1
    Gerrit-Owner: Ilya Nikolaevskiy <il...@chromium.org>
    Gerrit-Reviewer: Guido Urdaneta <gui...@chromium.org>
    Gerrit-Reviewer: Ilya Nikolaevskiy <il...@chromium.org>
    Gerrit-Reviewer: Isuru Pathirana <Isuru.P...@microsoft.com>
    Gerrit-Reviewer: Rafael Cintron <rafael....@microsoft.com>
    Gerrit-CC: Markus Handell <hand...@chromium.org>
    Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
    Gerrit-Attention: Isuru Pathirana <Isuru.P...@microsoft.com>
    Gerrit-Attention: Guido Urdaneta <gui...@chromium.org>
    Gerrit-Attention: Rafael Cintron <rafael....@microsoft.com>
    Gerrit-MessageType: newchange

    Rafael Cintron (Gerrit)

    unread,
    Jun 8, 2021, 9:51:26 PM6/8/21
    to Christian Larson, alexmo...@chromium.org, chfreme...@chromium.org, creis...@chromium.org, feature-me...@chromium.org, jophba...@chromium.org, mfoltz...@chromium.org, navigation...@chromium.org, poscia...@chromium.org, Ilya Nikolaevskiy, Isuru Pathirana, Guido Urdaneta

    Attention is currently required from: Isuru Pathirana, Ilya Nikolaevskiy, Guido Urdaneta, Christian Larson.

    Rafael Cintron would like Christian Larson to review this change authored by Ilya Nikolaevskiy.

    View Change

    Fix mediafoundation zero-copy capturer for cameras with no nv12

    - Don't use GMB pool if format is not NV12
    - Don't fillter out non-nv12 buffers if there is no nv12 support

    Bug: 1214028
    Change-Id: If81ca656be8217aa2f989f329c8693d1d7340785
    ---
    M content/browser/renderer_host/media/service_video_capture_device_launcher.cc
    M media/capture/video/win/video_capture_device_factory_win.cc
    M media/capture/video/win/video_capture_device_mf_win.cc
    3 files changed, 18 insertions(+), 8 deletions(-)


    To view, visit change 2944882. To unsubscribe, or for help writing mail filters, visit settings.

    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: If81ca656be8217aa2f989f329c8693d1d7340785
    Gerrit-Change-Number: 2944882
    Gerrit-PatchSet: 1
    Gerrit-Owner: Ilya Nikolaevskiy <il...@chromium.org>
    Gerrit-Reviewer: Christian Larson <chr...@microsoft.com>
    Gerrit-Reviewer: Guido Urdaneta <gui...@chromium.org>
    Gerrit-Reviewer: Ilya Nikolaevskiy <il...@chromium.org>
    Gerrit-Reviewer: Isuru Pathirana <Isuru.P...@microsoft.com>
    Gerrit-Reviewer: Rafael Cintron <rafael....@microsoft.com>
    Gerrit-CC: Markus Handell <hand...@chromium.org>
    Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
    Gerrit-Attention: Isuru Pathirana <Isuru.P...@microsoft.com>
    Gerrit-Attention: Ilya Nikolaevskiy <il...@chromium.org>
    Gerrit-Attention: Guido Urdaneta <gui...@chromium.org>
    Gerrit-Attention: Christian Larson <chr...@microsoft.com>
    Gerrit-MessageType: newchange

    Rafael Cintron (Gerrit)

    unread,
    Jun 8, 2021, 9:51:31 PM6/8/21
    to Ilya Nikolaevskiy, alexmo...@chromium.org, chfreme...@chromium.org, creis...@chromium.org, feature-me...@chromium.org, jophba...@chromium.org, mfoltz...@chromium.org, navigation...@chromium.org, poscia...@chromium.org, Christian Larson, Isuru Pathirana, Guido Urdaneta, Chromium LUCI CQ, Markus Handell, chromium...@chromium.org, Rijubrata Bhaumik

    Attention is currently required from: Isuru Pathirana, Ilya Nikolaevskiy, Guido Urdaneta, Christian Larson.

    Patch set 1:Code-Review +1

    View Change

    6 comments:

    • Commit Message:

    • Patchset:

      • Patch Set #1:

        Adding Christian to the CL to get his feedback on the new logic.

    • File media/capture/video/win/video_capture_device_factory_win.cc:

      • Patch Set #1, Line 980:

           // If we're using the hardware capture path, ignore non-NV12 pixel formats
        // to prevent copies, if nv12 format is supported.

        If possible, please add a test which ensures the items in the list are what we expect based on this new logic.

      • Patch Set #1, Line 985:

              seen_nv12 = true;
        formats.clear();

        Apologies for not being familiar with the selection algorithm.

        Is |formats| meant to be a sorted list worthy of consideration, with the first ones being the most favored? If so, would it make sense to sort the list after we've finished building it and put the NV12 ones first?

      • Patch Set #1, Line 984:

            if (dxgi_device_manager_available && is_nv12 && !seen_nv12) {
        seen_nv12 = true;
        formats.clear();
        }
        // Skip this non-nv12 format.
        if (dxgi_device_manager_available && !is_nv12 && seen_nv12)
        continue;

        Based on the comment, seems like we can re-write this code to be:

         if (dxgi_device_manager_available) {
        if (is_nv12 && !seen_nv12) {
        // We want to favor NV12 so remove all previous NV12 formats
        // from consideration
        seen_nv12 = true;
        formats.clear();
        } else if (!is_nv12 && seen_nv12) {
        // If we've already seen NV12, do not consider any other type of
        // format. Only NV12 formats are worth our time.
        continue;
        }
        }
        formats.push_back(capture_format);
    • File media/capture/video/win/video_capture_device_mf_win.cc:

      • Patch Set #1, Line 1574:

                selected_video_capability_->supported_format.pixel_format ==
        PIXEL_FORMAT_NV12 &&

        Can you please add a comment here describing why need this particular if statement?

    To view, visit change 2944882. To unsubscribe, or for help writing mail filters, visit settings.

    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: If81ca656be8217aa2f989f329c8693d1d7340785
    Gerrit-Change-Number: 2944882
    Gerrit-PatchSet: 1
    Gerrit-Owner: Ilya Nikolaevskiy <il...@chromium.org>
    Gerrit-Reviewer: Christian Larson <chr...@microsoft.com>
    Gerrit-Reviewer: Guido Urdaneta <gui...@chromium.org>
    Gerrit-Reviewer: Ilya Nikolaevskiy <il...@chromium.org>
    Gerrit-Reviewer: Isuru Pathirana <Isuru.P...@microsoft.com>
    Gerrit-Reviewer: Rafael Cintron <rafael....@microsoft.com>
    Gerrit-CC: Markus Handell <hand...@chromium.org>
    Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
    Gerrit-Attention: Isuru Pathirana <Isuru.P...@microsoft.com>
    Gerrit-Attention: Ilya Nikolaevskiy <il...@chromium.org>
    Gerrit-Attention: Guido Urdaneta <gui...@chromium.org>
    Gerrit-Attention: Christian Larson <chr...@microsoft.com>
    Gerrit-Comment-Date: Wed, 09 Jun 2021 01:51:22 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: Yes
    Gerrit-MessageType: comment

    Ilya Nikolaevskiy (Gerrit)

    unread,
    Jun 9, 2021, 4:02:40 AM6/9/21
    to alexmo...@chromium.org, chfreme...@chromium.org, creis...@chromium.org, feature-me...@chromium.org, jophba...@chromium.org, mfoltz...@chromium.org, navigation...@chromium.org, poscia...@chromium.org

    Attention is currently required from: Isuru Pathirana, Ilya Nikolaevskiy, Guido Urdaneta, Christian Larson.

    Ilya Nikolaevskiy uploaded patch set #2 to this change.

    View Change

    Fix mediafoundation zero-copy capturer for cameras with no nv12

    - Don't use GMB pool if format is not NV12
    - Don't filter out non-nv12 buffers if there is no nv12 support


    Bug: 1214028
    Change-Id: If81ca656be8217aa2f989f329c8693d1d7340785
    ---
    M content/browser/renderer_host/media/service_video_capture_device_launcher.cc
    M media/capture/video/win/video_capture_device_factory_win.cc
    M media/capture/video/win/video_capture_device_mf_win.cc
    3 files changed, 18 insertions(+), 8 deletions(-)

    To view, visit change 2944882. To unsubscribe, or for help writing mail filters, visit settings.

    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: If81ca656be8217aa2f989f329c8693d1d7340785
    Gerrit-Change-Number: 2944882
    Gerrit-PatchSet: 2
    Gerrit-Owner: Ilya Nikolaevskiy <il...@chromium.org>
    Gerrit-Reviewer: Christian Larson <chr...@microsoft.com>
    Gerrit-Reviewer: Guido Urdaneta <gui...@chromium.org>
    Gerrit-Reviewer: Ilya Nikolaevskiy <il...@chromium.org>
    Gerrit-Reviewer: Isuru Pathirana <Isuru.P...@microsoft.com>
    Gerrit-Reviewer: Rafael Cintron <rafael....@microsoft.com>
    Gerrit-CC: Markus Handell <hand...@chromium.org>
    Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
    Gerrit-Attention: Isuru Pathirana <Isuru.P...@microsoft.com>
    Gerrit-Attention: Ilya Nikolaevskiy <il...@chromium.org>
    Gerrit-Attention: Guido Urdaneta <gui...@chromium.org>
    Gerrit-Attention: Christian Larson <chr...@microsoft.com>
    Gerrit-MessageType: newpatchset

    Ilya Nikolaevskiy (Gerrit)

    unread,
    Jun 9, 2021, 5:47:14 AM6/9/21
    to alexmo...@chromium.org, chfreme...@chromium.org, creis...@chromium.org, feature-me...@chromium.org, jophba...@chromium.org, mfoltz...@chromium.org, navigation...@chromium.org, poscia...@chromium.org, Christian Larson, Rafael Cintron, Isuru Pathirana, Guido Urdaneta, Chromium LUCI CQ, Markus Handell, chromium...@chromium.org, Rijubrata Bhaumik

    Attention is currently required from: Isuru Pathirana, Guido Urdaneta, Rafael Cintron, Christian Larson.

    View Change

    5 comments:

    • Commit Message:

      • Done

    • File media/capture/video/win/video_capture_device_factory_win.cc:

      • Patch Set #1, Line 980:

           // If we're using the hardware capture path, ignore non-NV12 pixel formats
        // to prevent copies, if nv12 format is supported.

      • Apologies for not being familiar with the selection algorithm. […]

        I'm not sure how this list is used at the other side. It would be safer to remove everything other than NV12 if we want to ensure HW path being used.

      • Patch Set #1, Line 984:

            if (dxgi_device_manager_available && is_nv12 && !seen_nv12) {
        seen_nv12 = true;
        formats.clear();
        }
        // Skip this non-nv12 format.
        if (dxgi_device_manager_available && !is_nv12 && seen_nv12)
        continue;

      • Based on the comment, seems like we can re-write this code to be: […]

        Done

    • File media/capture/video/win/video_capture_device_mf_win.cc:

      • Patch Set #1, Line 1574:

                selected_video_capability_->supported_format.pixel_format ==
        PIXEL_FORMAT_NV12 &&

        Can you please add a comment here describing why need this particular if statement?

      • Done

    To view, visit change 2944882. To unsubscribe, or for help writing mail filters, visit settings.

    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: If81ca656be8217aa2f989f329c8693d1d7340785
    Gerrit-Change-Number: 2944882
    Gerrit-PatchSet: 2
    Gerrit-Owner: Ilya Nikolaevskiy <il...@chromium.org>
    Gerrit-Reviewer: Christian Larson <chr...@microsoft.com>
    Gerrit-Reviewer: Guido Urdaneta <gui...@chromium.org>
    Gerrit-Reviewer: Ilya Nikolaevskiy <il...@chromium.org>
    Gerrit-Reviewer: Isuru Pathirana <Isuru.P...@microsoft.com>
    Gerrit-Reviewer: Rafael Cintron <rafael....@microsoft.com>
    Gerrit-CC: Markus Handell <hand...@chromium.org>
    Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
    Gerrit-Attention: Isuru Pathirana <Isuru.P...@microsoft.com>
    Gerrit-Attention: Guido Urdaneta <gui...@chromium.org>
    Gerrit-Attention: Rafael Cintron <rafael....@microsoft.com>
    Gerrit-Attention: Christian Larson <chr...@microsoft.com>
    Gerrit-Comment-Date: Wed, 09 Jun 2021 09:47:03 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    Comment-In-Reply-To: Rafael Cintron <rafael....@microsoft.com>
    Gerrit-MessageType: comment

    Christian Larson (Gerrit)

    unread,
    Jun 11, 2021, 4:14:47 PM6/11/21
    to Ilya Nikolaevskiy, alexmo...@chromium.org, chfreme...@chromium.org, creis...@chromium.org, feature-me...@chromium.org, jophba...@chromium.org, mfoltz...@chromium.org, navigation...@chromium.org, poscia...@chromium.org, Rafael Cintron, Isuru Pathirana, Guido Urdaneta, Chromium LUCI CQ, Markus Handell, chromium...@chromium.org, Rijubrata Bhaumik

    Attention is currently required from: Isuru Pathirana, Ilya Nikolaevskiy, Guido Urdaneta, Rafael Cintron.

    View Change

    1 comment:

    To view, visit change 2944882. To unsubscribe, or for help writing mail filters, visit settings.

    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: If81ca656be8217aa2f989f329c8693d1d7340785
    Gerrit-Change-Number: 2944882
    Gerrit-PatchSet: 3
    Gerrit-Owner: Ilya Nikolaevskiy <il...@chromium.org>
    Gerrit-Reviewer: Christian Larson <chr...@microsoft.com>
    Gerrit-Reviewer: Guido Urdaneta <gui...@chromium.org>
    Gerrit-Reviewer: Ilya Nikolaevskiy <il...@chromium.org>
    Gerrit-Reviewer: Isuru Pathirana <Isuru.P...@microsoft.com>
    Gerrit-Reviewer: Rafael Cintron <rafael....@microsoft.com>
    Gerrit-CC: Markus Handell <hand...@chromium.org>
    Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
    Gerrit-Attention: Isuru Pathirana <Isuru.P...@microsoft.com>
    Gerrit-Attention: Ilya Nikolaevskiy <il...@chromium.org>
    Gerrit-Attention: Guido Urdaneta <gui...@chromium.org>
    Gerrit-Attention: Rafael Cintron <rafael....@microsoft.com>
    Gerrit-Comment-Date: Fri, 11 Jun 2021 20:14:38 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    Gerrit-MessageType: comment

    Ilya Nikolaevskiy (Gerrit)

    unread,
    Jun 14, 2021, 6:25:54 AM6/14/21
    to alexmo...@chromium.org, chfreme...@chromium.org, creis...@chromium.org, feature-me...@chromium.org, jophba...@chromium.org, mfoltz...@chromium.org, navigation...@chromium.org, poscia...@chromium.org, Christian Larson, Rafael Cintron, Isuru Pathirana, Guido Urdaneta, Chromium LUCI CQ, Markus Handell, chromium...@chromium.org, Rijubrata Bhaumik

    Attention is currently required from: Isuru Pathirana, Guido Urdaneta, Rafael Cintron, Christian Larson.

    View Change

    1 comment:

    • File media/capture/video/win/video_capture_device_mf_win.cc:

      • Is the desired behavior for the MFCaptureEngine pipeline to do the color conversion if so you can co […]

        Done. I had to change existing |GetMediaFormatConfigurationFromMFSourceMediaSubtype| routine. Now IMFCaptureEngine is configured to produce NV12 even if camera supports only I420.

    To view, visit change 2944882. To unsubscribe, or for help writing mail filters, visit settings.

    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: If81ca656be8217aa2f989f329c8693d1d7340785
    Gerrit-Change-Number: 2944882
    Gerrit-PatchSet: 4
    Gerrit-Owner: Ilya Nikolaevskiy <il...@chromium.org>
    Gerrit-Reviewer: Christian Larson <chr...@microsoft.com>
    Gerrit-Reviewer: Guido Urdaneta <gui...@chromium.org>
    Gerrit-Reviewer: Ilya Nikolaevskiy <il...@chromium.org>
    Gerrit-Reviewer: Isuru Pathirana <Isuru.P...@microsoft.com>
    Gerrit-Reviewer: Rafael Cintron <rafael....@microsoft.com>
    Gerrit-CC: Markus Handell <hand...@chromium.org>
    Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
    Gerrit-Attention: Isuru Pathirana <Isuru.P...@microsoft.com>
    Gerrit-Attention: Guido Urdaneta <gui...@chromium.org>
    Gerrit-Attention: Rafael Cintron <rafael....@microsoft.com>
    Gerrit-Attention: Christian Larson <chr...@microsoft.com>
    Gerrit-Comment-Date: Mon, 14 Jun 2021 10:25:40 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    Comment-In-Reply-To: Christian Larson <chr...@microsoft.com>
    Gerrit-MessageType: comment

    Ilya Nikolaevskiy (Gerrit)

    unread,
    Jun 14, 2021, 6:27:10 AM6/14/21
    to alexmo...@chromium.org, chfreme...@chromium.org, creis...@chromium.org, feature-me...@chromium.org, jophba...@chromium.org, mfoltz...@chromium.org, navigation...@chromium.org, poscia...@chromium.org, Christian Larson, Rafael Cintron, Isuru Pathirana, Guido Urdaneta, Chromium LUCI CQ, Markus Handell, chromium...@chromium.org, Rijubrata Bhaumik

    Attention is currently required from: Isuru Pathirana, Guido Urdaneta, Rafael Cintron, Christian Larson.

    View Change

    1 comment:

    • File media/capture/video/win/video_capture_device_mf_win.cc:

      • Done. I had to change existing |GetMediaFormatConfigurationFromMFSourceMediaSubtype| routine. […]

        Done

    To view, visit change 2944882. To unsubscribe, or for help writing mail filters, visit settings.

    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: If81ca656be8217aa2f989f329c8693d1d7340785
    Gerrit-Change-Number: 2944882
    Gerrit-PatchSet: 4
    Gerrit-Owner: Ilya Nikolaevskiy <il...@chromium.org>
    Gerrit-Reviewer: Christian Larson <chr...@microsoft.com>
    Gerrit-Reviewer: Guido Urdaneta <gui...@chromium.org>
    Gerrit-Reviewer: Ilya Nikolaevskiy <il...@chromium.org>
    Gerrit-Reviewer: Isuru Pathirana <Isuru.P...@microsoft.com>
    Gerrit-Reviewer: Rafael Cintron <rafael....@microsoft.com>
    Gerrit-CC: Markus Handell <hand...@chromium.org>
    Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
    Gerrit-Attention: Isuru Pathirana <Isuru.P...@microsoft.com>
    Gerrit-Attention: Guido Urdaneta <gui...@chromium.org>
    Gerrit-Attention: Rafael Cintron <rafael....@microsoft.com>
    Gerrit-Attention: Christian Larson <chr...@microsoft.com>
    Gerrit-Comment-Date: Mon, 14 Jun 2021 10:27:00 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    Comment-In-Reply-To: Ilya Nikolaevskiy <il...@chromium.org>

    Rafael Cintron (Gerrit)

    unread,
    Jun 14, 2021, 2:23:36 PM6/14/21
    to alexmo...@chromium.org, chfreme...@chromium.org, creis...@chromium.org, feature-me...@chromium.org, jophba...@chromium.org, mfoltz...@chromium.org, navigation...@chromium.org, poscia...@chromium.org, William Carr, Ilya Nikolaevskiy, Christian Larson, Isuru Pathirana, Guido Urdaneta

    Attention is currently required from: Isuru Pathirana, Ilya Nikolaevskiy, Guido Urdaneta, Christian Larson.

    Ilya Nikolaevskiy has uploaded this change for review.

    View Change

    Fix mediafoundation zero-copy capturer for cameras with no nv12

    - Don't use GMB pool if format is not NV12
    - Don't filter out non-nv12 buffers if there is no nv12 support

    Bug: 1214028
    Change-Id: If81ca656be8217aa2f989f329c8693d1d7340785
    ---
    M content/browser/renderer_host/media/service_video_capture_device_launcher.cc
    M media/capture/video/win/video_capture_device_factory_win.cc
    M media/capture/video/win/video_capture_device_mf_win.cc
    3 files changed, 34 insertions(+), 16 deletions(-)


    To view, visit change 2944882. To unsubscribe, or for help writing mail filters, visit settings.

    Gerrit-Project: chromium/src
    Gerrit-Branch: main
    Gerrit-Change-Id: If81ca656be8217aa2f989f329c8693d1d7340785
    Gerrit-Change-Number: 2944882
    Gerrit-PatchSet: 5
    Gerrit-Owner: Ilya Nikolaevskiy <il...@chromium.org>
    Gerrit-Reviewer: Christian Larson <chr...@microsoft.com>
    Gerrit-Reviewer: Guido Urdaneta <gui...@chromium.org>
    Gerrit-Reviewer: Ilya Nikolaevskiy <il...@chromium.org>
    Gerrit-Reviewer: Isuru Pathirana <Isuru.P...@microsoft.com>
    Gerrit-Reviewer: Rafael Cintron <rafael....@microsoft.com>
    Gerrit-CC: Markus Handell <hand...@chromium.org>
    Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
    Gerrit-CC: William Carr <wic...@microsoft.com>
    Gerrit-Attention: Isuru Pathirana <Isuru.P...@microsoft.com>
    Gerrit-Attention: Ilya Nikolaevskiy <il...@chromium.org>
    Gerrit-Attention: Guido Urdaneta <gui...@chromium.org>

    Rafael Cintron (Gerrit)

    unread,
    Jun 14, 2021, 2:23:42 PM6/14/21
    to Ilya Nikolaevskiy, alexmo...@chromium.org, chfreme...@chromium.org, creis...@chromium.org, feature-me...@chromium.org, jophba...@chromium.org, mfoltz...@chromium.org, navigation...@chromium.org, poscia...@chromium.org, William Carr, Tricium, Christian Larson, Isuru Pathirana, Guido Urdaneta, Chromium LUCI CQ, Markus Handell, chromium...@chromium.org, Rijubrata Bhaumik

    Attention is currently required from: Isuru Pathirana, Ilya Nikolaevskiy, Guido Urdaneta, Christian Larson.

    Patch set 5:Code-Review +1

    View Change

      To view, visit change 2944882. To unsubscribe, or for help writing mail filters, visit settings.

      Gerrit-Project: chromium/src
      Gerrit-Branch: main
      Gerrit-Change-Id: If81ca656be8217aa2f989f329c8693d1d7340785
      Gerrit-Change-Number: 2944882
      Gerrit-PatchSet: 5
      Gerrit-Owner: Ilya Nikolaevskiy <il...@chromium.org>
      Gerrit-Reviewer: Christian Larson <chr...@microsoft.com>
      Gerrit-Reviewer: Guido Urdaneta <gui...@chromium.org>
      Gerrit-Reviewer: Ilya Nikolaevskiy <il...@chromium.org>
      Gerrit-Reviewer: Isuru Pathirana <Isuru.P...@microsoft.com>
      Gerrit-Reviewer: Rafael Cintron <rafael....@microsoft.com>
      Gerrit-CC: Markus Handell <hand...@chromium.org>
      Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
      Gerrit-CC: William Carr <wic...@microsoft.com>
      Gerrit-Attention: Isuru Pathirana <Isuru.P...@microsoft.com>
      Gerrit-Attention: Ilya Nikolaevskiy <il...@chromium.org>
      Gerrit-Attention: Guido Urdaneta <gui...@chromium.org>
      Gerrit-Attention: Christian Larson <chr...@microsoft.com>
      Gerrit-Comment-Date: Mon, 14 Jun 2021 18:23:33 +0000
      Gerrit-HasComments: No
      Gerrit-Has-Labels: Yes
      Gerrit-MessageType: comment

      Christian Larson (Gerrit)

      unread,
      Jun 14, 2021, 6:30:12 PM6/14/21
      to Ilya Nikolaevskiy, alexmo...@chromium.org, chfreme...@chromium.org, creis...@chromium.org, feature-me...@chromium.org, jophba...@chromium.org, mfoltz...@chromium.org, navigation...@chromium.org, poscia...@chromium.org, William Carr, Tricium, Rafael Cintron, Isuru Pathirana, Guido Urdaneta, Chromium LUCI CQ, Markus Handell, chromium...@chromium.org, Rijubrata Bhaumik

      Attention is currently required from: Isuru Pathirana, Ilya Nikolaevskiy, Guido Urdaneta, Rafael Cintron.

      View Change

      1 comment:

      • File media/capture/video/win/video_capture_device_factory_win.cc:

        • Patch Set #1, Line 980:

             // If we're using the hardware capture path, ignore non-NV12 pixel formats
          // to prevent copies, if nv12 format is supported.

      To view, visit change 2944882. To unsubscribe, or for help writing mail filters, visit settings.

      Gerrit-Project: chromium/src
      Gerrit-Branch: main
      Gerrit-Change-Id: If81ca656be8217aa2f989f329c8693d1d7340785
      Gerrit-Change-Number: 2944882
      Gerrit-PatchSet: 5
      Gerrit-Owner: Ilya Nikolaevskiy <il...@chromium.org>
      Gerrit-Reviewer: Christian Larson <chr...@microsoft.com>
      Gerrit-Reviewer: Guido Urdaneta <gui...@chromium.org>
      Gerrit-Reviewer: Ilya Nikolaevskiy <il...@chromium.org>
      Gerrit-Reviewer: Isuru Pathirana <Isuru.P...@microsoft.com>
      Gerrit-Reviewer: Rafael Cintron <rafael....@microsoft.com>
      Gerrit-CC: Markus Handell <hand...@chromium.org>
      Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
      Gerrit-CC: William Carr <wic...@microsoft.com>
      Gerrit-Attention: Isuru Pathirana <Isuru.P...@microsoft.com>
      Gerrit-Attention: Ilya Nikolaevskiy <il...@chromium.org>
      Gerrit-Attention: Guido Urdaneta <gui...@chromium.org>
      Gerrit-Attention: Rafael Cintron <rafael....@microsoft.com>
      Gerrit-Comment-Date: Mon, 14 Jun 2021 22:30:00 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: No
      Comment-In-Reply-To: Ilya Nikolaevskiy <il...@chromium.org>

      Ilya Nikolaevskiy (Gerrit)

      unread,
      Jun 15, 2021, 4:46:14 AM6/15/21
      to alexmo...@chromium.org, chfreme...@chromium.org, creis...@chromium.org, feature-me...@chromium.org, jophba...@chromium.org, mfoltz...@chromium.org, navigation...@chromium.org, poscia...@chromium.org, William Carr, Tricium, Christian Larson, Rafael Cintron, Isuru Pathirana, Guido Urdaneta, Chromium LUCI CQ, Markus Handell, chromium...@chromium.org, Rijubrata Bhaumik

      Attention is currently required from: Isuru Pathirana, Guido Urdaneta, Rafael Cintron, Christian Larson.

      Patch set 6:Commit-Queue +1

      View Change

      2 comments:

      • Patchset:

      • File media/capture/video/win/video_capture_device_factory_win.cc:

        • Patch Set #1, Line 980:

             // If we're using the hardware capture path, ignore non-NV12 pixel formats
          // to prevent copies, if nv12 format is supported.

        • It looks like the implementation is missing the following QI for IMFMediaEventGenerator it is implem […]

          Thanks Christian, it works now: indeed QI for IMFMediaEventGenerator was missing.

      To view, visit change 2944882. To unsubscribe, or for help writing mail filters, visit settings.

      Gerrit-Project: chromium/src
      Gerrit-Branch: main
      Gerrit-Change-Id: If81ca656be8217aa2f989f329c8693d1d7340785
      Gerrit-Change-Number: 2944882
      Gerrit-PatchSet: 6
      Gerrit-Owner: Ilya Nikolaevskiy <il...@chromium.org>
      Gerrit-Reviewer: Christian Larson <chr...@microsoft.com>
      Gerrit-Reviewer: Guido Urdaneta <gui...@chromium.org>
      Gerrit-Reviewer: Ilya Nikolaevskiy <il...@chromium.org>
      Gerrit-Reviewer: Isuru Pathirana <Isuru.P...@microsoft.com>
      Gerrit-Reviewer: Rafael Cintron <rafael....@microsoft.com>
      Gerrit-CC: Markus Handell <hand...@chromium.org>
      Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
      Gerrit-CC: William Carr <wic...@microsoft.com>
      Gerrit-Attention: Isuru Pathirana <Isuru.P...@microsoft.com>
      Gerrit-Attention: Guido Urdaneta <gui...@chromium.org>
      Gerrit-Attention: Rafael Cintron <rafael....@microsoft.com>
      Gerrit-Attention: Christian Larson <chr...@microsoft.com>
      Gerrit-Comment-Date: Tue, 15 Jun 2021 08:46:04 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: Yes
      Comment-In-Reply-To: Ilya Nikolaevskiy <il...@chromium.org>
      Comment-In-Reply-To: Rafael Cintron <rafael....@microsoft.com>

      Guido Urdaneta (Gerrit)

      unread,
      Jun 15, 2021, 8:19:57 AM6/15/21
      to Ilya Nikolaevskiy, alexmo...@chromium.org, chfreme...@chromium.org, creis...@chromium.org, feature-me...@chromium.org, jophba...@chromium.org, mfoltz...@chromium.org, navigation...@chromium.org, poscia...@chromium.org, William Carr, Tricium, Christian Larson, Rafael Cintron, Isuru Pathirana, Chromium LUCI CQ, Markus Handell, chromium...@chromium.org, Rijubrata Bhaumik

      Attention is currently required from: Isuru Pathirana, Ilya Nikolaevskiy, Christian Larson.

      Patch set 6:Code-Review +1

      View Change

      2 comments:

      • Patchset:

        • Patch Set #6:

          lgtm % nit, but wait for other the reviewers before landing

      • File media/capture/video/win/video_capture_device_factory_win.cc:

      To view, visit change 2944882. To unsubscribe, or for help writing mail filters, visit settings.

      Gerrit-Project: chromium/src
      Gerrit-Branch: main
      Gerrit-Change-Id: If81ca656be8217aa2f989f329c8693d1d7340785
      Gerrit-Change-Number: 2944882
      Gerrit-PatchSet: 6
      Gerrit-Owner: Ilya Nikolaevskiy <il...@chromium.org>
      Gerrit-Reviewer: Christian Larson <chr...@microsoft.com>
      Gerrit-Reviewer: Guido Urdaneta <gui...@chromium.org>
      Gerrit-Reviewer: Ilya Nikolaevskiy <il...@chromium.org>
      Gerrit-Reviewer: Isuru Pathirana <Isuru.P...@microsoft.com>
      Gerrit-Reviewer: Rafael Cintron <rafael....@microsoft.com>
      Gerrit-CC: Markus Handell <hand...@chromium.org>
      Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
      Gerrit-CC: William Carr <wic...@microsoft.com>
      Gerrit-Attention: Isuru Pathirana <Isuru.P...@microsoft.com>
      Gerrit-Attention: Ilya Nikolaevskiy <il...@chromium.org>
      Gerrit-Attention: Christian Larson <chr...@microsoft.com>
      Gerrit-Comment-Date: Tue, 15 Jun 2021 12:19:46 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: Yes
      Gerrit-MessageType: comment

      Ilya Nikolaevskiy (Gerrit)

      unread,
      Jun 15, 2021, 8:25:25 AM6/15/21
      to Isuru Pathirana, alexmo...@chromium.org, chfreme...@chromium.org, creis...@chromium.org, feature-me...@chromium.org, jophba...@chromium.org, mfoltz...@chromium.org, navigation...@chromium.org, poscia...@chromium.org, Guido Urdaneta, William Carr, Tricium, Christian Larson, Rafael Cintron, Chromium LUCI CQ, Markus Handell, chromium...@chromium.org, Rijubrata Bhaumik

      Attention is currently required from: Ilya Nikolaevskiy, Christian Larson.

      Ilya Nikolaevskiy removed Isuru Pathirana from this change.

      View Change

      To view, visit change 2944882. To unsubscribe, or for help writing mail filters, visit settings.

      Gerrit-Project: chromium/src
      Gerrit-Branch: main
      Gerrit-Change-Id: If81ca656be8217aa2f989f329c8693d1d7340785
      Gerrit-Change-Number: 2944882
      Gerrit-PatchSet: 6
      Gerrit-Owner: Ilya Nikolaevskiy <il...@chromium.org>
      Gerrit-Reviewer: Christian Larson <chr...@microsoft.com>
      Gerrit-Reviewer: Guido Urdaneta <gui...@chromium.org>
      Gerrit-Reviewer: Ilya Nikolaevskiy <il...@chromium.org>
      Gerrit-Reviewer: Rafael Cintron <rafael....@microsoft.com>
      Gerrit-CC: Markus Handell <hand...@chromium.org>
      Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
      Gerrit-CC: William Carr <wic...@microsoft.com>
      Gerrit-Attention: Ilya Nikolaevskiy <il...@chromium.org>
      Gerrit-Attention: Christian Larson <chr...@microsoft.com>
      Gerrit-MessageType: deleteReviewer

      Ilya Nikolaevskiy (Gerrit)

      unread,
      Jun 15, 2021, 8:57:03 AM6/15/21
      to alexmo...@chromium.org, chfreme...@chromium.org, creis...@chromium.org, feature-me...@chromium.org, jophba...@chromium.org, mfoltz...@chromium.org, navigation...@chromium.org, poscia...@chromium.org, Guido Urdaneta, William Carr, Tricium, Christian Larson, Rafael Cintron, Chromium LUCI CQ, Markus Handell, chromium...@chromium.org, Rijubrata Bhaumik

      Attention is currently required from: Christian Larson.

      View Change

      1 comment:

      • File media/capture/video/win/video_capture_device_factory_win.cc:

        • Done

      To view, visit change 2944882. To unsubscribe, or for help writing mail filters, visit settings.

      Gerrit-Project: chromium/src
      Gerrit-Branch: main
      Gerrit-Change-Id: If81ca656be8217aa2f989f329c8693d1d7340785
      Gerrit-Change-Number: 2944882
      Gerrit-PatchSet: 6
      Gerrit-Owner: Ilya Nikolaevskiy <il...@chromium.org>
      Gerrit-Reviewer: Christian Larson <chr...@microsoft.com>
      Gerrit-Reviewer: Guido Urdaneta <gui...@chromium.org>
      Gerrit-Reviewer: Ilya Nikolaevskiy <il...@chromium.org>
      Gerrit-Reviewer: Rafael Cintron <rafael....@microsoft.com>
      Gerrit-CC: Markus Handell <hand...@chromium.org>
      Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
      Gerrit-CC: William Carr <wic...@microsoft.com>
      Gerrit-Attention: Christian Larson <chr...@microsoft.com>
      Gerrit-Comment-Date: Tue, 15 Jun 2021 12:56:52 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: No
      Comment-In-Reply-To: Guido Urdaneta <gui...@chromium.org>
      Gerrit-MessageType: comment

      Ilya Nikolaevskiy (Gerrit)

      unread,
      Jun 16, 2021, 1:48:51 PM6/16/21
      to alexmo...@chromium.org, chfreme...@chromium.org, creis...@chromium.org, feature-me...@chromium.org, jophba...@chromium.org, mfoltz...@chromium.org, navigation...@chromium.org, poscia...@chromium.org, Guido Urdaneta, William Carr, Tricium, Christian Larson, Rafael Cintron, Chromium LUCI CQ, Markus Handell, chromium...@chromium.org, Rijubrata Bhaumik

      Attention is currently required from: Christian Larson.

      Patch set 9:Commit-Queue +1

      View Change

      1 comment:

      • Patchset:

        • Patch Set #9:

          Christian, ptal.

          Previous fix introduced an issue: Because all the sink formats are set to NV12, some random source format was selected. Now capability selection logic also checks for source format to ensure that there's no unnecessary conversion.

      To view, visit change 2944882. To unsubscribe, or for help writing mail filters, visit settings.

      Gerrit-Project: chromium/src
      Gerrit-Branch: main
      Gerrit-Change-Id: If81ca656be8217aa2f989f329c8693d1d7340785
      Gerrit-Change-Number: 2944882
      Gerrit-PatchSet: 9
      Gerrit-Owner: Ilya Nikolaevskiy <il...@chromium.org>
      Gerrit-Reviewer: Christian Larson <chr...@microsoft.com>
      Gerrit-Reviewer: Guido Urdaneta <gui...@chromium.org>
      Gerrit-Reviewer: Ilya Nikolaevskiy <il...@chromium.org>
      Gerrit-Reviewer: Rafael Cintron <rafael....@microsoft.com>
      Gerrit-CC: Markus Handell <hand...@chromium.org>
      Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
      Gerrit-CC: William Carr <wic...@microsoft.com>
      Gerrit-Attention: Christian Larson <chr...@microsoft.com>
      Gerrit-Comment-Date: Wed, 16 Jun 2021 17:48:33 +0000

      Christian Larson (Gerrit)

      unread,
      Jun 16, 2021, 7:46:57 PM6/16/21
      to Ilya Nikolaevskiy, alexmo...@chromium.org, chfreme...@chromium.org, creis...@chromium.org, feature-me...@chromium.org, jophba...@chromium.org, mfoltz...@chromium.org, navigation...@chromium.org, poscia...@chromium.org, Guido Urdaneta, William Carr, Tricium, Rafael Cintron, Chromium LUCI CQ, Markus Handell, chromium...@chromium.org, Rijubrata Bhaumik

      Attention is currently required from: Ilya Nikolaevskiy.

      View Change

      2 comments:

      • File media/capture/video/win/video_capture_device_factory_win.cc:


        • if (dxgi_device_manager_available) {
          if (is_nv12 && !seen_nv12) {

        •         // We want to favor NV12 so remove all previous non-NV12 formats
          // from consideration.


        • seen_nv12 = true;
          formats.clear();
          } else if (!is_nv12 && seen_nv12) {
          // If we've already seen NV12, do not consider any other type of
          // format. Only NV12 formats are worth our time.

        • Just because 1 NV12 type is supported does not mean that all nv12 types will match the resolution or framerate of the other types on the camera. For instance camera pipeline decodes MJPG types to NV12 in frameserver automatically to optimize sharing camera between multiple apps. Most USB cameras do not use MJPG for lower resolution types such as 480p and 320p since the usb bandwidth for USB2 is large enough to support YUY2 and that type would be skipped. Is this the intention?

      • File media/capture/video/win/video_capture_device_mf_win.cc:

        • Patch Set #9, Line 314: These

          Might make it more readable to extend the format struct to contain hw vs software or have a separate list for SW and HW

      To view, visit change 2944882. To unsubscribe, or for help writing mail filters, visit settings.

      Gerrit-Project: chromium/src
      Gerrit-Branch: main
      Gerrit-Change-Id: If81ca656be8217aa2f989f329c8693d1d7340785
      Gerrit-Change-Number: 2944882
      Gerrit-PatchSet: 9
      Gerrit-Owner: Ilya Nikolaevskiy <il...@chromium.org>
      Gerrit-Reviewer: Christian Larson <chr...@microsoft.com>
      Gerrit-Reviewer: Guido Urdaneta <gui...@chromium.org>
      Gerrit-Reviewer: Ilya Nikolaevskiy <il...@chromium.org>
      Gerrit-Reviewer: Rafael Cintron <rafael....@microsoft.com>
      Gerrit-CC: Markus Handell <hand...@chromium.org>
      Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
      Gerrit-CC: William Carr <wic...@microsoft.com>
      Gerrit-Attention: Ilya Nikolaevskiy <il...@chromium.org>
      Gerrit-Comment-Date: Wed, 16 Jun 2021 23:46:48 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: No
      Gerrit-MessageType: comment

      Ilya Nikolaevskiy (Gerrit)

      unread,
      Jun 17, 2021, 7:24:53 AM6/17/21
      to alexmo...@chromium.org, chfreme...@chromium.org, creis...@chromium.org, feature-me...@chromium.org, jophba...@chromium.org, mfoltz...@chromium.org, navigation...@chromium.org, poscia...@chromium.org, Guido Urdaneta, William Carr, Tricium, Christian Larson, Rafael Cintron, Chromium LUCI CQ, Markus Handell, chromium...@chromium.org, Rijubrata Bhaumik

      Attention is currently required from: Christian Larson.

      View Change

      2 comments:

      • File media/capture/video/win/video_capture_device_factory_win.cc:

        • Patch Set #9, Line 982:

              const bool is_nv12 = capture_format.pixel_format == PIXEL_FORMAT_NV12;
          if (dxgi_device_manager_available) {
          if (is_nv12 && !seen_nv12) {
          // We want to favor NV12 so remove all previous non-NV12 formats
          // from consideration.
          seen_nv12 = true;
          formats.clear();
          } else if (!is_nv12 && seen_nv12) {
          // If we've already seen NV12, do not consider any other type of
          // format. Only NV12 formats are worth our time.

        • Just because 1 NV12 type is supported does not mean that all nv12 types will match the resolution or […]

          Removed this code, since now regardless of the source format, the mf_sink_media_subtype is set to NV12 for hardware path. So in here actually all the formats would have NV12 if dxgi_device_manager_available==true.

          To make sure we prioritize NV12 source format, now there's a change in capability_list_win.cc, where source format is taken into account when sorting the capabilities.

      • File media/capture/video/win/video_capture_device_mf_win.cc:

        • Might make it more readable to extend the format struct to contain hw vs software or have a separate […]

          Done.

      To view, visit change 2944882. To unsubscribe, or for help writing mail filters, visit settings.

      Gerrit-Project: chromium/src
      Gerrit-Branch: main
      Gerrit-Change-Id: If81ca656be8217aa2f989f329c8693d1d7340785
      Gerrit-Change-Number: 2944882
      Gerrit-PatchSet: 10
      Gerrit-Owner: Ilya Nikolaevskiy <il...@chromium.org>
      Gerrit-Reviewer: Christian Larson <chr...@microsoft.com>
      Gerrit-Reviewer: Guido Urdaneta <gui...@chromium.org>
      Gerrit-Reviewer: Ilya Nikolaevskiy <il...@chromium.org>
      Gerrit-Reviewer: Rafael Cintron <rafael....@microsoft.com>
      Gerrit-CC: Markus Handell <hand...@chromium.org>
      Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
      Gerrit-CC: William Carr <wic...@microsoft.com>
      Gerrit-Attention: Christian Larson <chr...@microsoft.com>
      Gerrit-Comment-Date: Thu, 17 Jun 2021 11:24:39 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: No

      Christian Larson (Gerrit)

      unread,
      Jun 17, 2021, 2:15:13 PM6/17/21
      to Ilya Nikolaevskiy, alexmo...@chromium.org, chfreme...@chromium.org, creis...@chromium.org, feature-me...@chromium.org, jophba...@chromium.org, mfoltz...@chromium.org, navigation...@chromium.org, poscia...@chromium.org, Guido Urdaneta, William Carr, Tricium, Rafael Cintron, Chromium LUCI CQ, Markus Handell, chromium...@chromium.org, Rijubrata Bhaumik

      Attention is currently required from: Ilya Nikolaevskiy.

      View Change

      2 comments:

      • Patchset:

      • File media/capture/video/win/video_capture_device_factory_win.cc:

        • Patch Set #9, Line 982:

              const bool is_nv12 = capture_format.pixel_format == PIXEL_FORMAT_NV12;
          if (dxgi_device_manager_available) {
          if (is_nv12 && !seen_nv12) {
          // We want to favor NV12 so remove all previous non-NV12 formats
          // from consideration.
          seen_nv12 = true;
          formats.clear();
          } else if (!is_nv12 && seen_nv12) {
          // If we've already seen NV12, do not consider any other type of
          // format. Only NV12 formats are worth our time.

        • Removed this code, since now regardless of the source format, the mf_sink_media_subtype is set to NV […]

          Done

      To view, visit change 2944882. To unsubscribe, or for help writing mail filters, visit settings.

      Gerrit-Project: chromium/src
      Gerrit-Branch: main
      Gerrit-Change-Id: If81ca656be8217aa2f989f329c8693d1d7340785
      Gerrit-Change-Number: 2944882
      Gerrit-PatchSet: 11
      Gerrit-Owner: Ilya Nikolaevskiy <il...@chromium.org>
      Gerrit-Reviewer: Christian Larson <chr...@microsoft.com>
      Gerrit-Reviewer: Guido Urdaneta <gui...@chromium.org>
      Gerrit-Reviewer: Ilya Nikolaevskiy <il...@chromium.org>
      Gerrit-Reviewer: Rafael Cintron <rafael....@microsoft.com>
      Gerrit-CC: Markus Handell <hand...@chromium.org>
      Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
      Gerrit-CC: William Carr <wic...@microsoft.com>
      Gerrit-Attention: Ilya Nikolaevskiy <il...@chromium.org>
      Gerrit-Comment-Date: Thu, 17 Jun 2021 18:15:00 +0000
      Gerrit-HasComments: Yes
      Gerrit-Has-Labels: No
      Comment-In-Reply-To: Ilya Nikolaevskiy <il...@chromium.org>

      Ilya Nikolaevskiy (Gerrit)

      unread,
      Jun 17, 2021, 3:36:34 PM6/17/21
      to alexmo...@chromium.org, chfreme...@chromium.org, creis...@chromium.org, feature-me...@chromium.org, jophba...@chromium.org, mfoltz...@chromium.org, navigation...@chromium.org, poscia...@chromium.org, Guido Urdaneta, William Carr, Tricium, Christian Larson, Rafael Cintron, Chromium LUCI CQ, Markus Handell, chromium...@chromium.org, Rijubrata Bhaumik

      Attention is currently required from: Ilya Nikolaevskiy.

      Patch set 11:Commit-Queue +2

      View Change

        To view, visit change 2944882. To unsubscribe, or for help writing mail filters, visit settings.

        Gerrit-Project: chromium/src
        Gerrit-Branch: main
        Gerrit-Change-Id: If81ca656be8217aa2f989f329c8693d1d7340785
        Gerrit-Change-Number: 2944882
        Gerrit-PatchSet: 11
        Gerrit-Owner: Ilya Nikolaevskiy <il...@chromium.org>
        Gerrit-Reviewer: Christian Larson <chr...@microsoft.com>
        Gerrit-Reviewer: Guido Urdaneta <gui...@chromium.org>
        Gerrit-Reviewer: Ilya Nikolaevskiy <il...@chromium.org>
        Gerrit-Reviewer: Rafael Cintron <rafael....@microsoft.com>
        Gerrit-CC: Markus Handell <hand...@chromium.org>
        Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
        Gerrit-CC: William Carr <wic...@microsoft.com>
        Gerrit-Attention: Ilya Nikolaevskiy <il...@chromium.org>
        Gerrit-Comment-Date: Thu, 17 Jun 2021 19:36:10 +0000

        Chromium LUCI CQ (Gerrit)

        unread,
        Jun 17, 2021, 3:40:07 PM6/17/21
        to Ilya Nikolaevskiy, alexmo...@chromium.org, chfreme...@chromium.org, creis...@chromium.org, feature-me...@chromium.org, jophba...@chromium.org, mfoltz...@chromium.org, navigation...@chromium.org, poscia...@chromium.org, Guido Urdaneta, William Carr, Tricium, Christian Larson, Rafael Cintron, Markus Handell, chromium...@chromium.org, Rijubrata Bhaumik

        Chromium LUCI CQ submitted this change.

        View Change

        Approvals: Rafael Cintron: Looks good to me Guido Urdaneta: Looks good to me Ilya Nikolaevskiy: Commit
        Fix mediafoundation zero-copy capturer for cameras with no nv12

        - Don't use GMB pool if format is not NV12
        - Don't filter out non-nv12 buffers if there is no nv12 support

        Bug: 1214028
        Change-Id: If81ca656be8217aa2f989f329c8693d1d7340785
        Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2944882
        Commit-Queue: Ilya Nikolaevskiy <il...@chromium.org>
        Reviewed-by: Guido Urdaneta <gui...@chromium.org>
        Reviewed-by: Rafael Cintron <rafael....@microsoft.com>
        Cr-Commit-Position: refs/heads/master@{#893542}
        ---
        M content/browser/renderer_host/media/service_video_capture_device_launcher.cc
        M media/capture/video/win/capability_list_win.cc
        M media/capture/video/win/capability_list_win.h
        M media/capture/video/win/video_capture_device_factory_win.cc
        M media/capture/video/win/video_capture_device_factory_win_unittest.cc
        M media/capture/video/win/video_capture_device_mf_win.cc
        6 files changed, 184 insertions(+), 61 deletions(-)


        6 is the latest approved patch-set. The change was submitted with unreviewed changes in the following files: The name of the file: media/capture/video/win/capability_list_win.cc Insertions: 57, Deletions: 19. ``` @@ +12:13 @@ + #include "base/logging.h" @@ -19:21, +20:22 @@ - const VideoCaptureFormat& lhs, - const VideoCaptureFormat& rhs) { + const CapabilityWin& lhs, + const CapabilityWin& rhs) { @@ -27:29, +28:31 @@ - if (use_requested && lhs.pixel_format != rhs.pixel_format) { - if (lhs.pixel_format == requested.pixel_format) + if (use_requested && + lhs.supported_format.pixel_format != rhs.supported_format.pixel_format) { + if (lhs.supported_format.pixel_format == requested.pixel_format) @@ -30:31, +32:33 @@ - if (rhs.pixel_format == requested.pixel_format) + if (rhs.supported_format.pixel_format == requested.pixel_format) @@ -33:37, +35:39 @@ - const int diff_height_lhs = - std::abs(lhs.frame_size.height() - requested.frame_size.height()); - const int diff_height_rhs = - std::abs(rhs.frame_size.height() - requested.frame_size.height()); + const int diff_height_lhs = std::abs( + lhs.supported_format.frame_size.height() - requested.frame_size.height()); + const int diff_height_rhs = std::abs( + rhs.supported_format.frame_size.height() - requested.frame_size.height()); @@ -40:44, +42:46 @@ - const int diff_width_lhs = - std::abs(lhs.frame_size.width() - requested.frame_size.width()); - const int diff_width_rhs = - std::abs(rhs.frame_size.width() - requested.frame_size.width()); + const int diff_width_lhs = std::abs(lhs.supported_format.frame_size.width() - + requested.frame_size.width()); + const int diff_width_rhs = std::abs(rhs.supported_format.frame_size.width() - + requested.frame_size.width()); @@ -47:49, +49:53 @@ - const float diff_fps_lhs = std::fabs(lhs.frame_rate - requested.frame_rate); - const float diff_fps_rhs = std::fabs(rhs.frame_rate - requested.frame_rate); + const float diff_fps_lhs = + std::fabs(lhs.supported_format.frame_rate - requested.frame_rate); + const float diff_fps_rhs = + std::fabs(rhs.supported_format.frame_rate - requested.frame_rate); @@ -52:54, +56:93 @@ - return VideoCaptureFormat::ComparePixelFormatPreference(lhs.pixel_format, - rhs.pixel_format); + // Compare by internal pixel format to avoid conversions when possible. + if (lhs.source_pixel_format != rhs.source_pixel_format) { + // Choose the format with no conversion if possible. + if (lhs.source_pixel_format == requested.pixel_format) + return true; + if (rhs.source_pixel_format == requested.pixel_format) + return false; + // Prefer I420<->NV12 conversion over all. + if ((lhs.source_pixel_format == PIXEL_FORMAT_NV12 && + requested.pixel_format == PIXEL_FORMAT_I420) || + (lhs.source_pixel_format == PIXEL_FORMAT_I420 && + requested.pixel_format == PIXEL_FORMAT_NV12)) { + return true; + } + if ((rhs.source_pixel_format == PIXEL_FORMAT_NV12 && + requested.pixel_format == PIXEL_FORMAT_I420) || + (rhs.source_pixel_format == PIXEL_FORMAT_I420 && + requested.pixel_format == PIXEL_FORMAT_NV12)) { + return false; + } + // YUY2<->NV12 is the next best. + if ((lhs.source_pixel_format == PIXEL_FORMAT_NV12 && + requested.pixel_format == PIXEL_FORMAT_YUY2) || + (lhs.source_pixel_format == PIXEL_FORMAT_YUY2 && + requested.pixel_format == PIXEL_FORMAT_NV12)) { + return true; + } + if ((rhs.source_pixel_format == PIXEL_FORMAT_NV12 && + requested.pixel_format == PIXEL_FORMAT_YUY2) || + (rhs.source_pixel_format == PIXEL_FORMAT_YUY2 && + requested.pixel_format == PIXEL_FORMAT_NV12)) { + return false; + } + } + + return VideoCaptureFormat::ComparePixelFormatPreference( + lhs.supported_format.pixel_format, rhs.supported_format.pixel_format); @@ -64:66, +103:104 @@ - if (CompareCapability(requested, capability.supported_format, - best_match->supported_format)) { + if (CompareCapability(requested, capability, *best_match)) { ``` The name of the file: media/capture/video/win/capability_list_win.h Insertions: 12, Deletions: 4. ``` @@ -23:24, +23:25 @@ - stream_index(0) {} + stream_index(0), + source_pixel_format(format.pixel_format) {} @@ -32:33, +33:35 @@ - stream_index(0) {} + stream_index(0), + source_pixel_format(format.pixel_format) {} @@ -37:38, +39:41 @@ - int stream_index) + int stream_index, + VideoPixelFormat source_format) @@ -41:42, +44:46 @@ - stream_index(stream_index) {} + stream_index(stream_index), + source_pixel_format(source_format) {} @@ +55:59 @@ + + // |source_pixel_format| may differ from |supported_format| + // if MediaFoundation is used. + VideoPixelFormat source_pixel_format; ``` The name of the file: media/capture/video/win/video_capture_device_factory_win.cc Insertions: 0, Deletions: 16. ``` @@ -567:568, +567:568 @@ - DCHECK_GE(base::win::OSInfo::GetInstance()->version_number().build, 10240); + DCHECK_GE(base::win::OSInfo::GetInstance()->version_number().build, 10240u); @@ -941:942 @@ - bool seen_nv12 = false; @@ -979:994 @@ - // If we're using the hardware capture path, ignore non-NV12 pixel formats - // to prevent copies, if nv12 format is supported. - const bool is_nv12 = capture_format.pixel_format == PIXEL_FORMAT_NV12; - if (dxgi_device_manager_available) { - if (is_nv12 && !seen_nv12) { - // We want to favor NV12 so remove all previous NV12 formats - // from consideration - seen_nv12 = true; - formats.clear(); - } else if (!is_nv12 && seen_nv12) { - // If we've already seen NV12, do not consider any other type of - // format. Only NV12 formats are worth our time. - continue; - } - } ``` The name of the file: media/capture/video/win/video_capture_device_mf_win.cc Insertions: 81, Deletions: 29. ``` @@ +229:257 @@ + struct PixelFormatMap { + GUID mf_source_media_subtype; + VideoPixelFormat pixel_format; + }; + + VideoPixelFormat MfSubTypeToSourcePixelFormat( + const GUID& mf_source_media_subtype) { + static const PixelFormatMap kPixelFormatMap[] = { + + {MFVideoFormat_I420, PIXEL_FORMAT_I420}, + {MFVideoFormat_YUY2, PIXEL_FORMAT_YUY2}, + {MFVideoFormat_UYVY, PIXEL_FORMAT_UYVY}, + {MFVideoFormat_RGB24, PIXEL_FORMAT_RGB24}, + {MFVideoFormat_RGB32, PIXEL_FORMAT_XRGB}, + {MFVideoFormat_ARGB32, PIXEL_FORMAT_ARGB}, + {MFVideoFormat_MJPG, PIXEL_FORMAT_MJPEG}, + {MFVideoFormat_NV12, PIXEL_FORMAT_NV12}, + {MFVideoFormat_YV12, PIXEL_FORMAT_YV12}, + {GUID_ContainerFormatJpeg, PIXEL_FORMAT_MJPEG}}; + + for (const auto& kEntry : kPixelFormatMap) { + if (kEntry.mf_source_media_subtype == mf_source_media_subtype) { + return kEntry.pixel_format; + } + } + return PIXEL_FORMAT_UNKNOWN; + } + @@ -232:233, +260:262 @@ - VideoCaptureFormat* format) { + VideoCaptureFormat* format, + VideoPixelFormat* source_pixel_format) { @@ +278:279 @@ + *source_pixel_format = MfSubTypeToSourcePixelFormat(sub_type_guid); @@ +297:298 @@ + bool is_hardware_format; @@ -283:293, +314:323 @@ - // These may be overridden to be NV12 for hardware path below. - {MFVideoFormat_I420, MFVideoFormat_I420, PIXEL_FORMAT_I420}, - {MFVideoFormat_YUY2, MFVideoFormat_I420, PIXEL_FORMAT_I420}, - {MFVideoFormat_UYVY, MFVideoFormat_I420, PIXEL_FORMAT_I420}, - {MFVideoFormat_RGB24, MFVideoFormat_I420, PIXEL_FORMAT_I420}, - {MFVideoFormat_RGB32, MFVideoFormat_I420, PIXEL_FORMAT_I420}, - {MFVideoFormat_ARGB32, MFVideoFormat_I420, PIXEL_FORMAT_I420}, - {MFVideoFormat_MJPG, MFVideoFormat_I420, PIXEL_FORMAT_I420}, - {MFVideoFormat_NV12, MFVideoFormat_I420, PIXEL_FORMAT_I420}, - {MFVideoFormat_YV12, MFVideoFormat_I420, PIXEL_FORMAT_I420}, + {false, MFVideoFormat_I420, MFVideoFormat_I420, PIXEL_FORMAT_I420}, + {false, MFVideoFormat_YUY2, MFVideoFormat_I420, PIXEL_FORMAT_I420}, + {false, MFVideoFormat_UYVY, MFVideoFormat_I420, PIXEL_FORMAT_I420}, + {false, MFVideoFormat_RGB24, MFVideoFormat_I420, PIXEL_FORMAT_I420}, + {false, MFVideoFormat_RGB32, MFVideoFormat_I420, PIXEL_FORMAT_I420}, + {false, MFVideoFormat_ARGB32, MFVideoFormat_I420, PIXEL_FORMAT_I420}, + {false, MFVideoFormat_MJPG, MFVideoFormat_I420, PIXEL_FORMAT_I420}, + {false, MFVideoFormat_NV12, MFVideoFormat_I420, PIXEL_FORMAT_I420}, + {false, MFVideoFormat_YV12, MFVideoFormat_I420, PIXEL_FORMAT_I420}, @@ -297:301, +327:331 @@ - {kMediaSubTypeY16, kMediaSubTypeY16, PIXEL_FORMAT_Y16}, - {kMediaSubTypeZ16, kMediaSubTypeZ16, PIXEL_FORMAT_Y16}, - {kMediaSubTypeINVZ, kMediaSubTypeINVZ, PIXEL_FORMAT_Y16}, - {MFVideoFormat_D16, MFVideoFormat_D16, PIXEL_FORMAT_Y16}, + {false, kMediaSubTypeY16, kMediaSubTypeY16, PIXEL_FORMAT_Y16}, + {false, kMediaSubTypeZ16, kMediaSubTypeZ16, PIXEL_FORMAT_Y16}, + {false, kMediaSubTypeINVZ, kMediaSubTypeINVZ, PIXEL_FORMAT_Y16}, + {false, MFVideoFormat_D16, MFVideoFormat_D16, PIXEL_FORMAT_Y16}, @@ -303:304, +333:359 @@ - {GUID_ContainerFormatJpeg, GUID_ContainerFormatJpeg, PIXEL_FORMAT_MJPEG}}; + {false, GUID_ContainerFormatJpeg, GUID_ContainerFormatJpeg, + PIXEL_FORMAT_MJPEG}, + + // For hardware path we always convert to NV12, since it's the only + // supported by GMBs format. + {true, MFVideoFormat_I420, MFVideoFormat_NV12, PIXEL_FORMAT_NV12}, + {true, MFVideoFormat_YUY2, MFVideoFormat_NV12, PIXEL_FORMAT_NV12}, + {true, MFVideoFormat_UYVY, MFVideoFormat_NV12, PIXEL_FORMAT_NV12}, + {true, MFVideoFormat_RGB24, MFVideoFormat_NV12, PIXEL_FORMAT_NV12}, + {true, MFVideoFormat_RGB32, MFVideoFormat_NV12, PIXEL_FORMAT_NV12}, + {true, MFVideoFormat_ARGB32, MFVideoFormat_NV12, PIXEL_FORMAT_NV12}, + {true, MFVideoFormat_MJPG, MFVideoFormat_NV12, PIXEL_FORMAT_NV12}, + {true, MFVideoFormat_NV12, MFVideoFormat_NV12, PIXEL_FORMAT_NV12}, + {true, MFVideoFormat_YV12, MFVideoFormat_NV12, PIXEL_FORMAT_NV12}, + + // 16-bit formats can't be converted without loss of precision, + // so if leave an option to get Y16 pixel format even though the + // HW path won't be used for it. + {true, kMediaSubTypeY16, kMediaSubTypeY16, PIXEL_FORMAT_Y16}, + {true, kMediaSubTypeZ16, kMediaSubTypeZ16, PIXEL_FORMAT_Y16}, + {true, kMediaSubTypeINVZ, kMediaSubTypeINVZ, PIXEL_FORMAT_Y16}, + {true, MFVideoFormat_D16, MFVideoFormat_D16, PIXEL_FORMAT_Y16}, + + // Photo type + {true, GUID_ContainerFormatJpeg, GUID_ContainerFormatJpeg, + PIXEL_FORMAT_MJPEG}}; @@ -306:308, +361:364 @@ - if (kMediaFormatConfiguration.mf_source_media_subtype == - mf_source_media_subtype) { + if (kMediaFormatConfiguration.is_hardware_format == use_hardware_format && + kMediaFormatConfiguration.mf_source_media_subtype == + mf_source_media_subtype) { @@ -309:317 @@ - // If hardware path is preferred, configure IMFCaptureEngine to produce - // NV12 instead of I420. - if (use_hardware_format && - media_format_configuration->mf_sink_media_subtype == - MFVideoFormat_I420) { - *media_format_configuration = {mf_source_media_subtype, - MFVideoFormat_NV12, PIXEL_FORMAT_NV12}; - } @@ +842:843 @@ + VideoPixelFormat source_pixel_format; @@ -798:800, +847:850 @@ - &format)) - capabilities->emplace_back(media_type_index, format, stream_index); + &format, &source_pixel_format)) + capabilities->emplace_back(media_type_index, format, stream_index, + source_pixel_format); @@ +1187:1188 @@ + VideoPixelFormat source_format; @@ -1138:1139, +1189:1191 @@ - /*use_hardware_format=*/false, &format) + /*use_hardware_format=*/false, &format, + &source_format) ```

        To view, visit change 2944882. To unsubscribe, or for help writing mail filters, visit settings.

        Gerrit-Project: chromium/src
        Gerrit-Branch: main
        Gerrit-Change-Id: If81ca656be8217aa2f989f329c8693d1d7340785
        Gerrit-Change-Number: 2944882
        Gerrit-PatchSet: 12
        Gerrit-Owner: Ilya Nikolaevskiy <il...@chromium.org>
        Gerrit-Reviewer: Christian Larson <chr...@microsoft.com>
        Gerrit-Reviewer: Chromium LUCI CQ <chromiu...@luci-project-accounts.iam.gserviceaccount.com>
        Gerrit-Reviewer: Guido Urdaneta <gui...@chromium.org>
        Gerrit-Reviewer: Ilya Nikolaevskiy <il...@chromium.org>
        Gerrit-Reviewer: Rafael Cintron <rafael....@microsoft.com>
        Gerrit-CC: Markus Handell <hand...@chromium.org>
        Gerrit-CC: Rijubrata Bhaumik <rijubrat...@intel.com>
        Gerrit-CC: William Carr <wic...@microsoft.com>
        Gerrit-MessageType: merged
        Reply all
        Reply to author
        Forward
        0 new messages