[{"id":2880,"web_url":"https://patchwork.libcamera.org/comment/2880/","msgid":"<20191013152706.GL23166@bigcity.dyn.berto.se>","date":"2019-10-13T15:27:06","subject":"Re: [libcamera-devel] [PATCH v2 03/14] libcamera: control_ids:\n\tGenerate map of all supported controls","submitter":{"id":5,"url":"https://patchwork.libcamera.org/api/people/5/","name":"Niklas Söderlund","email":"niklas.soderlund@ragnatech.se"},"content":"Hi Laurent,\n\nThanks for your work.\n\nOn 2019-10-12 21:43:56 +0300, Laurent Pinchart wrote:\n> In order to deserialise a ControlList, we will need to lookup ControlId\n> instances based on their numerical ID. Generate a global map from the\n> controls definitions to support such a lookup.\n> \n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\nReviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n\n> ---\n> Changes since v1:\n> \n> - Add ControlIdMap type\n> ---\n>  include/libcamera/control_ids.h.in | 2 ++\n>  include/libcamera/controls.h       | 1 +\n>  src/libcamera/control_ids.cpp.in   | 7 +++++++\n>  src/libcamera/controls.cpp         | 9 +++++++++\n>  src/libcamera/gen-controls.py      | 3 +++\n>  5 files changed, 22 insertions(+)\n> \n> diff --git a/include/libcamera/control_ids.h.in b/include/libcamera/control_ids.h.in\n> index 1d0bc791e559..6ff0e4186983 100644\n> --- a/include/libcamera/control_ids.h.in\n> +++ b/include/libcamera/control_ids.h.in\n> @@ -24,6 +24,8 @@ ${ids}\n>  \n>  ${controls}\n>  \n> +extern const ControlIdMap controls;\n> +\n>  } /* namespace controls */\n>  \n>  } /* namespace libcamera */\n> diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h\n> index 90426753f40f..d8acd800b143 100644\n> --- a/include/libcamera/controls.h\n> +++ b/include/libcamera/controls.h\n> @@ -111,6 +111,7 @@ private:\n>  \tControlValue max_;\n>  };\n>  \n> +using ControlIdMap = std::unordered_map<unsigned int, const ControlId *>;\n>  using ControlInfoMap = std::unordered_map<const ControlId *, ControlRange>;\n>  \n>  class ControlList\n> diff --git a/src/libcamera/control_ids.cpp.in b/src/libcamera/control_ids.cpp.in\n> index dd5433820a8b..99c511d0e712 100644\n> --- a/src/libcamera/control_ids.cpp.in\n> +++ b/src/libcamera/control_ids.cpp.in\n> @@ -31,6 +31,13 @@ ${controls_doc}\n>  ${controls_def}\n>  #endif\n>  \n> +/**\n> + * \\brief List of all supported libcamera controls\n> + */\n> +extern const ControlIdMap controls {\n> +${controls_map}\n> +};\n> +\n>  } /* namespace controls */\n>  \n>  } /* namespace libcamera */\n> diff --git a/src/libcamera/controls.cpp b/src/libcamera/controls.cpp\n> index f3260edce0bc..70c1af481af2 100644\n> --- a/src/libcamera/controls.cpp\n> +++ b/src/libcamera/controls.cpp\n> @@ -355,6 +355,15 @@ std::string ControlRange::toString() const\n>  \treturn ss.str();\n>  }\n>  \n> +/**\n> + * \\typedef ControlIdMap\n> + * \\brief A map of numerical control ID to ControlId\n> + *\n> + * The map is used by ControlList instances to access controls by numerical\n> + * IDs. A global map of all libcamera controls is provided by\n> + * controls::controls.\n> + */\n> +\n>  /**\n>   * \\typedef ControlInfoMap\n>   * \\brief A map of ControlId to ControlRange\n> diff --git a/src/libcamera/gen-controls.py b/src/libcamera/gen-controls.py\n> index a3e52fb36f7a..940386cc68c8 100755\n> --- a/src/libcamera/gen-controls.py\n> +++ b/src/libcamera/gen-controls.py\n> @@ -25,6 +25,7 @@ ${description}\n>  \n>      ctrls_doc = []\n>      ctrls_def = []\n> +    ctrls_map = []\n>  \n>      for ctrl in controls:\n>          name, ctrl = ctrl.popitem()\n> @@ -43,10 +44,12 @@ ${description}\n>  \n>          ctrls_doc.append(doc_template.substitute(info))\n>          ctrls_def.append(def_template.substitute(info))\n> +        ctrls_map.append('\\t{ ' + id_name + ', &' + name + ' },')\n>  \n>      return {\n>          'controls_doc': '\\n\\n'.join(ctrls_doc),\n>          'controls_def': '\\n'.join(ctrls_def),\n> +        'controls_map': '\\n'.join(ctrls_map),\n>      }\n>  \n>  \n> -- \n> Regards,\n> \n> Laurent Pinchart\n> \n> _______________________________________________\n> libcamera-devel mailing list\n> libcamera-devel@lists.libcamera.org\n> https://lists.libcamera.org/listinfo/libcamera-devel","headers":{"Return-Path":"<niklas.soderlund@ragnatech.se>","Received":["from mail-lj1-x235.google.com (mail-lj1-x235.google.com\n\t[IPv6:2a00:1450:4864:20::235])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 7B92361562\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSun, 13 Oct 2019 17:27:07 +0200 (CEST)","by mail-lj1-x235.google.com with SMTP id 7so14176768ljw.7\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSun, 13 Oct 2019 08:27:07 -0700 (PDT)","from localhost (h-93-159.A463.priv.bahnhof.se. [46.59.93.159])\n\tby smtp.gmail.com with ESMTPSA id\n\tp27sm3562265lfo.95.2019.10.13.08.27.06\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tSun, 13 Oct 2019 08:27:06 -0700 (PDT)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=ragnatech-se.20150623.gappssmtp.com; s=20150623;\n\th=date:from:to:cc:subject:message-id:references:mime-version\n\t:content-disposition:content-transfer-encoding:in-reply-to\n\t:user-agent; bh=L7YQKqsbNlWKwC4qAqg9jeWaALAlx7uPMDsuD3SMYnc=;\n\tb=KqwajbVTehWcIw/ElDdbHYp1qeG0Mrn/zXuTWk10ooMoro8Nd0VNKV1wfcHqlct15b\n\tiflM1KOlJxvt2oiTRCxj0vrQqYna3v7jGH4VHb9np9rG8OMoX+JIFw4c1clRVns/eOHo\n\tWcQ/OVlANVqsdJnkX+/ZPMzGUY+mt8fxGonVc2Cvpfere3gTnTYEWXqAcJrVU1rtica3\n\t5T3OFhR9kbRwHYAbL1MkrPgS907aU8PAKb1TG37bg9xOvBioStFzTAAVqH5B8eFFikNJ\n\tg2KsJBaaA01c9K61yk6w/DW3HsUU10D8SSa+k9ALprwcmJPZW3kQD1s3LsguIGYjWN60\n\tER9Q==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:date:from:to:cc:subject:message-id:references\n\t:mime-version:content-disposition:content-transfer-encoding\n\t:in-reply-to:user-agent;\n\tbh=L7YQKqsbNlWKwC4qAqg9jeWaALAlx7uPMDsuD3SMYnc=;\n\tb=lAYKYh2Ot7/SPi6xdPKSwMdbH6woo7XjgynMRwF4wBEpRAOJizIOunbRIXf1dMcNmU\n\tz3+5rcA/8gNTNwctO3UbJNzhW0AfcHwnCJR6u4qCabGOEH8rnP5xydpS+FyyEQt3LBRF\n\ty1J+AW4cNDgHthe/OQP05yG/uiJQNS2hliDcR9LZOr9N6+ubvIgStGKp7KvHPWgTRs7N\n\tYjbVJt3YX1XPksxONiqX3XcL0i+8JzoVReRzy4tOhOVKTSDLjEsCGjoy0tn3S6frtrCv\n\twKAsg/IJuXlFZlxvxr5gE6cst1K5/byDMGb2CNM1AhSXn7EpoyJdpJ98+kcr+nleoWoB\n\tLJLg==","X-Gm-Message-State":"APjAAAVyG/I6rCuBHDxxkscKkKpSc0RgRvVTjJXqHFlQGu1qMntbCtT/\n\t14yS03bu92sXNvYu/4A4lzOTFuqwMjs=","X-Google-Smtp-Source":"APXvYqxcae/lYQXD+up8XFWyfeReyunHu3bo62A3QH/BRzp29zrPQIWDNGjBAXfUUaQnSgjybEu2Bg==","X-Received":"by 2002:a2e:9981:: with SMTP id\n\tw1mr15342547lji.205.1570980426908; \n\tSun, 13 Oct 2019 08:27:06 -0700 (PDT)","Date":"Sun, 13 Oct 2019 17:27:06 +0200","From":"Niklas =?iso-8859-1?q?S=F6derlund?= <niklas.soderlund@ragnatech.se>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Message-ID":"<20191013152706.GL23166@bigcity.dyn.berto.se>","References":"<20191012184407.31684-1-laurent.pinchart@ideasonboard.com>\n\t<20191012184407.31684-4-laurent.pinchart@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=iso-8859-1","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<20191012184407.31684-4-laurent.pinchart@ideasonboard.com>","User-Agent":"Mutt/1.12.1 (2019-06-15)","Subject":"Re: [libcamera-devel] [PATCH v2 03/14] libcamera: control_ids:\n\tGenerate map of all supported controls","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>","X-List-Received-Date":"Sun, 13 Oct 2019 15:27:07 -0000"}}]