Ուսումնասիրելով Mediastreamer2 VoIP շարժիչը: Մաս 3

Հոդվածի նյութը վերցված է իմ զեն ալիք.

Ուսումնասիրելով Mediastreamer2 VoIP շարժիչը: Մաս 3

Տոնային գեներատորի օրինակի բարելավում

Նախորդում Հոդված Մենք ձայնի գեներատորի հավելված գրեցինք և օգտագործեցինք համակարգչի բարձրախոսից ձայն հանելու համար: Այժմ մենք կնկատենք, որ մեր ծրագիրը չի վերադարձնում հիշողությունը կույտին, երբ այն ավարտվի: Ժամանակն է պարզաբանել այս հարցը։

Այն բանից հետո, երբ մենք այլևս միացման կարիք չունենք, հիշողության ազատումը պետք է սկսվի տվյալների խողովակաշարի դադարեցմամբ: Դա անելու համար դուք պետք է անջատեք ժամացույցի աղբյուրը և ցուցիչը միացումից՝ օգտագործելով ֆունկցիան ms_ticker_detach(). Մեր դեպքում մենք պետք է անջատենք տիկերը ֆիլտրի մուտքագրումից voidsource:

ms_ticker_detach(ticker, voidsource)

Ի դեպ, կոնվեյերը կանգնեցնելուց հետո մենք կարող ենք փոխել նրա շղթան և նորից գործի դնել՝ նորից միացնելով տիկերը։

Այժմ մենք կարող ենք հեռացնել այն՝ օգտագործելով ֆունկցիան 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);

Մեր օրինակին ավելացնելով այս տողերը՝ մենք կստանանք ծրագրի ճիշտ ավարտ՝ հիշողության կառավարման տեսանկյունից։

Ինչպես տեսնում ենք, ծրագրի ճիշտ ավարտը մեզանից պահանջում էր ավելացնել մոտավորապես նույն թվով կոդ տողեր, ինչ սկզբում, միջինը չորս տող կոդ յուրաքանչյուր զտիչով: Ստացվում է, որ ծրագրի կոդի չափը կավելանա նախագծում օգտագործվող ֆիլտրերի քանակին համամասնորեն։ Եթե ​​խոսենք շղթայում հազար ֆիլտրի մասին, ապա դրանք ստեղծելու և ոչնչացնելու համար սովորական գործողությունների չորս հազար տող կավելացվի ձեր կոդը:

Այժմ դուք գիտեք, թե ինչպես ճիշտ դադարեցնել ծրագիրը, որն օգտագործում է մեդիա հոսք: Հետևյալ օրինակներում, հանուն կոմպակտության, ես «կմոռանամ» անել դա։ Բայց դուք չեք մոռանա?

Մեդիա հոսքի մշակողները չեն տրամադրել ծրագրային գործիքներ՝ սխեմաների հավաքման/ապամոնտաժման ժամանակ ֆիլտրերի մանիպուլյացիայի համար հեշտացնելու համար: Այնուամենայնիվ, կա օգնական, որը թույլ է տալիս արագորեն տեղադրել/հեռացնել ֆիլտրը շղթայից:

Այս հարցի լուծմանը կանդրադառնանք ավելի ուշ, երբ մեր օրինակներում ֆիլտրերի թիվը գերազանցի մի երկու տասնյակը։

Հաջորդը Հոդված Մենք կհավաքենք ազդանշանի մակարդակի հաշվիչի միացում և կսովորենք, թե ինչպես կարդալ չափման արդյունքը ֆիլտրից: Եկեք գնահատենք չափման ճշգրտությունը:

Source: www.habr.com

Добавить комментарий