áá±á¬ááºážáá«ážá á¡ááŒá±á¬ááºážá¡áá¬ááᯠáá»áœááºá¯ááºáá¶á០áá°áá«áááºá
áá±áá¬ááŸá¯ááºááŸá¬ážááŸá¯ááá¹ááá¬áž
- áá±áá¬ááááºááá¯á· dblk_t
- mblk_t ááá¯á· áááºáá±á·áá»áºááá¯á·áá«á
- mblk_t áááºáá±á·áá»áºáá»á¬ážááŸáá·áº á¡áá¯ááºáá¯ááºáááºá¡ááœáẠáá¯ááºáá±á¬ááºáá»ááºáá»á¬áž
- áááºážá á®ááẠqueue_t
- áááºážá á®ááŒááºáž queue_t ááŒáá·áº áá¯ááºáá±á¬ááºááŒááºážá¡ááœáẠáá¯ááºáá±á¬ááºáá»ááºáá»á¬áž
- á á áºáá¯ááºááŸá¯áá»á¬ážááᯠáá»áááºáááºááŒááºážá
- áá±áá¬áá¯ááºáá±á¬ááºááŒááºážááááºá á¡áá»ááºááŒá¡ááŸááº
- ááŒá±á¬áºááŒá¬á áá±á¬ááºááœááºááœáẠááŸá¯ááºááŸá¬ážááŸá¯áá»á¬áž
- ááŒá¬ážáá¶áááááᬠ(MSBufferizer)
- MSBufferizer ááŒáá·áº áá¯ááºáá±á¬ááºááẠáá¯ááºáá±á¬ááºáá»ááºáá»á¬áž
áá±á¬ááºáá¯á¶ážá
áá±áá¬ááŸá¯ááºááŸá¬ážááŸá¯ááá¹ááá¬áž
ááœá²á·á ááºážáááºáá±á¬ááºáá¯á¶á¡á áá±á¬áºááŒáá¬ážáá±á¬ á á®áááºážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á áá®áá®áá¬áá¯ááºááœáŸáá·áºáá°ááŸá áá±áá¬ááŸá¯ááºááŸá¬ážááŸá¯ááᯠáá¯ááºáá±á¬ááºáááºá áááºážá á®áááº. á á¬áááºážááœá± ááŒáá¯ááºáááºá mblk_táááºážááá¯á·ááœáẠá¡áá»ááºááŒáá±áá¬ááá«áááºáá±á¬áºáááºáž ááááºá áá±á¬ááºáááºáá±á·áá»áºááŸáá·áº áá±áá¬ááá±á¬ááºáá®ááá¯á· ááá·áºááºáá»á¬ážáá¬ááŒá áºáááºá ááá¯á·á¡ááŒááºá áááºááẠáá áºáá¯áááºážáá±á¬ ááá·áºááºáá»áááºáá¬ážáá±á¬ áááºáá±á·áá»áºáá»á¬ážá á¬áááºážááᯠá á¯á ááºážááá¯ááºá á±ááá·áº á¡áá»áá¯ážá¡á á¬ážáá° áááºáá±á·áá»áºáá áºáá¯ááá¯á· ááá·áºááºáá áºáá¯áááºáž ááŸáááŒá±á¬ááºáž á¡áá°ážá¡áá±ážáá±áž ááŒá±á¬ááŒá¬ážááá¯áá«áááºá ááá¯ááá¯á·áá±á¬á á¬áááºážááŒáá·áº á á¯á ááºážáá¬ážáá±á¬ áááºáá±á·áá»áºá¡á¯ááºá á¯áá áºá á¯ááᯠtuple áá¯áá±á«áºááá¯áá«áááºá ááá¯á·ááŒá±á¬áá·áºá áááºážá á®á áááºááá·áºááŒááºá ááºáááᯠáááºáá±á·áá»áºáá áºáá¯áááºáž ááŒá áºááá¯ááºáááºá mblk_tááŸáá·áº áááºáá±á·ááºá»áá áºáá¯á áŠážáá±á«ááºážááŒá áºááá¯ááºáááºá mblk_t. tuple áááºáá±á·áá»áºáá áºáá¯á á®ááœáẠáááºážáááá¯ááºááá¯ááºáááºááœááºáá±áá¬ááááºááá¯á·ááá¯ááºáááºá Tuple ááœá±ááᯠáá¬ááŒá±á¬áá·áº ááá¯á¡ááºááá² ááá¯áᬠáááºážáááºážááŒá¬á០ááœá±ážááœá±ážáá«áááºá
á¡áááºááœááºáá±á¬áºááŒáá²á·ááá·áºá¡ááá¯ááºážá áááºáá±á·áá»áºááœáẠáá±áá¬ááá±á¬ááºáá áºáá¯ááá«áááºáá«á áááºážá¡á á¬áž ááá±á¬ááºááá¯ááááºážáááºážáá¬ážááá·áºááŸááºáá¬ááºá§áááá¬ááá¯á· ááœáŸááºááŒáá»ááºáá áºáá¯áá¬áá«ááŸááááºá á€á¡ááá¯ááºážááœááºá áá®áá®áá¬áá¯ááºááœáŸáá·áºáá°áá¡áá¯ááºá ááŒá¯á¶áá¯á¶áá¯ááºáá¯á¶ááẠá¡áááºážáá»á¬áž (áá±áá¬-á¡áááºážáá»á¬ážáá®ááá¯á· ááá·áºááºáá»á¬áž) á០áá¶áá«ážáá»á¬áž (áá±áá¬-á¡áááºážáá»á¬áž) ááá¯á· ááœá±á·áá»á¬ážáá±ááá·áº áá¬ááœááºáž âMonsters, Inc.â ááŸá áá¶áá«ážááá¯áá±á«ááºááᯠá¡ááŸááºááá±áááºá áááŸá¯ááºáááŸáẠááŒá áºáá±áááºá
ááá¯á á¡á±á¬ááºááŒá±á០á¡áááºá០á¡áááºááá¯á· ááœá±á·áá»á¬ážááŒá®ážá áá®áá®áᬠááœáŸáá·áºá ááºááŸá áá±áá¬ááá¯á·ááœáŸááºááŸá¯ ááá¹ááá¬ážá á á¬áááºážááœááºážáá¬ážáá±á¬ á¡áá¬áá»á¬ážááᯠá¡áá±ážá ááẠáá¯á¶ážáááºááŒáá·áºááŒáá«á áá¯á·á
áá±áá¬ááááºááá¯á· dblk_t
áá±áá¬ááá±á¬ááºááœáẠáá±á«ááºážá á®ážáá áºáá¯ááŸáá·áº áá±áá¬ááŒá¬ážáá¶áá áºáᯠáá«áááºáá«áááºá áá±á«ááºážá á®ážááᯠá¡á±á¬ááºáá«ááœá²á·á ááºážáá¯á¶ááŒáá·áº áá±á¬áºááŒáááºá
typedef struct datab
{
unsigned char *db_base; // УказаÑÐµÐ»Ñ ÐœÐ° МаÑалП бÑÑÐµÑ ÐŽÐ°ÐœÐœÑÑ
.
unsigned char *db_lim; // УказаÑÐµÐ»Ñ ÐœÐ° ÐºÐŸÐœÐµÑ Ð±ÑÑÐµÑ ÐŽÐ°ÐœÐœÑÑ
.
void (*db_freefn)(void*); // ЀÑМкÑÐžÑ ÐŸÑÐ²ÐŸÐ±ÐŸÐ¶ÐŽÐµÐœÐžÑ Ð¿Ð°ÐŒÑÑО пÑО ÑЎалеМОО блПка.
int db_ref; // СÑеÑÑОк ÑÑÑлПк.
} dblk_t;
ááœá²á·á ááºážáá¯á¶á á¡ááœááºáá»á¬ážááẠááŒá¬ážáá¶áá¡á á ááŒá¬ážáá¶áá¡áá¯á¶ážááŸáá·áº áá±áá¬ááŒá¬ážáá¶ááᯠáá»ááºáááºá¡ááœáẠááœáŸááºááŒáá»ááºáá»á¬ážáá«ááŸááááºá áá±á«ááºážá á®ážááŸá áá±á¬ááºáá¯á¶ážá¡á áááºá¡ááá¯ááºáž db_ref â áááºááœáŸááºážáá±á¬ááºáá¬á áááºážááẠáá¯áááá¯á·áá±á¬ááºááŸááá«áá áááºážááẠá€ááááºááá¯á·ááŒááºážááᯠááŸááºáá¬ááºááŸáá»ááºáá áºááẠá¡áá»ááºááŒááŸá¯áá áºáá¯á¡ááŒá Ạáá¯ááºáá±á¬ááºáááºá á¡áááºá function ááẠdata block ááá¯áááºáá®ážáá²á·áááºá datab_alloc() ááá¯á·áá±á¬áẠheader ááŒá®ážáá±á¬áẠáá»ááºáá»ááºáž data buffer ááᯠmemory ááœáẠáá¬ážááŸááá«áááºá á¡ááŒá¬ážááá á¹á áá»á¬ážááœáẠááŒá¬ážáá¶á¡á¬áž áá®ážááŒá¬ážáá áºáá±áá¬á áá¬ážááŸáááá¯ááºáááºá áá±áá¬ááŒá¬ážáá¶ááœáẠáá»áœááºá¯ááºááá¯á·ááẠá á áºáá¯ááºááŸá¯áá»á¬ážááŒáá·áº áá¯ááºáá±á¬ááºááá¯áá±á¬ á¡áá»ááºááŒááá°áá¬áá»á¬áž ááá¯á·ááá¯áẠá¡ááŒá¬ážáá±áá¬áá»á¬áž áá«áááºáááºááŒá áºáááºá
áá¯ááºáá±á¬ááºáá»ááºááᯠá¡áá¯á¶ážááŒá¯á áá±áá¬ááááºááá¯á·ááŒááºážá ááá°áá¬á¡áá áºááᯠáááºáá®ážáááº-
dblk_t *datab_alloc(int size);
ááá·áºááœááºážááŸá¯ ááá·áºáááºáá»ááºáá áºáá¯á¡áá±ááŒáá·áºá áááºážá¡á¬áž ááááºááá¯á·ááááºážáááºážááá·áº áá±áá¬á¡ááœááºá¡á á¬ážááᯠáá±ážáá¬ážáááºá ááœá²áá±áááºááŸááºááŸááºáá¬ááºáá¡á ááœáẠáá±á«ááºážá á®áž-ááœá²á·á ááºážáá¯á¶-ááᯠáá¬ážááŸááááºá¡ááœáẠáá±á¬ááºáááºáááºááá¯áá®ááᯠááœá²áá±áá»áá¬ážáá«áááºá áá±áá¬áá±. ááá¯á·áá±á¬áº á¡ááŒá¬ážáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááá·áºá¡áá«á áááºážááẠá¡ááŒá²áááºážááŒá áºááá¬áá«á á¡áá»áá¯á·ááá á¹á áá»á¬ážááœáẠáá±áá¬ááŒá¬ážáá¶ááẠáá±áá¬ááááºááá¯á·ááŒááºážáá±á«ááºážá á®ážá០áá®ážááŒá¬ážáááºááŸááá±ááá¯ááºáááºá ááœá²á·á ááºážáá¯á¶áá áºáá¯ááᯠáááºáá®ážáá±á¬á¡áá«á á¡ááœááºáá»á¬ážááᯠáááºážáá¡ááœááºá¡ááŒá ẠáááºááŸááºáá±ážáááºá db_base áá±áá¬á§áááá¬áá¡á ááá¯ááœáŸááºááŒááŒá®áž db_lim áááºážáá¡áá¯á¶ážá¡ááá ááá·áºááºá¡áá±á¡ááœáẠdb_ref áá áºáá¯áááºááŸááºáá¬ážáááºá áá±áá¬ááŸááºážáááºážááá·áºáá¯ááºáá±á¬ááºáá»ááºááœáŸááºááŒáá»ááºááᯠáá¯ááᯠáááºááŸááºáá¬ážáááºá
áááºáá±á·ááºá»ááᯠmblk_t
ááá¯áá²á·ááá·áºá¡ááá¯ááºážá áááºážá á®ááŒááºá ááºáá»á¬ážááẠá¡áá»áá¯ážá¡á á¬ážááŒá áºáááºá mblk_tá á¡á±á¬ááºáá«á¡ááá¯ááºážáááºááŸááºáá¬ážáááºá
typedef struct msgb
{
struct msgb *b_prev; // УказаÑÐµÐ»Ñ ÐœÐ° пÑеЎÑÐŽÑÑОй ÑÐ»ÐµÐŒÐµÐœÑ ÑпОÑка.
struct msgb *b_next; // УказаÑÐµÐ»Ñ ÐœÐ° ÑлеЎÑÑÑОй ÑÐ»ÐµÐŒÐµÐœÑ ÑпОÑка.
struct msgb *b_cont; // УказаÑÐµÐ»Ñ ÐŽÐ»Ñ Ð¿ÐŸÐŽÐºÐ»ÐµÐ¹ÐºÐž к ÑППбÑÐµÐœÐžÑ ÐŽÑÑгОÑ
ÑППбÑеМОй, ÐŽÐ»Ñ ÑÐŸÐ·ÐŽÐ°ÐœÐžÑ ÐºÐŸÑÑежа ÑППбÑеМОй.
struct datab *b_datap; // УказаÑÐµÐ»Ñ ÐœÐ° ÑÑÑÑкÑÑÑÑ Ð±Ð»ÐŸÐºÐ° ЎаММÑÑ
.
unsigned char *b_rptr; // УказаÑÐµÐ»Ñ ÐœÐ° МаÑалП ПблаÑÑО ЎаММÑÑ
ÐŽÐ»Ñ ÑÑÐµÐœÐžÑ ÐŽÐ°ÐœÐœÑÑ
бÑÑеÑа b_datap.
unsigned char *b_wptr; // УказаÑÐµÐ»Ñ ÐœÐ° МаÑалП ПблаÑÑО ЎаММÑÑ
ÐŽÐ»Ñ Ð·Ð°Ð¿ÐžÑО ЎаММÑÑ
бÑÑеÑа b_datap.
uint32_t reserved1; // ÐаÑезеÑвОÑПваММПе пПле1, ЌеЎОаÑÑÑÐžÐŒÐµÑ Ð¿ÐŸÐŒÐµÑÐ°ÐµÑ ÑÑЎа ÑлÑжебМÑÑ ÐžÐœÑПÑЌаÑОÑ.
uint32_t reserved2; // ÐаÑезеÑвОÑПваММПе пПле2, ЌеЎОаÑÑÑÐžÐŒÐµÑ Ð¿ÐŸÐŒÐµÑÐ°ÐµÑ ÑÑЎа ÑлÑжебМÑÑ ÐžÐœÑПÑЌаÑОÑ.
#if defined(ORTP_TIMESTAMP)
struct timeval timestamp;
#endif
ortp_recv_addr_t recv_addr;
} mblk_t;
ááœá²á·á ááºážáá¯á¶ááŸá¬ mblk_t á¡á ááœáẠpointers áá»á¬ážáá«ááŸááááºá b_prev, b_áá±á¬ááºáá áºáá¯ááŸá áºáááºáá»áááºáááºáá¬ážáá±á¬á á¬áááºážááᯠá á¯á ááºážááẠááá¯á¡ááºáá±á¬ (áááºážá á®áá áºáá¯ááŒá áºáááºá áááºážá á®áááº).
ááŒá®ážááẠpointer áá¬áááºá b_contáááºáá±á·áá»áºááẠtuple á á¡á áááºá¡ááá¯ááºážááŒá áºááŸáᬠá¡áá¯á¶ážááŒá¯áááºá tuple ááŸá áá±á¬ááºáá¯á¶ážá á¬á¡ááœááºá á€ááœáŸááºááŒáá»ááºááẠnull ááŒá áºáá±áá²ááŒá áºáááºá
áá±á¬ááºáá áºáá¯ááá±á¬á· data block áá áºáá¯áá®ááᯠpointer áá áºáá¯ááá¯ááœá±á·áááŸá¬áá«á b_datapáá°áá±á¬ ááááºážá áá¬áž áááºááŸááá±áá«áááºá áááºážááᯠblock data buffer á¡ááœááºážááŸá á§áááá¬ááá¯á· ááœáŸááºááŒááŒááºážááŒáá·áº áá±á¬ááºááœáẠáá¯ááºáá±á¬ááºáááºá áááºááœááºáž b_rptr ááŒá¬ážáá¶á០áá±áá¬ááᯠáááºááá·áº áááºáá±áá¬ááᯠáááºááŸááºáááºá áááºááœááºáž b_wptr ááŒá¬ážáá¶áá¯ááºáá±á¬ááºááá·áºáá±áá¬ááᯠááœáŸááºááŒáááºá
áá»ááºá¡ááœááºáá»á¬ážááẠáááºáá±á¬ááºááŸá¯ááá±á¬ááá¬áááŒá áºááŒá®áž áá±áá¬ááœáŸá²ááŒá±á¬ááºážááŸá¯ááá¹ááá¬ážá áá¯ááºáá±á¬ááºááŸá¯ááŸáá·áº ááááºááá¯ááºáá«á
á¡á±á¬ááºááœáẠá¡áááºáá«áá±á¬ áááºáá±á·áá»áºáá
áºáᯠáá«áááºáááºá m1 ááŸáá·áºáá±áá¬ááááºááá¯á· d1.
á¡á±á¬ááºáá«áá¯á¶ááẠáááºáá±á·áá»áºáá¯á¶ážá
á±á¬ááºá tuple ááá¯ááŒáááºá m1, m1_1, m1_2.
á á¬ááá¯áá±ážááá¯á·ááŒááºážáá¯ááºáá±á¬ááºáá»ááºáá»á¬áž mblk_t
áááºáá±á·ááºá»á¡áá Ạmblk_t áá¯ááºáá±á¬ááºáá»ááºááŒáá·áº áááºáá®ážáá¬ážáááº-
mblk_t *allocb(int size, int pri);
áá°áááẠááŸááºáá¬ááºáá²ááœáẠáááºáá±á·ááºá»á¡áá áºáá áºáᯠáá±ážáááºá mblk_t áááºááŸááºáá¬ážáá±á¬á¡ááœááºá¡á á¬ážááá±áá¬ááá±á¬ááºáá áºáá¯ááŸáá·áºá¡áá° á¡ááœááºáá¯áááá¡ááŒááºážá¡áá¯á¶- PRI á€á á¬ááŒáá·áºááá¯ááºáá¬ážááŸááºážááœáẠá¡áá¯á¶ážáááŒá¯áá«á áá¯áááŒá áºááá·áºáááºá áá¯ááºáá±á¬ááºáá»ááºá áá¯ááºáá±á¬ááºááŸá¯á¡ááœááºážá áááºáá±á·ááºá»á¡áá áºá ááœá²á·á ááºážáá¯á¶á¡ááœáẠáááºááá¯áá®ááᯠááœá²áá±áá±ážáááºááŒá áºááŒá®áž áá¯ááºáá±á¬ááºáá»ááºááᯠáá±á«áºááá¯áááºááŒá áºáááºá mblk_init()áááºáá±á¬ááºáá¯á¶á áááºáá®ážáá¬ážáá±á¬ á á¶ááá°áá¬á á¡ááœááºá¡á¬ážáá¯á¶ážááᯠááŒááºáááºáááºááŸááºáááºááŒá áºááŒá®ážá ááá¯á·áá±á¬áẠá¡áááºáá±á¬áºááŒáá«ááᯠá¡áá¯á¶ážááŒá¯áá datab_alloc()áá±áá¬ááŒá¬ážáá¶áá áºáᯠáááºáá®ážáá«áááºá ááá¯á·áá±á¬áẠááœá²á·á ááºážáá¯á¶ááŸá á¡ááœááºáá»á¬ážááᯠááŒááºáááºáááºááŸááºáááº-
mp->b_datap=datab;
mp->b_rptr=mp->b_wptr=datab->db_base;
mp->b_next=mp->b_prev=mp->b_cont=NULL;
á¡ááœááºááœáẠáá»áœááºá¯ááºááá¯á·ááẠáááŠážááŒá¯áá¯ááºáá¬ážáá±á¬ á¡ááœááºáá»á¬ážááŸáá·áº ááá¬áá±áá¬ááŒá¬ážáá¶áá áºáá¯áá«ááŸááá±á¬ áááºáá±á·ááºá»á¡áá áºááᯠáááºáá¶áááŸááá«áááºá áááºáá±á·áá»áºáá áºáá¯ááá¯á· áá±áá¬ááá·áºáááºá áááºážááᯠáá±áá¬ááááºááá¯á·ááá·áºááŒá¬ážáá¶ááá¯á· áá°ážáá°ááẠááá¯á¡ááºáááº-
memcpy(msg->b_rptr, data, size);
áááºááŸá¬ áá±áᬠáá±áá¬á¡áááºážá¡ááŒá
áºááá¯ááœáŸááºááŒáá»ááºáá
áºáá¯ááŒá
áºáááºá á¡ááœáẠ- áá°ááá¯á·áá²á·á¡ááœááºá¡á
á¬ážá
ááá¯á·áá±á¬áẠááŒá¬ážáá¶ááŸá á¡ááá²á·á§áááá¬áá¡á
ááá¯á· áááºáá¶ááœáŸááºááŒááá¯ááºááẠááœáŸááºááŒáá»ááºááᯠáá±ážááŸááºááá¯á· á¡ááºááááºáá¯ááºááẠááá¯á¡ááºáááº-
msg->b_wptr = msg->b_wptr + size
áá°ážáá°ááŒááºážáááŒá¯áá² ááŸáááŒá®ážáá¬áž ááŒá¬ážáá¶áá áºáá¯á០áááºáá±á·áá»áºáá áºáá¯ááᯠáááºáá®ážááẠááá¯á¡ááºáá«áá áá¯ááºáá±á¬ááºáá»ááºááᯠá¡áá¯á¶ážááŒá¯áá«-
mblk_t *esballoc(uint8_t *buf, int size, int pri, void (*freefn)(void*));
áá¯ááºáá±á¬ááºáá»ááºááẠáááºáá±á·áá»áºááŸáá·áº áá±áá¬ááá±á¬ááºá ááœá²á·á ááºážáá¯á¶ááᯠáááºáá®ážááŒá®ážáá±á¬ááºá áááºážááẠááááºá á¬ááŸá áá±áá¬áá¶ááá¯á· áááºážáááœáŸááºááŒáá»ááºáá»á¬ážááᯠáááºááŸááºáá±ážáááºááŒá áºáááºá buff. á¡á²áá«ááœá±á á€ááá á¹á ááœááºá áá¯ááºáá±á¬ááºáá»ááºááŒáá·áº áá±áá¬ááá±á¬ááºáá áºáá¯ááᯠáááºáá®ážáá±á¬á¡áá«ááœáẠááŒá áºááá²á·ááá¯á· áá±áá¬ááá±á¬ááºá áá±á«ááºážá á®ážá¡ááœááºáá»á¬ážáá±á¬ááºááœáẠáá±áá¬ááŒá¬ážáá¶ááᯠáááœá±á·áá«á datab_alloc(). áá¯ááºáá±á¬ááºáá»ááºááá¯á· áá±ážááá¯á·áá¬ážáá±á¬ áá±áá¬áá«ááŸááá±á¬ ááŒá¬ážáá¶ááẠáááºážááẠáááºážááá±áá¬ááœáẠááŸááá±áááºááŒá áºáá±á¬áºáááºáž ááœáŸááºááŒááŸá¯áá»á¬ážáá¡áá°á¡áá®ááŒáá·áº áááºážááẠá¡áá áºáááºáá®ážáá¬ážáá±á¬ áá±áá¬ááá±á¬ááºá áá±á«ááºážá á®ážááŸáá·áº áááºážááᯠáááºáá±á·áá»áºááœáẠáá»áááºáááºáá¬ážáááºááŒá áºáááºá
áááºáá±á·ááºá»áá áºáá¯ááá¯á· mblk_t áá±áá¬ááá±á¬ááºáá»á¬ážá áœá¬ááᯠáááºááá¯ááºáá±á«ááºážá ááºááá¯ááºáááºá áááºážááᯠfunction á¡á¬ážááŒáá·áºáá¯ááºáá±á¬ááºáááº-
mblk_t * appendb(mblk_t *mp, const char *data, int size, bool_t pad);
mp â á¡ááŒá¬ážáá±áá¬ááá±á¬ááºááᯠáááºááá·áºááá·áº áááºáá±á·áá»áºá
áá±áᬠâ ááá±á¬ááºááá¯ááœáŸááºááŒáá«á áááºáá±á·áá»áºááœááºááá·áºááá·áºáááá¹áá°á
á¡ááœáẠ- áá±áá¬á¡ááœááºá¡á
á¬áž;
pad áá« - ááœá²áá±áááºááŸááºáá¬ážáá±á¬ááŸááºáá¬ááºáá¡ááœááºá¡á
á¬ážááẠ4-byte áááºááááááºáá
áºáá»áŸá±á¬áẠáá»áááºááŸáááááºááŒá
áºááẠ(padding ááᯠáá¯áááŒáá·áºáá¯ááºáá±á¬ááºáááº)á
ááŸáááŒá®ážáá¬áž áááºáá±á·áá»áºáá±áá¬ááŒá¬ážáá¶ááœáẠáá±áá¬á¡áá¯á¶á¡áá±á¬ááºááŸááá»áŸáẠáá±áá¬á¡áá áºááᯠááá¯áá±áá¬ááŸá áá±áá¬áá±á¬ááºááœááºááœáẠáá°ážááá·áºáááºááŒá áºáááºá áááºáá±á·áá»áºááœáẠáá±áá¬ááœááºáááºážáá«ážáá«á data buffer ááẠá¡ááœááºááá¯á·áá±á¬áẠáá¯á¶áá±á¬ááºáá±á¬ ááŒá¬ážáá¶á¡ááœááºá¡á á¬ážááŒáá·áº áááºáá±á·ááºá»á¡áá áºááᯠáááºáá®ážááŒá®áž áá±áá¬ááᯠáááºážáááŒá¬ážáá¶ááá¯á· áá°ážáá°áá«áááºá á€áááºááŸá¬ ááœáŸááºáá¶ááᯠá¡áá¯á¶ážááŒá¯á áá°áááºážá á¬ááŸáá·áº áá»áááºáááºáá¬ážáá±á¬ áááºáá±á·áá»áºá¡áá áºááŒá áºáááºá b_cont. á€ááá á¹á ááœááºá áááºáá±á·áá»áºááẠtuple á¡ááŒá áºááŒá±á¬ááºážáá²ááœá¬ážáááºá
tuple ááœáẠá¡ááŒá¬ážáá±á¬ áá±áá¬ááá±á¬ááºáá»á¬ážááᯠááá·áºááẠááá¯á¡ááºáá«áá áá¯ááºáá±á¬ááºáá»ááºááᯠá¡áá¯á¶ážááŒá¯ááẠááá¯á¡ááºáááº-
void msgappend(mblk_t *mp, const char *data, int size, bool_t pad);
áá°áááẠtuple ááœááºáá±á¬ááºáá¯á¶ážáááºáá±á·ááºá»ááá¯ááœá±á·áááá·áºááẠ(áá°á·ááœááºááŸááááºá b_cont null ááŒá áºáááá·áºáááº) ááŸáá·áº á€áááºáá±á·áá»áºá¡ááœáẠáá¯ááºáá±á¬ááºáá»ááºááᯠáá±á«áºáá«áááºá áá±á¬ááºáááºááœá²().
áá¯ááºáá±á¬ááºáá»ááºááᯠá¡áá¯á¶ážááŒá¯á áááºáá±á·ááºá» ááá¯á·ááá¯áẠtuple ááœáẠáá±áá¬á¡ááœááºá¡á á¬ážááᯠáááºááŸá¬ááœá±ááá¯ááºáááº-
int msgdsize(const mblk_t *mp);
áááºážááẠtuple ááŸá áááºáá±á·ááºá»á¡á¬ážáá¯á¶ážááᯠááŸáá·áºáááºááŒá®áž ááá¯áááºáá±á·áá»áºáá»á¬ážá áá±áá¬ááŒá¬ážáá¶á¡ááœááºážááŸá áá±áá¬á á¯á á¯áá±á«ááºážááá¬áááᯠááŒááºáá±ážáááºááŒá áºáááºá áááºáá±á·áá»áºáá áºáá¯á á®á¡ááœááºá áá±áá¬ááá¬áááᯠá¡á±á¬ááºáá«á¡ááá¯ááºáž ááœááºáá»ááºáááºá
mp->b_wptr - mp->b_rptr
tuple ááŸá áºáá¯ááᯠáá±á«ááºážá ááºááẠáá¯ááºáá±á¬ááºáá»ááºááᯠá¡áá¯á¶ážááŒá¯áá«-
mblk_t *concatb(mblk_t *mp, mblk_t *newm);
áá°áááẠtuple ááá¯ááá·áºáááºá á¡áá Ạtuple áá¡ááŒá®ážá¡áá mp áááẠtuple á áá±á¬ááºáá¯á¶ážáááºáá±á·áá»áºááá¯á· ááœáŸááºááŒáá»ááºááᯠááŒááºáá±ážáááºá
ááá¯á¡ááºáá«á tuple ááᯠdata áá áºáá¯áááºážááŒáá·áº áááºáá±á·áá»áºáá áºáá¯á¡ááŒá áºááá¯á· ááŒá±á¬ááºážáá²ááá¯ááºáááºá áááºážááᯠáá¯ááºáá±á¬ááºáá»ááºááŒáá·áº áá¯ááºáá±á¬ááºáááº-
void msgpullup(mblk_t *mp,int len);
á¡ááŒááºážá¡áá¯á¶ááŒá áºáá»áŸáẠLen ááẠ-1 ááŒá áºááŒá®ážá ááá¯á·áá±á¬áẠááœá²áá±áá±ážáá¬ážáá±á¬ ááŒá¬ážáá¶á á¡ááœááºá¡á á¬ážááᯠá¡ááá¯á¡áá»á±á¬áẠáá¯á¶ážááŒááºáááºá á¡áááºááá¯á· Len á¡áá±á«ááºážááááºážááááºážáá áºáá¯ááŒá áºááŒá®ážá á€á¡ááœááºá¡á á¬ážá ááŒá¬ážáá¶áá áºáá¯ááᯠáááºáá®ážáááºááŒá áºááŒá®áž tuple áááºáá±á·ááºá»áá±áá¬ááᯠáááºážáá²ááá¯á· áá°ážáá°áááºááŒá áºáááºá ááŒá¬ážáá¶áá¯ááºááœá¬ážáá«á áá°ážáá°ááŒááºážááẠááá¯áá±áá¬ááœáẠáááºááœá¬ážáá«áááºá tuple áááááááºáá±á·áá»áºááẠáá°ážáá°áá¬ážáá±á¬áá±áá¬ááŸáá·áºá¡áá° á¡ááœááºá¡á á¬ážááŒá¬ážáá¶á¡áá áºáá áºáá¯ááᯠáááºáá¶áááŸááááºááŒá áºáááºá áá»ááºááŸááá±á¬ áááºáá±á·áá»áºáá»á¬ážááᯠáá»ááºááŒá®áž ááŸááºáá¬ááºááᯠá¡ááŸáá¯ááºáá¯á¶ááá¯á· ááŒááºááœá¬ážáá«áááºá
ááœá²á·á ááºážáá¯á¶ááᯠáá»ááºááá¯ááºáᬠmblk_t áá¯ááºážáá±á«áºááá¯áá±á¬á¡áá«ááœáẠdata block ááááºááœáŸááºážá¡áá±á¡ááœááºááá¯ááá·áºááœááºážá ááºážá á¬ážáááºá freeb() áá¯áááŒá áºááœá¬ážáááºá ááá¯á·áá±á¬áẠdata buffer ááᯠinstance ááŸáá·áºá¡áá° áá»ááºááá¯ááºááẠmblk_tá¡á²áá«ááᯠáá±á¬ááºááŒáááºá
áááºáá±á·áá»áºá¡áá áºáá áºáá¯á áááºáááºáá»á¬ážááᯠá¡á ááŒá¯áá±áááº-
void mblk_init(mblk_t *mp);
áááºáá±á·áá»áºááœáẠá¡ááŒá¬ážáá±áá¬á¡ááá¯ááºážááᯠááá·áºáá±áááº-
mblk_t * appendb(mblk_t *mp, const char *data, size_t size, bool_t pad);
áá±áá¬á¡áá áºááẠáááºáá±á·áá»áºáá±áá¬ááŒá¬ážáá¶á áá±áá¬ááœááºááœáẠáááá¯ááºáá®áá«áá ááá¯á¡ááºááá·áºá¡ááœááºá¡á á¬ážá ááŒá¬ážáá¶áá áºáá¯áá«ááá·áº áá®ážááŒá¬ážáááºáá®ážáá¬ážáá±á¬ á á¬ááá¯ááᯠáááºáá±á·ááºá»ááœáẠááœá²áá±ážááẠ(áááºááá·áºáá¬ážááá·áº áááºáá±á·áá»áºááá¯á· ááœáŸááºááŒáá»ááºááᯠááááááºáá±á·áá»áºááœáẠáááºááŸááºáá¬ážáááº) ááŸáá·áº áááºáá±á·áá»áºááẠtuple á¡ááŒá áºááŒá±á¬ááºážáá²ááœá¬ážáááºá
áá±áá¬á¡ááá¯ááºážá¡á ááᯠtuple áá áºáá¯ááá¯á·ááá·áºááŒááºáž-
void msgappend(mblk_t *mp, const char *data, size_t size, bool_t pad);
function ááẠloop áá áºáá¯ááœáẠappendb() ááá¯áá±á«áºááá¯áááºá
tuple ááŸá áºáá¯ááᯠáá áºáá¯áááºážá¡ááŒá Ạáá±á«ááºážá ááºááŒááºáž
mblk_t *concatb(mblk_t *mp, mblk_t *newm);
áááºáá±á·ááºá»ááᯠá¡áá Ạááœá²áá¬ážáááºá mp.
áááºáá±á·áá»áºáá áºáá¯á áááá¹áá°áá áºáá¯ááᯠááŒá¯áá¯ááºááŒááºáž-
mblk_t *copyb(const mblk_t *mp);
áá±áá¬ááá±á¬ááºáá»á¬ážá¡á¬ážáá¯á¶ážááŒáá·áº tuple áá áºáá¯á¡á¬áž á¡ááŒá®ážáááºáá°ážáá°ááŒááºáž-
mblk_t *copymsg(const mblk_t *mp);
tuple áááŒááºá ááºáá»á¬ážááᯠfunction ááŸáá°ážáá°áááºá copyb().
ááœááºáá°áá±á¬á á¬áá áºá á±á¬ááºááᯠáááºáá®ážáá«á mblk_t. á€ááá á¹á ááœááºá áá±áá¬ááá±á¬ááºááᯠáá°ážáá°ááŒááºážáááŒá¯áá±á¬áºáááºáž áááºážá ááá¯ážáá¬ážááŸá¯áá±á¬ááºáá¬ááẠááá¯ážáá¬áááºá db_ref:
mblk_t *dupb(mblk_t *mp);
tuple ááá±á«á·áá«ážáá±á¬áá±á¬áºáá®áá áºáá¯ááŒá¯áá¯ááºááŒááºážá áá±áá¬ááá±á¬ááºáá»á¬ážááᯠáá°ážáá°ááŒááºážáááŒá¯áá«á áááºážááá¯á·á áááºááœáŸááºážáá±á¬ááºáá¬áá»á¬ážááá¯áᬠááá¯ážááŒáŸáá·áºáá¬ážáááºá db_ref:
mblk_t *dupmsg(mblk_t* m);
tuple áá áºáá¯á áááºáá±á·áá»áºá¡á¬ážáá¯á¶ážááᯠáááºáá±á·ááºá»áá áºáá¯áá²ááá¯á· áá±á«ááºážááá·áºáá«
void msgpullup(mblk_t *mp,size_t len);
á¡ááŒááºážá¡áá¯á¶ááŒá áºáá»áŸáẠLen ááẠ-1 ááŒá áºááŒá®ážá ááá¯á·áá±á¬áẠááœá²áá±áá±ážáá¬ážáá±á¬ ááŒá¬ážáá¶á á¡ááœááºá¡á á¬ážááᯠá¡ááá¯á¡áá»á±á¬áẠáá¯á¶ážááŒááºáááºá
áááºáá±á·áá»áºááᯠáá»ááºáá±áááºá tuple-
void freemsg(mblk_t *mp);
áá±áá¬ááá±á¬ááºá áááºááœáŸááºážááááºážááᯠáá áºáá¯ááŒá®ážáá áºáᯠáá»áŸá±á¬á·áá»áááºá áá¯áááá¯á·áá±á¬ááºáá»áŸáẠáá±áá¬ááá±á¬ááºááá¯áááºáž áá»ááºáá áºáááºá
áááºáá±á·áá»áº ááá¯á·ááá¯áẠtuple áá áºáá¯ááŸá áá±áá¬á á¯á á¯áá±á«ááºážááá¬áááᯠááœááºáá»ááºááŒááºážá
size_t msgdsize(const mblk_t *mp);
áááºážá á®áá¡ááŒá®ážá០áááºáá±á·áá»áºááᯠááŒááºáááºááá°áá±áááº-
mblk_t *ms_queue_peek_last (q);
áááºáá±á·áá»áºáá áºáá¯á áá®ážááá·áºá¡ááœááºáá»á¬ážá á¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážááᯠá¡ááŒá¬ážáááºáá±á·áá»áºáá áºáá¯ááá¯á· áá°ážáá°ááŒááºáž (ááááºáá±á¬á·á á€á¡ááœááºáá»á¬ážááœáẠáá®áá®áá¬áá¯ááºááœáŸáá·áºáá°á០á¡áá¯á¶ážááŒá¯ááá·áº á¡áá¶áá»á¬ážáá«ááŸááááº)
mblk_meta_copy(const mblk_t *source, mblk *dest);
ááŸáá·áº áááºážá á®áááº
áá®áá®áá¬áá¯ááºááœáŸáá·áºáá°ááŸá áááºáá±á·áá»áºáááºážá
á®ááŒááºážááᯠá
ááºááá¯ááºážáá¯á¶ááŸá
áºáááºáá»áááºáááºáá¬ážáá±á¬á
á¬áááºážá¡ááŒá
Ạá¡áá±á¬ááºá¡áááºáá±á¬áºáááºá á
á¬áááºážááŒááºá
ááºáá
áºáá¯á
á®ááœáẠá¡áá»ááºááŒááá°áá¬áá»á¬ážáá«ááŸááá±á¬ áá±áá¬ááá±á¬ááºáá®ááá¯á· ááœáŸááºááŒáá»ááºáá
áºáá¯áá«ááŸááááºá áá±áá¬ááá±á¬ááºááᯠááœáŸááºááŒáá¯á¶áá»áŸáᬠá¡ááŸáá·áºá¡ááŒá±á¬ááºážááŒá
áºááŒá®áž áá±áá¬ááá¯ááºááá¯ááºá áááŸá¯ááºáááŸááºááŒá
áºáá±áá«áááºá á¡á²áá«ááœá±á áááºážááá¯á·áá¶ááá¯á· ááá·áºááºáá»á¬ážááá¯áᬠááœáŸá±á·áá¬ážáááºá
áááºážá
á®ááŒááºážááᯠáá±á¬áºááŒááá·áº ááœá²á·á
ááºážáá¯á¶ áááºážá
á®áááº, á¡á±á¬ááºááœááºáá±á¬áºááŒáá¬ážáá±á¬:
typedef struct _queue
{
mblk_t _q_stopper; /* "ХПлПÑÑПй" ÑÐ»ÐµÐŒÐµÐœÑ ÐŸÑеÑеЎО, Ме ÑказÑÐ²Ð°ÐµÑ ÐœÐ° ЎаММÑе, ОÑпПлÑзÑеÑÑÑ ÑПлÑкП ÐŽÐ»Ñ ÑпÑÐ°Ð²Ð»ÐµÐœÐžÑ ÐŸÑеÑеЎÑÑ. ÐÑО ОМОÑОалОзаÑОО ПÑеÑеЎО (qinit()) егП ÑказаÑелО МаÑÑÑаОваÑÑÑÑ Ñак, ÑÑÐŸÐ±Ñ ÐŸÐœÐž ÑказÑвалО Ма МегП ÑаЌПгП. */
int q_mcount; // ÐПлОÑеÑÑвП ÑлеЌеМÑПв в ПÑеÑеЎО.
} queue_t;
ááœá²á·á
ááºážáá¯á¶ááœáẠá¡ááœááºáá
áºáᯠ- ááœáŸááºááŒáá»ááºáá
áºáᯠáá«ááŸááááºá _q_ááá¯á· *mblk_t áá¯ááá¯ááºáá«á áááºážááẠáááºážá
á®ááŸá áááááŒááºá
áẠ(áááºáá±á·ááºá») ááá¯ááœáŸááºááŒáááºá ááœá²á·á
ááºážáá¯á¶á áá¯áááá¡ááœááºááẠáááºážá
á®ááŸá áááºáá±á·áá»áºáá»á¬ážá áááºááŒááºááŒá
áºáááºá
á¡á±á¬ááºáá«áá¯á¶ááẠm1á m4á m1á m2 áááºáá±á·áá»áº 3 á
á±á¬ááºáá«ááŸááá±á¬ q4 á¡áááºááŸá áááºážá
á®áá
áºáá¯ááᯠááŒááá¬ážáááºá
á¡á±á¬ááºáá«áá¯á¶ááẠm1,m4,m1,m2 áááºáá±á·áá»áº 3 á
á±á¬ááºáá«ááŸááá±á¬ q4 á¡áááºááŸá áááºážá
á®áá
áºáá¯ááᯠááŒááá¬ážáááºá Message m2 ááẠm2_1 ááŸáá·áº m2_2 ááŸá
áºáá¯áá«ááŸááá±á¬ tuple áá
áºáá¯á áá±á«ááºážááŒá
áºáááºá
áááºážá á®ááŒááºáž queue_t ááŒáá·áº áá¯ááºáá±á¬ááºááŒááºážá¡ááœáẠáá¯ááºáá±á¬ááºáá»ááºáá»á¬áž
áááºážá á®á¡á áá»áá¯ážááŒááºáž-
void qinit(queue_t *q);
áááºáᬠ_q_ááá¯á· (áá±á¬ááºááŸáá»áœááºá¯ááºááá¯á·áááºážááᯠ"stopper" áá¯áá±á«áºáááº) áá¯ááºáá±á¬ááºáá»ááºááŒáá·áºá áááºáááºá mblk_init()áááºážáááááºááŒááºá ááºááŸáá·áº áá±á¬ááºááŒááºá ááºááœáŸááºááŒáá»ááºááᯠáá°á·áá¬áá¬áá°ááœáŸááºááŒááẠáá»áááºááŸááá¬ážáááºá áááºážá á®ááŒááºá ááºáá±á¬ááºáá¬ááᯠáá¯áááá¯á· ááŒááºáááºáááºááŸááºáá¬ážáááºá
ááŒááºá ááºá¡áá Ạ(áááºáá±á·áá»áºáá»á¬ážááá·áºááŒááºáž)
void putq(queue_t *q, mblk_t *m);
ááŒááºá ááºá¡áá Ạm á á¬áááºážáá¡áá¯á¶ážááœáẠááá·áºááœááºážáá¬ážáááºá ááŒááºá ááºááœáŸááºááŒááŸá¯áá»á¬ážááᯠáá»áááºááŸááá¬ážáá±á¬ááŒá±á¬áá·áº stopper ááẠáááºážá¡ááœáẠáá±á¬ááºáááºááŒááºá ááºááŒá áºáá¬ááŒá®áž áááºážááẠááá¯á·áá«á¡ááœáẠááááºááŒááºá ááºááŒá áºáá¬áááºááŒá áºáááºá áááºážá á®ááŒááºá ááºáá±á¬ááºáá¬ááᯠááá¯ážáá¬ážáááºá
áááºážá á®á០á¡á áááºá¡ááá¯ááºážáá áºáá¯ááᯠááŒááºáááºááá°áá±áááº-
mblk_t * getq(queue_t *q);
ááááºá ááᯠááŒááºáá°ááŒá®ážáá±á¬áẠááœááºáá±á«áºáá¬ááá·áº áááºáá±á·áá»áºááŸáá·áº ááŒááºá ááºáá±á¬ááºáá¬ááᯠáá»áŸá±á¬á·áá»áá¬ážáááºá ááá¯á·áá«ááŸááœá²á áááºážá á®ááœáẠá¡á áááºá¡ááá¯ááºážáá»á¬áž áááŸááá«á 0 ááᯠááŒááºáá±ážáááºá
áááºážá á®áá áºáá¯áá²ááá¯á· áááºáá±á·áá»áºááᯠááá·áºááœááºážááŒááºáž-
void insq(queue_t *q, mblk_t *emp, mblk_t *mp);
áá«áẠmp ááŒááºá ááºááŸá±á·ááœááºááá·áºááœááºážáá¬ážáááºá áááºážááá¯ááºááœááºážá áá»áŸáẠáááºážááá¯ááºááœááºáž=0á ááá¯á·áá±á¬áẠá á¬ááᯠáááºážá á®áá¡ááŒá®ážááœáẠááá·áºáá¬ážáááºá
áááºážá á®á á¡ááŒá®ážá¡áá²áá¶á០áááºáá±á·áá»áºááᯠááŒááºáááºááá°áá±áááº-
void remq(queue_t *q, mblk_t *mp);
ááŒááºá ááºáááºááŒááºááᯠáá»áŸá±á¬á·áá»áá¬ážáááºá
áááºážá á®ááŸá áááááŒááºá ááºáá®ááá¯á· ááœáŸááºááŒáá»ááºááᯠáááºáá±áááº-
mblk_t * peekq(queue_t *q);
ááŒááºá ááºáá»á¬ážááá¯ááºááá¯ááºáá»ááºáá±á áẠáááºážá á®á០á¡á áááºá¡ááá¯ááºážá¡á¬ážáá¯á¶ážááᯠáááºááŸá¬ážááŒááºáž-
void flushq(queue_t *q, int how);
á¡ááŒááºážááœá¬ážááŸá¯ áááºááᯠá¡áá¯á¶ážáááŒá¯áá«á áááºážá á®ááŒááºá ááºáá±á¬ááºáá¬ááᯠáá¯ááᯠáááºááŸááºáá¬ážáááºá
áááºážá á®ááá±á¬ááºáá¯á¶ážááŒááºá ááºáá®ááá¯á· ááœáŸááºááŒáá»ááºááá¯áááºáááºá¡ááœáẠMacro
mblk_t * qlast(queue_t *q);
áááºáá±á·áá»áºáááºážá á®ááŒááºážáá»á¬ážááŒáá·áº á¡áá¯ááºáá¯ááºáá±á¬á¡áá«á áááºáá¯ááºážáá±á«áºááá·áºá¡áá« ááááá¬ážáá«á ms_queue_put(qá m) áááºáá±á·áá»áºááá¯á· null pointer ááŒáá·áºá function ááẠloops ááŒá áºáááºá áááºááááá¯ááááºááẠá¡á±ážáá²ááœá¬ážáááá·áºáááºá á¡áá¬ážáá°ááŒá¯áá°áááºá ms_queue_next(qá m).
á á áºáá¯ááºááŸá¯áá»á¬ážááᯠáá»áááºáááºááŒááºážá
á¡áááºááœááºáá±á¬áºááŒáá¬ážáá±á¬ áááºážá á®ááẠáááºáá±á·áá»áºáá»á¬ážááᯠá á áºáá¯ááºááŸá¯áá áºáá¯á០á¡ááŒá¬ážáá áºáá¯ááá¯á· ááá¯á·ááá¯áẠáá áºáá¯á០á á áºáá¯ááºááŸá¯áá»á¬ážá áœá¬ááá¯á· áá±ážááá¯á·ááẠá¡áá¯á¶ážááŒá¯áááºá á á áºáá¯ááºááŸá¯áá»á¬ážááŸáá·áº áááºážááá¯á·ááá»áááºáááºááŸá¯áá»á¬ážááẠááœáŸááºááŒá¬ážááááºáá¯á¶á á¶áá áºáá¯ááŒá áºáááºá á á áºáá¯ááºááŸá¯á á¡ááẠááá¯á·ááá¯áẠá¡ááœááºááᯠáá±áá¯áá»á áá¬ážáá¯á¶áž âáááºâ áá¯áá±á«áºáááºá áá áºáá¯ááŸáá·áºáá áºáá¯áá»áááºáááºáá¬ážááá·áº filter áá»á¬ážááá¯áá±á¬áºááŒáááºá media streamer ááẠ"signal point" áááá±á¬ááá¬ážááá¯á¡áá¯á¶ážááŒá¯áááºá á¡áá»ááºááŒá¡áá»ááºááŸá¬ ááœá²á·á ááºážáá¯á¶ááŒá áºáááºá _MSCPPointá á áºáá¯ááºáááºá¡ááœáẠááœáŸááºááŒáá»ááºáá áºáá¯ááŸáá·áº áááºážááááºáá¶áá«ááºáá áºáá¯á áá¶áá«ááºáá«áááºáááºá ááá¯á·ááŒá±á¬áá·áºá áááºážááẠfilter á input ááá¯á·ááá¯áẠoutput áá áºáá¯á áá»áááºáááºááŸá¯ááᯠáá±á¬áºááŒáááºá
áá±áá¬áá¯ááºáá±á¬ááºááŒááºážááááºá á¡áá»ááºááŒá¡ááŸááº
typedef struct _MSCPoint{
struct _MSFilter *filter; // УказаÑÐµÐ»Ñ ÐœÐ° ÑОлÑÑÑ ÐŒÐµÐŽÐžÐ°ÑÑÑОЌеÑа.
int pin; // ÐÐŸÐŒÐµÑ ÐŸÐŽÐœÐŸÐ³ÐŸ Оз вÑ
ПЎПв ОлО вÑÑ
ПЎПв ÑОлÑÑÑа, Ñ.е. пОМ.
} MSCPoint;
Filter pin áá»á¬ážááᯠáá¯áááŸá áááºá áá¶áá«ááºáááºáá¬ážáá«áááºá
áááºáá±á·áá»áºáá áºáá¯ááŒáá·áº áááºáááºážááŸá áºáá¯á áá»áááºáááºááŸá¯ááᯠááœá²á·á ááºážáá¯á¶ááŒáá·áº áá±á¬áºááŒáááºá _MSQueueáááºáá±á·áá»áºáááºážá á®ááŒááºážááŸáá·áº áááºážááŸáá·áºáá»áááºáááºáá¬ážááá·áº á¡áá»ááºááŒá¡áá»ááºááŸá áºáá¯áá®ááá¯á· ááœáŸááºááŒáá»ááºáá»á¬ážáá«ááŸááá±á¬á
typedef struct _MSQueue
{
queue_t q;
MSCPoint prev;
MSCPoint next;
}MSQueue;
á€ááœá²á·á ááºážáá¯á¶ááᯠsignal link áá¯áá±á«áºáá«áááºá media streamer filter áá áºáá¯á á®ááœáẠinput link ááá¬ážáá áºáá¯ááŸáá·áº output link ááá¬ážáá áºáá¯áá«ááŸáááẠ(MSQueue) á á áºáá¯ááºááŸá¯áááºáá®ážáá¬ááœáẠááá¬ážáá»á¬ážá á¡ááœááºá¡á á¬ážááᯠáááºááŸááºáá¬ážáááºá áá»áœááºá¯ááºááá¯á·ááẠá¡áá»áá¯ážá¡á á¬ážá áá¯ááºáá°áá¬ážáá±á¬ ááŒá±á¬ááºážááœá²ááŒá±á¬ááºážááᯠá¡áá¯á¶ážááŒá¯á áááºážááᯠáá¯ááºáá±á¬ááºááŒá®ážááŒá áºáááºá MSFilterDescáá»áœááºá¯ááºááá¯á·áááá¯ááºááá¯áẠfilter ááá¯áá®ááœááºáá±á¬á¡áá«á á¡á±á¬ááºááœááºáá±á¬áºááŒáá¬ážáá±á¬áá¯á¶á á¶ááẠáá®áá®áá¬áá¯ááºááœáŸáá·áºáá°ááŸá áááºááá·áº filter ááá¯áááá¯áá±á¬áºááŒáá±á¬ááœá²á·á ááºážáá¯á¶ááŒá áºáááºá MSFilter:
struct _MSFilter{
MSFilterDesc *desc; /* УказаÑÐµÐ»Ñ ÐœÐ° ЎеÑкÑОпÑÐŸÑ ÑОлÑÑÑа. */
/* ÐаÑОÑеММÑе аÑÑОбÑÑÑ, ОÑ
МелÑÐ·Ñ ÑЎвОгаÑÑ ÐžÐ»Ðž ÑбОÑаÑÑ ÐžÐœÐ°Ñе бÑÐŽÐµÑ ÐœÐ°ÑÑÑеМа ÑабПÑа Ñ Ð¿Ð»Ð°Ð³ÐžÐœÐ°ÐŒÐž. */
ms_mutex_t lock; /* СеЌаÑПÑ. */
MSQueue **inputs; /* ТаблОÑа вÑ
ПЎМÑÑ
лОМкПв. */
MSQueue **outputs; /* ТаблОÑа вÑÑ
ПЎМÑÑ
лОМкПв. */
struct _MSFactory *factory; /* УказаÑÐµÐ»Ñ ÐœÐ° ÑабÑОкÑ, кПÑПÑÐ°Ñ ÑПзЎала ЎаММÑй ÑкзеЌплÑÑ ÑОлÑÑÑа. */
void *padding; /* Ðе ОÑпПлÑзÑеÑÑÑ, бÑÐŽÐµÑ Ð·Ð°ÐŽÐµÐ¹ÑÑвПваМ еÑлО ЎПбавÑÑÑÑ Ð·Ð°ÑОÑеММÑе пПлÑ. */
void *data; /* УказаÑÐµÐ»Ñ ÐœÐ° пÑПОзвПлÑÐœÑÑ ÑÑÑÑкÑÑÑÑ ÐŽÐ»Ñ Ñ
ÑÐ°ÐœÐµÐœÐžÑ ÐŽÐ°ÐœÐœÑÑ
вМÑÑÑеММегП ÑПÑÑПÑÐœÐžÑ ÑОлÑÑÑа О пÑПЌежÑÑПÑÐœÑÑ
вÑÑОÑлеМОй. */
struct _MSTicker *ticker; /* УказаÑÐµÐ»Ñ ÐœÐ° ПбÑÐµÐºÑ ÑОкеÑа, кПÑПÑÑй Ме ЎПлжеМ бÑÑÑ ÐœÑлевÑÐŒ кПгЎа вÑзÑваеÑÑÑ ÑÑМкÑÐžÑ process(). */
/*private attributes, they can be moved and changed at any time*/
MSList *notify_callbacks; /* СпОÑПк ПбÑаÑÐœÑÑ
вÑзПвПв, ОÑпПлÑзÑеЌÑÑ
ÐŽÐ»Ñ ÐŸÐ±ÑабПÑкО ÑПбÑÑОй ÑОлÑÑÑа. */
uint32_t last_tick; /* ÐÐŸÐŒÐµÑ Ð¿ÐŸÑлеЎМегП ÑакÑа, кПгЎа вÑпПлМÑлÑÑ Ð²ÑзПв process(). */
MSFilterStats *stats; /* СÑаÑОÑÑОка ÑабПÑÑ ÑОлÑÑÑа.*/
int postponed_task; /*ÐПлОÑеÑÑвП ПÑлПжеММÑÑ
заЎаÑ. ÐекПÑПÑÑе ÑОлÑÑÑÑ ÐŒÐŸÐ³ÑÑ ÐŸÑклаЎÑваÑÑ ÐŸÐ±ÑабПÑÐºÑ ÐŽÐ°ÐœÐœÑÑ
(вÑзПв process()) Ма МеÑкПлÑкП ÑакÑПв.*/
bool_t seen; /* Ѐлаг, кПÑПÑÑй ОÑпПлÑзÑÐµÑ ÑОкеÑ, ÑÑÐŸÐ±Ñ Ð¿ÐŸÐŒÐµÑаÑÑ ÑÑП ÑÑÐŸÑ ÑкзеЌплÑÑ ÑОлÑÑÑа ПМ Ñже ПбÑлÑжОл Ма ЎаММПЌ ÑакÑе.*/
};
typedef struct _MSFilter MSFilter;
áá»áœááºá¯ááºááá¯á·áá¡á á®á¡á ááºááŸáá·áºá¡áá® C áááá¯ááááºááŸá filters áá»á¬ážááá¯áá»áááºáááºááŒá®ážáá±á¬áẠ(ááá¯á·áá±á¬áº ticker ááá¯ááá»áááºáááºáá²á·áá«)á ááá¯á·ááŒáá·áº áá»áœááºá¯ááºááá¯á·ááẠdirected graph áá áºáá¯á áááºáá±á¬ááºáá¯á¶áá¥ááá¬áá»á¬ážááŒá áºááá·áº node áá»á¬ážááá¯áááºáá®ážáá²á·áá«áááºá MSFilterááŸáá·áº edges áá»á¬ážááẠááá·áºááºáá»á¬ážá á¥ááá¬áá»á¬ážááŒá áºáááºá MSQueue.
ááŒá±á¬áºááŒá¬á áá±á¬ááºááœááºááœáẠááŸá¯ááºááŸá¬ážááŸá¯áá»á¬áž
ticker ááẠtick áá»á¬ážááááºážááŒá áºá¡ááœáẠfilter áá áºáá¯ááŒá áºááŒá±á¬ááºáž ááá·áºá¡á¬ážááŒá±á¬áá±á¬á¡áá«á áááºážááŸáá·áºáááºáááºááá·áº á¡áá¯á¶ážá á¯á¶á¡ááŸááºááá¬ážááá¯ááºáá±á ticker ááẠáá¬áá®áá±á«áºááœáẠáá¯ááºáá±á¬ááºááá¯ááºáá±á¬ á¡áá¬áá áºáá¯ááŒá áºáááºá áá¯ááºáááºážá ááº() áááºážááŸáá·áºáá»áááºáááºáá¬ážááá·áº circuit (ááááº) á filter áá»á¬ážá¡á¬ážáá¯á¶ážá áá»áœááºá¯ááºááá¯á·ááẠC áááá¯ááááºááŸá ááááºáá áºáá áºáá áºáá¯ááŸáá·áº áá»áááºáááºáá±á¬á¡áá«á áá»áœááºá¯ááºááá¯á· áááºážááᯠáááááºááá»ááºáž áááºážá០ááááºážáá»á¯ááºááá·áº ááááºáá áºááᯠááŒááá±ážáá«áááºá áá»áááºáááºááŒá®ážáá±á¬ááºá ticker ááẠáááºážáá á±á¬áá·áºááŸá±á¬ááºááŸá¯á¡ááœáẠá¡ááºááŸááºážáá¬ážááá·áº ááááºááᯠá áááºá á áºáá±ážááŒá®áž áááºážááœááºáá«áááºááá·áº á á áºáá¯ááºááŸá¯áá»á¬ážá á¬áááºážááᯠááŒá¯á á¯áá«á áá°áá®áá±á¬á á áºáá¯ááºááŸá¯ááᯠááŸá áºááŒáááºáá±ááœááºááŒááºážáááŒá¯á á±áááºá áááºážááá¯á·ááœáẠá¡ááŸááºááŒá áºáá±á¬ááºá áºáá áºáá¯ááá·áºááŒááºážááŒáá·áº ááŸá¬ááœá±ááœá±á·ááŸááá¬ážáá±á¬ á á áºáá¯ááºááŸá¯áá»á¬ážááᯠá¡ááŸááºá¡áá¬ážááŒá¯áá«áááºá ááŒááºááŒ. á á áºáá¯ááºááŸá¯áá áºáá¯á á®áá«ááŸááá±á¬ ááá·áºááºááá¬ážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á ááŸá¬ááœá±ááŸá¯ááᯠáá¯ááºáá±á¬ááºáááºá
ááááºá ááááºáááºááá®ážá ááºá¡ááœááºážá ticker ááẠáá±áá¬ááááºááá¯á·ááŒááºážááááºážááŒá áºá¡ááŒá Ạáá¯ááºáá±á¬ááºááá·áº á á áºáá¯ááºááŸá¯áá»á¬ážááœáẠá¡áááºážáá¯á¶ážáá áºáá¯ááŸááááŸá á á áºáá±ážáá«áááºá áá áºáá¯áá»áŸáááŸááá«áá ááááºáá áºááẠááŸá¬ážááœááºážáááºáᯠáá°áááŒá®áž áááºááŸááºáá»ááºááœá¬ážáááºá
ááááºááẠâááŸááºáááºáááºâ áᯠáá±á«áºáá¬áá«áá ááœá±á·ááŸááá±á¬ filter áá áºáá¯á á®á¡ááœááºá áá¯ááºáá±á¬ááºáá»ááºááᯠáááŠážáá¯ááºáá±á¬ááºááẠáá±á«áºáááºá ááŒáá¯áááºáá¯ááºáá±á¬ááºááŸá¯(). áá±á¬ááºáááºáá¯ááºáá±á¬ááºááŒááºážá ááºáááºážá¡ááœáẠá¡ááá¯ááºá¡ááá·áºáá±á¬ááºááŸááááºááŸáá·áºáááŒáá¯ááºááẠ(áá¯á¶ááŸááºá¡á¬ážááŒáá·áº 10 áá®áá®á áá¹ááá·áºááá¯ááºáž)á ticker ááẠáá¯ááºáá±á¬ááºáá»ááºááᯠáá±á«áºááẠáá¯ááºáááºážá ááº() ááááºá ááœá±á·ááŸááá²á·áá±á¬ á¡áááºážá¡ááŒá Ạá á áºáá¯ááºááŸá¯áá»á¬áž á¡á¬ážáá¯á¶ážá¡ááœááºá ááá¯á·áá±á¬áẠá á¬áááºážááŸá áá»ááºááŸááá±á¬ á á áºáá¯ááºááŸá¯áá»á¬áž á¡ááœááºá filter ááœáẠinput link áá»á¬ážááŸááá«á function ááᯠrun áá«á áá¯ááºáááºážá ááº() ááá·áºááœááºážááá·áºááá·áºááºáááºážá á®áá»á¬áž ááœááºááœá¬ážáááºá¡áá áááºáá¯ááºáá«á áááºážááŒá®ážáá±á¬ááºá áááºážááẠá á¬áááºážááŸááá±á¬áẠfilter ááá¯á·ááœáŸá±á·ááŒá®áž ááá·áºááœááºážááá·áºááá·áºááºáá»á¬ážááẠáááºáá±á·áá»áºáá»á¬ážááá«áááºááá»ááºáž áááºážááᯠ"scroll" áá¯ááºáá«á áááºááŸááºááẠá á¬áááºážááŒá®ážáá¯á¶ážáááºá¡áá á á áºáá¯ááºááŸá¯á០á á áºáá¯ááºááẠááœáŸá±á·áááºá áááºážááẠá ááºáááºážááá¯ááºáá±á¬ááºááŸá¯ááᯠááŒá®ážááŒá±á¬ááºá á±áááºá
ááá¯áá»áœááºá¯ááºááá¯á·ááẠtuples ááá¯á·ááŒááºááœá¬ážáᬠá¡áááºááŒá±á¬áá·áºááá¯áá²á·ááá¯á·áá±á¬á¡ááŒá±á¬ááºážá¡áá¬ááᯠáá®áá®áá¬áá¯ááºááœáŸáá·áºáá°áá¶ááá·áºááœááºážáá²á·áááºááᯠááœá±ážááœá±ážáá«áááºá áá±áá¯áá»á¡á¬ážááŒáá·áºá á á áºáá¯ááºááŸá¯á¡ááœááºáž áá¯ááºáá±á¬ááºáá±áá±á¬ algorithm á០ááá¯á¡ááºáá±á¬ áá±áá¬ááá¬áááẠáá°áá®ááŸá¯áááŸáááá·áºá¡ááŒáẠááá·áºááœááºážááŸá¯ááœáẠáááºáá¶áááŸáááá·áº áá±áá¬ááŒá¬ážáá¶ááá¬áá áá»á¬ážááŒá¬ážááŒááºážááá¯ááºáá«á á¥ááá¬á¡á¬ážááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááẠáá»ááºááŒááºáá±á¬ Fourier á¡ááœááºááŒá±á¬ááºážááŸá¯ááᯠáá¯ááºáá±á¬ááºááá·áº á á áºáá¯ááºááŸá¯áá áºáá¯ááᯠáá±ážáá¬ážáá±áááºá á¡áááá¹áá«ááºá¡á¬ážááŒáá·áº á¡ááœááºá¡á á¬ážááŸá áºáá¯ááŸááá±á¬ áá«áá«ááŸááá±á¬ áá±áá¬ááá±á¬ááºáá»á¬ážááá¯áᬠáá¯ááºáá±á¬ááºááá¯ááºáááºá 512 á¡áá±á¡ááœááºááŒá áºáá«á á±á á¡áááºá áá±áá¬ááᯠáááºáá®áá¯ááºážáá»ááºáááºáá áºáá¯á០áá¯ááºáá±ážáá«áá ááá·áºááœááºážááŸá¯ááœáẠáááºáá±á·áá»áºáá áºáá¯á á®á áá±áá¬ááŒá¬ážáá¶ááẠáá»áœááºá¯ááºááá¯á·á¡á¬áž á¡áá»ááºááŒááá°áᬠááá ááᯠáá°áá±á¬ááºáá¬áááºááŒá áºáááºá áááºážááẠááá¯á¡ááºáá±á¬ áá±áá¬ááá¬áááŸááááºá¡áá ááá·áºááœááºážááŸá¯á០áá±áá¬ááᯠáá á¯áá±á¬ááºážááẠááœá²áá±á¬ááºáá±áááºá ááá¯á·áá±á¬áº á€ááá á¹á ááœááºá ááá·áºááœááºážááá·áºááá·áºááºááẠááá¬ááŒá áºáá±áááºá¡áá á á áºáá¯ááºááŸá¯á¡á¬áž ááŸááá·áºáááºááŒáá¯ážá á¬ážáá±á¬áºáááºáž áá¡á±á¬ááºááŒááºáá«á ticker ááŸáá·áº ááá¯ááºáááááºááŒá áºáááºá ááááºá áá»áœááºá¯ááºááá¯á·ááẠá€á ááºážáá»ááºážááᯠá á áºáá¯ááºááŒááºážá áááááááá¬áá¡ááŒá ẠáááºááŸááºáá²á·áááºá á€ááá±á¬ááá¬ážá¡áá filter á process() function ááẠinput queues á០data á¡á¬ážáá¯á¶ážááá¯áá°ááá«áááºá
ááá¯á·á¡ááŒááºá áááºááá·áºááœááºážááŸá¯ááŸááá°áᬠ512 ááá¯áá¬áá°áááºáááŒá áºááá¯ááºáá«á ááá¯ááá¯áááºááŸá¬áááºáá áºáá¯á¶ážáá¯á¶ážááá¯áá¬áá°ááá¯ááºáá±á¬ááŒá±á¬áá·áºá filter ááẠááá°áᬠ640 ááá¯áá°á áááºážááá¯á·áá²á០512 áá¯ááá¯á¡áá¯á¶ážááŒá¯ááááºááŒá áºááŒá®ážá áá»ááºááŸááá±á¬ data áá¡á áááºá¡ááá¯ááºážá¡áá áºááá¯áá á¯áá±á¬ááºážáá®á ááá¯á·ááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á·á filter ááẠáááºážáá¡áááá¡áá¯ááºá¡ááŒááºá ááá·áºááœááºážááá·áºáá±áá¬ááᯠá¡áááºá¡áááºááá¯ááŸá±á¬ááºááŸá¯á¡ááœáẠá¡áááºáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠáá±ážááá«áááºá media streamer á developer áá»á¬ážááẠtuples ááá¯á¡áá¯á¶ážááŒá¯á á€ááŒá¿áá¬ááá¯ááŒá±ááŸááºážáá±ážááá·áº á¡áá°áž object - MSBufferizer (buffer) ááᯠáá®ááœááºáá²á·ááŒáááºá
ááŒá¬ážáá¶áááááᬠ(MSBufferizer)
á€á¡áá¬ááẠá
á
áºáá¯ááºááŸá¯á¡ááœááºáž ááá·áºááœááºážááá·áºáá±áá¬ááᯠá
á¯ááŒá¯á¶á
á±ááŒá®áž á¡áá»ááºá¡áááºááá¬ááá¯á¶áá±á¬ááºáááºááŸáá·áº á
á
áºáá¯ááºááŸá¯ á¡ááºáááá¯áá®áááºááᯠáá¯ááºáá±á¬ááºááẠáá¯á¶áá±á¬ááºáááºááŸáá·áº áááºážááᯠá
áááºáá¯ááºáá±á¬ááºáááºá¡ááœáẠá
áááºáááºááŒááá·áº á¡áá¬áá
áºáá¯ááŒá
áºáááºá ááŒá¬ážáá¶ááẠáá±áá¬á
á¯áá±á¬ááºážáá±á
ááºá áááá¯áááºáá¬á áá¯ááºáá±á¬ááºááá¯ááºá
áœááºážááᯠá¡áá¯á¶ážáááŒá¯áá²á á
á
áºáá¯ááºááŸá¯ááẠááŸá¯ááºááŸá¯ááºááŸá¬ážááŸá¬ážáá¯ááºááœáẠáááºáááºáááºááŒá
áºáááºá ááá¯á·áá±á¬áº buffer ááŸáááºááŸá¯ááŒááºážáá¯ááºáá±á¬ááºáá»ááºááẠáá¯áááŸááœá²á á¡ááŒá¬ážáááºááá¯ážáá
áºáá¯ááŒááºáá¬áááºááŸáá·áºáááŒáá¯ááºáááºá filter á process() function ááẠááá¯á¡ááºááá·áºá¡ááœááºá¡á
á¬ážáá¡ááá¯ááºážáá»á¬ážááœáẠbuffer ááŸáá±áá¬áá»á¬ážááá¯ááá°ááŒá®áž áá¯ááºáá¯á¶ážáááºá¡áááá¯ááºáá±á¬ááºáá«áááºá
áááá¯á¡ááºáá±ážáá±á¬áá±áá¬ááẠtuple ááááááŒááºá
ááºá¡ááŒá
Ạbuffer ááœááºáá»ááºááŸááá±ááŒá®ážá áááºážáá±á¬ááºáááºááœá²ááá·áºááœááºážááá·áºáá±áá¬ááá¯ááá·áºááœááºážáá¬ážááá·áºááááºááá¯á·áá¬ážáááºá
ááŒá¬ážáá¶ááá¯áá±á¬áºááŒááá·áºááœá²á·á ááºážáá¯á¶-
struct _MSBufferizer{
queue_t q; /* ÐÑеÑÐµÐŽÑ ÑППбÑеМОй. */
int size; /* СÑЌЌаÑÐœÑй ÑÐ°Ð·ÐŒÐµÑ ÐŽÐ°ÐœÐœÑÑ
МаÑ
ПЎÑÑОÑ
ÑÑ Ð² бÑÑеÑОзаÑПÑе в ЎаММÑй ЌПЌеМÑ. */
};
typedef struct _MSBufferizer MSBufferizer;
MSBufferizer ááŒáá·áº áá¯ááºáá±á¬ááºááẠáá¯ááºáá±á¬ááºáá»ááºáá»á¬áž
ááŒá¬ážáá¶á¥ááá¬á¡áá áºáá áºáá¯ááᯠáááºáá®ážáá±áááº-
MSBufferizer * ms_bufferizer_new(void);
Memory ááᯠááœá²áá±áá±ážáááºá ááœáẠá¡á ááŒá¯áá«áááºá ms_bufferizer_init() ááœáŸááºááŒáá»ááºááᯠááŒááºáá±ážáááºá
á áááºáá¯ááºáá±á¬ááºááŒááºáž-
void ms_bufferizer_init(MSBufferizer *obj);
áááºážá á®ááŒááºážááᯠá áááºáá±áá«áááºá qáááẠá¡ááœáẠáá¯ááᯠáááºááŸááºáá¬ážáááºá
áááºáá±á·áá»áºááᯠááá·áºáá±áááº-
void ms_bufferizer_put(MSBufferizer *obj, mblk_t *m);
áááºáá±á·áá»áº m ááᯠáááºážá á®ááẠááá·áºáá¬ážáááºá ááœááºáá»ááºáá¬ážáá±á¬ áá±áá¬ááá±á¬ááºáá»á¬ážá á¡ááœááºá¡á á¬ážááᯠááá·áºááœááºážáá¬ážáááºá á¡ááœááº.
ááá·áºááºáá±áá¬áááºážá á®á០á á¬á¡á¬ážáá¯á¶ážááᯠááŒá¬ážáá¶ááá¯á· ááœáŸá²ááŒá±á¬ááºážááŒááºážá q:
void ms_bufferizer_put_from_queue(MSBufferizer *obj, MSQueue *q);
ááá·áºááºáá áºáá¯á០áááºáá±á·áá»áºáá»á¬ážááᯠááœáŸá²ááŒá±á¬ááºážááŒááºážá q buffer ááœáẠfunction ááá¯á¡áá¯á¶ážááŒá¯ááŒá®ážáá¯ááºáá±á¬ááºáááºá ms_bufferizer_put().
ááŒá¬ážáá¶ááŸáááºááŒááºáž-
int ms_bufferizer_read(MSBufferizer *obj, uint8_t *data, int datalen);
ááŒá¬ážáá¶ááœáẠá á¯áá±á¬ááºážáá¬ážáá±á¬ áá±áá¬á¡ááœááºá¡á á¬ážááẠáá±á¬ááºážááá¯áá¬ážááá·áºáá áºáá¯ááẠáá»á±á¬á·áááºážáá«á (datalen) ááá¯á·áá±á¬áẠfunction ááẠáá¯áááá¯á·ááŒááºááœá¬ážáááºá data ááẠdata ááá¯á·áá°ážáá°áááºááá¯ááºáá«á ááá¯á·ááá¯ááºáá«á ááŒá¬ážáá¶á¡ááœááºážááŸá tuples áá»á¬ážá០áá±áá¬áá»á¬ážááᯠáááºááá¯ááºáá°ážáá°ááŒááºážááᯠáá¯ááºáá±á¬ááºáá«áááºá áá°ážáá°ááŒá®ážáá±á¬ááºá tuple ááá¯áá»ááºááŒá®áž memory ááœááºááœá¬ážáááºá datalen bytes áá»á¬ážááᯠáá°ážáá°áá±á¬á¡áá«ááœáẠáá°ážáá°ááŒááºáž ááŒá®ážáá¯á¶ážáá«áááºá áá±áá¬ááá±á¬ááºáá áºáá¯áá¡áááºááœáẠáá±áá¬ááœááºáá¯ááºááœá¬ážáá«áá á€áááºáá±á·áá»áºááœááºá áá±áá¬ááá±á¬ááºááᯠáá°ážáá°ááá¬ážáá±á¬ áá»ááºá¡ááá¯ááºážááá¯á· áá»áŸá±á¬á·áá»ááœá¬ážáááºááŒá áºáááºá áá±á¬ááºáá áºááŒááẠáá¯ááºážáá±á«áºááá·áºá¡áá«á áá°ážáá°ááŒááºážááᯠá€á¡áá»ááºá០áááºáááºáá¯ááºáá±á¬ááºáá«áááºá
ááŒá¬ážáá¶ááœáẠáááºááŸááááŸáááá¯ááºáá±á¬ áá±áá¬ááá¬áááᯠáááºááŒááºáž-
int ms_bufferizer_get_avail(MSBufferizer *obj);
á¡ááœááºááᯠááŒááºáá±ážáááºá á¡ááœáẠááŒá¬ážáá¶á
ááŒá¬ážáá¶á¡ááœááºážááŸá áá±áá¬á¡á áááºá¡ááá¯ááºážááᯠá áœáá·áºáá áºááŒááºáž-
void ms_bufferizer_skip_bytes(MSBufferizer *obj, int bytes);
áááºááŸááºáá¬ážáá±á¬ áá±áá¬áá»á¬ážá ááá¯ááºá¡áá±á¡ááœááºááᯠááŒááºáááºááá°ááŒá®áž áááºáá áºááá¯ááºáááºá ááŸá±ážá¡áá»áá¯á¶áž áá±áá¬ááᯠááœáŸáá·áºáá áºáááºá
ááŒá¬ážáá¶ááŸá á á¬áá»á¬ážá¡á¬ážáá¯á¶ážááᯠáá»ááºáá±áááº-
void ms_bufferizer_flush(MSBufferizer *obj);
áá±áá¬áá±á¬ááºáá¬ááᯠáá¯áááá¯á· ááŒááºáááºáááºááŸááºáá¬ážáááºá
ááŒá¬ážáá¶ááŸá á á¬áá»á¬ážá¡á¬ážáá¯á¶ážááᯠáá»ááºáá±áááº-
void ms_bufferizer_uninit(MSBufferizer *obj);
áá±á¬ááºáá¬á reset ááá¯ááºáá°ážá
ááŒá¬ážáá¶ááᯠáááºááŸá¬ážááŒááºážááŸáá·áº ááŸááºáá¬ááºááᯠáááºááŸá¬ážááŒááºáž-
void ms_bufferizer_destroy(MSBufferizer *obj);
ááŒá¬ážáá¶á¡áá¯á¶ážááŒá¯ááŒááºážáááá°áá¬áá»á¬ážááᯠmedia streamer filter á¡áá»á¬ážá¡ááŒá¬ážá source code ááœááºááœá±á·ááá¯ááºáá«áááºá á¥ááá¬á¡á¬ážááŒáá·áºá MS_L16_ENC á
á
áºáá¯ááºááŸá¯ááœááºá ááá°áá¬áá»á¬ážááœáẠááá¯ááºáá»á¬ážááᯠááœááºáááºá¡á
á®á¡á
á¥áºá០áááºáá¶áá±á¬ááºááœááºáá±ážááá·áº á¡á
á®á¡á
á¥áºá¡áá ááŒááºáááºá
á®á
ááºáá±ážáá±á¬á
áá±á¬ááºáá±á¬ááºážáá«ážááœááºá ticker load estimation ááŒá¿áá¬ááŸáá·áº media streamer ááœáẠá¡ááœááºá¡áá»áœá¶ ááœááºáá»ááºááŒááºáž load ááᯠáááºááá¯á·ááá¯ááºááœááºááááºááᯠáá±á·áá¬áá«áááºá
source: www.habr.com