sorry, me again,

about the bad file descriptor,
in :

setpwc_bang

fd=-1; does not look right to me.

Maybe you could declare it as a global variable, and it does not need
to be a pointer;
After

fd = open(device, O_RDWR);

do not change its  value.

good luck
    oliver




  oliver

Roman Haefeli wrote:
> hi 
>
> i am still trying to find a way to overcome the
> 'agc-setting-is-reset-each-time-cam-is-accessed' problem. a friend of
> mine tried to help by writing a pd-object, that does send the 'restore'
> command to the driver, so that i can at least set the gain manually,
> when working with pd, just by restoring the nvram of the cam. 
>
> however, it doesn't work yet. i am not a c coder myself and thus have no
> idea to fix it.
>
> i get the error:
>
> IDIOCPWCRUSER: Bad file descriptor
>
> this is the code of pd-object:
>
> ########################################################################
> #include <errno.h>
> #include <string.h>
> #include <stdio.h>
> #include <stdlib.h>
> #include <sys/ioctl.h>
> #include <sys/types.h>
> #include <sys/stat.h>
> #include <fcntl.h>
> #include <unistd.h>
> #define _LINUX_TIME_H 1 /* to get things compile on kernel 2.6.x */
> #include <linux/videodev.h>
>
>
> #include "m_pd.h"
> #include "pwc-ioctl.h"
>
> char *device = "/dev/video1";
>
> static t_class *setpwc_class;
>
> typedef struct _setpwc {
>   t_object  x_obj;
> } t_setpwc;
>
> void check_device(int *fd)
> {
>         if (*fd == -1)
>         {
>                 /* open device */
>                 *fd = open(device, O_RDWR);
>                 if (*fd == -1)
>                 {
>                         post("Error while accessing device");
> //                      exit(1);
>                 }
>         }
> }
>
> void restore_settings(int fd)
> {
>         if (ioctl(fd, VIDIOCPWCRUSER) == -1)
>                 perror("VIDIOCPWCRUSER");
> }
>
> void setpwc_bang(t_setpwc *x)
> {
>         int fd = -1;
>         check_device(&fd);
>         restore_settings(fd);
> }
>
> void *setpwc_new(void)
> {
>   t_setpwc *x = (t_setpwc *)pd_new(setpwc_class);
>
>   return (void *)x;
> }
>
> void setpwc_setup(void) {
>   setpwc_class = class_new(gensym("setpwc"),
>         (t_newmethod)setpwc_new,
>         0, sizeof(t_setpwc),
>         CLASS_DEFAULT, 0);
>   class_addbang(setpwc_class, setpwc_bang);
>
>
>
>
>
>
>               
> ___________________________________________________________ 
> Telefonate ohne weitere Kosten vom PC zum PC: http://messenger.yahoo.de
> _______________________________________________
> pwc mailing list
> pwc@lists.saillard.org
> http://lists.saillard.org/mailman/listinfo/pwc
>
>   


_______________________________________________
pwc mailing list
pwc@lists.saillard.org
http://lists.saillard.org/mailman/listinfo/pwc

Reply via email to