Materijal članka preuzet je iz mog
Primjer poboljšanja generatora tona
U prethodnom
Nakon što nam sklop više ne treba, oslobađanje memorije trebalo bi započeti zaustavljanjem podatkovnog cjevovoda. Da biste to učinili, morate odspojiti izvor sata i ticker iz kruga pomoću funkcije ms_ticker_detach(). U našem slučaju, moramo odspojiti ticker s ulaza filtera voidsource:
ms_ticker_detach(ticker, voidsource)
Usput, nakon zaustavljanja transportera, možemo promijeniti njegov krug i vratiti ga u rad, ponovno spajajući oznaku.
Sada ga možemo ukloniti pomoću funkcije ms_ticker_destroy():
ms_ticker_destroy(ticker)
Transporter je stao i možemo početi rastavljati njegove dijelove, odvajajući filtere. Da biste to učinili, upotrijebite funkciju ms_filter_unlink():
ms_filter_unlink(voidsource, 0, dtmfgen, 0);
ms_filter_unlink(dtmfgen, 0, snd_card_write, 0);
svrha argumenata je ista kao i za funkciju ms_filter_link().
Uklanjamo sada odvojene filtre pomoću ms_filter_destroy():
ms_filter_destroy(voidsource);
ms_filter_destroy(dtmfgen);
ms_filter_destroy(snd_card_write);
Dodavanjem ovih redaka našem primjeru dobit ćemo ispravan završetak programa sa stajališta upravljanja memorijom.
Kao što vidimo, ispravno dovršenje programa zahtijevalo je da dodamo otprilike isti broj linija koda kao na početku, s prosječno četiri linije koda po filteru. Ispada da će se veličina programskog koda povećavati proporcionalno broju filtara koji se koriste u projektu. Ako govorimo o tisuću filtera u krugu, tada će vašem kodu biti dodano četiri tisuće redaka rutinskih operacija za njihovo stvaranje i uništavanje.
Sada znate kako ispravno prekinuti program koji koristi medijski streamer. U sljedećim primjerima, zbog kompaktnosti, "zaboravit" ću to učiniti. Ali nećeš zaboraviti?
Programeri media streamera nisu osigurali softverske alate za olakšavanje manipulacije filtrima prilikom sastavljanja/rastavljanja sklopova. Unatoč tome, postoji pomoćnik koji vam omogućuje brzo umetanje/uklanjanje filtra iz kruga.
Rješavanju ovog problema vratit ćemo se kasnije, kada broj filtara u našim primjerima prijeđe nekoliko desetaka.
Sljedeći
Izvor: www.habr.com