2010-11-12 28 views
3

J'ai suivi le tutoriel here pour charger des fichiers vidéo dans un programme C. Mais les cadres ne sont pas désentrelacés. D'après ce que j'ai vu, l'exécutable ffmpeg prend en charge un commutateur -interface. Comment faire ceci dans le code? Quelle bibliothèque/fonctions devrais-je lire?Désentrelacement dans ffmpeg

Répondre

5

Vous devez appeler manuellement le avpicture_deinterlace pour désentrelacer chaque trame décodée. La définition de la fonction peut être trouvée here. Il se penchera essentiellement comme ceci (en utilisant les variables de la première page du tutoriel):

avcodec_decode_video(pCodecCtx, pFrame, &frameFinished, 
        packet.data, packet.size); 

if(frameFinished) { 
    avpicture_deinterlace((AVPicture*)pDiFrame, 
          (const AVPicture*)pFrame, 
          pCodecCtx->pix_fmt, 
          width, 
          height); 
    . 
    . 
    . 
} 

Gardez à l'esprit que vous devez initialiser pDiFrame de façon similaire à la façon dont ils initialize pFrameRGB dans le tutoriel en créant votre propre tampon et appelant avcodec_alloc_frame et avpicture_fill, seulement cette fois le format de pixel sera celui de la trame décodée (pCodecCtx->pix_fmt), pas 24 bits RVB. Après le désentrelacement, vous pouvez effectuer la conversion de la trame désentrelacée en RVB, comme indiqué dans le didacticiel.