Εξερευνώντας τη μηχανή VoIP Mediastreamer2. Μέρος 3

Το υλικό του άρθρου είναι παρμένο από το δικό μου κανάλι ζεν.

Εξερευνώντας τη μηχανή VoIP Mediastreamer2. Μέρος 3

Βελτίωση του παραδείγματος γεννήτριας τόνου

Στο προηγούμενο άρθρο Γράψαμε μια εφαρμογή γεννήτριας ήχου και τη χρησιμοποιήσαμε για να εξάγουμε ήχο από ένα ηχείο υπολογιστή. Τώρα θα παρατηρήσουμε ότι το πρόγραμμά μας δεν επιστρέφει τη μνήμη πίσω στο σωρό όταν τελειώσει. Ήρθε η ώρα να ξεκαθαρίσουμε αυτό το θέμα.

Αφού δεν χρειαζόμαστε πλέον το κύκλωμα, η απελευθέρωση της μνήμης θα πρέπει να ξεκινήσει διακόπτοντας τη διοχέτευση δεδομένων. Για να το κάνετε αυτό, πρέπει να αποσυνδέσετε την πηγή ρολογιού και το ticker από το κύκλωμα χρησιμοποιώντας τη λειτουργία ms_ticker_detach(). Στην περίπτωσή μας, πρέπει να αποσυνδέσουμε το ticker από την είσοδο φίλτρου voidsource:

ms_ticker_detach(ticker, voidsource)

Παρεμπιπτόντως, αφού σταματήσουμε τον μεταφορέα, μπορούμε να του αλλάξουμε το κύκλωμα και να τον επαναφέρουμε σε λειτουργία, συνδέοντας ξανά το ticker.

Τώρα μπορούμε να το αφαιρέσουμε χρησιμοποιώντας τη συνάρτηση ms_ticker_destroy():

ms_ticker_destroy(ticker)

Ο μεταφορέας έχει σταματήσει και μπορούμε να αρχίσουμε να αποσυναρμολογούμε μέρη του, αποσυνδέοντας τα φίλτρα. Για να το κάνετε αυτό, χρησιμοποιήστε τη συνάρτηση ms_filter_unlink():

ms_filter_unlink(voidsource, 0, dtmfgen, 0);
ms_filter_unlink(dtmfgen, 0, snd_card_write, 0);

ο σκοπός των ορισμάτων είναι ο ίδιος με αυτόν της συνάρτησης ms_filter_link().

Αφαιρούμε τα πλέον διαχωρισμένα φίλτρα χρησιμοποιώντας ms_filter_destroy():

ms_filter_destroy(voidsource);
ms_filter_destroy(dtmfgen);
ms_filter_destroy(snd_card_write);

Προσθέτοντας αυτές τις γραμμές στο παράδειγμά μας, θα έχουμε έναν σωστό τερματισμό προγράμματος από την άποψη της διαχείρισης της μνήμης.

Όπως μπορούμε να δούμε, η σωστή ολοκλήρωση του προγράμματος απαιτούσε να προσθέσουμε περίπου τον ίδιο αριθμό γραμμών κώδικα όπως στην αρχή, με μέσο όρο τέσσερις γραμμές κώδικα ανά φίλτρο. Αποδεικνύεται ότι το μέγεθος του κώδικα προγράμματος θα αυξηθεί ανάλογα με τον αριθμό των φίλτρων που χρησιμοποιούνται στο έργο. Αν μιλάμε για χίλια φίλτρα στο κύκλωμα, τότε στον κώδικά σας θα προστεθούν τέσσερις χιλιάδες σειρές λειτουργιών ρουτίνας για τη δημιουργία και την καταστροφή τους.

Τώρα ξέρετε πώς να τερματίσετε σωστά ένα πρόγραμμα χρησιμοποιώντας μια ροή πολυμέσων. Στα ακόλουθα παραδείγματα, για λόγους συμπαγούς, θα το «ξεχάσω» να το κάνω. Αλλά δεν θα ξεχάσετε;

Οι προγραμματιστές του streamer πολυμέσων δεν παρείχαν εργαλεία λογισμικού για τη διευκόλυνση του χειρισμού των φίλτρων κατά τη συναρμολόγηση/αποσυναρμολόγηση κυκλωμάτων. Παρ 'όλα αυτά, υπάρχει ένας βοηθός που σας επιτρέπει να εισάγετε/αφαιρείτε γρήγορα ένα φίλτρο από το κύκλωμα.

Θα επιστρέψουμε στην επίλυση αυτού του προβλήματος αργότερα, όταν ο αριθμός των φίλτρων στα παραδείγματά μας ξεπεράσει τις δεκάδες.

Επόμενο άρθρο Θα συναρμολογήσουμε ένα κύκλωμα μετρητή στάθμης σήματος και θα μάθουμε πώς να διαβάζουμε το αποτέλεσμα της μέτρησης από το φίλτρο. Ας αξιολογήσουμε την ακρίβεια της μέτρησης.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο