want to overlay a photon overlay channel with shared mem

Hello QNXers out there,

I am coding a driver for my bt878 based tv-capture card as
a students research project.
The last state of my work is:
-card is configured
-audio works
-getting video data to a shared mem object via dma
-can create a video channel via PgCreateVideoChannel()
-can copy data to the video channel via memcpy()
-finally I see the moving pictures
But that is quite slow and uses a lot of work done by the system
so I’d like to get my tv-card to:
a) put the data directly to the channel->yplanes or to have
b) my shared mem (where the tvcard puts its data) overlap the memory
of the video channel.

Does anyone has a hint for me? The first stable version will be
released as a public resource.

I also tried to call the shm_ctl() function, but my qnx told
me, that this function is not implemented (at runtime via perror())
I am using QNX 6.2 as a non commercial version.

lars <l.beseke@tu-bs.de> wrote:

Hello QNXers out there,

I am coding a driver for my bt878 based tv-capture card as
a students research project.
The last state of my work is:
-card is configured
-audio works
-getting video data to a shared mem object via dma
-can create a video channel via PgCreateVideoChannel()
-can copy data to the video channel via memcpy()
-finally I see the moving pictures
But that is quite slow and uses a lot of work done by the system
so I’d like to get my tv-card to:
a) put the data directly to the channel->yplanes or to have
b) my shared mem (where the tvcard puts its data) overlap the memory
of the video channel.

You can DMA directly into the buffer being displayed by the
overlay. You need to get the physical address of the overlay
buffer: you could call mem_offset64() with the pointer that
you were memcpy’ing to. Then program the bt878 using the
physical address and stride of the overlay buffer.

Does anyone has a hint for me? The first stable version will be
released as a public resource.

I also tried to call the shm_ctl() function, but my qnx told
me, that this function is not implemented (at runtime via perror())
I am using QNX 6.2 as a non commercial version.

Hi David,
thanx!
My fault was that I uses mem_offset and not mem_offset64
so I didn’t get the right physical address. But now I have
a nearly flicker-free picture. I made the test right now
by viewing a soccer match.
If you are interested I will keep you informed about the
further process. I you have some more information about
how I should organize my program, just mail me.
My idea was to put the driver as a resource manager.

Best regards,
Lars.

David Donohoe wrote:

lars <> l.beseke@tu-bs.de> > wrote:

Hello QNXers out there,


I am coding a driver for my bt878 based tv-capture card as
a students research project.
The last state of my work is:
-card is configured
-audio works
-getting video data to a shared mem object via dma
-can create a video channel via PgCreateVideoChannel()
-can copy data to the video channel via memcpy()
-finally I see the moving pictures
But that is quite slow and uses a lot of work done by the system
so I’d like to get my tv-card to:
a) put the data directly to the channel->yplanes or to have
b) my shared mem (where the tvcard puts its data) overlap the memory
of the video channel.


You can DMA directly into the buffer being displayed by the
overlay. You need to get the physical address of the overlay
buffer: you could call mem_offset64() with the pointer that
you were memcpy’ing to. Then program the bt878 using the
physical address and stride of the overlay buffer.


Does anyone has a hint for me? The first stable version will be
released as a public resource.


I also tried to call the shm_ctl() function, but my qnx told
me, that this function is not implemented (at runtime via perror())
I am using QNX 6.2 as a non commercial version.