jueves, 9 de abril de 2009

Webcam Front End para Mplayer


Bueno, alfin que me he hecho de un notebook, un PackardBell MX52, para hacer andar la camarita fue bueno recompilar el kernel con soporte a UVCVideo (de pasada comento que si quiere wifi compile el modulo ath5k, de hehco los ultimos kernels 2.6.x tienen un casi total soporte al hardware de este packardbell)

uvcvideo: Found UVC 1.00 device CNF7050 (04f2:b066)

la camara fue detectada, pero ahora lo que deseo es utilizarla, por ahi estan las linias de comando para mplayer, cosa que funciona muy bien, pero no es de gente grande andar escribiendo lo mismo cada vez que queramos grabar un videito, mejor hacernos un front end...

Como me gusta el pascal, voy con Lazarus a hacer la cosa.

basicamente el comando para hacer andar la webcam con mplayer es:

mplayer tv://

pero ahora voy a dejar aqui el codigo para hacer andar la webcam y dejar la salida del mplayer dentro de una form, cosa que podamos manipular la form desde nuestro codigo pascal y continuar con nuestra hermosa aplicacion front end para este grandioso mplayer/mencoder, y asi poder grabar, ver videos y sacar fotos con nuestra webcam, por ahora solo dejo el codigo para hacer andar la webcam, luego de esto lo demas es paja molida, entonces 2 tform y 1 tpanel para meter el mplayer...


procedure TForm1.BitBtn1Click(Sender: TObject);
begin
unit2.Form2.VerVideo(' tv:// -tv driver=v4l2:device=/dev/video0');

end;



// desde aqui la unit2 de la Form2

uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls, ExtCtrls,process, x,
{$IFDEF LCLGTK} gtk, gdk, glib, {$ENDIF}
{$IFDEF LCLGTK2} gtk2, gdk2, glib2, gdk2x, {$ENDIF}
math, xlib, ComCtrls;


type

{ TForm2 }

TForm2 = class(TForm)
Panel1: TPanel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ private declarations }
public
procedure VerVideo(ruta:string);

{ public declarations }
end;

procedure TForm2.VerVideo(ruta:string);
var
mplayerproc: TProcess;
HandleWindow: Int64;
begin


HandleWindow := GDK_WINDOW_XWINDOW(Pointer(PGtkWidget(form2.panel1.handle)^.window));

mplayerproc:= TProcess.Create(nil);
mplayerproc.CommandLine:= 'mplayer -quiet -wid ' + IntToStr(HandleWindow) + ruta;
mplayerproc.Execute;
mplayerproc.Free;

end;



bien, el que lo intente notara que el mplayer proyecta dentro de toda la form y practicamente el tpanel no controla el porte ni nada de la proyeccion, la gracia seria que la proyeccion quedara en el tpanel dejandonos espacio dentro de la form contenedora para hacer otras cosas, quizas poner mas paneles para otras webcams dentro de la misma form, si alguien lo logra antes que yo, porfavor, hagalo saber ;).

No hay comentarios: