ffmpeg funziona male
Moderatore: Staff
Regole del forum
1) Citare in modo preciso il nome del pacchetto.
2) Specificare se discussione/suggerimento o richiesta d'aiuto.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
1) Citare in modo preciso il nome del pacchetto.
2) Specificare se discussione/suggerimento o richiesta d'aiuto.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
ffmpeg funziona male
ragazzi da qualche giorno le applicazioni che compilo con ffmpeg funzionano male. Ho aggiornato il suddetto pacchetto via SVN, ma tutto sballa sin dal ./configure (segmentation fault!!!). Ho Slackware 11.0 con kernel 2.6.20.4
avete qualche idea??
luigi
avete qualche idea??
luigi
soluzione
il problema era creato da ffmpeg, ma trova origine nel file /usr/bin/stdint.h: il valore int64_c viene inizializzato correttamente (almeno per quanto riguarda i miei usi) se al gcc viene passato il seguente flag:
-D__STDC_CONSTANT_MACROS
in assenza di tale flag, i programmi che fanno uso di tali numeri interi, e che usano le librerie libavcodec e libavformat, generano un errore. L'errore NON si manifesta compilando solo ffmpeg, ma al momento di compilare altri programmi che usano libavformat.
Luigi
-D__STDC_CONSTANT_MACROS
in assenza di tale flag, i programmi che fanno uso di tali numeri interi, e che usano le librerie libavcodec e libavformat, generano un errore. L'errore NON si manifesta compilando solo ffmpeg, ma al momento di compilare altri programmi che usano libavformat.
Luigi
allora vediamo di andare con ordine:
1) due anni fa, a scopi puramente didattici, ho iniziato a scrivere (soprattutto in c++) un video player. Grazie alla disponibilità dei sorgenti di Xine, mplayer ed altri programmi ho potuto, assieme ai miei alunni, imparare un bel po' di cose. Viva l'open source, la GPL, Linus, Stallman e Patrick.
2) il video player "nostrano" utilizza la libreria ffmpeg per decodificare alcuni formati (xvid);
3) tutto ha, miracolosamente, funzionato per tutto questo tempo (circa due anni) grazie al lavoro degli alunni che hanno ripulito il codice;
4) la settimana scorsa ho aggiornato, a distanza di qualche giorno l'uno dall'altro, sia il kernel (passando al 2.6.20.4) che ffmpeg. Ricompilando sia ffmpeg che il video player "nostrano" mi sono comparsi errori di varia natura: SIGFAULT e errori durante la fase di make.
5) ho provato ad aggiornare il pacchetto gcc passando alla versione 4.1.2, e alcuni errori sono cessati. FFmpeg si compilava bene. Quando compilavo il video player "nostrano" rimanevano una serie di errori, ad. esempio
/usr/local/include/ffmpeg/avformat.h:66 error: `INT64_C' was not declared in this scope
/usr/local/include/ffmpeg/avformat.h:67 error: integer constant is too large for "long" type
(tenere presente che durante la compilazione di ffmpeg invece tutto filava liscio)
dopo un po' di ricerche ho scoperto che la macro int64_c viene definita nel file stdint.h, ma viene attivata solo se __STDC_LIMIT_MACROS è stata definita
****** estratto del file stdint.h ******************
/* The ISO C99 standard specifies that in C++ implementations these
macros should only be defined if explicitly requested. */
#if !defined __cplusplus || defined __STDC_LIMIT_MACROS
# if __WORDSIZE == 64
# define __INT64_C(c) c ## L
# define __UINT64_C(c) c ## UL
# else
# define __INT64_C(c) c ## LL
# define __UINT64_C(c) c ## ULL
# endif
****************************************************
ho apportato la variazione al mio file di make (quello che compila il video player "nostrano") e tutto è tornato a funzionare.
Spero di avere chiarito tutti i dubbi. E mi scuso se il mio linguaggio non è informatichese perfetto, ma, di solito, mi occupo d'altro.
lgiancri
1) due anni fa, a scopi puramente didattici, ho iniziato a scrivere (soprattutto in c++) un video player. Grazie alla disponibilità dei sorgenti di Xine, mplayer ed altri programmi ho potuto, assieme ai miei alunni, imparare un bel po' di cose. Viva l'open source, la GPL, Linus, Stallman e Patrick.
2) il video player "nostrano" utilizza la libreria ffmpeg per decodificare alcuni formati (xvid);
3) tutto ha, miracolosamente, funzionato per tutto questo tempo (circa due anni) grazie al lavoro degli alunni che hanno ripulito il codice;
4) la settimana scorsa ho aggiornato, a distanza di qualche giorno l'uno dall'altro, sia il kernel (passando al 2.6.20.4) che ffmpeg. Ricompilando sia ffmpeg che il video player "nostrano" mi sono comparsi errori di varia natura: SIGFAULT e errori durante la fase di make.
5) ho provato ad aggiornare il pacchetto gcc passando alla versione 4.1.2, e alcuni errori sono cessati. FFmpeg si compilava bene. Quando compilavo il video player "nostrano" rimanevano una serie di errori, ad. esempio
/usr/local/include/ffmpeg/avformat.h:66 error: `INT64_C' was not declared in this scope
/usr/local/include/ffmpeg/avformat.h:67 error: integer constant is too large for "long" type
(tenere presente che durante la compilazione di ffmpeg invece tutto filava liscio)
dopo un po' di ricerche ho scoperto che la macro int64_c viene definita nel file stdint.h, ma viene attivata solo se __STDC_LIMIT_MACROS è stata definita
****** estratto del file stdint.h ******************
/* The ISO C99 standard specifies that in C++ implementations these
macros should only be defined if explicitly requested. */
#if !defined __cplusplus || defined __STDC_LIMIT_MACROS
# if __WORDSIZE == 64
# define __INT64_C(c) c ## L
# define __UINT64_C(c) c ## UL
# else
# define __INT64_C(c) c ## LL
# define __UINT64_C(c) c ## ULL
# endif
****************************************************
ho apportato la variazione al mio file di make (quello che compila il video player "nostrano") e tutto è tornato a funzionare.
Spero di avere chiarito tutti i dubbi. E mi scuso se il mio linguaggio non è informatichese perfetto, ma, di solito, mi occupo d'altro.
lgiancri

