Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Convertir un programa en una libreria dinamica

Estas en el tema de Convertir un programa en una libreria dinamica en el foro de C/C++ en Foros del Web. Holas... Me he bajado el codigo del xawtv4 para integrarlo con mi aplicacion, en la cual necesito visualizar video, capturar video, capturar fotos. La interfaz ...
  #1 (permalink)  
Antiguo 17/10/2006, 10:46
Avatar de kapachov  
Fecha de Ingreso: diciembre-2002
Ubicación: Loeches
Mensajes: 464
Antigüedad: 21 años, 4 meses
Puntos: 0
Convertir un programa en una libreria dinamica

Holas...

Me he bajado el codigo del xawtv4 para integrarlo con mi aplicacion, en la cual necesito visualizar video, capturar video, capturar fotos.

La interfaz del xawtv4 (ejecutable) viene con la GTK, de momento todo bien; en la interfaz hay una opcion de grabar "recording"... pero no funciona.

Entonces que se me ha ocurrido, ya que el xawtv4 me permite visualizar PERO no grabar video, ni capturar fotos... lo he convertido a una libreria dinamica...

MUY BIEN tengo una de las partes que necesito... pero ahora nencesito el programa que me captura video/fotos.

el xawtv4 instala unas herramientas entre ellas el "streamer" (ejecutable) el cual me hace lo que yo necesito capturar video/fotos. Modifico el codigo, y creo la libreria dinamica...

hmmm lo PRUEBO y VIOLACION DE SEGMENTO...

Algo no cuadra... vuelvo a crear el programa con el mismo codigo fuente que he creado la libreria... FUNCIONA!...

no se que puede estar pasando, alguna idea?
que informacion tengo que tener pendiente a la hora de pasar un programa a libreria dinamica?

Saludos...
__________________
Siempre hago lo que quiero...
Aunque no quiera...
  #2 (permalink)  
Antiguo 17/10/2006, 14:53
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años
Puntos: 2
seria bueno mostraras el procedimiento que sigues, para poder aargumentar sobre bases.

Saludos.
  #3 (permalink)  
Antiguo 18/10/2006, 03:00
Avatar de kapachov  
Fecha de Ingreso: diciembre-2002
Ubicación: Loeches
Mensajes: 464
Antigüedad: 21 años, 4 meses
Puntos: 0
Holas...

Paso 1:
Cambio el fichero "xawtv/console/Subdir.mk":

--
#console/streamer : LDLIBS += $(THREAD_LIBS) $(ICONV_LIBS) -ljpeg -lm
console/streamer : LDLIBS += -shared $(THREAD_LIBS) $(ICONV_LIBS) -ljpeg -lm -o libstreamer.so
--


Paso 2:
Modifico el codigo de "xawtv/streamer.c":

--
int
//main(int argc, char **argv) //kapachov 13-10-2006
main_streamer()
{
char *argv[] = { "streamer", "-d", "-s", "352x240", "-t", "0:20", "-r", "24", "-o", "fichero.yuv", NULL };
int argc = 10;
int c,queued=0,noaudio=0;
char *raw_length=NULL;
char *val;

/* parse options */
ng_init();
read_config();

/* cfg_parse_cmdline(&argc,argv,cmd_opts_devices);

for (;;) {
if (-1 == (c = getopt(argc, argv, "haqdp:w:"
"o:f:r:s:t:b:j:" "O:F:R:")))
break;
switch (c) {
// general options //
case 'q':
quiet = 1;
break;
case 'a':
noaudio = 1;
break;
case 'd':
debug++;
ng_debug++;
break;
case 'w':
wait_seconds = atoi(optarg);
break;
case 'p':
parallel = atoi(optarg);
break;
// video options //
case 'o':
moviename = optarg;
break;
case 'f':
vfmt_name = optarg;
break;
case 'r':
fps = (int)(atof(optarg) * 1000 + 0.5);
break;
case 's':
if (2 != sscanf(optarg,"%dx%d",&video.width,&video.height))
video.width = video.height = 0;
break;

case 't':
raw_length = optarg;
break;
case 'b':
bufcount = atoi(optarg);
break;
case 'j':
ng_jpeg_quality = atoi(optarg);
break;

// audio options //
case 'O':
audioname = optarg;
break;
case 'F':
afmt_name = optarg;
break;
case 'R':
audio.rate = atoi(optarg);
break;

// errors / help //
case 'h':
usage(stdout);
exit(0);
default:
usage(stderr);
exit(1);
}
}*/
--

Paso 3:

Compilo la libreria "libstreamer.so";
Y ejecuto mi programa que llama a la funcion main_streamer.

--
checking writer files [multiple image files] ...
video name=ppm ext=ppm: ext mismatch [need yuv]
video name=pgm ext=pgm: ext mismatch [need yuv]
video name=jpeg ext=jpeg: ext mismatch [need yuv]
checking writer raw [single file, raw video data] ...
video name=rgb ext=raw: ext mismatch [need yuv]
video name=gray ext=raw: ext mismatch [need yuv]
video name=422 ext=raw: ext mismatch [need yuv]
video name=422p ext=raw: ext mismatch [need yuv]
video name=4mpeg ext=yuv: OK
raw / video: 12 bit YUV 4:2:0 (planar) / audio: none
devlist_probe: checking existing entries ...
devlist_probe: probing dvb devices ...
open(/dev/dvb/adapter0/frontend0): No such file or directory
open(/dev/dvb/adapter0/frontend0): No such file or directory
open(/dev/dvb/adapter1/frontend0): No such file or directory
open(/dev/dvb/adapter1/frontend0): No such file or directory
open(/dev/dvb/adapter2/frontend0): No such file or directory
open(/dev/dvb/adapter2/frontend0): No such file or directory
open(/dev/dvb/adapter3/frontend0): No such file or directory
open(/dev/dvb/adapter3/frontend0): No such file or directory
devlist_probe: probing v4l2 devices ...
open(/dev/video1): No such file or directory
open(/dev/video2): No such file or directory
open(/dev/video3): No such file or directory
device_probe_video: /dev/video0: add
devlist_probe: probing v4l devices ...
open(/dev/video1): No such file or directory
open(/dev/video2): No such file or directory
open(/dev/video3): No such file or directory
device_probe_video: /dev/video0: seen, skipping
devlist_probe: probing xv devices ...
Violación de segmento
--

Hmm... algo no cuadra...

Paso 4:
Cambio el fichero "xawtv/console/Subdir.mk":

--
console/streamer : LDLIBS += $(THREAD_LIBS) $(ICONV_LIBS) -ljpeg -lm
#console/streamer : LDLIBS += -shared $(THREAD_LIBS) $(ICONV_LIBS) -ljpeg -lm -o libstreamer.so
--

Paso 5:
Compilo el ejecutable "streamer";
ejecuto el programa "streamer"

--
checking writer files [multiple image files] ...
video name=ppm ext=ppm: ext mismatch [need yuv]
video name=pgm ext=pgm: ext mismatch [need yuv]
video name=jpeg ext=jpeg: ext mismatch [need yuv]
checking writer raw [single file, raw video data] ...
video name=rgb ext=raw: ext mismatch [need yuv]
video name=gray ext=raw: ext mismatch [need yuv]
video name=422 ext=raw: ext mismatch [need yuv]
video name=422p ext=raw: ext mismatch [need yuv]
video name=4mpeg ext=yuv: OK
raw / video: 12 bit YUV 4:2:0 (planar) / audio: none
devlist_probe: checking existing entries ...
devlist_probe: probing dvb devices ...
open(/dev/dvb/adapter0/frontend0): No such file or directory
open(/dev/dvb/adapter0/frontend0): No such file or directory
open(/dev/dvb/adapter1/frontend0): No such file or directory
open(/dev/dvb/adapter1/frontend0): No such file or directory
open(/dev/dvb/adapter2/frontend0): No such file or directory
open(/dev/dvb/adapter2/frontend0): No such file or directory
open(/dev/dvb/adapter3/frontend0): No such file or directory
open(/dev/dvb/adapter3/frontend0): No such file or directory
devlist_probe: probing v4l2 devices ...
open(/dev/video1): No such file or directory
open(/dev/video2): No such file or directory
open(/dev/video3): No such file or directory
device_probe_video: /dev/video0: add
devlist_probe: probing v4l devices ...
open(/dev/video1): No such file or directory
open(/dev/video2): No such file or directory
open(/dev/video3): No such file or directory
device_probe_video: /dev/video0: seen, skipping
devlist_probe: probing done
using: device configuration "BT878 video (AVerMedia TVCaptur":
bus = PCI:0000:05:09.0
video = /dev/video0
dvb = [unset]
sndrec = [unset, using default]
sndplay = [unset, using default]
mixer = [unset, using default]
control = [unset]
movie_init_writer start
setformat: 12 bit YUV 4:2:0 (planar) (352x240): ok
writer_video_thread start [pid=20599]
movie_init_writer end (h=0x9079c68)
movie_writer_start
movie_writer_stop/r: -0.00s [0], a/v: -0.00s [0]
writer_video_thread done
Oops: fifos is 1 (expected 0) [common/fifo.c:fifo_check:13
--

FUNCIONA!

no se que puede estar pasando....

Saludos...
__________________
Siempre hago lo que quiero...
Aunque no quiera...
  #4 (permalink)  
Antiguo 18/10/2006, 19:31
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años
Puntos: 2
Al parecer estas trabajando en Linux, y como esto de las librerias es dependiente de la plataforma, espero que alguien que conosca de programacion en linux pueda ayudarte.

aunque parece que el problema no es con la llamada a la funcion en la libreria que creaste sino, de la falta de los ficheros de video

Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:33.