[{"id":11478,"web_url":"https://patchwork.libcamera.org/comment/11478/","msgid":"<20200722103531.bycrlhyds4ixmbho@uno.localdomain>","date":"2020-07-22T10:35:31","subject":"Re: [libcamera-devel] [RFC PATCH 3/6] android: camera_device: Add\n\tANDROID_JPEG_MAX_SIZE","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Kieran\n\nOn Tue, Jul 21, 2020 at 11:01:23PM +0100, Kieran Bingham wrote:\n> Provide a key for ANDROID_JPEG_MAX_SIZE. The value of 13MB is currently\n> arbitrary, but taken from the USB Camera HAL in CrOS platform2:\n>\n>   // android.jpeg\n>   update_static(ANDROID_JPEG_MAX_SIZE, int32_t{13 << 20});\n>   update_request(ANDROID_JPEG_QUALITY, uint8_t{90});\n>   update_request(ANDROID_JPEG_THUMBNAIL_QUALITY, uint8_t{90});\n>   update_request(ANDROID_JPEG_ORIENTATION, int32_t{0});\n>\n> Note: The metadata entries/size updates are probably wrong, and should\n> be automated.\n\nWhat does make you think so ?\n\n>\n> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> ---\n>  src/android/camera_device.cpp | 10 +++++++---\n>  1 file changed, 7 insertions(+), 3 deletions(-)\n>\n> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> index 3f3d7857f0ab..56652ac57676 100644\n> --- a/src/android/camera_device.cpp\n> +++ b/src/android/camera_device.cpp\n> @@ -407,10 +407,10 @@ std::tuple<uint32_t, uint32_t> CameraDevice::calculateStaticMetadataSize()\n>  {\n>  \t/*\n>  \t * \\todo Keep this in sync with the actual number of entries.\n> -\t * Currently: 50 entries, 647 bytes of static metadata\n> +\t * Currently: 51 entries, 651 bytes of static metadata\n>  \t */\n> -\tuint32_t numEntries = 50;\n> -\tuint32_t byteSize = 647;\n> +\tuint32_t numEntries = 51;\n> +\tuint32_t byteSize = 651;\n>\n>  \t/*\n>  \t * Calculate space occupation in bytes for dynamically built metadata\n> @@ -567,6 +567,9 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()\n>  \t\t\t\t  availableThumbnailSizes.data(),\n>  \t\t\t\t  availableThumbnailSizes.size());\n>\n> +\tint32_t jpegMaxSize = 13 << 20; /* 13631488 from USB HAL */\n> +\tstaticMetadata_->addEntry(ANDROID_JPEG_MAX_SIZE, &jpegMaxSize, 1);\n> +\n\nMakes sense as long as we don't have a more precise value.\nWhere should this come from ? By combining the frame size with libjpeg\nfeatures ?\n\n\n>  \t/* Sensor static metadata. */\n>  \tint32_t pixelArraySize[] = {\n>  \t\t2592, 1944,\n> @@ -773,6 +776,7 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()\n>  \t\tANDROID_CONTROL_AWB_LOCK_AVAILABLE,\n>  \t\tANDROID_CONTROL_AVAILABLE_MODES,\n>  \t\tANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES,\n> +\t\tANDROID_JPEG_MAX_SIZE,\n>  \t\tANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE,\n>  \t\tANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE,\n>  \t\tANDROID_SENSOR_INFO_SENSITIVITY_RANGE,\n> --\n> 2.25.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":"<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 E76EDC2E68\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 22 Jul 2020 10:31:56 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 61E6260943;\n\tWed, 22 Jul 2020 12:31:56 +0200 (CEST)","from relay5-d.mail.gandi.net (relay5-d.mail.gandi.net\n\t[217.70.183.197])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 9AF9D6039F\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 22 Jul 2020 12:31:54 +0200 (CEST)","from uno.localdomain (2-224-242-101.ip172.fastwebnet.it\n\t[2.224.242.101]) (Authenticated sender: jacopo@jmondi.org)\n\tby relay5-d.mail.gandi.net (Postfix) with ESMTPSA id E87311C0006;\n\tWed, 22 Jul 2020 10:31:53 +0000 (UTC)"],"X-Originating-IP":"2.224.242.101","Date":"Wed, 22 Jul 2020 12:35:31 +0200","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Message-ID":"<20200722103531.bycrlhyds4ixmbho@uno.localdomain>","References":"<20200721220126.202065-1-kieran.bingham@ideasonboard.com>\n\t<20200721220126.202065-4-kieran.bingham@ideasonboard.com>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20200721220126.202065-4-kieran.bingham@ideasonboard.com>","Subject":"Re: [libcamera-devel] [RFC PATCH 3/6] android: camera_device: Add\n\tANDROID_JPEG_MAX_SIZE","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>","Cc":"libcamera devel <libcamera-devel@lists.libcamera.org>","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":11483,"web_url":"https://patchwork.libcamera.org/comment/11483/","msgid":"<96d17af0-02fa-a0fa-4f57-ef7a0da068f1@ideasonboard.com>","date":"2020-07-22T11:12:10","subject":"Re: [libcamera-devel] [RFC PATCH 3/6] android: camera_device: Add\n\tANDROID_JPEG_MAX_SIZE","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"On 22/07/2020 11:35, Jacopo Mondi wrote:\n> Hi Kieran\n> \n> On Tue, Jul 21, 2020 at 11:01:23PM +0100, Kieran Bingham wrote:\n>> Provide a key for ANDROID_JPEG_MAX_SIZE. The value of 13MB is currently\n>> arbitrary, but taken from the USB Camera HAL in CrOS platform2:\n>>\n>>   // android.jpeg\n>>   update_static(ANDROID_JPEG_MAX_SIZE, int32_t{13 << 20});\n>>   update_request(ANDROID_JPEG_QUALITY, uint8_t{90});\n>>   update_request(ANDROID_JPEG_THUMBNAIL_QUALITY, uint8_t{90});\n>>   update_request(ANDROID_JPEG_ORIENTATION, int32_t{0});\n>>\n>> Note: The metadata entries/size updates are probably wrong, and should\n>> be automated.\n> \n> What does make you think so ?\n\nBecause I did it by hand, and when I wrote this I was getting arbitrary\ncrashes of the whole GUI which I had not been able to pin down.\n\n\n> \n>>\n>> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n>> ---\n>>  src/android/camera_device.cpp | 10 +++++++---\n>>  1 file changed, 7 insertions(+), 3 deletions(-)\n>>\n>> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n>> index 3f3d7857f0ab..56652ac57676 100644\n>> --- a/src/android/camera_device.cpp\n>> +++ b/src/android/camera_device.cpp\n>> @@ -407,10 +407,10 @@ std::tuple<uint32_t, uint32_t> CameraDevice::calculateStaticMetadataSize()\n>>  {\n>>  \t/*\n>>  \t * \\todo Keep this in sync with the actual number of entries.\n>> -\t * Currently: 50 entries, 647 bytes of static metadata\n>> +\t * Currently: 51 entries, 651 bytes of static metadata\n>>  \t */\n>> -\tuint32_t numEntries = 50;\n>> -\tuint32_t byteSize = 647;\n>> +\tuint32_t numEntries = 51;\n>> +\tuint32_t byteSize = 651;\n>>\n>>  \t/*\n>>  \t * Calculate space occupation in bytes for dynamically built metadata\n>> @@ -567,6 +567,9 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()\n>>  \t\t\t\t  availableThumbnailSizes.data(),\n>>  \t\t\t\t  availableThumbnailSizes.size());\n>>\n>> +\tint32_t jpegMaxSize = 13 << 20; /* 13631488 from USB HAL */\n>> +\tstaticMetadata_->addEntry(ANDROID_JPEG_MAX_SIZE, &jpegMaxSize, 1);\n>> +\n> \n> Makes sense as long as we don't have a more precise value.\n> Where should this come from ? By combining the frame size with libjpeg\n> features ?\n\n\nWe can ask libjpeg what size it would require, *if* we have the relevant\nconfiguration parameters for libjpeg. So we could construct a\nCompressorJPEG and give it a 'maximum' expected configuration, and then\nadd a function to return the expected/required maximum buffer size from\nthat.\n\nBut it's a bit chicken/egg, as this happens before we configure streams\n- so we'd have to have created a temporary compressor object (or just\nprovide a static function on a compressor that says \"given this\nconfiguration, what is the maximum size\" ... then the compression object\ncan do what it likes to return the value.\n\nOk that makes more sense so that woudl be somethign like:\n\nmax_size = myCompressor->maxBufferSize(StreamConfiguration &cfg);\n\nThat doesn't seem too outlandish ;-)\n\n\n>>  \t/* Sensor static metadata. */\n>>  \tint32_t pixelArraySize[] = {\n>>  \t\t2592, 1944,\n>> @@ -773,6 +776,7 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()\n>>  \t\tANDROID_CONTROL_AWB_LOCK_AVAILABLE,\n>>  \t\tANDROID_CONTROL_AVAILABLE_MODES,\n>>  \t\tANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES,\n>> +\t\tANDROID_JPEG_MAX_SIZE,\n>>  \t\tANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE,\n>>  \t\tANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE,\n>>  \t\tANDROID_SENSOR_INFO_SENSITIVITY_RANGE,\n>> --\n>> 2.25.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":"<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 089B5BDB1B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 22 Jul 2020 11:12:16 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 7C43E6093D;\n\tWed, 22 Jul 2020 13:12:15 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 228C16039F\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 22 Jul 2020 13:12:14 +0200 (CEST)","from [192.168.0.20]\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 87687329;\n\tWed, 22 Jul 2020 13:12:13 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"IqV30yOO\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1595416333;\n\tbh=iQaHVdZj0rz7NzgpBVrXMFtIpGwMuNHh5R8eSlQBq2E=;\n\th=Reply-To:Subject:To:Cc:References:From:Date:In-Reply-To:From;\n\tb=IqV30yOOVkv/ct+B6nxlPFS67hCFklFX5oY9jlWSu3V35MiY0/c3NtQuEM6lenjA4\n\tN0Fo+Dx5GEdMkHm4yI+9Gglf/zvaP/ffIWGuWjfLeeYG9cF+KRLz3pGZ8+v5A94HKa\n\tEQwxdzql3zntJr68J/lt9xgY6KtgBpsaqqVMT8tA=","To":"Jacopo Mondi <jacopo@jmondi.org>","References":"<20200721220126.202065-1-kieran.bingham@ideasonboard.com>\n\t<20200721220126.202065-4-kieran.bingham@ideasonboard.com>\n\t<20200722103531.bycrlhyds4ixmbho@uno.localdomain>","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Autocrypt":"addr=kieran.bingham@ideasonboard.com; keydata=\n\t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\n\tWZw01QYHU/GUV/zHJSFk","Organization":"Ideas on Board","Message-ID":"<96d17af0-02fa-a0fa-4f57-ef7a0da068f1@ideasonboard.com>","Date":"Wed, 22 Jul 2020 12:12:10 +0100","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101\n\tThunderbird/68.10.0","MIME-Version":"1.0","In-Reply-To":"<20200722103531.bycrlhyds4ixmbho@uno.localdomain>","Content-Language":"en-GB","Subject":"Re: [libcamera-devel] [RFC PATCH 3/6] android: camera_device: Add\n\tANDROID_JPEG_MAX_SIZE","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>","Reply-To":"kieran.bingham@ideasonboard.com","Cc":"libcamera devel <libcamera-devel@lists.libcamera.org>","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":11485,"web_url":"https://patchwork.libcamera.org/comment/11485/","msgid":"<20200722121928.fe4tbtrrkei5by7c@uno.localdomain>","date":"2020-07-22T12:19:28","subject":"Re: [libcamera-devel] [RFC PATCH 3/6] android: camera_device: Add\n\tANDROID_JPEG_MAX_SIZE","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Kieran\n\nOn Wed, Jul 22, 2020 at 12:12:10PM +0100, Kieran Bingham wrote:\n>\n>\n> On 22/07/2020 11:35, Jacopo Mondi wrote:\n> > Hi Kieran\n> >\n> > On Tue, Jul 21, 2020 at 11:01:23PM +0100, Kieran Bingham wrote:\n> >> Provide a key for ANDROID_JPEG_MAX_SIZE. The value of 13MB is currently\n> >> arbitrary, but taken from the USB Camera HAL in CrOS platform2:\n> >>\n> >>   // android.jpeg\n> >>   update_static(ANDROID_JPEG_MAX_SIZE, int32_t{13 << 20});\n\nThis is a static control\n\n> >>   update_request(ANDROID_JPEG_QUALITY, uint8_t{90});\n> >>   update_request(ANDROID_JPEG_THUMBNAIL_QUALITY, uint8_t{90});\n> >>   update_request(ANDROID_JPEG_ORIENTATION, int32_t{0});\n> >>\n\nThis are dynamics\n\n> >> Note: The metadata entries/size updates are probably wrong, and should\n> >> be automated.\n> >\n> > What does make you think so ?\n>\n> Because I did it by hand, and when I wrote this I was getting arbitrary\n> crashes of the whole GUI which I had not been able to pin down.\n>\n\nDo you refer to the sizes of the dynamic controls here only, or to the\nstatic metadata pack size ?\n\n>\n> >\n> >>\n> >> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> >> ---\n> >>  src/android/camera_device.cpp | 10 +++++++---\n> >>  1 file changed, 7 insertions(+), 3 deletions(-)\n> >>\n> >> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> >> index 3f3d7857f0ab..56652ac57676 100644\n> >> --- a/src/android/camera_device.cpp\n> >> +++ b/src/android/camera_device.cpp\n> >> @@ -407,10 +407,10 @@ std::tuple<uint32_t, uint32_t> CameraDevice::calculateStaticMetadataSize()\n> >>  {\n> >>  \t/*\n> >>  \t * \\todo Keep this in sync with the actual number of entries.\n> >> -\t * Currently: 50 entries, 647 bytes of static metadata\n> >> +\t * Currently: 51 entries, 651 bytes of static metadata\n> >>  \t */\n> >> -\tuint32_t numEntries = 50;\n> >> -\tuint32_t byteSize = 647;\n> >> +\tuint32_t numEntries = 51;\n> >> +\tuint32_t byteSize = 651;\n\nI mean this one ^\n\n> >>\n> >>  \t/*\n> >>  \t * Calculate space occupation in bytes for dynamically built metadata\n> >> @@ -567,6 +567,9 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()\n> >>  \t\t\t\t  availableThumbnailSizes.data(),\n> >>  \t\t\t\t  availableThumbnailSizes.size());\n> >>\n> >> +\tint32_t jpegMaxSize = 13 << 20; /* 13631488 from USB HAL */\n> >> +\tstaticMetadata_->addEntry(ANDROID_JPEG_MAX_SIZE, &jpegMaxSize, 1);\n> >> +\n> >\n> > Makes sense as long as we don't have a more precise value.\n> > Where should this come from ? By combining the frame size with libjpeg\n> > features ?\n>\n>\n> We can ask libjpeg what size it would require, *if* we have the relevant\n> configuration parameters for libjpeg. So we could construct a\n> CompressorJPEG and give it a 'maximum' expected configuration, and then\n> add a function to return the expected/required maximum buffer size from\n> that.\n>\n> But it's a bit chicken/egg, as this happens before we configure streams\n> - so we'd have to have created a temporary compressor object (or just\n> provide a static function on a compressor that says \"given this\n> configuration, what is the maximum size\" ... then the compression object\n> can do what it likes to return the value.\n>\n> Ok that makes more sense so that woudl be somethign like:\n>\n> max_size = myCompressor->maxBufferSize(StreamConfiguration &cfg);\n>\n> That doesn't seem too outlandish ;-)\n>\n\nMy understanding is that the size computed on the maximum frame size a\ncamera can produce is what android expects\n\n\"Maximum size in bytes for the compressed JPEG buffer\nMust be large enough to fit any JPEG produced by the camera\"\n\nI would go for a static method which given a size/configuration\nreturns the required size in bytes\n\n>\n> >>  \t/* Sensor static metadata. */\n> >>  \tint32_t pixelArraySize[] = {\n> >>  \t\t2592, 1944,\n> >> @@ -773,6 +776,7 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()\n> >>  \t\tANDROID_CONTROL_AWB_LOCK_AVAILABLE,\n> >>  \t\tANDROID_CONTROL_AVAILABLE_MODES,\n> >>  \t\tANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES,\n> >> +\t\tANDROID_JPEG_MAX_SIZE,\n> >>  \t\tANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE,\n> >>  \t\tANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE,\n> >>  \t\tANDROID_SENSOR_INFO_SENSITIVITY_RANGE,\n> >> --\n> >> 2.25.1\n> >>\n> >> _______________________________________________\n> >> libcamera-devel mailing list\n> >> libcamera-devel@lists.libcamera.org\n> >> https://lists.libcamera.org/listinfo/libcamera-devel\n>\n> --\n> Regards\n> --\n> Kieran","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 B24F6BDB1B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 22 Jul 2020 12:15:53 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 47BB46093D;\n\tWed, 22 Jul 2020 14:15:53 +0200 (CEST)","from relay8-d.mail.gandi.net (relay8-d.mail.gandi.net\n\t[217.70.183.201])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id C50FF6039F\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 22 Jul 2020 14:15:51 +0200 (CEST)","from uno.localdomain (93-34-118-233.ip49.fastwebnet.it\n\t[93.34.118.233]) (Authenticated sender: jacopo@jmondi.org)\n\tby relay8-d.mail.gandi.net (Postfix) with ESMTPSA id 1B2041BF205;\n\tWed, 22 Jul 2020 12:15:50 +0000 (UTC)"],"X-Originating-IP":"93.34.118.233","Date":"Wed, 22 Jul 2020 14:19:28 +0200","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Message-ID":"<20200722121928.fe4tbtrrkei5by7c@uno.localdomain>","References":"<20200721220126.202065-1-kieran.bingham@ideasonboard.com>\n\t<20200721220126.202065-4-kieran.bingham@ideasonboard.com>\n\t<20200722103531.bycrlhyds4ixmbho@uno.localdomain>\n\t<96d17af0-02fa-a0fa-4f57-ef7a0da068f1@ideasonboard.com>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<96d17af0-02fa-a0fa-4f57-ef7a0da068f1@ideasonboard.com>","Subject":"Re: [libcamera-devel] [RFC PATCH 3/6] android: camera_device: Add\n\tANDROID_JPEG_MAX_SIZE","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>","Cc":"libcamera devel <libcamera-devel@lists.libcamera.org>","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]