Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1

    Inscrit en
    mai 2012
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : mai 2012
    Messages : 12
    Points : -1
    Points
    -1

    Par défaut gstreamer problème mémoire

    Bonjour,

    je me permets de venir vers vous suite à un problème de mémoire avec gstreamer. J'ai de multiple questions sur le morceau de code suivant:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
        gst_init (&argc, &argv);
     
        string action ;
        cin >> action ;
     
        int SIZE = 99999;
     
        GstElement **source = NULL;
        source = new GstElement*[SIZE];
     
        for(int i=0;i<SIZE;i++){
            source[i] = gst_pipeline_new ("filesrc");
        }
     
        cin >> action ;
        for(int i=0;i<SIZE;i++){
            gst_object_unref(GST_OBJECT(source[i]));
        }
        cout << source[0] << endl;
        cin >> action ;
    Quand je lance le programme, il consomme: 2Mo.
    Après création des 99999 il consommes 150Mo
    Après l'appel de la méthode gst_object_unref je tombe à 80Mo.

    Ma grande question. Pourquoi, je ne retombe pas à 2Mo ? De plus, comment savoir si gst_object_unref fonctionne ? En effet, la mémoire semble bien libéré mais l'instruction suivante:
    Code :
    cout << source[0] << endl;
    m'affiche l'adresse mémoire. est-il normal de ne pas avoir 0 ?

    Merci

  2. #2
    Responsable 2D/3D/Jeux

    Avatar de LittleWhite
    Homme Profil pro Alexandre Laurent
    Ingénieur développement logiciels
    Inscrit en
    mai 2008
    Messages
    15 681
    Détails du profil
    Informations personnelles :
    Nom : Homme Alexandre Laurent
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2008
    Messages : 15 681
    Points : 72 723
    Points
    72 723

    Par défaut

    Bonjour,

    Pour vérifier qu'il y a une fuite de mémoire, je vous conseille d'utiliser valgrind (sous Linux). Cet outils permet de vérifier les fuites de mémoire et autre erreurs de mémoire.
    Vous souhaitez participer à la rubrique 2D / 3D / Jeux ? Contactez-moi
    La rubrique a aussi un blog !

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3

    Inscrit en
    mai 2012
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : mai 2012
    Messages : 12
    Points : -1
    Points
    -1

    Par défaut

    Je viens de tester avec valgrind et j'ai bien des fuites mémoire. Comment faire pour libérer la mémoire avec gstreamer ?
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    int main()
    {
        gst_init(NULL,NULL);
        GstElement *element = gst_pipeline_new("src");
        info(element);
        gst_object_unref(element);
        info(element);
        gst_deinit();
        return 0;
    }
    résultat:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    ==9098== 
    count: 1
    disposing: 0
    count: 0
    disposing: 0
    ==9098== 
    ==9098== HEAP SUMMARY:
    ==9098==     in use at exit: 1,364,118 bytes in 2,199 blocks
    ==9098==   total heap usage: 21,877 allocs, 19,678 frees, 3,899,417 bytes allocated
    ==9098== 
    ==9098== LEAK SUMMARY:
    ==9098==    definitely lost: 60 bytes in 1 blocks
    ==9098==    indirectly lost: 240 bytes in 10 blocks
    ==9098==      possibly lost: 543,952 bytes in 880 blocks
    ==9098==    still reachable: 819,866 bytes in 1,308 blocks
    ==9098==         suppressed: 0 bytes in 0 blocks
    ==9098== Rerun with --leak-check=full to see details of leaked memory
    ==9098== 
    ==9098== For counts of detected and suppressed errors, rerun with: -v
    ==9098== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 2 from 2)
    De plus est-il normal de récupérer false avec cette méthode: GST_OBJECT_IS_DISPOSING dès que nous avons appeler unref sur l'objet ?

    Merci

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •