Menjelajahi mesin VoIP Mediastreamer2. Bagian 3

Materi artikel diambil dari saya saluran Zen.

Menjelajahi mesin VoIP Mediastreamer2. Bagian 3

Memperbaiki contoh penghasil nada

Di sebelumnya Artikel Kami menulis aplikasi penghasil nada dan menggunakannya untuk mengekstrak suara dari speaker komputer. Sekarang kita akan melihat bahwa program kita tidak mengembalikan memori ke heap ketika selesai. Saatnya untuk mengklarifikasi masalah ini.

Setelah kita tidak lagi membutuhkan sirkuit tersebut, pembebasan memori harus dimulai dengan menghentikan jalur pipa data. Untuk melakukan ini, Anda perlu memutuskan sumber jam dan ticker dari sirkuit menggunakan fungsi tersebut ms_ticker_detach(). Dalam kasus kita, kita harus memutuskan sambungan ticker dari input filter sumber kosong:

ms_ticker_detach(ticker, voidsource)

Omong-omong, setelah menghentikan konveyor, kita dapat mengubah sirkuitnya dan mengoperasikannya kembali dengan menghubungkan kembali ticker.

Sekarang kita dapat menghapusnya menggunakan fungsi tersebut ms_ticker_destroy():

ms_ticker_destroy(ticker)

Konveyor telah berhenti dan kita dapat mulai membongkar bagian-bagiannya dengan melepaskan filter. Untuk melakukan ini, gunakan fungsinya ms_filter_unlink():

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

tujuan argumennya sama dengan fungsinya ms_filter_link().

Kami menghapus filter yang sekarang terpisah menggunakan ms_filter_destroy():

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

Dengan menambahkan baris-baris ini ke contoh kita, kita akan mendapatkan penghentian program yang benar dari sudut pandang manajemen memori.

Seperti yang bisa kita lihat, penyelesaian program yang benar mengharuskan kita menambahkan kira-kira jumlah baris kode yang sama seperti di awal, dengan rata-rata empat baris kode per filter. Ternyata ukuran kode program akan bertambah sebanding dengan jumlah filter yang digunakan dalam proyek tersebut. Jika kita berbicara tentang seribu filter dalam suatu rangkaian, maka empat ribu baris operasi rutin untuk membuat dan menghancurkannya akan ditambahkan ke kode Anda.

Sekarang Anda tahu cara menghentikan program yang menggunakan media streamer dengan benar. Dalam contoh berikut, demi kekompakan, saya akan β€œlupa” melakukan ini. Tapi kamu tidak akan lupa?

Pengembang media streamer tidak menyediakan perangkat lunak untuk memfasilitasi manipulasi filter saat merakit/membongkar sirkuit. Namun demikian, ada bantuan yang memungkinkan Anda dengan cepat memasukkan/menghapus filter dari sirkuit.

Kami akan kembali menyelesaikan masalah ini nanti, ketika jumlah filter dalam contoh kami melebihi beberapa lusin.

Berikutnya Artikel Kita akan merakit rangkaian pengukur level sinyal dan mempelajari cara membaca hasil pengukuran dari filter. Mari kita evaluasi keakuratan pengukurannya.

Sumber: www.habr.com

Tambah komentar