<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <div class="moz-cite-prefix">Hi Nicolas, <br>
      <br>
      Thank you so much for your reply. <br>
      All of your comments are really helpful for me <span
        class="moz-smiley-s1"><span> :-) </span></span><br>
      <br>
      <blockquote type="cite">     1. gst-launch-1.0 v4l2src io-mode=2 !
        fakesink failed with following error message<br>
            ERROR: from element
        /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Failed to configure
        internal buffer pool.<br>
      </blockquote>
      By using the code of following repositories, I confirmed that the
      basic pipeline described above is now working. <br>
      <a class="moz-txt-link-freetext"
href="http://cgit.collabora.com/git/user/nicolas/gstreamer.git/log/?h=pool-nego-fix">http://cgit.collabora.com/git/user/nicolas/gstreamer.git/log/?h=pool-nego-fix</a>
      <br>
      <a class="moz-txt-link-freetext"
href="http://cgit.collabora.com/git/user/nicolas/gst-plugins-base.git/log/?h=pool-config-fix">http://cgit.collabora.com/git/user/nicolas/gst-plugins-base.git/log/?h=pool-config-fix</a><br>
      <a class="moz-txt-link-freetext"
href="http://cgit.collabora.com/git/user/nicolas/gst-plugins-good.git/log/?h=v4l2-allocator">http://cgit.collabora.com/git/user/nicolas/gst-plugins-good.git/log/?h=v4l2-allocator</a>
      <br>
      <br>
      Then, we are thinking about the next step: applying your DMABUF
      work to our custom encoder plugin.<br>
      <br>
      When looking your code, it seems to me that your DMABUF related
      patches ( and GstV4l2BufferPool class)<br>
      assumes that the target v4l2 plugins needs to be developped by
      using GstV4l2Object, which our custom <br>
      encoder does not use. So, we are considering to re-write our
      plugin using GstV4l2Object. <br>
      (Please correct me if I'm saying something wrong) <br>
      <br>
      And when looking your code more, we also noticed that there are
      gstv4l2videodec.[c|h], <br>
      which would dramatically simply the implementation of each custom
      video decoder. <br>
      <br>
      Then, my question comes up. <br>
      <br>
      Do you have any plan to develop gstv4l2videoenc.[c|h] in near
      future ? <br>
      If yes, we would love to utilize it as the base class of our
      customer encoder.<br>
      <br>
      Looking forward to hearing from you.<br>
      <br>
      (P.S I've inserted my comments below with [M.H] )<br>
      <br>
      Kind Regards,<br>
      Makoto Harada<br>
      <br>
      (2014年05月02日 02:09), Nicolas Dufresne wrote:<br>
    </div>
    <blockquote cite="mid:1398964151.15743.17.camel@nicolas-tpx230"
      type="cite">
      <pre wrap="">Le vendredi 02 mai 2014 à 00:42 +0900, Makoto Harada a écrit :
</pre>
      <blockquote type="cite">
        <pre wrap="">Hello, 

I've tried the codes on your allocator branch [1]. 

Environment:
    - Linux version 3.2.0-4-686-pae (<a class="moz-txt-link-abbreviated" href="mailto:debian-kernel@lists.debian.org">debian-kernel@lists.debian.org</a>)
</pre>
      </blockquote>
      <pre wrap="">That looks very old for doing DMABUF, or was it just for testing ?
</pre>
    </blockquote>
    [MH] Yes, it's just for testing. Our final goal is to run on kernel
    3.4 which <br>
    runs on ARM based application processor.<br>
    <blockquote cite="mid:1398964151.15743.17.camel@nicolas-tpx230"
      type="cite">
      <pre wrap="">
</pre>
      <blockquote type="cite">
        <pre wrap="">    - gstreamer1.0, gst-plugins-base are fetched from master branch on
official tree (as of 2014/4/30)
    - gst-plugins-good are fetched from [1] 

    [1]
<a class="moz-txt-link-freetext" href="http://cgit.collabora.com/git/user/nicolas/gst-plugins-good.git/log/?h=v4l2-allocator">http://cgit.collabora.com/git/user/nicolas/gst-plugins-good.git/log/?h=v4l2-allocator</a> 

I've tried the basic operation before trying DMABUF feature. 
However, unfortunately, it does run as expected. 

Symptom: 
    1. gst-launch-1.0 v4l2src io-mode=2 ! fakesink failed with
following error message
    ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
Failed to configure internal buffer pool.

    (log file with GST_DEBUG=6 is attached(tmp2.log). below is just
the essense of the error message) 

    v4l2
gstv4l2bufferpool.c:557:gst_v4l2_buffer_pool_set_config:<v4l2src0:pool:src> can't allocate, setting maximum to minimum
    bufferpool
</pre>
      </blockquote>
      <pre wrap="">
This just mean CREATE_BUFS is not supported, hence the min and max will
be modified to the same.

</pre>
      <blockquote type="cite">
        <pre wrap=""> gstbufferpool.c:551:default_set_config:<v4l2src0:pool:src> config
GstBufferPoolConfig, caps=(GstCaps)"NULL", 
   size=(uint)0, min-buffers=(uint)2, max-buffers=(uint)2,
allocator=(GstAllocator)"NULL", params=(GstAllocationParams)NULL;
    v4l2
gstv4l2object.c:3196:gst_v4l2_object_decide_allocation:<v4l2src0>
error: Failed to configure internal buffer pool.
</pre>
      </blockquote>
      <pre wrap="">
That makes me realized I forgot to mention other changes are pending in
other component. I had to fix the gst_buffer_pool_set_config () to
implement what the doc says. Otherwise, buffer pools endup changing
things and implementor of decide_allocate don't validate it.

<a class="moz-txt-link-freetext" href="http://cgit.collabora.com/git/user/nicolas/gstreamer.git/log/?h=pool-nego-fix">http://cgit.collabora.com/git/user/nicolas/gstreamer.git/log/?h=pool-nego-fix</a>
<a class="moz-txt-link-freetext" href="http://cgit.collabora.com/git/user/nicolas/gst-plugins-base.git/log/?h=pool-config-fix">http://cgit.collabora.com/git/user/nicolas/gst-plugins-base.git/log/?h=pool-config-fix</a>

</pre>
    </blockquote>
    [M.H] Thanks !! As I described, now this problem was solved by using
    the code on these repo.<br>
    <blockquote cite="mid:1398964151.15743.17.camel@nicolas-tpx230"
      type="cite">
      <blockquote type="cite">
        <pre wrap="">
My findings:
    1. gst-plaugins-good from master branch on official tree worked as
expected. 

    2. Error happens because can_allocate is 0 as shown below. 

        gst_v4l2_buffer_pool_set_config (GstBufferPool * bpool,
GstStructure * config)
            ....
            case GST_V4L2_IO_MMAP:
              can_allocate = GST_V4L2_ALLOCATOR_CAN_ALLOCATE
(pool->vallocator, MMAP);

       According to the current code, it seems to me that kernel needs
to support not only 
       VIDIOC_REQBUFS but also VIDIOC_CREATE_BUFS ioctl, in order to
use v4l2allocator. 
</pre>
      </blockquote>
      <pre wrap="">
No, it detects if CREATE_BUFS is supported (normally it's not, there is
like 2 drivers in the lot that supports that), and if not it ensure that
configuration make it clear that it won't grow by setting max = min.
When doing the allocation query/negotiation, one should re-read the
modified configuration after set_config() failed, and check if the
changes made by the pool are acceptable. If they are, it should simply
call set_config() again. This will bring the pool to the state
"configured" and set_active(TRUE) will now succeed.

</pre>
      <blockquote type="cite">
        <pre wrap="">
    3. Do we need to set "flags" to the allocator like below so that 
        GST_V4L2_ALLOCATOR_CAN_ALLOCATE () macro can work as
expected ? 
        Please ignore if this is in your expectation. Maybe I'm
misunderstanding something....

         gst_v4l2_allocator_create_buf (GstV4l2Allocator * allocator)
        @@ -610,10 +648,20 @@ gst_v4l2_allocator_new (GstObject *
parent, gint video_fd,
           allocator->type = format->type;
           allocator->format = *format;
         
           flags |= GST_V4L2_ALLOCATOR_PROBE (allocator, MMAP);
           flags |= GST_V4L2_ALLOCATOR_PROBE (allocator, USERPTR);
           flags |= GST_V4L2_ALLOCATOR_PROBE (allocator, DMABUF);
         
        +  GST_OBJECT_FLAG_SET (allocator, flags);
           if (flags == 0)
             goto not_supported;
</pre>
      </blockquote>
      <pre wrap="">
Good catch, fixed uploaded to my branch. Again, I have no driver that I
work with that actually support that :-S
</pre>
    </blockquote>
    [M.H] I'm happy to hear that. <br>
    <blockquote cite="mid:1398964151.15743.17.camel@nicolas-tpx230"
      type="cite">
      <pre wrap="">
</pre>
      <blockquote type="cite">
        <pre wrap="">
Question: 
    1. Is there any special reason why VIDIOC_CREATE_BUFS ioctl is
needed ?
        According to the following document, it seems to me that
VIDIOC_CREATE_BUFS is not mandatory one. 

<a class="moz-txt-link-freetext" href="http://linuxtv.org/downloads/v4l-dvb-apis/vidioc-create-bufs.html">http://linuxtv.org/downloads/v4l-dvb-apis/vidioc-create-bufs.html</a>
        Our kernel currently does only support VIDIOC_REQBUS, and doe
not support VIDIOC_CREATE_BUFS. 
   
       I'm not so familiar with the multimedia portion, so please
forgive me if I'm asking silly question. 
       Any insight would be highly appreciated. 
       Looking forward to hearing from you. 
</pre>
      </blockquote>
      <pre wrap="">
Even worst, it's experimental. But as said, it's not needed. All you
need is the fixes to properly configure pools. Note that these fixes are
not yet right as they are not validating anything yet.
</pre>
    </blockquote>
    [M.H] OK. Understood. <br>
    <blockquote cite="mid:1398964151.15743.17.camel@nicolas-tpx230"
      type="cite">
      <pre wrap="">
thanks for looking into this, feedback is great,
Nicolas

</pre>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
gstreamer-devel mailing list
<a class="moz-txt-link-abbreviated" href="mailto:gstreamer-devel@lists.freedesktop.org">gstreamer-devel@lists.freedesktop.org</a>
<a class="moz-txt-link-freetext" href="http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel">http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel</a>
</pre>
    </blockquote>
    <br>
  </body>
</html>