It looks like you are capturing frames

Willem

Torsten Spindler wrote:

>On Tue, 2007-04-12 at 08:53 +0100, Ilyes Gouta wrote:
>...
>  
>
>>Could you unload the driver (rmmod), quit the application and try again (i.e 
>>insmod the driver again and execute 
>>LiveCam)? I'm aware of this issue in the driver, and I got the same behavior 
>>with my previous test application, 
>>v4l2dumper.c .
>>    
>>
>
>I tried this, but no change. The only change I eventually got was that
>the status line reports 'BisonCam @ X FPS', with X between 25 and 28. 
>
>Thanks,
>Torsten
>
>
>  
>
>>BR,
>>Ilyes Gouta.
>>
>>Torsten Spindler wrote:
>>    
>>
>>>When I open LiveCam and select Capture, the application hangs. The
>>>bottom status line read 'BisonCam @ 0 FPS'.
>>>
>>>Bye,
>>>Torsten
>>>
>>>
>>>On Sun, 2007-02-12 at 15:13 +0100, Ilyes Gouta wrote:
>>>      
>>>
>>>>Hi Fellow,
>>>>
>>>>I updated the m5602-ov9560-2 and livecam branches yesterday and I was 
>>>>wondering if you guys could give it a shot just to see if you can get 
>>>>something (using livecam, bayer stream only) from your sensors.
>>>>
>>>>Just to recall it a bit, you can check out your livecam from the 
>>>>following URL:
>>>>
>>>>https://livecam.svn.sourceforge.net/svnroot/livecam/trunk
>>>>
>>>>LiveCam has the ability to alter the pitch of the pictures on the fly. 
>>>>The option is available through Debug | Adjust Pitch, from the 
>>>>application's menu.
>>>>
>>>>Waiting for your reports.
>>>>
>>>>BR,
>>>>Ilyes Gouta.
>>>>
>>>>-------------------------------------------------------------------------
>>>>SF.Net email is sponsored by: The Future of Linux Business White Paper
>>>>from Novell.  From the desktop to the data center, Linux is going
>>>>mainstream.  Let it simplify your IT future.
>>>>http://altfarm.mediaplex.com/ad/ck/8857-50307-18918-4
>>>>_______________________________________________
>>>>M560x-driver-devel mailing list
>>>>[email protected]
>>>>https://lists.sourceforge.net/lists/listinfo/m560x-driver-devel
>>>>        
>>>>
>>>      
>>>
>>plain text document attachment (v4l2dumper.c)
>>/***************************************************************************
>> *   Copyright (C) 2006 by Ilyes Gouta                                     *
>> *   [EMAIL PROTECTED]                                                 *
>> *                                                                         *
>> *   This program is free software; you can redistribute it and/or modify  *
>> *   it under the terms of the GNU General Public License as published by  *
>> *   the Free Software Foundation; either version 2 of the License, or     *
>> *   (at your option) any later version.                                   *
>> *                                                                         *
>> *   This program is distributed in the hope that it will be useful,       *
>> *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
>> *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
>> *   GNU General Public License for more details.                          *
>> *                                                                         *
>> *   You should have received a copy of the GNU General Public License     *
>> *   along with this program; if not, write to the                         *
>> *   Free Software Foundation, Inc.,                                       *
>> *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
>> ***************************************************************************/
>>
>>#include <stdio.h>
>>#include <stdlib.h>
>>#include <string.h>
>>#include <fcntl.h>
>>#include <time.h>
>>
>>#include <sys/time.h>
>>#include <sys/stat.h>
>>#include <sys/ioctl.h>
>>#include <sys/mman.h>
>>
>>#undef __STRICT_ANSI__
>>#include <linux/types.h>
>>#include <linux/videodev2.h>
>>
>>#include <pthread.h>
>>
>>#define CAPTURE_BUFFERS 32
>>
>>static int fd;
>>static volatile int bCapture;
>>static pthread_t hThread;
>>
>>static struct v4l2_buffer *pBuffers;
>>static struct v4l2_format fmt;
>>static unsigned char **pRawData;
>>
>>static char* pFNPrefix;
>>
>>void* WorkerThread(void* pData)
>>{
>>    struct v4l2_buffer buffer;
>>    struct timespec req, rem;
>>    char filename[256];
>>    int count = 0;
>>    FILE *hFile;
>>
>>    while (bCapture)
>>    {
>>      buffer.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
>>        if (ioctl(fd, VIDIOC_DQBUF, &buffer) >= 0)
>>      {
>>          sprintf(filename, "%s%d.raw", pFNPrefix, count);
>>          printf("dumping frame %d (buffer index: %d) in %s\n", count, 
>> buffer.index, filename);
>>      
>>          hFile = fopen(filename, "wb");
>>          fwrite(pRawData[buffer.index], 1, fmt.fmt.pix.sizeimage, hFile);
>>          fclose(hFile);
>>      
>>          count++;
>>          if (!bCapture) break;
>>        
>>            buffer.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
>>            ioctl(fd, VIDIOC_QBUF, &buffer);
>>      } else {
>>          printf("VIDIOC_DQBUF failed.\n");
>>      }
>>
>>        /* wait for 30 ms */
>>      req.tv_sec = 0;
>>        req.tv_nsec = 33000000;
>>        nanosleep(&req, &rem);
>>    }
>>
>>    return NULL;
>>}
>>
>>void initialize()
>>{
>>    fd = -1;
>>    pBuffers = (struct v4l2_buffer*)malloc(CAPTURE_BUFFERS * sizeof(struct 
>> v4l2_buffer));
>>    pRawData = (unsigned char**)malloc(CAPTURE_BUFFERS * sizeof(unsigned 
>> char*));
>>}
>>
>>void finalize()
>>{
>>    if (pBuffers) free(pBuffers);
>>    if (pRawData) free(pRawData);
>>    
>>    pBuffers = NULL;
>>    pRawData = NULL;
>>}
>>
>>int start(char* devname)
>>{
>>    struct v4l2_capability caps;
>>    struct v4l2_requestbuffers request;
>>    int i, type, result;
>>
>>    fd = open(devname, O_RDWR);
>>    if (fd == -1) return 0;
>>
>>    if (ioctl(fd, VIDIOC_QUERYCAP, &caps) == -1) {
>>        close(fd); fd = -1;
>>        return 0;
>>    }
>>
>>    printf("device name: %s\n", (char*)caps.card);
>>
>>    if (!(caps.capabilities & V4L2_CAP_VIDEO_CAPTURE)) {
>>        close(fd); fd = -1;
>>      printf("device doesn't support V4L2.\n");
>>        return 0;
>>    }
>>
>>    fcntl(fd, F_SETFD, FD_CLOEXEC);
>>    
>>    fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
>>    fmt.fmt.pix.width = 640;
>>    fmt.fmt.pix.height = 480;
>>    fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_SBGGR8;
>>        
>>    result = ioctl(fd, VIDIOC_TRY_FMT, &fmt);
>>    if (result < 0) {
>>      printf("VIDIOC_TRY_FMT failed.\n");
>>    }
>>    
>>    printf("picture size: %d\n", fmt.fmt.pix.sizeimage);
>>
>>    /* set the capture format */
>>    if (ioctl(fd, VIDIOC_S_FMT, &fmt) == -1) {
>>        close(fd); fd = -1;
>>      printf("device doesn't support this capture format.\n");
>>        return 0;
>>    }
>>
>>    memset(&request, 0, sizeof(struct v4l2_requestbuffers));
>>
>>    request.count = CAPTURE_BUFFERS;
>>    request.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
>>    request.memory = V4L2_MEMORY_MMAP;
>>
>>    /* set the type of the capture */
>>    if (ioctl(fd, VIDIOC_REQBUFS, &request) == -1) {
>>        close(fd); fd = -1;
>>      printf("VIDIOC_REQBUFS failed.\n");
>>        return 0;
>>    }
>>
>>    for (i = 0; i < CAPTURE_BUFFERS; i++)
>>    {
>>        memset(&pBuffers[i], 0, sizeof(struct v4l2_buffer));
>>
>>        pBuffers[i].index  = i;
>>        pBuffers[i].type   = V4L2_BUF_TYPE_VIDEO_CAPTURE;
>>        pBuffers[i].memory = V4L2_MEMORY_MMAP;
>>
>>        if (ioctl(fd, VIDIOC_QUERYBUF, &pBuffers[i], 0)) {
>>            close(fd); fd = -1;
>>          printf("VIDIOC_QUERYBUF failed.\n");
>>            return 0;
>>        }
>>
>>        /* obtain a userspace pointer on the capture buffer */
>>        void *pData = mmap(NULL, pBuffers[i].length, PROT_READ | PROT_WRITE, 
>> MAP_SHARED, fd, pBuffers[i].m.offset);
>>        if (pData == (void*)-1) {
>>            close(fd); fd = -1;
>>          printf("mmap failed. buffer length: %d, offset:0x%x\n", 
>> pBuffers[i].length, pBuffers[i].m.offset);
>>            return 0;
>>        }
>>
>>        pRawData[i] = (unsigned char*)pData;
>>    }
>>
>>    /* queue the buffers for capture*/
>>    for (i = 0; i < CAPTURE_BUFFERS; i++) {
>>        ioctl(fd, VIDIOC_QBUF, &pBuffers[i]);
>>    }
>>    
>>    /* start the capture */
>>    type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
>>    if (ioctl(fd, VIDIOC_STREAMON, &type) == -1) {
>>        close(fd); fd = -1;
>>      printf("failed starting capture.\n");
>>        return 0;
>>    }
>>
>>    bCapture = 1;
>>    if (pthread_create(&hThread, NULL, WorkerThread, NULL)) {
>>        close(fd); fd = -1;
>>        return 0;
>>    }
>>
>>    return 1;
>>}
>>
>>void stop()
>>{
>>    if (fd == -1) return;
>>
>>    bCapture = 0;
>>
>>    /* stop the capture */
>>    int type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
>>    ioctl(fd, VIDIOC_STREAMOFF, &type);
>>
>>    pthread_join(hThread, NULL);
>>    close(fd); fd = -1;
>>}
>>
>>int main(int argc, char** argv)
>>{
>>   if (argc != 2) {
>>      printf("usage:\n\t$ v4l2dumper <filename prefix>\n");
>>      return 0;
>>   }
>>   
>>   pFNPrefix = argv[1];
>>   
>>   initialize();
>>   
>>   if (start("/dev/video0")) {
>>      sleep(3);
>>      stop();
>>   }
>>   
>>   finalize();
>>   return 0;
>>}
>>    
>>
>
>
>-------------------------------------------------------------------------
>SF.Net email is sponsored by: The Future of Linux Business White Paper
>from Novell.  From the desktop to the data center, Linux is going
>mainstream.  Let it simplify your IT future.
>http://altfarm.mediaplex.com/ad/ck/8857-50307-18918-4
>_______________________________________________
>M560x-driver-devel mailing list
>[email protected]
>https://lists.sourceforge.net/lists/listinfo/m560x-driver-devel
>
>
>  
>


-------------------------------------------------------------------------
SF.Net email is sponsored by: The Future of Linux Business White Paper
from Novell.  From the desktop to the data center, Linux is going
mainstream.  Let it simplify your IT future.
http://altfarm.mediaplex.com/ad/ck/8857-50307-18918-4
_______________________________________________
M560x-driver-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/m560x-driver-devel

Reply via email to