<div dir="ltr"><div dir="ltr">Hi Laurent,</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, May 24, 2021 at 11:59 AM Laurent Pinchart <<a href="mailto:laurent.pinchart@ideasonboard.com">laurent.pinchart@ideasonboard.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi Hiro,<br>
<br>
On Thu, May 20, 2021 at 06:02:05PM +0900, Hirokazu Honda wrote:<br>
> Gentle ping for review, or would this patch series be merged?<br>
<br>
It all looks good. I've applied the series to my tree, it's undergoing<br>
testing and I'll merge it shortly. Sorry for the delay.<br>
<br></blockquote><div><br></div><div>I got it. I saw they have been merged. Thanks for reviewing and applying.</div><div><br></div><div>-Hiro</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
> On Thu, May 13, 2021 at 7:00 PM Jacopo Mondi wrote:<br>
> > On Thu, May 13, 2021 at 11:29:46AM +0900, Hirokazu Honda wrote:<br>
> > > IPU3CameraData stores requests that have been failed due to a<br>
> > > buffer shortage. The requests should be retried once enough<br>
> > > buffers are available. This sets the retry function as signal to<br>
> > > CIO2Device and IPU3Frame, and invokes it from<br>
> > > CIO2Device::tryReturnBuffer() and IPU3Frame::remove().<br>
> > ><br>
> > > Signed-off-by: Hirokazu Honda <<a href="mailto:hiroh@chromium.org" target="_blank">hiroh@chromium.org</a>><br>
> > > ---<br>
> > >  src/libcamera/pipeline/ipu3/cio2.cpp   | 2 ++<br>
> > >  src/libcamera/pipeline/ipu3/cio2.h     | 2 ++<br>
> > >  src/libcamera/pipeline/ipu3/frames.cpp | 2 ++<br>
> > >  src/libcamera/pipeline/ipu3/frames.h   | 4 ++++<br>
> > >  src/libcamera/pipeline/ipu3/ipu3.cpp   | 4 ++++<br>
> > >  5 files changed, 14 insertions(+)<br>
> > ><br>
> > > diff --git a/src/libcamera/pipeline/ipu3/cio2.cpp b/src/libcamera/pipeline/ipu3/cio2.cpp<br>
> > > index 8bbef174..1be2cbcd 100644<br>
> > > --- a/src/libcamera/pipeline/ipu3/cio2.cpp<br>
> > > +++ b/src/libcamera/pipeline/ipu3/cio2.cpp<br>
> > > @@ -302,6 +302,8 @@ void CIO2Device::tryReturnBuffer(FrameBuffer *buffer)<br>
> > >                       break;<br>
> > >               }<br>
> > >       }<br>
> > > +<br>
> > > +     bufferAvailable.emit();<br>
> > >  }<br>
> > ><br>
> > >  void CIO2Device::freeBuffers()<br>
> > > diff --git a/src/libcamera/pipeline/ipu3/cio2.h b/src/libcamera/pipeline/ipu3/cio2.h<br>
> > > index 5ecc4f47..d8d4a181 100644<br>
> > > --- a/src/libcamera/pipeline/ipu3/cio2.h<br>
> > > +++ b/src/libcamera/pipeline/ipu3/cio2.h<br>
> > > @@ -56,6 +56,8 @@ public:<br>
> > >       Signal<FrameBuffer *> &bufferReady() { return output_->bufferReady; }<br>
> > >       Signal<uint32_t> &frameStart() { return csi2_->frameStart; }<br>
> > ><br>
> > > +     Signal<> bufferAvailable;<br>
> > > +<br>
> > >  private:<br>
> > >       void freeBuffers();<br>
> > ><br>
> > > diff --git a/src/libcamera/pipeline/ipu3/frames.cpp b/src/libcamera/pipeline/ipu3/frames.cpp<br>
> > > index 29d9aafc..d9a2249b 100644<br>
> > > --- a/src/libcamera/pipeline/ipu3/frames.cpp<br>
> > > +++ b/src/libcamera/pipeline/ipu3/frames.cpp<br>
> > > @@ -103,6 +103,8 @@ bool IPU3Frames::tryComplete(IPU3Frames::Info *info)<br>
> > ><br>
> > >       remove(info);<br>
> > ><br>
> > > +     bufferAvailable.emit();<br>
> > > +<br>
> > >       return true;<br>
> > >  }<br>
> > ><br>
> > > diff --git a/src/libcamera/pipeline/ipu3/frames.h b/src/libcamera/pipeline/ipu3/frames.h<br>
> > > index 4acdf48e..59e64e81 100644<br>
> > > --- a/src/libcamera/pipeline/ipu3/frames.h<br>
> > > +++ b/src/libcamera/pipeline/ipu3/frames.h<br>
> > > @@ -12,6 +12,8 @@<br>
> > >  #include <queue><br>
> > >  #include <vector><br>
> > ><br>
> > > +#include <libcamera/signal.h><br>
> > > +<br>
> > >  namespace libcamera {<br>
> > ><br>
> > >  class FrameBuffer;<br>
> > > @@ -49,6 +51,8 @@ public:<br>
> > >       Info *find(unsigned int id);<br>
> > >       Info *find(FrameBuffer *buffer);<br>
> > ><br>
> > > +     Signal<> bufferAvailable;<br>
> > > +<br>
> > >  private:<br>
> > >       std::queue<FrameBuffer *> availableParamBuffers_;<br>
> > >       std::queue<FrameBuffer *> availableStatBuffers_;<br>
> > > diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp<br>
> > > index 6961d498..8ae47c6d 100644<br>
> > > --- a/src/libcamera/pipeline/ipu3/ipu3.cpp<br>
> > > +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp<br>
> > > @@ -701,6 +701,8 @@ int PipelineHandlerIPU3::allocateBuffers(Camera *camera)<br>
> > >       data->ipa_->mapBuffers(ipaBuffers_);<br>
> > ><br>
> > >       data->frameInfos_.init(imgu->paramBuffers_, imgu->statBuffers_);<br>
> > > +     data->frameInfos_.bufferAvailable.connect(<br>
> > > +             data, &IPU3CameraData::queuePendingRequests);<br>
> > ><br>
> > >       return 0;<br>
> > >  }<br>
> > > @@ -1147,6 +1149,8 @@ int PipelineHandlerIPU3::registerCameras()<br>
> > >                */<br>
> > >               data->cio2_.bufferReady().connect(data.get(),<br>
> > >                                       &IPU3CameraData::cio2BufferReady);<br>
> > > +             data->cio2_.bufferAvailable.connect(<br>
> > > +                     data.get(), &IPU3CameraData::queuePendingRequests);<br>
> ><br>
> > Looks good<br>
> > Reviewed-by: Jacopo Mondi <<a href="mailto:jacopo@jmondi.org" target="_blank">jacopo@jmondi.org</a>><br>
> ><br>
> > >               data->imgu_->input_->bufferReady.connect(&data->cio2_,<br>
> > >                                       &CIO2Device::tryReturnBuffer);<br>
> > >               data->imgu_->output_->bufferReady.connect(data.get(),<br>
<br>
-- <br>
Regards,<br>
<br>
Laurent Pinchart<br>
</blockquote></div></div>