Mediastreamer2 VoIP ఇంజిన్‌ను అన్వేషిస్తోంది. 3 వ భాగము

వ్యాసం యొక్క పదార్థం నా నుండి తీసుకోబడింది జెన్ ఛానల్.

Mediastreamer2 VoIP ఇంజిన్‌ను అన్వేషిస్తోంది. 3 వ భాగము

టోన్ జనరేటర్ ఉదాహరణను మెరుగుపరచడం

మునుపటిలో వ్యాసం మేము టోన్ జెనరేటర్ అప్లికేషన్‌ను వ్రాసాము మరియు కంప్యూటర్ స్పీకర్ నుండి ధ్వనిని సంగ్రహించడానికి దాన్ని ఉపయోగించాము. ఇప్పుడు మన ప్రోగ్రామ్ పూర్తయినప్పుడు మెమరీని తిరిగి కుప్పకు తిరిగి ఇవ్వదని మనం గమనించవచ్చు. ఈ సమస్యను స్పష్టం చేయడానికి ఇది సమయం.

మనకు సర్క్యూట్ అవసరం లేన తర్వాత, డేటా పైప్‌లైన్‌ను ఆపడం ద్వారా మెమరీని ఖాళీ చేయడం ప్రారంభించాలి. దీన్ని చేయడానికి, మీరు ఫంక్షన్‌ను ఉపయోగించి సర్క్యూట్ నుండి క్లాక్ సోర్స్ మరియు టిక్కర్‌ను డిస్‌కనెక్ట్ చేయాలి ms_ticker_detach(). మన విషయంలో, ఫిల్టర్ ఇన్‌పుట్ నుండి మనం టిక్కర్‌ని డిస్‌కనెక్ట్ చేయాలి శూన్యం:

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);

మా ఉదాహరణకి ఈ పంక్తులను జోడించడం ద్వారా, మెమరీ నిర్వహణ యొక్క కోణం నుండి మేము సరైన ప్రోగ్రామ్ ముగింపును పొందుతాము.

మనం చూడగలిగినట్లుగా, ప్రోగ్రామ్‌ని సరిగ్గా పూర్తి చేయడానికి, ప్రతి ఫిల్టర్‌కి సగటున నాలుగు లైన్‌ల కోడ్‌తో ప్రారంభంలో ఉన్న కోడ్‌ల సంఖ్యను జోడించడం అవసరం. ప్రాజెక్ట్‌లో ఉపయోగించిన ఫిల్టర్‌ల సంఖ్యకు అనులోమానుపాతంలో ప్రోగ్రామ్ కోడ్ పరిమాణం పెరుగుతుందని ఇది మారుతుంది. మేము సర్క్యూట్‌లో వెయ్యి ఫిల్టర్‌ల గురించి మాట్లాడినట్లయితే, వాటిని సృష్టించడం మరియు నాశనం చేయడం కోసం నాలుగు వేల పంక్తుల సాధారణ కార్యకలాపాలు మీ కోడ్‌కు జోడించబడతాయి.

మీడియా స్ట్రీమర్‌ని ఉపయోగించే ప్రోగ్రామ్‌ను ఎలా సరిగ్గా ముగించాలో ఇప్పుడు మీకు తెలుసు. కింది ఉదాహరణలలో, కాంపాక్ట్‌నెస్ కొరకు, నేను దీన్ని "మర్చిపోతాను". కానీ మీరు మరచిపోలేదా?

మీడియా స్ట్రీమర్ డెవలపర్‌లు సర్క్యూట్‌లను అసెంబ్లింగ్/విడదీసేటప్పుడు ఫిల్టర్‌ల తారుమారుని సులభతరం చేయడానికి సాఫ్ట్‌వేర్ సాధనాలను అందించలేదు. అయినప్పటికీ, సర్క్యూట్ నుండి ఫిల్టర్‌ను త్వరగా ఇన్సర్ట్ చేయడానికి/తీసివేయడానికి మిమ్మల్ని అనుమతించే సహాయకుడు ఉంది.

మా ఉదాహరణలలోని ఫిల్టర్‌ల సంఖ్య రెండు డజన్ల కంటే ఎక్కువగా ఉన్నప్పుడు మేము ఈ సమస్యను పరిష్కరించడానికి తర్వాత తిరిగి వస్తాము.

తరువాత వ్యాసం మేము సిగ్నల్ స్థాయి మీటర్ సర్క్యూట్‌ను సమీకరించి, ఫిల్టర్ నుండి కొలత ఫలితాన్ని ఎలా చదవాలో నేర్చుకుంటాము. కొలత ఖచ్చితత్వాన్ని అంచనా వేద్దాం.

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి