Estoy trabajando con el módulo Video::Capture::V4l.
Por defecto, un nuevo objeto se instancia usando el dispositivo
/dev/video0, pero estoy viendo el constructor de la clase para saber
cómo indicarle que use otro dispositivo y no encuentro la forma. Hay
muy poca documentación al respecto. El constructor es
sub new (;$) {
my $class = shift;
my $device = shift || "/dev/video0";
my $self = bless { device => $device }, $class;
[...]
}
He intentado cosas como
$grab = new Video::Capture::V4l('/dev/video1');
y
$grab = new Video::Capture::v4l(device => '/dev/video1');
pero no funciona.
Estuve leyendo perldoc persub y perldoc -f sub para ver si encontraba
la explicación de algo especial que veo en el constructor:
sub new (;$) {...}
pero no encuentro una explicación directa.
Gracias de antemano por sus comentarios.
Saludos
Alberto Mijares
_______________________________________________
l-desarrollo mailing list
l-desa...@velug.org.ve
http://listas.velug.org.ve/mailman/listinfo/l-desarrollo
Esa es una manera correcta de hacerlo.
> $grab = new Video::Capture::v4l(device => '/dev/video1');
Esta no es una manera correcta de hacerlo, porque el fragmento de código
que estás mostrando no está preparado para procesar una lista
clave/valor.
Otra manera de hacerlo es
my $grab = Video::Capture::V4l->new('/dev/video1');
A menos que haya otro fragmento de código que altere el atributo
'device' más adelante, no hay otra razón para que no funcione (la
asignación al atributo -- que /dev/video1 *exista*, sea *accesible*,
etc. no es problema de Perl).
> Estuve leyendo perldoc persub y perldoc -f sub para ver si encontraba
> la explicación de algo especial que veo en el constructor:
>
> sub new (;$) {...}
Se llaman prototipos y en general no los quieres usar. El manual
adecuado es perlsub, sección "Prototypes". La declaración particular que
te llama la atención tiene la intención de que *puedas* llamar a la
función new sin poner los paréntesis alrededor del único argumento
opcional.
--
Ernesto Hernández-Novich - @iamemhn - Unix: Live free or die!
Geek by nature, Linux by choice, Debian of course.
If you can't aptitude it, it isn't useful or doesn't exist.
GPG Key Fingerprint = 438C 49A2 A8C7 E7D7 1500 C507 96D6 A3D6 2F4C 85E3
Claro, pero como no me funcionaba me puse a tirar flechas. Además, no
conocía los prototipos y en mi ignorancia pensé cualquier cosa.
> A menos que haya otro fragmento de código que altere el atributo
> 'device' más adelante, no hay otra razón para que no funcione (la
> asignación al atributo -- que /dev/video1 *exista*, sea *accesible*,
> etc. no es problema de Perl).
>
Todo eso fue verificado. Estoy sospechando de un mal funcionamiento
del driver que maneja la capturadora de video, que en este caso es
tw68; pero ciertamente, eso no es problema de Perl ;-)
>> sub new (;$) {...}
>
> Se llaman prototipos y en general no los quieres usar. El manual
> adecuado es perlsub, sección "Prototypes". La declaración particular que
> te llama la atención tiene la intención de que *puedas* llamar a la
> función new sin poner los paréntesis alrededor del único argumento
> opcional.
Gracias. Leeré más al respecto. No me había hecho falta porque para
crear mis clases uso M[oa]ose.
Saludos
Alberto Mijares