<html><head></head><body><div>Hi,<br><br>I add edthe gstreamer-devel mailing is as this is of public interest.<br><br>Le jeudi 16 février 2023 à 20:37 +0530, Gaurav Mahajan a écrit :</div><blockquote type="cite" style="margin:0 0 0 .8ex; border-left:2px #729fcf solid;padding-left:1ex"><div dir="ltr"><div dir="ltr"><div class="gmail_default"><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif">Hi Nicolas,</font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif"><br></font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif">Thank you for your input. It is really helpful and I am able to proceed further.</font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif">Now I am facing the following issue.</font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif"><br></font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif">I have the following pipeline in my case.</font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif">appsrc  ! h264parse ! v4l2h264dec ! customvideosink</font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif"><br></font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif">customvideosink : This will provide the GstBuffer received in show_frame callback to application for rendering purposes.</font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif"><br></font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif">So, from following logs, it can be concluded that v4l2h264dec is allocating 5 mamp buffers for the capture system.</font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif"><br></font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif">---</font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif">v4l2 gstv4l2object.c:3106:gst_v4l2_object_setup_pool:<decoder:src> initializing the capture system</font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif">v4l2 gstv4l2object.c:3138:gst_v4l2_object_setup_pool:<decoder:src> accessing buffers via mode 4 </font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif">v4l2allocator gstv4l2allocator.c:706:gst_v4l2_allocator_start:<decoder:pool0:src:allocator> <b>allocated 5 mmap buffers out of 5 requested</b></font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif">---</font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif"><br></font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif">So, I am getting GstBuffer for these respective mmap buffers in my customvideosink, when I emit these 5 buffers to application </font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif">and application is still processing them,</font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif">I can see that v4l2h264dec is decoding next frames, and as original allocated buffers are already in use.</font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif">It is not getting any buffer for reuse and allocating new buffers.</font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif"><br></font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif">---</font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif">v4l2bufferpool gstv4l2bufferpool.c:2017:gst_v4l2_buffer_pool_process:<decoder:pool0:src> <b>Only 0 buffer left in the capture queue.</b></font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif">v4l2bufferpool gstv4l2bufferpool.c:656:gst_v4l2_buffer_pool_resurrect_buffer:<decoder:pool0:src><b> A buffer was lost, reallocating it</b></font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif">---</font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif"><br></font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif">But as per my application we have allocated memory based on initial 5 buffers and this midway new allocation for new buffer is not possible.</font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif"><br></font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif">So, I would like to know</font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif">1. How can I control the decoder if my original allocated buffers are in use by application and unavailable for reuse?</font></div></div></div></div></blockquote><div><br></div><div>Your customsink should implement GstBaseSink::propose_allocation() virtual method, and minimally announce how many buffers you will be holding on. This is added to the query as following:<br><br>  <span style="font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; font-size: 13px; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); background-color: rgb(245, 242, 240);">gst_query_add_allocation_pool (query, NULL, <raw-image-size>, 5, 0);<br></span></div><div><br></div><blockquote type="cite" style="margin:0 0 0 .8ex; border-left:2px #729fcf solid;padding-left:1ex"><div dir="ltr"><div dir="ltr"><div class="gmail_default"><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif">2. Is there any way to control input feed to decoder like give 5 input buffers to decode and get 5 capture buffers, process them </font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif">   and then provide next 5 input buffers?</font></div></div></div></div></blockquote><div><br></div><div>The decoder manages a DPB which imply some rules regarding how to output frames. In order to output 5 frames for you to analyze offline, you may need to allocate up to 21 buffers (16 being the maximum DPB size). But as long as you annonce your 5 frames requirement, you can do that yes. Usually we add some more to ensure the HW decoder can run concurrently, but 5 more is starting to be a lot, and I suspect throughput is your ultimate goal.</div><div><br></div><blockquote type="cite" style="margin:0 0 0 .8ex; border-left:2px #729fcf solid;padding-left:1ex"><div dir="ltr"><div dir="ltr"><div class="gmail_default"><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif">3. Is there any part of the code in gstreamer v4l2 from where I can post some messages to achieve the above.</font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif">   If it is possible then I would like to give it a try.</font></div></div></div></div></blockquote><div><br></div><div>There is no messages (GstMessage) related to buffer allocation. This is handled through the allocation query between GStreamer elements. Applications are in general not involved in this process.</div><div><br></div><blockquote type="cite" style="margin:0 0 0 .8ex; border-left:2px #729fcf solid;padding-left:1ex"><div dir="ltr"><div dir="ltr"><div class="gmail_default"><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif"><br></font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif">I have tried some things with appsrc properties like max-buffers but not helpful.</font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif"><br></font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif">I look forward to hearing from you.</font></div><div class="gmail_default"><font color="#0b5394" face="verdana, sans-serif"><br></font></div></div><div><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><span style="color:rgb(68,68,68)"><b><font size="2"><font face="verdana,sans-serif">Thanks and Regards,</font></font></b></span></div><div><span style="color:rgb(68,68,68)"><b><font size="2"><font face="verdana,sans-serif">Gaurav Mahajan</font></font></b></span></div><div><b><font color="#0b5394"><font size="2"><font face="verdana,sans-serif"><span style="color:rgb(68,68,68)">M : <phone number removed></span></font></font></font></b></div></div></div></div></div></div></div></div></blockquote><div><span></span></div></body></html>