Convertir un programa en una libreria dinamica
Publicado por kapachov (12 intervenciones) el 19/10/2006 11:13:52
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?
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
--
Saludos...
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?
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
--
Saludos...
Valora esta pregunta


0