All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jon Dufresne <jon.dufresne@infinitevideocorporation.com>
To: Mauro Carvalho Chehab <mchehab@infradead.org>
Cc: video4linux-list@redhat.com
Subject: Re: Writing first v4l2 driver
Date: Thu, 19 Jun 2008 09:51:12 -0400	[thread overview]
Message-ID: <1213883472.7578.41.camel@localhost.localdomain> (raw)
In-Reply-To: <20080606123016.681e24e8@gaivota>


On Fri, 2008-06-06 at 12:30 -0300, Mauro Carvalho Chehab wrote:
> On Fri, 06 Jun 2008 10:29:52 -0400
> Jon Dufresne <jon.dufresne@infinitevideocorporation.com> wrote:
> 
> > 
> > On Thu, 2008-06-05 at 18:07 -0300, Mauro Carvalho Chehab wrote:
> > > Does your device support DMA scatter/gather mode (e.g. instead of a continuous
> > > DMA memory, you would be using a range of non-continuous memory areas)? If not,
> > > then you'll need to write a different video-buf driver.
> > 
> > I am writing code for both sides, the DSP on the PCI board and the
> > driver in the linux kernel. The dsp has functionality to write data over
> > the PCI bus, and I could certainly code this to work in discontinuous
> > chunks. So I believe it could use sg lists.
> 
> This is the better solution, if you can work on both sides. Continuous stream
> buffer for video is generally very large, and may lead into some troubles if
> the memory is too fragmented before you allocate such memory (the drivers that
> work with non sg DMA returns -ENOMEM if you don't have a continuous block with
> enough size to allocate the buffer).
> 
> > > The simplest driver is vivi.c. Yet, it uses videobuf-vmalloc, which is a little
> > > bit different. However, since this is a fake device, it helps to understand how
> > > videobuf works. If you get into vivi.c previous versions, at mercurial repo,
> > > you'll find even a vivi example using the video-buf-dma-sg. Most of stuff
> > > will be similar. 
> > > 
> > > The other two examples for PCI devices are saa7134-video and cx88-video. bttv
> > > also uses it, but bttv driver is more complex to understand, since its code is
> > > bigger.
> > 
> > Thanks for pointing these devices out. I will study these and see how
> > things turn out.
> 
> Anytime.

Thank you for the help. I have been able to successfully get streaming
video to work using sg lists and the video buf help file. There are a
few things I'm still confused about and hoping someone can clear them up
for me.

What exactly are the operations that should be performed by the queue
ops. I'll explain what I think they should do, please correct me if I am
wrong:

buf_setup;
	Assign the size of the video frame the driver expects and the number of
buffers the driver allows. Right now I have just have the accept as many
buffers as was requested. When is this a bad thing?

buf_prepare:
	Not really sure about this. Right now I just call the iolock function
from the video-buf module. I think this sets up the sg list for me.

buf_queue:
	Puts the buffer into a list. If it is the first to enter the list it
tells the hardware to begin a dma transfer, otherwise it just appends to
the list.

Upon receiving an interrupt from the hardware, the buffer is removed
from the list and considered "STATE_DONE", at which point the memory
contains the frame data. In this interrupt the driver looks at the next
buffer in the list and tells it to start the dma again.

buf_release:
	Currently my release does nothing.



Another issue I've noticed is that sometimes the DQBUF ioctl will return
-EINVAL. I traced this back in the code and it appears this occurs with
the error message "stream running..." I'm not clear what this means.


Thanks for any help,
Jon

--
video4linux-list mailing list
Unsubscribe mailto:video4linux-list-request@redhat.com?subject=unsubscribe
https://www.redhat.com/mailman/listinfo/video4linux-list

  reply	other threads:[~2008-06-19 13:51 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-06-05 14:26 Writing first v4l2 driver Jon Dufresne
2008-06-05 21:07 ` Mauro Carvalho Chehab
2008-06-06 14:29   ` Jon Dufresne
2008-06-06 15:30     ` Mauro Carvalho Chehab
2008-06-19 13:51       ` Jon Dufresne [this message]
     [not found] <20080605160010.BB443619D1A@hormel.redhat.com>
2008-06-05 22:49 ` Fritz Katz
  -- strict thread matches above, loose matches on Subject: below --
2008-06-09  9:00 Ramatou sori
2008-06-09 16:20 Ramatou sori

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1213883472.7578.41.camel@localhost.localdomain \
    --to=jon.dufresne@infinitevideocorporation.com \
    --cc=mchehab@infradead.org \
    --cc=video4linux-list@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.