<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Aptos;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0mm;
        font-size:11.0pt;
        font-family:"Aptos",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#467886;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Aptos",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:11.0pt;
        mso-ligatures:none;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link="#467886" vlink="#96607D" style='word-wrap:break-word'><div class=WordSection1><p class=MsoNormal>Hi Libcamera Guru<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Please help with Android interfacing to libcamera<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>W.r.t. src/android/mm/generic_camera_buffer.cpp<o:p></o:p></p><p class=MsoNormal>And function<o:p></o:p></p><p class=MsoNormal>CameraBuffer::Private::Private([[maybe_unused]] CameraBuffer *cameraBuffer,<o:p></o:p></p><p class=MsoNormal>                                                       buffer_handle_t camera3Buffer,<o:p></o:p></p><p class=MsoNormal>                                                       PixelFormat pixelFormat,<o:p></o:p></p><p class=MsoNormal>                                                       const Size &size, int flags)<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I get an error: "Discontiguous planes are not supported"<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The working code looks like this, which seems to short cut things or hack it to work:<o:p></o:p></p><p class=MsoNormal><a href="https://github.com/raspberry-vanilla/android_external_libcamera/blob/android-14.0/src/android/mm/generic_camera_buffer.cpp">https://github.com/raspberry-vanilla/android_external_libcamera/blob/android-14.0/src/android/mm/generic_camera_buffer.cpp</a><o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>/*<o:p></o:p></p><p class=MsoNormal>* As Android doesn't offer an API to query buffer layouts, assume for<o:p></o:p></p><p class=MsoNormal>* now that the buffer is backed by a single dmabuf, with planes being<o:p></o:p></p><p class=MsoNormal>* stored contiguously.<o:p></o:p></p><p class=MsoNormal>*/<o:p></o:p></p><p class=MsoNormal>for (int i = 0; i < camera3Buffer->numFds; i++) {<o:p></o:p></p><p class=MsoNormal>                if (camera3Buffer->data[i] == -1 || camera3Buffer->data[i] == fd_)<o:p></o:p></p><p class=MsoNormal>                                continue;<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>                fd_ = camera3Buffer->data[0];<o:p></o:p></p><p class=MsoNormal>}<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>And I updated it to be more recent:<o:p></o:p></p><p class=MsoNormal><a href="https://github.com/libcamera-org/libcamera/blob/master/src/android/mm/generic_camera_buffer.cpp">https://github.com/libcamera-org/libcamera/blob/master/src/android/mm/generic_camera_buffer.cpp</a><o:p></o:p></p><p class=MsoNormal>/*<o:p></o:p></p><p class=MsoNormal>* As Android doesn't offer an API to query buffer layouts, assume for<o:p></o:p></p><p class=MsoNormal>* now that the buffer is backed by a single dmabuf, with planes being<o:p></o:p></p><p class=MsoNormal>* stored contiguously.<o:p></o:p></p><p class=MsoNormal>*/<o:p></o:p></p><p class=MsoNormal>for (int i = 0; i < camera3Buffer->numFds; i++) {<o:p></o:p></p><p class=MsoNormal>                if (camera3Buffer->data[i] == -1 || camera3Buffer->data[i] == fd_)<o:p></o:p></p><p class=MsoNormal>                                continue;<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>                if (fd_ != -1) {<o:p></o:p></p><p class=MsoNormal>                                error_ = -EINVAL;<o:p></o:p></p><p class=MsoNormal>                                LOG(HAL, Error) << "Discontiguous planes are not supported";<o:p></o:p></p><p class=MsoNormal>                                return;<o:p></o:p></p><p class=MsoNormal>                }<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>                fd_ = camera3Buffer->data[i];<o:p></o:p></p><p class=MsoNormal>}<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I’m trying to resolve my issue to taking a picture while streaming.<o:p></o:p></p><p class=MsoNormal>Can someone please shed some light on what the issue can be?<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Will really appreciate it.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Regards,<o:p></o:p></p><p class=MsoNormal>Jan Zwiegers<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p></div></body></html>