Avant de clore ce fil honteux une dernière question, au cas où quelqu’un serait rompu à la prog avec libavcodec, ce qui n’est pas mon cas vu que je m’y suis mis quand j’ai commencé ce fil.
J’avais un vieux bug dans la version d’opencv que je maintiens (1.1.0). Il se trouvait dans une fonction qui permet de générer un “video writter” avec libavcodec/libavformat.
On déclare un AVCodecTag sous la forme :
const AVCodecTag codec_bmp_tags[] = {
{ CODEC_ID_H264, MKTAG('H', '2', '6', '4') },
{ CODEC_ID_H264, MKTAG('h', '2', '6', '4') },
{ CODEC_ID_H264, MKTAG('X', '2', '6', '4') },
{ CODEC_ID_H264, MKTAG('x', '2', '6', '4') },
{ CODEC_ID_H264, MKTAG('a', 'v', 'c', '1') },
{ CODEC_ID_H264, MKTAG('V', 'S', 'S', 'H') },
{ CODEC_ID_H263, MKTAG('H', '2', '6', '3') },
{ CODEC_ID_H263P, MKTAG('H', '2', '6', '3') },
{ CODEC_ID_H263I, MKTAG('I', '2', '6', '3') }, /* intel h263 */
{ CODEC_ID_H261, MKTAG('H', '2', '6', '1') },
/* added based on MPlayer */
{ CODEC_ID_H263P, MKTAG('U', '2', '6', '3') },
{ CODEC_ID_H263P, MKTAG('v', 'i', 'v', '1') },
{ CODEC_ID_MPEG4, MKTAG('F', 'M', 'P', '4') },
{ CODEC_ID_MPEG4, MKTAG('D', 'I', 'V', 'X') },
{ CODEC_ID_MPEG4, MKTAG('D', 'X', '5', '0') },
{ CODEC_ID_MPEG4, MKTAG('X', 'V', 'I', 'D') },
{ CODEC_ID_MPEG4, MKTAG('M', 'P', '4', 'S') },
{ CODEC_ID_MPEG4, MKTAG('M', '4', 'S', '2') },
{ CODEC_ID_THEORA, MKTAG('t', 'h', 'e', 'o') },
...
{ CODEC_ID_NONE, 0 },
};
Et ensuite on recherche le CodecID (du type CODEC_ID_MPEG4) en fonction de son fourcc (du type MKTAG(‘M’, ‘P’, ‘4’, ‘S’)) en utilisant un appel à av_codec_get_id sous la forme :
av_codec_get_id ( (AVCodecTag **)&codec_bmp_tags, fourcc )
Or cet appel ressort en segfault.
Pour moi c’est logique vu qu’on passe l’adresse de codec_bmp_tags à une procédure qui attend un pointeur vers un pointeur.
En attendant je me suis fait une routine qui me permet de remplacer av_codec_get_id car je ne veux pas taper dans la déclaration de codec_bmp_tags qui sert et fonctionne bien pour d’autres versions de ffmpeg-debian.
Mais en attendant de trouver mieux je suis ouvert à d’autres suggestions.