[{"id":31333,"web_url":"https://patchwork.libcamera.org/comment/31333/","msgid":"<drxhv5gfxa2m5rqlmzvvftkj37dx563owx3bea2raef7z5cjdr@l5yioygk6l7t>","date":"2024-09-24T12:26:51","subject":"Re: [PATCH v7 2/3] libcamera: Add face detection controls","submitter":{"id":143,"url":"https://patchwork.libcamera.org/api/people/143/","name":"Jacopo Mondi","email":"jacopo.mondi@ideasonboard.com"},"content":"Hi Harvey\n\nOn Tue, Sep 24, 2024 at 11:02:45AM GMT, Harvey Yang wrote:\n> From: Yudhistira Erlandinata <yerlandinata@chromium.org>\n>\n> Add FaceDetectMode, FaceDetectFaceRectangles, FaceDetectFaceScores,\n> and FaceDetectFaceLandmark. Also add ControlTypePoint for supporting\n> FaceDetectFaceLandmark.\n>\n> Signed-off-by: Yudhistira Erlandinata <yerlandinata@chromium.org>\n> Co-developed-by: becker hsieh <beckerh@chromium.org>\n> Co-developed-by: Harvey Yang <chenghaoyang@chromium.org>\n> ---\n>  include/libcamera/controls.h           |  6 ++\n>  include/libcamera/meson.build          |  3 +-\n>  src/libcamera/control_ids_android.yaml | 98 ++++++++++++++++++++++++++\n>  src/libcamera/control_ranges.yaml      |  4 +-\n>  src/libcamera/controls.cpp             |  6 ++\n>  5 files changed, 115 insertions(+), 2 deletions(-)\n>  create mode 100644 src/libcamera/control_ids_android.yaml\n>\n> diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h\n> index 7c2bb287..bf1b8609 100644\n> --- a/include/libcamera/controls.h\n> +++ b/include/libcamera/controls.h\n> @@ -34,6 +34,7 @@ enum ControlType {\n>  \tControlTypeString,\n>  \tControlTypeRectangle,\n>  \tControlTypeSize,\n> +\tControlTypePoint,\n>  };\n>\n>  namespace details {\n> @@ -87,6 +88,11 @@ struct control_type<Size> {\n>  \tstatic constexpr ControlType value = ControlTypeSize;\n>  };\n>\n> +template<>\n> +struct control_type<Point> {\n> +\tstatic constexpr ControlType value = ControlTypePoint;\n> +};\n> +\n>  template<typename T, std::size_t N>\n>  struct control_type<Span<T, N>> : public control_type<std::remove_cv_t<T>> {\n>  };\n> diff --git a/include/libcamera/meson.build b/include/libcamera/meson.build\n> index a969a95d..4fff14d2 100644\n> --- a/include/libcamera/meson.build\n> +++ b/include/libcamera/meson.build\n> @@ -34,6 +34,7 @@ libcamera_headers_install_dir = get_option('includedir') / libcamera_include_dir\n>\n>  controls_map = {\n>      'controls': {\n> +        'android': 'control_ids_android.yaml',\n>          'draft': 'control_ids_draft.yaml',\n>          'core': 'control_ids_core.yaml',\n>          'rpi/vc4': 'control_ids_rpi.yaml',\n> @@ -55,7 +56,7 @@ foreach mode, entry : controls_map\n>      files_list = []\n>      input_files = []\n>      foreach vendor, header : entry\n> -        if vendor != 'core' and vendor != 'draft'\n> +        if vendor != 'core' and vendor != 'draft' and vendor != 'android'\n>              if vendor not in pipelines\n>                  continue\n>              endif\n> diff --git a/src/libcamera/control_ids_android.yaml b/src/libcamera/control_ids_android.yaml\n> new file mode 100644\n> index 00000000..8b0d624f\n> --- /dev/null\n> +++ b/src/libcamera/control_ids_android.yaml\n\nAs Kieran said, this should be moved back to draft.\nI can do that if you want, no need to resend.\n\n> @@ -0,0 +1,98 @@\n> +# SPDX-License-Identifier: LGPL-2.1-or-later\n> +#\n> +# Copyright (C) 2024, Google Inc.\n> +#\n> +%YAML 1.1\n> +---\n> +# Unless otherwise stated, all controls are bi-directional, i.e. they can be\n> +# set through Request::controls() and returned out through Request::metadata().\n> +vendor: android\n> +controls:\n> +  - FaceDetectMode:\n> +      type: uint8_t\n> +      description: |\n> +        Reporting mode of face detection.\n> +\n> +        Currently identical to ANDROID_STATISTICS_FACE_DETECT_MODE.\n> +\n> +        \\sa FaceDetectFaceRectangles\n> +        \\sa FaceDetectFaceScores\n> +        \\sa FaceDetectFaceLandmarks\n> +        \\sa FaceDetectFaceIds\n> +\n> +      enum:\n> +        - name: FaceDetectModeOff\n> +          value: 0\n> +          description: |\n> +            Pipeline should not report face detection result.\n\nBlank line since you have it in the other block\n\n> +        - name: FaceDetectModeSimple\n> +          value: 1\n> +          description: |\n> +            Pipeline should at least report FaceDetectFaceRectangles and\n> +            FaceDetectFaceScores for each detected faces.\n\ns/faces/face\n\n> +            FaceDetectFaceLandmarks and FaceDetectFaceIds is optional.\n\ns/is/are\n\n> +\n> +        - name: FaceDetectModeFull\n> +          value: 2\n> +          description: |\n> +            Pipeline should report all face controls, including\n> +            FaceDetectFaceRectangles, FaceDetectFaceScores,\n> +            FaceDetectFaceLandmarks, and FaceDeteceFaceIds.\n> +\n> +  - FaceDetectFaceRectangles:\n> +      type: Rectangle\n> +      description: |\n> +        Boundary rectangles of the detected faces.\n> +        The number of values should be the number of faces reported in\n> +        FaceDetectFaceRectangles.\n> +\n> +        The FaceDetectFaceRectangles control can only be returned in metadata.\n> +\n> +        Currently identical to ANDROID_STATISTICS_FACE_RECTANGLES.\n> +\n> +      size: [n]\n> +\n> +  - FaceDetectFaceScores:\n> +      type: uint8_t\n> +      description: |\n> +        Confidence score of each of the detected faces by face detector.\n> +        The range of score is [0, 100].\n> +        The FaceDetectFaceScores control can only be returned in metadata.\n> +        The number of values should be the number of faces reported in\n> +        FaceDetectFaceRectangles.\n> +\n> +        Currently identical to ANDROID_STATISTICS_FACE_SCORES.\n> +\n> +      size: [n]\n> +\n> +  - FaceDetectFaceLandmarks:\n> +      type: Point\n> +      description: |\n> +        Array of human face landmark coordinates in format:\n> +        [..., left_eye_i, right_eye_i, mouth_i, left_eye_i+1, ...],\n> +        with i = index of face.\n> +        The number of values should be 3 * the number of faces reported in\n> +        FaceDetectFaceRectangles.\n> +\n> +        The FaceDetectFaceLandmarks control can only be returned in metadata.\n> +\n> +        Currently identical to ANDROID_STATISTICS_FACE_LANDMARKS.\n> +\n> +      size: [n]\n> +\n> +  - FaceDetectFaceIds:\n> +      type: int32_t\n> +      description: |\n> +        Each detected face is given a unique ID that is valid for as long as\n> +        the face is visible to the camera device. A face that leaves the field\n> +        of view and later returns may be assigned a new ID.\n> +        The number of values should be the number of faces reported in\n> +        FaceDetectFaceRectangles.\n> +\n> +        The FaceDetectFaceIds control can only be returned in metadata.\n> +\n> +        Currently identical to ANDROID_STATISTICS_FACE_IDS.\n> +\n> +      size: [n]\n> +\n> +...\n> diff --git a/src/libcamera/control_ranges.yaml b/src/libcamera/control_ranges.yaml\n> index d42447d0..9d406f10 100644\n> --- a/src/libcamera/control_ranges.yaml\n> +++ b/src/libcamera/control_ranges.yaml\n> @@ -13,6 +13,8 @@ ranges:\n>    draft: 10000\n>    # Raspberry Pi vendor controls\n>    rpi: 20000\n> -  # Next range starts at 30000\n> +  # Android metadata related controls\n> +  android: 30000\n> +  # Next range starts at 40000\n\nAnd I will also drop this change when moving controls back to draft\n\nReviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n\nThanks\n  j\n>\n>  ...\n> diff --git a/src/libcamera/controls.cpp b/src/libcamera/controls.cpp\n> index dba74404..c452e607 100644\n> --- a/src/libcamera/controls.cpp\n> +++ b/src/libcamera/controls.cpp\n> @@ -60,6 +60,7 @@ static constexpr size_t ControlValueSize[] = {\n>  \t[ControlTypeString]\t\t= sizeof(char),\n>  \t[ControlTypeRectangle]\t\t= sizeof(Rectangle),\n>  \t[ControlTypeSize]\t\t= sizeof(Size),\n> +\t[ControlTypePoint]\t\t= sizeof(Point),\n>  };\n>\n>  } /* namespace */\n> @@ -254,6 +255,11 @@ std::string ControlValue::toString() const\n>  \t\t\tstr += value->toString();\n>  \t\t\tbreak;\n>  \t\t}\n> +\t\tcase ControlTypePoint: {\n> +\t\t\tconst Point *value = reinterpret_cast<const Point *>(data);\n> +\t\t\tstr += value->toString();\n> +\t\t\tbreak;\n> +\t\t}\n>  \t\tcase ControlTypeNone:\n>  \t\tcase ControlTypeString:\n>  \t\t\tbreak;\n> --\n> 2.46.0.792.g87dc391469-goog\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 532DEC3257\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 24 Sep 2024 12:26:58 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 471E96350F;\n\tTue, 24 Sep 2024 14:26:57 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 0FB6863500\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 24 Sep 2024 14:26:55 +0200 (CEST)","from ideasonboard.com (93-61-96-190.ip145.fastwebnet.it\n\t[93.61.96.190])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 25B3D594;\n\tTue, 24 Sep 2024 14:25:28 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"KoGdaMKf\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1727180728;\n\tbh=VVicg3/ft02cTLs/zafMHQCgEE0/xglTkzAkIa7jGqU=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=KoGdaMKfoysbWv8ijSGECgPjd14vdLYZX2AiNQj7WjBuYx3x7iEv552WNeZQ6qcb3\n\tbMgxasU2qXPIxawiTZWlKjstiZZy1TK3tNkM0MTGhcpUbFZ8t7EnkHLqW70bnGo5Y9\n\tArIK9tzxEdLte0Km2puU3Np5wze8OHWfRUMkAPiU=","Date":"Tue, 24 Sep 2024 14:26:51 +0200","From":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","To":"Harvey Yang <chenghaoyang@chromium.org>","Cc":"libcamera-devel@lists.libcamera.org, \n\tYudhistira Erlandinata <yerlandinata@chromium.org>,\n\tbecker hsieh <beckerh@chromium.org>","Subject":"Re: [PATCH v7 2/3] libcamera: Add face detection controls","Message-ID":"<drxhv5gfxa2m5rqlmzvvftkj37dx563owx3bea2raef7z5cjdr@l5yioygk6l7t>","References":"<20240924110353.2025397-1-chenghaoyang@google.com>\n\t<20240924110353.2025397-3-chenghaoyang@google.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20240924110353.2025397-3-chenghaoyang@google.com>","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":31353,"web_url":"https://patchwork.libcamera.org/comment/31353/","msgid":"<CAC=wSGWwcQPChQXgGB8RUmzEU=_kjH-5QiyukAXwqMygLuwyAA@mail.gmail.com>","date":"2024-09-25T08:16:31","subject":"Re: [PATCH v7 2/3] libcamera: Add face detection controls","submitter":{"id":148,"url":"https://patchwork.libcamera.org/api/people/148/","name":"Cheng-Hao Yang","email":"chenghaoyang@google.com"},"content":"Hi Jacopo,\n\nOn Tue, Sep 24, 2024 at 8:27 PM Jacopo Mondi\n<jacopo.mondi@ideasonboard.com> wrote:\n>\n> Hi Harvey\n>\n> On Tue, Sep 24, 2024 at 11:02:45AM GMT, Harvey Yang wrote:\n> > From: Yudhistira Erlandinata <yerlandinata@chromium.org>\n> >\n> > Add FaceDetectMode, FaceDetectFaceRectangles, FaceDetectFaceScores,\n> > and FaceDetectFaceLandmark. Also add ControlTypePoint for supporting\n> > FaceDetectFaceLandmark.\n> >\n> > Signed-off-by: Yudhistira Erlandinata <yerlandinata@chromium.org>\n> > Co-developed-by: becker hsieh <beckerh@chromium.org>\n> > Co-developed-by: Harvey Yang <chenghaoyang@chromium.org>\n> > ---\n> >  include/libcamera/controls.h           |  6 ++\n> >  include/libcamera/meson.build          |  3 +-\n> >  src/libcamera/control_ids_android.yaml | 98 ++++++++++++++++++++++++++\n> >  src/libcamera/control_ranges.yaml      |  4 +-\n> >  src/libcamera/controls.cpp             |  6 ++\n> >  5 files changed, 115 insertions(+), 2 deletions(-)\n> >  create mode 100644 src/libcamera/control_ids_android.yaml\n> >\n> > diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h\n> > index 7c2bb287..bf1b8609 100644\n> > --- a/include/libcamera/controls.h\n> > +++ b/include/libcamera/controls.h\n> > @@ -34,6 +34,7 @@ enum ControlType {\n> >       ControlTypeString,\n> >       ControlTypeRectangle,\n> >       ControlTypeSize,\n> > +     ControlTypePoint,\n> >  };\n> >\n> >  namespace details {\n> > @@ -87,6 +88,11 @@ struct control_type<Size> {\n> >       static constexpr ControlType value = ControlTypeSize;\n> >  };\n> >\n> > +template<>\n> > +struct control_type<Point> {\n> > +     static constexpr ControlType value = ControlTypePoint;\n> > +};\n> > +\n> >  template<typename T, std::size_t N>\n> >  struct control_type<Span<T, N>> : public control_type<std::remove_cv_t<T>> {\n> >  };\n> > diff --git a/include/libcamera/meson.build b/include/libcamera/meson.build\n> > index a969a95d..4fff14d2 100644\n> > --- a/include/libcamera/meson.build\n> > +++ b/include/libcamera/meson.build\n> > @@ -34,6 +34,7 @@ libcamera_headers_install_dir = get_option('includedir') / libcamera_include_dir\n> >\n> >  controls_map = {\n> >      'controls': {\n> > +        'android': 'control_ids_android.yaml',\n> >          'draft': 'control_ids_draft.yaml',\n> >          'core': 'control_ids_core.yaml',\n> >          'rpi/vc4': 'control_ids_rpi.yaml',\n> > @@ -55,7 +56,7 @@ foreach mode, entry : controls_map\n> >      files_list = []\n> >      input_files = []\n> >      foreach vendor, header : entry\n> > -        if vendor != 'core' and vendor != 'draft'\n> > +        if vendor != 'core' and vendor != 'draft' and vendor != 'android'\n> >              if vendor not in pipelines\n> >                  continue\n> >              endif\n> > diff --git a/src/libcamera/control_ids_android.yaml b/src/libcamera/control_ids_android.yaml\n> > new file mode 100644\n> > index 00000000..8b0d624f\n> > --- /dev/null\n> > +++ b/src/libcamera/control_ids_android.yaml\n>\n> As Kieran said, this should be moved back to draft.\n> I can do that if you want, no need to resend.\n\nNo worries. I'll upload another version.\n\n>\n> > @@ -0,0 +1,98 @@\n> > +# SPDX-License-Identifier: LGPL-2.1-or-later\n> > +#\n> > +# Copyright (C) 2024, Google Inc.\n> > +#\n> > +%YAML 1.1\n> > +---\n> > +# Unless otherwise stated, all controls are bi-directional, i.e. they can be\n> > +# set through Request::controls() and returned out through Request::metadata().\n> > +vendor: android\n> > +controls:\n> > +  - FaceDetectMode:\n> > +      type: uint8_t\n> > +      description: |\n> > +        Reporting mode of face detection.\n> > +\n> > +        Currently identical to ANDROID_STATISTICS_FACE_DETECT_MODE.\n> > +\n> > +        \\sa FaceDetectFaceRectangles\n> > +        \\sa FaceDetectFaceScores\n> > +        \\sa FaceDetectFaceLandmarks\n> > +        \\sa FaceDetectFaceIds\n> > +\n> > +      enum:\n> > +        - name: FaceDetectModeOff\n> > +          value: 0\n> > +          description: |\n> > +            Pipeline should not report face detection result.\n>\n> Blank line since you have it in the other block\n\nDone\n\n>\n> > +        - name: FaceDetectModeSimple\n> > +          value: 1\n> > +          description: |\n> > +            Pipeline should at least report FaceDetectFaceRectangles and\n> > +            FaceDetectFaceScores for each detected faces.\n>\n> s/faces/face\n\nRight, updated.\n\n>\n> > +            FaceDetectFaceLandmarks and FaceDetectFaceIds is optional.\n>\n> s/is/are\n\nThanks!\n\n>\n> > +\n> > +        - name: FaceDetectModeFull\n> > +          value: 2\n> > +          description: |\n> > +            Pipeline should report all face controls, including\n> > +            FaceDetectFaceRectangles, FaceDetectFaceScores,\n> > +            FaceDetectFaceLandmarks, and FaceDeteceFaceIds.\n> > +\n> > +  - FaceDetectFaceRectangles:\n> > +      type: Rectangle\n> > +      description: |\n> > +        Boundary rectangles of the detected faces.\n> > +        The number of values should be the number of faces reported in\n> > +        FaceDetectFaceRectangles.\n> > +\n> > +        The FaceDetectFaceRectangles control can only be returned in metadata.\n> > +\n> > +        Currently identical to ANDROID_STATISTICS_FACE_RECTANGLES.\n> > +\n> > +      size: [n]\n> > +\n> > +  - FaceDetectFaceScores:\n> > +      type: uint8_t\n> > +      description: |\n> > +        Confidence score of each of the detected faces by face detector.\n> > +        The range of score is [0, 100].\n> > +        The FaceDetectFaceScores control can only be returned in metadata.\n> > +        The number of values should be the number of faces reported in\n> > +        FaceDetectFaceRectangles.\n> > +\n> > +        Currently identical to ANDROID_STATISTICS_FACE_SCORES.\n> > +\n> > +      size: [n]\n> > +\n> > +  - FaceDetectFaceLandmarks:\n> > +      type: Point\n> > +      description: |\n> > +        Array of human face landmark coordinates in format:\n> > +        [..., left_eye_i, right_eye_i, mouth_i, left_eye_i+1, ...],\n> > +        with i = index of face.\n> > +        The number of values should be 3 * the number of faces reported in\n> > +        FaceDetectFaceRectangles.\n> > +\n> > +        The FaceDetectFaceLandmarks control can only be returned in metadata.\n> > +\n> > +        Currently identical to ANDROID_STATISTICS_FACE_LANDMARKS.\n> > +\n> > +      size: [n]\n> > +\n> > +  - FaceDetectFaceIds:\n> > +      type: int32_t\n> > +      description: |\n> > +        Each detected face is given a unique ID that is valid for as long as\n> > +        the face is visible to the camera device. A face that leaves the field\n> > +        of view and later returns may be assigned a new ID.\n> > +        The number of values should be the number of faces reported in\n> > +        FaceDetectFaceRectangles.\n> > +\n> > +        The FaceDetectFaceIds control can only be returned in metadata.\n> > +\n> > +        Currently identical to ANDROID_STATISTICS_FACE_IDS.\n> > +\n> > +      size: [n]\n> > +\n> > +...\n> > diff --git a/src/libcamera/control_ranges.yaml b/src/libcamera/control_ranges.yaml\n> > index d42447d0..9d406f10 100644\n> > --- a/src/libcamera/control_ranges.yaml\n> > +++ b/src/libcamera/control_ranges.yaml\n> > @@ -13,6 +13,8 @@ ranges:\n> >    draft: 10000\n> >    # Raspberry Pi vendor controls\n> >    rpi: 20000\n> > -  # Next range starts at 30000\n> > +  # Android metadata related controls\n> > +  android: 30000\n> > +  # Next range starts at 40000\n>\n> And I will also drop this change when moving controls back to draft\n\nSure :)\n\n\n>\n> Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n>\n> Thanks\n>   j\n> >\n> >  ...\n> > diff --git a/src/libcamera/controls.cpp b/src/libcamera/controls.cpp\n> > index dba74404..c452e607 100644\n> > --- a/src/libcamera/controls.cpp\n> > +++ b/src/libcamera/controls.cpp\n> > @@ -60,6 +60,7 @@ static constexpr size_t ControlValueSize[] = {\n> >       [ControlTypeString]             = sizeof(char),\n> >       [ControlTypeRectangle]          = sizeof(Rectangle),\n> >       [ControlTypeSize]               = sizeof(Size),\n> > +     [ControlTypePoint]              = sizeof(Point),\n> >  };\n> >\n> >  } /* namespace */\n> > @@ -254,6 +255,11 @@ std::string ControlValue::toString() const\n> >                       str += value->toString();\n> >                       break;\n> >               }\n> > +             case ControlTypePoint: {\n> > +                     const Point *value = reinterpret_cast<const Point *>(data);\n> > +                     str += value->toString();\n> > +                     break;\n> > +             }\n> >               case ControlTypeNone:\n> >               case ControlTypeString:\n> >                       break;\n> > --\n> > 2.46.0.792.g87dc391469-goog\n> >\n\n\n\n--\nBR,\nHarvey Yang","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id A2CC9C0F1B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 25 Sep 2024 08:17:09 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 63E696350F;\n\tWed, 25 Sep 2024 10:17:09 +0200 (CEST)","from mail-ed1-x52c.google.com (mail-ed1-x52c.google.com\n\t[IPv6:2a00:1450:4864:20::52c])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 64CF9634F4\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 25 Sep 2024 10:17:08 +0200 (CEST)","by mail-ed1-x52c.google.com with SMTP id\n\t4fb4d7f45d1cf-5c71f2311f5so12326a12.1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 25 Sep 2024 01:17:08 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=google.com header.i=@google.com\n\theader.b=\"RVEfKs0Q\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=google.com; s=20230601; t=1727252228; x=1727857028;\n\tdarn=lists.libcamera.org; \n\th=content-transfer-encoding:cc:to:subject:message-id:date:from\n\t:in-reply-to:references:mime-version:from:to:cc:subject:date\n\t:message-id:reply-to;\n\tbh=CtLfdVeM0JTNHncArhOIdCro7L/je+f+7sZoUwq1cHU=;\n\tb=RVEfKs0QHCL5Yh93zxI0sCHf5Yt9rUyx4X7+5YXOZ7jZCsEjNgXdL3UFNVTM2fa0RA\n\tOfSdHU129evebiS4Ru9q4ACDxQL3ZGSj8T119ZHFybcDUPQPIk0sgsF223/KgZxRER7D\n\tuh9GBG+fSABZtUcnROZHXiP2tqQnLAG6tKWRlQlyR0p+auRq+Vpn3t6ooU7/zQXpu6mw\n\t6/woJICjIVrmA4cSrXX3zDBtw3XH0wkbKuxgMwybBsrEaSDJ9tABp5akKcpEixus9t88\n\t+M4WDFmsT1ioyGsuq2A5LYG5d/1aCpW1ymBKG9ibE016qqJ2g3OEGMme/77mcoMseNiV\n\tzZWQ==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1727252228; x=1727857028;\n\th=content-transfer-encoding:cc:to:subject:message-id:date:from\n\t:in-reply-to:references:mime-version:x-gm-message-state:from:to:cc\n\t:subject:date:message-id:reply-to;\n\tbh=CtLfdVeM0JTNHncArhOIdCro7L/je+f+7sZoUwq1cHU=;\n\tb=Zliv9wjoQaeXKQtRBVNvqt385HE04ZKfvHlDns9kpqiNCvzjtU7Wlfp1jg0kvxRaOr\n\t/pv/8nX6nVN5bnaOMxTzk2O2dQkI+9RLhc0OB1sc0p9IA1fvHlIvxOfMAXi+UPr/toqo\n\tnlWppLLuS9ZEL2tXPIjXtKiMIPBgFDm/SNwY4GNXwv5wqQV0wD5yk+StKuFIWvtRaE3k\n\tTvykAyIxniY73A9JgrQbiOVyLsExy71ixx6uaYsftBfveEzQEpKqU7Bw+ARPdhGAvpVE\n\t0okyAr6bcBcQ1Zqfn8hDxRAjSR9BCgSqL8ay/oL4Zo6zppvKiB99/kTj+VwD8UPnjbs0\n\tI9dg==","X-Forwarded-Encrypted":"i=1;\n\tAJvYcCW3awUNkCpuOV9GccTtsYEj3EiwLQPUYP49jEYTIomiQSmR7pQ0OqB5VRBcHSV9Jo4kk2xmdLhe3iQIA4Uj5g8=@lists.libcamera.org","X-Gm-Message-State":"AOJu0Yw38GXgX9FeKdDo84LoT1LaGgetrL9R6sXAnSr9d+3j3aidBp9j\n\t/YxVnjbtZP5NzYrqVAj6KkVMwPB2gawR3NqpCTEvLrGu6MLACk9u7lWov0JvIo1wxx1LKl5p0qw\n\tLRV5f3CFZkNcHZNN7n57kEO3dF7ASOly1KRQV","X-Google-Smtp-Source":"AGHT+IG+mm2PEHmQ4TH5iSTw9HSE/PCGtkWDkHkeItEEeXzd5DD61+Cx9yuhZsx4NflH6Amb+QxezVwCf1c9qkRNpLE=","X-Received":"by 2002:a05:6402:210a:b0:5c2:5641:af79 with SMTP id\n\t4fb4d7f45d1cf-5c720f4fc76mr239376a12.0.1727252227634; Wed, 25 Sep 2024\n\t01:17:07 -0700 (PDT)","MIME-Version":"1.0","References":"<20240924110353.2025397-1-chenghaoyang@google.com>\n\t<20240924110353.2025397-3-chenghaoyang@google.com>\n\t<drxhv5gfxa2m5rqlmzvvftkj37dx563owx3bea2raef7z5cjdr@l5yioygk6l7t>","In-Reply-To":"<drxhv5gfxa2m5rqlmzvvftkj37dx563owx3bea2raef7z5cjdr@l5yioygk6l7t>","From":"Cheng-Hao Yang <chenghaoyang@google.com>","Date":"Wed, 25 Sep 2024 16:16:31 +0800","Message-ID":"<CAC=wSGWwcQPChQXgGB8RUmzEU=_kjH-5QiyukAXwqMygLuwyAA@mail.gmail.com>","Subject":"Re: [PATCH v7 2/3] libcamera: Add face detection controls","To":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","Cc":"Harvey Yang <chenghaoyang@chromium.org>,\n\tlibcamera-devel@lists.libcamera.org, \n\tYudhistira Erlandinata <yerlandinata@chromium.org>,\n\tbecker hsieh <beckerh@chromium.org>","Content-Type":"text/plain; charset=\"UTF-8\"","Content-Transfer-Encoding":"quoted-printable","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]