<html><head></head><body><div>Le jeudi 16 février 2023 à 22:33 +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="auto">Hi Nicolas,<div dir="auto"><br></div><div dir="auto">Instead of configuring like below</div><div dir="auto"><span style="font-family:consolas,monaco,"andale mono","ubuntu mono",monospace;font-size:13px;background-color:rgb(245,242,240)">gst_query_add_allocation_</span><span style="font-family:consolas,monaco,"andale mono","ubuntu mono",monospace;font-size:13px;background-color:rgb(245,242,240)">pool (query, NULL, <raw-image-size>, 5, 0);</span><br></div><div dir="auto"><br></div><div dir="auto">If I do like this, to make min and Max buffer as 5. (currently max buffers are 32)</div><div dir="auto">gst_query_add_allocation_pool (query, NULL, <raw-image-size>, 5, 5);</div></div></blockquote><div><br></div><div>I don't remember if the max will be honored or just bumped.</div><div><br></div><blockquote type="cite" style="margin:0 0 0 .8ex; border-left:2px #729fcf solid;padding-left:1ex"><div dir="auto"><div dir="auto"><br></div><div dir="auto">Does this mean, decoder will have max 5 mmap buffer and will stop decoding and wait till any one of the 5 mmap buffer is unrefed?</div><div dir="auto">Is my understanding correct?</div><div dir="auto"><br></div><div dir="auto">Also when you say  <raw-image-size> , what do you mean, W*H or W*Padded height,</div><div dir="auto">because when propose_allocation gets called padded_height is not known.</div></div></blockquote><div><br></div><div>If you have not specific requirement, just use gst_video_info_from_caps() and use the calculated size. Its just a hint anyway.</div><div><br></div><blockquote type="cite" style="margin:0 0 0 .8ex; border-left:2px #729fcf solid;padding-left:1ex"><div dir="auto"><div dir="auto"><br></div><div dir="auto">Thanks & Regards</div><div dir="auto">Gaurav Mahajan </div><div dir="auto"><br></div></div><div><br></div><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Feb 16, 2023, 22:05 Nicolas Dufresne <<a href="mailto:nicolas@ndufresne.ca">nicolas@ndufresne.ca</a>> wrote:<br></div><blockquote type="cite" style="margin:0 0 0 .8ex; border-left:2px #729fcf solid;padding-left:1ex"><div><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;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"><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></div></blockquote></div></blockquote><div><br></div><div><span></span></div></body></html>