[{"id":507,"web_url":"https://patchwork.libcamera.org/comment/507/","msgid":"<20190122235928.GG4127@bigcity.dyn.berto.se>","date":"2019-01-22T23:59:28","subject":"Re: [libcamera-devel] [PATCH] libcamera: v4l2device: Obtain device\n\tcapabilities","submitter":{"id":5,"url":"https://patchwork.libcamera.org/api/people/5/","name":"Niklas Söderlund","email":"niklas.soderlund@ragnatech.se"},"content":"Hi Kieran,\n\nThanks for your work.\n\nOn 2019-01-22 19:20:40 +0000, Kieran Bingham wrote:\n> The capabilities structure from the kernel can return capabilities of the\n> device, or potentially more specific device capabilities.\n> \n> Handle this with an inline function to return the correct value.\n> \n> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> ---\n> Jacopo,\n> \n> Sending this now to see what you think, as it might be useful to consider this\n> while you're making adjustments in the area.\n> \n> Because this code will be inlined, I expect the compiler to optimise sequential\n> uses of this operation where the underlying capabilities is not modified.\n> \n> Kieran \n> \n> \n>  src/libcamera/include/v4l2_device.h | 10 +++++++---\n>  src/libcamera/v4l2_device.cpp       |  7 +++++++\n>  2 files changed, 14 insertions(+), 3 deletions(-)\n> \n> diff --git a/src/libcamera/include/v4l2_device.h b/src/libcamera/include/v4l2_device.h\n> index b92e1f1c96c3..90d18b9f2260 100644\n> --- a/src/libcamera/include/v4l2_device.h\n> +++ b/src/libcamera/include/v4l2_device.h\n> @@ -26,10 +26,14 @@ struct V4L2Capability final : v4l2_capability {\n>  \t{\n>  \t\treturn reinterpret_cast<const char *>(v4l2_capability::bus_info);\n>  \t}\n> +\tunsigned int caps() const\n> +\t{\n> +\t\treturn capabilities & V4L2_CAP_DEVICE_CAPS ? device_caps : capabilities;\n> +\t}\n\nI can't make up my mind if I like this or not :-)\n\nI do see the need for it, something in my thinks this should be handled \nby a macro as to not make it part of the class itself, but maybe that is \njust a force of habit :-)\n\nIf you also have considered these things and still feel this is the way \nto go I won't object. I do however think the name is somewhat lacking if \nit's to be part of the class, how about spelling it out capabilities() ?  \n\n>  \n> -\tbool isCapture() const { return capabilities & V4L2_CAP_VIDEO_CAPTURE; }\n> -\tbool isOutput() const { return capabilities & V4L2_CAP_VIDEO_OUTPUT; }\n> -\tbool hasStreaming() const { return capabilities & V4L2_CAP_STREAMING; }\n> +\tbool isCapture() const { return caps() & V4L2_CAP_VIDEO_CAPTURE; }\n> +\tbool isOutput() const { return caps() & V4L2_CAP_VIDEO_OUTPUT; }\n> +\tbool hasStreaming() const { return caps() & V4L2_CAP_STREAMING; }\n>  };\n>  \n>  class MediaEntity;\n> diff --git a/src/libcamera/v4l2_device.cpp b/src/libcamera/v4l2_device.cpp\n> index 2b17fa1eb0e8..4d1cc5b6070f 100644\n> --- a/src/libcamera/v4l2_device.cpp\n> +++ b/src/libcamera/v4l2_device.cpp\n> @@ -49,6 +49,13 @@ LOG_DEFINE_CATEGORY(V4L2)\n>   * \\return The string containing the device location\n>   */\n>  \n> +/**\n> + * \\fn unsigned int V4L2Capability::caps()\n> + * \\brief Retrieve the capabilities of the device\n> + * \\return The device specific capabilities if V4L2_CAP_DEVICE_CAPS is set or\n> + * \t   driver capabilities otherwise\n> + */\n> +\n>  /**\n>   * \\fn bool V4L2Capability::isCapture()\n>   * \\brief Identify if the device is capable of capturing video\n> -- \n> 2.17.1\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-x244.google.com (mail-lj1-x244.google.com\n\t[IPv6:2a00:1450:4864:20::244])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 8123C60C78\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 23 Jan 2019 00:59:30 +0100 (CET)","by mail-lj1-x244.google.com with SMTP id k15-v6so292080ljc.8\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 22 Jan 2019 15:59:30 -0800 (PST)","from localhost (89-233-230-99.cust.bredband2.com. [89.233.230.99])\n\tby smtp.gmail.com with ESMTPSA id\n\tl21-v6sm225092lji.6.2019.01.22.15.59.28\n\t(version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256);\n\tTue, 22 Jan 2019 15:59:29 -0800 (PST)"],"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=6wrQNoGNe8T68YGMheIlk9tuSqF4ueDZEjHVQeR6rao=;\n\tb=vPekXEpYtP1vUocS5le84znUzCGhVorJRCDwrs0MIQBtilNz+gLKqcbFZHY3S7hFoy\n\tsvXVXVGWcPdxMKUU4l45OcMWiq6p6asqcUf2e2fZO1+pnqEnerStWKwEGSClCup53nnB\n\tZbstYqcbth0zCw6wqaQiIa4DXc6D0yESbKeWdlMcP1kYa7yanu3cBupXYEguT52Bvqww\n\tKhkP0eopzWUU/uXUmwtSTXhBgJn3M4zjJ4O7dUXtcnqKYfFd79yoGgPpkSL0jqIxx0Lm\n\tCf+cwMlfXGhY2cFHmDCoUYMbEkjxY30n4lVp0rTbgaxuJ31AsnZDnkul/6iUBOq13+D/\n\tjuOw==","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=6wrQNoGNe8T68YGMheIlk9tuSqF4ueDZEjHVQeR6rao=;\n\tb=fNRCyfwrHGILumVL67Iw2O5Tdvqhv3ihGWBYVJGQuoJFitzZhxAKyQvzgvlK4aPuTx\n\t453dRGod0ecMhOsyvMvFtd6wxPg6BkMfe6aByJueDLhb7mTbbMAiFWq/NZNeXiBvonaz\n\tFQFHKsxMyWPrJ32RLlIleqMCsKcTOgXF9dhn2HkfGYWQsuh61YQEI6VM9439eqtJ2GxL\n\toQk6g2d0I8HdxnNVsMBfQJEo7sK5AWm08z87FQG1G4Akx6Jyw4E/0jggi6SFRHP/jWxJ\n\ttT9s6GOhJcoEp8gKID+/6vXE2U5hBTxdFvCKzI0kJP/XV5EjEdRqs66sTOrReUE6avG1\n\tPOSw==","X-Gm-Message-State":"AJcUukdNP+iaeGLBVLTNFjx8pviBgoYqP3MDRPYJOcFK7TyNmjOKW9kW\n\tdQWFPdl4q9vSIgU3OWWsJV9J8w==","X-Google-Smtp-Source":"ALg8bN656za9JNf6oQ4bybni48/rpHpWfSZfjjETvWDExaerOgjq4zCdUVPq0T8gwYce7eLcAIUFAQ==","X-Received":"by 2002:a2e:9bc3:: with SMTP id w3-v6mr19888ljj.70.1548201569603;\n\tTue, 22 Jan 2019 15:59:29 -0800 (PST)","Date":"Wed, 23 Jan 2019 00:59:28 +0100","From":"Niklas =?iso-8859-1?q?S=F6derlund?= <niklas.soderlund@ragnatech.se>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"LibCamera Devel <libcamera-devel@lists.libcamera.org>","Message-ID":"<20190122235928.GG4127@bigcity.dyn.berto.se>","References":"<20190122192040.9719-1-kieran.bingham@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=iso-8859-1","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<20190122192040.9719-1-kieran.bingham@ideasonboard.com>","User-Agent":"Mutt/1.10.1 (2018-07-13)","Subject":"Re: [libcamera-devel] [PATCH] libcamera: v4l2device: Obtain device\n\tcapabilities","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.23","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":"Tue, 22 Jan 2019 23:59:30 -0000"}},{"id":527,"web_url":"https://patchwork.libcamera.org/comment/527/","msgid":"<cf18a18e-8e76-68d8-69b2-6350af7715b5@ideasonboard.com>","date":"2019-01-23T13:43:06","subject":"Re: [libcamera-devel] [PATCH] libcamera: v4l2device: Obtain device\n\tcapabilities","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Hi Niklas,\n\nOn 22/01/2019 23:59, Niklas Söderlund wrote:\n> Hi Kieran,\n> \n> Thanks for your work.\n> \n> On 2019-01-22 19:20:40 +0000, Kieran Bingham wrote:\n>> The capabilities structure from the kernel can return capabilities of the\n>> device, or potentially more specific device capabilities.\n>>\n>> Handle this with an inline function to return the correct value.\n>>\n>> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n>> ---\n>> Jacopo,\n>>\n>> Sending this now to see what you think, as it might be useful to consider this\n>> while you're making adjustments in the area.\n>>\n>> Because this code will be inlined, I expect the compiler to optimise sequential\n>> uses of this operation where the underlying capabilities is not modified.\n>>\n>> Kieran \n>>\n>>\n>>  src/libcamera/include/v4l2_device.h | 10 +++++++---\n>>  src/libcamera/v4l2_device.cpp       |  7 +++++++\n>>  2 files changed, 14 insertions(+), 3 deletions(-)\n>>\n>> diff --git a/src/libcamera/include/v4l2_device.h b/src/libcamera/include/v4l2_device.h\n>> index b92e1f1c96c3..90d18b9f2260 100644\n>> --- a/src/libcamera/include/v4l2_device.h\n>> +++ b/src/libcamera/include/v4l2_device.h\n>> @@ -26,10 +26,14 @@ struct V4L2Capability final : v4l2_capability {\n>>  \t{\n>>  \t\treturn reinterpret_cast<const char *>(v4l2_capability::bus_info);\n>>  \t}\n>> +\tunsigned int caps() const\n>> +\t{\n>> +\t\treturn capabilities & V4L2_CAP_DEVICE_CAPS ? device_caps : capabilities;\n>> +\t}\n> \n> I can't make up my mind if I like this or not :-)\n> \n> I do see the need for it, something in my thinks this should be handled \n> by a macro as to not make it part of the class itself, but maybe that is \n> just a force of habit :-)\n\nWhy would it not be part of the class (struct)? The purpose of creating\nthe struct V4L2Capabilities was to group all related code and helpers\ntogether in the namespace which applies to the object...\n\n\n\n> If you also have considered these things and still feel this is the way \n> to go I won't object. I do however think the name is somewhat lacking if \n> it's to be part of the class, how about spelling it out capabilities() ?  \n\nI didn't want to override the existing capabilities variable.\n\n'caps()' is expressed from V4L2_CAP_DEVICE_\"CAPS\"\n\nEqually, I don't want to name it 'device_caps()' because that would also\nconflict in the naming, but that would be more appropriate than\n'capabilities()'.\n\nIt could be marked 'private' and only used for these inline helpers, but\nI don't see any harm in keeping it public so that anyone accessing the\nstructure directly can also access the device specific 'caps' if relevant.\n\nIt's also shorter :-)\n\nYou know what - now I've tried it locally - it does sort of make sense\n(device_caps()).\n\nThese helpers want to parse the device_caps really, and if the\nV4L2_CAP_DEVICE_CAPS field is not set, then we fall back to the driver\ncapabilities.\n\nv2 to post...\n\n>> -\tbool isCapture() const { return capabilities & V4L2_CAP_VIDEO_CAPTURE; }\n>> -\tbool isOutput() const { return capabilities & V4L2_CAP_VIDEO_OUTPUT; }\n>> -\tbool hasStreaming() const { return capabilities & V4L2_CAP_STREAMING; }\n>> +\tbool isCapture() const { return caps() & V4L2_CAP_VIDEO_CAPTURE; }\n>> +\tbool isOutput() const { return caps() & V4L2_CAP_VIDEO_OUTPUT; }\n>> +\tbool hasStreaming() const { return caps() & V4L2_CAP_STREAMING; }\n>>  };\n>>  \n>>  class MediaEntity;\n>> diff --git a/src/libcamera/v4l2_device.cpp b/src/libcamera/v4l2_device.cpp\n>> index 2b17fa1eb0e8..4d1cc5b6070f 100644\n>> --- a/src/libcamera/v4l2_device.cpp\n>> +++ b/src/libcamera/v4l2_device.cpp\n>> @@ -49,6 +49,13 @@ LOG_DEFINE_CATEGORY(V4L2)\n>>   * \\return The string containing the device location\n>>   */\n>>  \n>> +/**\n>> + * \\fn unsigned int V4L2Capability::caps()\n>> + * \\brief Retrieve the capabilities of the device\n>> + * \\return The device specific capabilities if V4L2_CAP_DEVICE_CAPS is set or\n>> + * \t   driver capabilities otherwise\n>> + */\n>> +\n>>  /**\n>>   * \\fn bool V4L2Capability::isCapture()\n>>   * \\brief Identify if the device is capable of capturing video\n>> -- \n>> 2.17.1\n>>\n>> _______________________________________________\n>> libcamera-devel mailing list\n>> libcamera-devel@lists.libcamera.org\n>> https://lists.libcamera.org/listinfo/libcamera-devel\n>","headers":{"Return-Path":"<kieran.bingham@ideasonboard.com>","Received":["from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 45C7460C7D\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 23 Jan 2019 14:43:10 +0100 (CET)","from [192.168.0.21]\n\t(cpc89242-aztw30-2-0-cust488.18-1.cable.virginm.net [86.31.129.233])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id B1D5923D;\n\tWed, 23 Jan 2019 14:43:09 +0100 (CET)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1548250989;\n\tbh=SYCazETTZZWGEPwxBzm9z0Twg9IeCr0Iu3T9K8jaqK8=;\n\th=Reply-To:Subject:To:Cc:References:From:Date:In-Reply-To:From;\n\tb=ZSyS22UzTcwUISyCh3Vf3ONFfLPvxO0bT7S3V6J4pZDQ9EfcQQhjbxJqhsy7Ql0er\n\ttY66x/TpJ5HgRYA8VIOgz9Bs0V7tSJ4AUz3S9/eUJshP8J0Pxh+7lcQhG8EmqUzow9\n\ta7wpG0KzHo4yjkMbAWBmyNWeMQHUK7jYCPYUtnKs=","Reply-To":"kieran.bingham@ideasonboard.com","To":"=?utf-8?q?Niklas_S=C3=B6derlund?= <niklas.soderlund@ragnatech.se>","Cc":"LibCamera Devel <libcamera-devel@lists.libcamera.org>","References":"<20190122192040.9719-1-kieran.bingham@ideasonboard.com>\n\t<20190122235928.GG4127@bigcity.dyn.berto.se>","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Openpgp":"preference=signencrypt","Autocrypt":"addr=kieran.bingham@ideasonboard.com; keydata=\n\t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\n\tsbsRB8KNNvVXBOVNwko86rQqF9drZuw=","Organization":"Ideas on Board","Message-ID":"<cf18a18e-8e76-68d8-69b2-6350af7715b5@ideasonboard.com>","Date":"Wed, 23 Jan 2019 13:43:06 +0000","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101\n\tThunderbird/60.2.1","MIME-Version":"1.0","In-Reply-To":"<20190122235928.GG4127@bigcity.dyn.berto.se>","Content-Type":"text/plain; charset=utf-8","Content-Language":"en-GB","Content-Transfer-Encoding":"8bit","Subject":"Re: [libcamera-devel] [PATCH] libcamera: v4l2device: Obtain device\n\tcapabilities","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.23","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":"Wed, 23 Jan 2019 13:43:10 -0000"}}]