αααααΆααααα’αααααααΊααααΈαααα»α .

ααααααΆαααα αααΆαα·αααααα
- αααα»ααα·αααααα dblk_t
- ααΆα mblk_t
- αα»αααΆααααααΆααααααΎααΆαααΆαα½αααΆα mblk_t
- αα½ααα½α_t
- α’αα»ααααβαααααΆααβααααΎβααΆαβααΆαα½αβααΉαβαα½α queue_t
- ααΆαααααΆααααααα
- α ααα»α αααααΆααααααΆα ααααααΎαααΆααα·αααααα
- αααααααΆααα ααΈαααααααΆααααα ticker
- Bufferizer (MSBufferizer)
- αα»αααΆααααααΆααααααΎααΆαααΆαα½α MSBufferizer
αααα»αβα’ααΈαααΆα ααΎαααΆααααααΎααααααααααΆαααααα½αααααααΎαα α’ααααααααααΉααααααααΎααααααΆαααΆααααα»ααααααΆααααΆαααααΆααααααΌααα·αααααααααΆααααααααααααααααααααααααΆαα ααΆααΉαα’αα»ααααΆαα±ααα’ααααααααααααααααα»αααααααΆααααααΆαααΆααα·αααααααΉαααααααα·α ααΆαααα’ααΆααα
ααααααΆαααα αααΆαα·αααααα
α αααΆαα·αααααααα αααα»ααααααα·ααΈααααΆαααααααααΌαααΆαα’αα»αααααααααααΎαα½ααααααΆααα·αααααΆααααα ααΆαααααααα αα½α_t. ααααα’ααααααααΆαααΌα ααΆ mblk_tααααααα½αααΆαα·αααΆααα·αααααααααααΆ ααα»ααααααΆααααααααααΆαααα ααΆααα»α ααΆααααααΆαα αα·ααα αααα»ααα·ααααααααα»αααααα ααΎαααΈααα αααα»αα αααααααΆααααΆαα·αααααΆ ααΆααααΆαααΆααααααΆααααααΆαααα ααΆαααααααααααΌα ααααΆ αααα’αα»ααααΆαα±ααα’ααααααα ααααααΈααΆααααααΆααααααααΆαααααα½αα ααΎαααΉαα α αααα»αααΆαααααα½ααα½αααααΆααααααααΈααααααααΆααΆ tuple ααΌα αααα ααΆαα»ααΆαα½ααααα½αα’αΆα ααΆααΆααααα½α mblk_tα αΎααααα ααααΆααααΆαααααΆα tuple mblk_t. ααΆα tuple ααΈαα½ααα’αΆα ααΆααααα»ααα·αααααααα½αααααΆαααααα½αααααααΆα ααΎαααΉααα·ααΆααααΆα’αααΈααΌαα ααα»ααα tuples ααααΌαααΆααα ααααααααααααα·α α
ααΌα αααααΆααααααΆααααΆαααΎ ααΆααααα½αααΆαα·αααΆααααα»ααα·αααααααα αααα»ααα αα·α ααΆααΆαααααααα·α αα ααΆαααααααα’αααα αα αΆαααααααα»αααααΌαααΆααααααΆαα»αα αα αααα»ααααααααα ααΌαααΆααα½αααααΆαααΆαααααα’αααααααΆαααααααααααααααααααΆαααΊααΉαααΎααααααααΆααααααΆααα αααα»ααα»αααααΆ "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 β αααααααα ααααα·αααΎααΆααΆααααααΌααα ααΆαααααΎααΆαααααΆααΎααααΈαα»ααααα»ααααα ααααΈα’αααα αα αΆαα ααααα·αααΎαααα»ααα·ααααααααααΌαααΆααααααΎαα‘αΎαααααα»αααΆα datab_alloc() αααααΆαααα ααα·ααααααα’αΆαααααα·ααααααααΉαααααΌαααΆαααΆαααααα»αα’αααα αα αΆαααααΆαααααααΆααααΈααααααΆα αα αααα»ααααααααααΈαααααααα ααα·ααααααα’αΆααααα’αΆα αααα·ααα ααααααααΆαα½ααααα‘ααααΈααααΆα ααααα»ααα·ααααααααΉαααΆαααααΌαααααΆ α¬αα·αααααααααααααααααααΎαα ααααααΎαααΆαααΆαα½ααααααα
α§ααΆα αααααααΈαααααα»ααα·ααααααααααΌαααΆααααααΎααααααααΎαα»αααΆαα
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 ααΆαααααα·α αα ααΎα b_prev, b_αααααΆαααααα αΆαααΆα αααΎααααΈαααα ααααααΈαααααααΆαααααααα (αααααΆαα½α αα½α_t).
αααααΆααααααααα·α αα b_contαααααααΌαααΆαααααΎαααα ααααααααΆαααΆααααααα tuple ααα»αααααα αααααΆααααΆαα α»αααααααα αααα»α tuple ααααα·α ααααα αααααα
αααααΆααααΎαααΎαααααα·α αα αααα»ααα·αααααα b_datapαααααΆαααΆαα ααΆβααααΌαβααΆαβααΆαβααΈαααααβαααβα ααα’α»αβαα βαααααβααΆααααα»αβαα·ααααααβααααααβα’αΆααααβαααα»αα ααΆα b_rptr αααααΆααααΈααΆααααααα·ααααααααΈααα·ααααααα’αΆααααααΉαααααΌαααΆαα’αΆαα ααΆα b_wptr α ααα’α»ααααα αΆαααΈααΆαααααααααααα ααα·ααααααα’αΆααααααΉαααααΌαααΆαα’αα»ααααα
ααΆαααααα ααααααααΆαααααααααααΆαααα α αΎααα·αααΆααααααΉαααααα·ααααα·ααΆαααααααααΆαααααααα·ααααααααα
ααΆαααααααααααΆααΆααααα½ααααααΆαααααα m1 αα·ααααα»ααα·αααααα d1.

ααΌαααΆαααααααααα αΆαααΈααΆαα
ααα½αααΈ 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);αααααΆααααααααα data subfolder ααΊααΆααααα·α
αα
ααΆααααααααα·αααααα αα·α ααα α - ααα ααααααα½αααα
αααααΆααααα’αααααααΌαααααΎαα
αα
α»ααααααααΆαααααα·α
αα
α
ααα»α
ααααα ααΌα
ααααααΆα
ααα’α»αααααααααα
ααΆαα
αΆααααααΎαααααααααααααα
αααα»αααα·ααααααα’αΆααααα
msg->b_wptr = msg->b_wptr + sizeααααα·αααΎα’αααααααΌαααΆααααααΎαααΆαααΈααα·ααααααα’αΆαααααααααΆαααααΆαα ααααα·αα αΆαααΆα αα αααα αααααΆααααααααΎαα»αααΆαα
mblk_t *esballoc(uint8_t *buf, int size, int pri, void (*freefn)(void*)); αα»αααΆα αααααΆααααΈαααααΎαααΆα αα·ααα ααΆαααααααααααααα»ααα·αααααα ααΉαααααααα ααΆααααααααααααα·α ααααααΆαα ααΉααα·αααααααα α’αΆααααααΆα buf α. ααΆαααααα αααα»αααααΈααα α’αααα αα αΆααα·αααααααα·αααΆαααΈααΆαααα αααααΆααααΈααΆαααααααΆαααααα»ααα·αααααα ααΌα ααααΈαα ααααααααΎααααα»ααα·αααααααααααΆααα»αααΆα datab_alloc(). ααα·ααααααα’αΆαααααααααΆααα·αααααααααααΌααα αα»αααΆαααΉααα αααα ααα»αααααααααΆααααα½αααΈααααα·α ααΆααΉαααααΌαααΆαααααΆαααα ααααααΆαααααΆααααααΎαααααΈαααααα»ααα·αααααα α αΎααααααΆαααΆαα
αα ααΆααα½αα mblk_t αααα»ααα·ααααααααΆα αααΎαα’αΆα ααααΌαααΆαααααΆααααΆαααααααααΆααα αααααααΌαααΆαααααΎααααα»αααΆαα
mblk_t * appendb(mblk_t *mp, const char *data, int size, bool_t pad); mp - ααΆαααααααα»ααα·ααααααααααααααααΉαααααΌαααΆαααααααα
data subfolder - α
ααα’α»ααα
αααα»α α
αααΆααα
αααααααααΉαααααΌαααΆααααααααα
ααΆαα
ααα α - ααα ααα·αααααα;
ααααα - αααααΆαα·αααααα αααα’αααα
αα
αΆααααααΆααααα
ααααααΌαααααααΌαααΆααααααΉαααΆαααααααα 4 αα (αααααααΉαααααΌαααΆαααααΎααααααααΌααα)α
ααααα·αααΎααΆαααααααααααααααααααααΆαααα αααα»αααααα»ααα·ααααααααΆααααααΆαααααΆαα ααααα·ααααααααααΈααΉαααααΌαααΆααα·αααααΆαααα ααΈααααααα·αααααααααααΆααα½α α αΎααα ααΈαααα ααααα·αβααΎβααΆαβααα αβαααααβαα·α βαααα»αβααΆαβαααα»αβαα·ααααααβααΆαβααΆα ααα ααααααΆαααα ααΆαααααΈαα½αααααΌαααΆααααααΎαααΆαα½αααΉαααα ααααα»ααααααααααΆαα α αΎααα·ααααααααααΌαααΆαα αααααα ααα·ααααααα’αΆααααααααααΆα αααβααΆβααΆαβααααΈβαααβααααΆααβαα βααΉαβααΆαβααΎαβαααβααααΎβααααα·α b_cont. αααα»αααααΈαααααΆααααααα ααΆ tuple α
ααααα·αααΎα’αααααααΌαααΆααααααααααα»ααα·αααααααααααααααα tuple αααα’αααααααΌαααααΎαα»αααΆαα
void msgappend(mblk_t *mp, const char *data, int size, bool_t pad);ααΆαααΉαααααΎαααΆαα α»αααααααα αααα»α tuple (ααΆααααΆα b_cont ααΉααα»αααΆαααα) α αΎαααΉαα α αα»αααΆααααααΆααααΆααααα α§ααααααααα().
α’αααα’αΆα ααααααααααΈααα ααααα·αααααααα αααα»αααΆα α¬ 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 α’αΆα ααααΌαααΆαααααααααΆααα ααΆααΆααα½ααααααΆααααα»ααααα½ααααα·αααααα αααααααΌαααΆαααααΎααααα»αααΆαα
void msgpullup(mblk_t *mp,int len);ααααα·αααΎα’αΆαα»ααααα len α ααΊ -1 αααααΆααααααα αααααα·ααααααα’αΆαααααααααΆααααα ααααααΌαααΆαααααααααααααααααααααα·α ααααα·αααΎ len α ααΊααΆααααα·αααααΆα ααα·ααααααα’αΆααααααααα ααααααΉαααααΌαααΆααααααΎα α αΎααα·ααααααααΆα tuple ααΉαααααΌαααΆαα αααααα αααα»αααΆα ααααα·αααΎααα·ααααααα’αΆααααα’αα ααΆαα ααααααΉαααααα ααΈαααα ααΆαααααΌααα tuple ααΉαααα½αααΆαααα·ααααααα’αΆααααααα αααααΈααΆαα½αααΉααα·αααααααααααΆαα ααααα ααΆαααααα ααααααααΉαααααΌαααΆααα»α α αΎαα’αααα αα αΆαααΆααααααααα α ααΆαα·αα
αα ααααα»ααα ααΆαααααααα mblk_t α ααα½αααααααααα»ααα·ααααααααααΌαααΆααααα αααα»αααααΈααααα·αααΎαα αααα α ααΌααααα freeb() ααΆααααααΆααΌααα αααααΆααααααα·ααααααα’αΆαααααα·ααααααααααΌαααΆααα»ααα½αααΆαα½αα§ααΆα ααα 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); αα»αααΆαα α 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 ααααΌαααΆαα ααααααααα»αααΆα 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);αα½α αα½α_t
αα½αβααΆαβαααα»αβαααααα·ααΈβααααΆαβααααβααααΌαβααΆαβα’αα»ααααβααΆβααααααβαααααΈβαααβααααΆααβααααβααα ααΆαα»αααααΈααΈαα½ααααΆαααααα·α
αα
αααα»ααα·αααααααααααΆαααααΌαααααΆα ααΆααααααΆααΆαααα
ααα’α»ααα
αααα»ααα·ααααααααααΆααααΈααΆαααααααααααααα·αααααααααα½αα―ααα
αααα·αααΆαα
αααΆα ααΆαααααα ααΆααααααααααΆαααα
αα½αααΆααα»ααααααααααααΌαααΆαααααΆααααΈα
αα
ααΆαααααααααα·αααααΆα’αααΈαα½α αα½α_t, αααα αΆαααΆααααααα
typedef struct _queue
{
mblk_t _q_stopper; /* "Π₯ΠΎΠ»ΠΎΡΡΠΎΠΉ" ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ, Π½Π΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° Π΄Π°Π½Π½ΡΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΡΠ΅ΡΠ΅Π΄ΡΡ. ΠΡΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ (qinit()) Π΅Π³ΠΎ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡΡΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΈ ΡΠΊΠ°Π·ΡΠ²Π°Π»ΠΈ Π½Π° Π½Π΅Π³ΠΎ ΡΠ°ΠΌΠΎΠ³ΠΎ. */
int q_mcount; // ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ.
} queue_t;αα
ααΆααααααααααΆαααΆααα½α - ααααα·α
αα½αα _q_ααα ααΆα *mblk_t ααΆα
ααα’α»ααα
ααΆαα»ααΈαα½α (ααΆα) αααα»ααα½αα ααΆαααΈααΈααααα
ααΆααααααααααΊααΆααΆαααΆααααΆααα
αααα»ααα½αα
ααΌαααΆαααααααααα αΆαααΈαα½αααααα q1 αααααΆαααΆα 4 m1, m2, m3, m4 α

ααΌαααΆαααααααααα αΆααα½ααα½αααααα q1 αααααΆαααΆα 4 m1,m2,m3,m4 α ααΆα m2 ααΊααΆααααΆααααα tuple αααααΆαααΆαααΈαααα m2_1 αα·α m2_2 α

α’αα»ααααβαααααΆααβααααΎβααΆαβααΆαα½αβααΉαβαα½α queue_t
ααΆαα αΆααααααΎααα½αα
void qinit(queue_t *q);ααΆα _q_ααα (ααα αααααΎαααΉαα α ααΆααΆ "ααα") ααααΌαααΆαα αΆααααααΎαααααα»αααΆα mblk_init()ααΆαα»αα»αααααααΆ αα·αααααα·α ααΆαα»αααααΆααααααΌαααΆααααααααΌαααΎααααΈα ααα’α»ααα αααα½αααΆααααΆααα ααΆαααΆααααΆαα»αα½αααααΌαααΆααααααα‘αΎααα·ααα ααΌαααα
ααΆαααααααααΆαα»ααααΈ (ααΆα)α
void putq(queue_t *q, mblk_t *m);ααΆαα»ααααΈα m ααααΌαβααΆαβααααααβαα βααΆαβα α»αβααβαααααΈ ααααα·α βααΆαα»βααααΌαβααΆαβααβααααα½α ααΌα ααααβ stopper ααααΆαβααΆβααΆαα»βαααααΆααβαααααΆααβααΆ α αΎαβααΆβααααΆαβααΆβααΆαα»βαα»αβαααααΆαα stopper α ααΆαααΆααααΆαα»αα½αααααΌαααΆααααααΎαα
ααΆαααΆαααααΆαα»ααΈαα½αα
mblk_t * getq(queue_t *q); ααΆαααααααααααΆααααΈαααα»αααααΌαααΆαααΆααααααα·α α αΎαααΆαααΆααααΆαα»ααααΌαααΆααααααα ααααα·αααΎαα·αααΆαααΆαα»αα αααα»ααα½αααααΎαααααα stopper ααα 0 ααΉααααααααααα·αα
ααΆααααα αΌαααΆααα αααα»ααα½αα
void insq(queue_t *q, mblk_t *emp, mblk_t *mp); ααΆαα»α mp αααα αΌααα»αααΆαα» EMPα ααΎ EMP=0 αααααΆααααααΆαααααΌαααΆααααααααα ααααα»ααααα½αα
ααΆαααααΆαααΈαααααΆααα½αα
void remq(queue_t *q, mblk_t *mp); ααΆαααΆααααΆαα»ααααΌαααΆαααΆαααααααα
ααΆαα’αΆαααααα·α αα ααΆαα»ααΈαα½ααααα»ααα½αα
mblk_t * peekq(queue_t *q); ααΆαααααΆαα»ααΆααα’ααα ααααΈαα½α ααααααααααα»αααΆαα»ααααααα½αα―αα
void flushq(queue_t *q, int how);α’αΆαα»ααααα αααα αα·αααααΌαααΆαααααΎα ααΆαααΆααααΆαα»αα½αααααΌαααΆαααααααα ααΌαααα
αααΆααααΌαααααΆααα’αΆαααααα·α αα ααΆαα»α α»αααααααααα½αα
mblk_t * qlast(queue_t *q);αα αααααααΎααΆαααΆαα½ααα½αααΆα ααΌαααΉαααΆαα αααα’αααα α ααΌααααα ms_queue_put(q, m) αααβααΆαβααααα·α βαααβαα βααΆααβααΆα αα»αααΆαβαα·αβαα»αα αααααα·ααΈααααα’αααααΉααααααα ααΆαα₯αα·ααΆααααααααααααΆ ms_queue_next(q, m).
ααΆαααααΆααααααα
αα½ααααααΆααα·αααααΆααΆαααΎααααΌαααΆαααααΎααΎααααΈαααααΌαααΆαααΈααααααα½ααα ααααααα½αααα α¬ααΈααααααα½ααα αααααααΆα αααΎαα ααααα αα·αααΆααααααΆαααααααα½ααααααααΎαααΆααααΆα ααααΉαααΆαα ααΆααααα αΌαα¬αααααααααααααααΉαααααΌαααΆαααα α ααΆααΆαααααΌαα "pin" α ααΎααααΈαα·αααααΆα’αααΈααααΆααααααααααααααΌαααΆαααααΆαααα ααααΆαα αα·ααα αα α’αααααααΆαααααααΆαααααΎααααΆαααααα·ααα "α ααα»α αααααΆ" α α ααα»α αααααΆααΊααΆαα ααΆαααααααα _MSCPPointααααααα»αααααα·α αα ααααα αα·αα ααα½ααααα»ααα½αααααααΆ ααΆαααα ααΆαα·αααααΆα’αααΈααΆααααααΆααααααΆαα»αααα αΌα α¬αααααααααααααα
α ααα»α αααααΆααααααΆα ααααααΎαααΆααα·αααααα
typedef struct _MSCPoint{
struct _MSFilter *filter; // Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠΈΠ»ΡΡΡ ΠΌΠ΅Π΄ΠΈΠ°ΡΡΡΠΈΠΌΠ΅ΡΠ°.
int pin; // ΠΠΎΠΌΠ΅Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π²Ρ
ΠΎΠ΄ΠΎΠ² ΠΈΠ»ΠΈ Π²ΡΡ
ΠΎΠ΄ΠΎΠ² ΡΠΈΠ»ΡΡΡΠ°, Ρ.Π΅. ΠΏΠΈΠ½.
} MSCPoint;
αααα»ααααααααααΌαααΆαααΆααααααααα αΆααααααΎαααΈααΌαααα
ααΆαααααΆαααααα»αααΈαααααα½αααΆαααααΌαααΆααα·αααααΆααααα ααΆαααααααα _MSQueueαααααΆααα½αααΆα αα·αα ααα’α»ααα α ααα»α αααααΆααΈααααααΆααααΆααα
typedef struct _MSQueue
{
queue_t q;
MSCPoint prev;
MSCPoint next;
}MSQueue;
ααΎαααΉαα α αα ααΆαααααααααααααΆααΆαααααααΆαααααααΆα αααααααααααααααααααααααΆαααΈαα½ααααΆαααΆααΆααααααααααΆαααααα αΌα αα·αααΆααΆααααααααααΆαααααααα (MSQueue) ααα αααααΆααΆαααααΌαααΆαααααααα ααααααααΎαααααα ααΎαααΆαααααΎαα½α α αΎααααααααΎα’ααααααααΆαααΆαα αααααααααα MSFilterDescαα ααααααααΎααααααΎααααααααααΆαααααα½αααααααΎαα ααΆαααααααααααΊααΆαα ααΆααααααααααααα·αααααΆα’αααΈαααααααΆαα½ααα αααα»ααααααα·ααΈααααΆααααα ααααα MSF:
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 αααβα’αα»αααβααΆαβααααααβααααβααΎα (ααα»ααααβαα·αβααΆαβααααΆααβαααααΆβααΈα) αααβα ααα»βαααβααΎαβααΆαβαααααΎαβααααΆα ααβαααβααΆαβααΉαααΆαβαααβααΆβα§ααΆα αααβααβαα ααΆαααααααα ααααα MSFα αΎααααααΊααΆα§ααΆα ααααααααααααΆαα MSQueue.
αααααααΆααα ααΈαααααααΆααααα ticker
αα αααααααααα»αααΆαααααΆααα’αααααΆ ticker ααΊααΆααααααααααΆαααααααααααα ααΆαα·ααααααΆααΆααα·αααΆαααααα»αα’αααΈααΆαααααα αααααΆααΈαααΊααΆααααα»αααααααΎαααΆααα»αααΆααα ααΎααΆα‘α·ααΆ ααααΎαααΆα() αααααααΆααα’ααααααααααΈ (ααααΆα αα) αααααΆααααΌαααΆαααααΆααα αα αααααΎαααααΆαα ticker αα ααΉααααααααααΆα αααααα»ααααααα·ααΈ C ααΎααααα αΆααααααΆααΈαααααΆα αααααααΆααΉααααααααααα αΆααααΈααααααααα αα αΌααααααΎααα·αααΆα αααααΆααααΈααααΆαα ααΈαα αΆααααααΎααα·αα·αααααΎαααααΆα αααααααααααα±ααααΆαααααΆαααααααΆ αααα ααααααααααΈαααααααααα½ααααα αΌαααΆα ααΎααααΈαα»αα±αα "ααΆαα" αααααααΌα ααααΆααΈααα ααΆαααααΆααααααααααααΆαααααΎααααααΆαααααα’ααααΈααα αααα»ααα½αααΆ ααΆαααΎα. ααΆααααααααααααΌαααΆαα’αα»αααααααααααΎααΆααΆααααααααααααααΈαα½ααααΆαα
αααα»αα’αα‘α»ααααααααΎααααα αααααααΆαααααααΆα ααααα ααΈαααΊαα·αα·αααααΎαααΆααΎαααα»αα αααααααααααΆααααΆαα αα ααΆαααα½α αααααΎααα½ααΆααααααααααα»ααα·ααααααα ααααα·αααΎαα·αααΆααα αααααααΆα ααααααΌαααΆαα αΆαααα»αααΆαα·αααααΉαααααΌα α αΎααααααΉααααααααΆααα
ααααα·αααΎααααΆα ααααααααΆ "ααααΉαααααΌα" αααααΆααααααααααααΆαααααΎαααΈαα½αα αα»αααΆαααααΌαααΆαα α α±ααα αΆααααααΎα ααααΎαααΆααα»α (). αααΆαααΆαααααααααααααΆααααααααααΎαααΆααααααΆαα (αααααΆαα 10 αα·ααααΈαα·ααΆααΈααΆαααααΆαααΎα) ααΈαα α αα»αααΆα ααααΎαααΆα() αααααΆαααααααααααααααααΆαααααΎαααΈαα»αααΆααα’αα α αΎααααααΆαααααααααΆαααααααααααα ααααααα»ααααααΈα ααααα·αααΎαααααααΆααααααααΆαααααα αΌα αααααΆααααααααΎαααΆααα»αααΆα ααααΎαααΆα() ααααΎααααααααα αΌαααααα½αααααααααα αΌαααΊαααα αααααΆααααΈααα ααΆαααααα ααααααααααΆαααα αααα»ααααααΈ α αΎα "αααΌα" ααΆαα αΌαααΆαααααααααααΆαααααα αΌααα·αααΆαααΆαα αααα»αααααααΆααααΈααΈααααααα½ααα ααααααα αΌαααααααααΈαααα ααα ααααααα ααααααΎαααΆαααααααα
α₯α‘αΌααααααΎαααΉααααααααα tuples α αΎααα·ααΆαα’αααΈααΌαα ααα»αααα’αααααΆαααααααααααΌαααΆααααααααα α’αααααααΆαααααααΆαα ααΆααΌαα ααα·ααΆααα·αααααααααααΆαααΆαααααααα½ααααααααΆααααααααΎαααΆααα ααΆααααα»αααααααα·αααααααααΆαα α αΎααα·ααααααΆαα α»αα»αααααα ααααα»ααα·αααααααααααα½αααΆααα ααααααα αΌααααααα α§ααΆα ααα ααΎααααα»ααααααααααααααααααΎαααΆαααααα Fourier ααΏα αααααΆααα·αααααα’αΆα ααααΎαααΆαααΆααααααα»ααα·αααααααααααα αααααααΆααΆαααΆαααααΈαααα»αααααα ααΌαα±ααααΆααΆαα ααα½α 512 α ααααα·αααΎαα·ααααααααααΌαααΆααααααΎαααααααααΆαααΌαααααα αααααααα»ααα·ααααααααααΆαααΈαα½αααα ααααααα αΌαααΉαααΆαααααΎαααΌαααααΌαααααΆα ααα½α 160 α ααΆααΆααααΆααα·αα±αααααααΌααα·ααααααααΈααΆααααα αΌααα αΌααααα ααα½ααα·αααααααααααααΌαααΆααα ααΈαααα ααα»αααααααα»αααααΈααα ααΆααααααααα·α ααΉαααΎαα‘αΎαααΆαα½ααααααΆααΈα αααααΉααα·ααααααααααα»αααΆαααααΆααΆααααΌαααααααα αΌααααααααααα αΌααααα ααΈαα»αααΎαααΆααααααα αααΆαααααααΆαααααΆαααααΈααΈαααααααα αααααΆααααααΆαααααα αα»αααΆααααααααααααααΌααααααα·ααααααααΆααα’ααααΈαα½ααααα αΌαα
ααΎαααΈααααααααΆααΉααα·αα’αΆα αααα 512 ααααΌααΈααΆααααα αΌαααΆααααααααα’αααα’αΆα αααααααα»αααΆααααΌααααααΊα§α αααααααΉαααααΌαααααααΌα ααα½α 640 α αΎαααααΎααααΆαα 512 αααα»αα αααααα½ααα ααααα αααααααα»αααΉααααααΌααααα»ααααααααααΈαα½ααααα·ααααααα ααΌα αααα αααααααααααΎα ααααααααΈααΎααΆαααΆαα ααααααααααΆ ααααΌαααααααααααααααΆααααα½ααααααΆααααΆααααα»ααα·αααααααααα αΌαααααα·ααααααα α’ααααααααΎααααααα·ααΈααααΆααααα αα·ααααααααααΆαα αααααααα αΆααΌαα αααααΆααααααΎαααααα»αα·ααααα½α - MSBufferizer (bufferer) ααααααααααΆααααα αΆααααααααααΎ tuples α
Bufferizer (MSBufferizer)
αααααΊααΆααααα»αααααΉααααααΌααααα»ααα·αααααααααα
αΌααα
ααΆααααα»αααααα α αΎαα
αΆααααααΎααααααΌαααΆαααααΆααααααΎαααΆαααααΆαααα
ααααααα
ααα½αααααααΆααααααααααΆααααΎααααΈααααΎαααΆααααα½ααααααααΆααααααα αααααααααααα·ααααααα’αΆαααααααα»ααααααΌααα·αααααα αααααααΉαααααΎαααΆααααα»αααααααααα ααααα·αααααΎααααΆααααΆαααααααΎαααΆααααααα½αααααΆαα ααα»αααααααΆαααΆαα»αααΆαα’αΆαααΈααα·ααααααα’αΆαααααααα‘ααααααααααααααΈααΌααα αα»αααΆαααααΎαααΆα() αααααααααα
αΆααααααΎααα αα·αααααΎαααΆααα·ααααααααΈααα·ααααααα’αΆαααααααα»ααααααααααα ααααααααΌαααΆα αα αΌααααααΆα’ααα
αα·ααααααααααα·αααΆααααααΌαααΆαααΆαααΆααα
ααααΆααα
αααα»αααα·ααααααα’αΆαααααααααΆααΆαα»ααααΌααα tuple ααααααα»αααΆαααααααααΆαααααα·αααααααααα
αΌαααααΌαααΆαααααΆααα
αα ααΆααααααααααααα·αααααΆα’αααΈααα·ααααααα’αΆααααα
struct _MSBufferizer{
queue_t q; /* ΠΡΠ΅ΡΠ΅Π΄Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ. */
int size; /* Π‘ΡΠΌΠΌΠ°ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ Π΄Π°Π½Π½ΡΡ
Π½Π°Ρ
ΠΎΠ΄ΡΡΠΈΡ
ΡΡ Π² Π±ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΎΡΠ΅ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ. */
};
typedef struct _MSBufferizer MSBufferizer;αα»αααΆααααααΆααααααΎααΆαααΆαα½α MSBufferizer
αααααΎαβα§ααΆα αααβααααααα’αΆααααβααααΈα
MSBufferizer * ms_bufferizer_new(void);α’αααα αα αΆαααααΌαααΆααααα αα α αΆααααααΎααα αααα»α 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 αα αααα»αααα·ααααααα’αΆααααααααΌαααΆαα’αα»αααααααααααΎαα»αααΆα ms_bufferizer_put().
ααΆαα’αΆαααΈααααα»αα
int ms_bufferizer_read(MSBufferizer *obj, uint8_t *data, int datalen); ααααα·αααΎααα ααααα·αααααααααααΆαααααααα αααα»αααα·ααααααα’αΆααααααΊαα·α ααΆαα ααα½ααααααΆαααααΎαα»α (αα·αααααα) αααααΆαααααα»αααΆααααα‘ααααΌααααα·αααααααα·αααααΌαααΆαα αααααα αα·ααααααααα ααΎαα·αααΌα αααααα ααΆαα αααααα·ααααααααΆαααααΆαααααααααΈ tuples αααααΆαααΈααΆαααα αααα»αααα·ααααααα’αΆααααααααΌαααΆαα’αα»ααααα αααααΆααααΈααα αααα tuple ααααΌαααΆααα»αα αΎαα’αααα αα αΆαααααΌαααΆαααααααα ααΆαα αααααααα αααα ααα 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); ααααααα·αααααΌαααΆααααααα‘αΎααα·αααα
ααΆαααααα·ααααααα’αΆαααα αα·αααΆαααααααα’αααα αα αΆαα
void ms_bufferizer_destroy(MSBufferizer *obj); α§ααΆα αααααααΆαααααΎααααΆαα bufferer α’αΆα ααααΆααα αααα»α source code αα media streamer filters ααΆα αααΎαα α§ααΆα ααα αα αααα»αααααα MS_L16_ENC ααααααα αα‘αΎααα·ααααααα»αααααΌααΈααααΆαααααααΆααα ααααΆαααααΆαααΈαα
αα αααα»αα’ααααααααααΆαα ααΎαααΉααα·αα·αααααΎααααα αΆααααΆααααΆαααααααΆαααΆααααα»α ticker αα·ααααααααααααΆαααΆαα½αααΉαααΆααααα»ααα»αααααΌαααααΎαααααα αααα»α media streamerα
ααααα: www.habr.com
