เปเบญเบเบฐเบชเบฒเบเบเบญเบเบเบปเบเบเบงเบฒเบกเปเบกเปเบเปเบญเบปเบฒเบกเบฒเบเบฒเบเบเบญเบเบเปเบญเบ
เบเบปเบเปเบเบเบฒเบเปเบเบทเปเบญเบเปเบซเบงเบเปเปเบกเบนเบ
- เบเบฅเบฑเบญเบเบเปเปเบกเบนเบ dblk_t
- เบเปเปเบเบงเบฒเบก mblk_t
- เบเบฑเบเบเบฑเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบเปเปเบเบงเบฒเบก mblk_t
- เบเบดเบง queue_t
- เบเบฑเบเบเบฑเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเปเบเบง queue_t
- เปเบเบทเปเบญเบกเบเปเปเบเบปเบงเบเบญเบ
- เบเบธเบเบชเบฑเบเบเบฒเบเบเบญเบเบเบฒเบเบเบฐเบกเบงเบเบเบปเบเบเปเปเบกเบนเบ
- เบเบดเบเบเบฐเบเปเบฒเบเบฒเบเบซเบฅเบฑเบเบเบญเบ ticker เปเบเป
- Bufferizer (MSBufferizer)
- เบซเบเปเบฒเบเบตเปเปเบฎเบฑเบเบงเบฝเบเบเบฑเบ MSBufferizer
เปเบเบเบตเปเบชเบธเบ
เบเบปเบเปเบเบเบฒเบเปเบเบทเปเบญเบเปเบซเบงเบเปเปเบกเบนเบ
เบเบฒเบโเปเบเบทเปเบญเบโเปเบซเบงโเบเปเปโเบกเบนเบโเปเบโเบชเบทเปโเบกเบงเบโเบเบปเบ streamer เปเบกเปเบโเบเบฐโเบเบดโเบเบฑเบโเปเบเบโเบเบฒเบโเบเปเบฒโเปเบเปโเปเบเบงโเบญเบฐโเบเบดโเบเบฒเบโเปเบเบโเปเบเบโเบเบฐโเบเบญเบโเบเบฒเบโ เบเบดเบง_เบ. เบชเบฒเบเบเบญเบเบเปเปเบเบงเบฒเบกเปเบเบฑเปเบ mblk_t, เปเบเบดเปเบเบเบปเบงเบเบญเบเบกเบฑเบเปเบญเบเบเปเปเบกเบตเบเปเปเบกเบนเบเบชเบฑเบเบเบฒเบ, เปเบเปเบเบฝเบเปเบเปเปเบเบทเปเบญเบกเบเปเปเบเบฑเบเบเปเปเบเบงเบฒเบกเบเบตเปเบเปเบฒเบเบกเบฒ, เบเปเปเปเบเปเบฅเบฐเบเบฅเบฑเบญเบเบเปเปเบกเบนเบ. เบเบญเบเบเบฒเบเบเบฑเปเบ, เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเปเบญเบเบเบฒเบเปเบเบฑเปเบเบซเบเบฑเบเปเบเบเบชเบฐเปเบเบฒเบฐเบงเปเบฒเบเบฑเบเบกเบตเบเบฒเบเบชเบฐเบซเบเบฒเบกเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบฑเบเบเปเปเบเบงเบฒเบกเบเบญเบเบเบฐเปเบเบเบเบฝเบงเบเบฑเบ, เปเบเบดเปเบเบเปเบงเบเปเบซเปเบเปเบฒเบเบชเบฒเบกเบฒเบเบเบฑเบเบฅเปเบฒเบเบฑเบเบเปเปเบเบงเบฒเบกเบเบตเปเบกเบตเบเบฒเบเปเบเบทเปเบญเบกเปเบเบเปเบเบเบเปเบฝเบง. เบเบงเบโเปเบฎเบปเบฒโเบเบฐโเปเบญเบตเปเบโเบเบธเปเบกโเบเบญเบโเบเปเปโเบเบงเบฒเบกโเบเบตเปโเปเบฎเบกโเบเบฑเบโเปเบเบโเบเบฑเบโเบเบตโเบฅเบฒเบโเบเบฒเบโเบเบฑเปเบโเบเปเบฒเบงโเปเบเบฑเบ tuple. เบเบฑเปเบเบเบฑเปเบ, เบญเบปเบเบเบฐเบเบญเบเปเบเปเบเบญเบเปเบเบงเบชเบฒเบกเบฒเบเปเบเบฑเบเบเปเปเบเบงเบฒเบกเบเบฝเบง mblk_t, เปเบฅเบฐเบเบฒเบเบเบตเบซเบปเบงเบเบญเบ tuple เบเปเปเบเบงเบฒเบก mblk_t. เปเบเปเบฅเบฐเบเปเปเบเบงเบฒเบก tuple เบชเบฒเบกเบฒเบเบกเบตเบเบฑเบเบเปเปเบกเบนเบเบญเบธเบเบฐเบเปเบฒเบเบญเบเบเบปเบเปเบญเบ. เบเบงเบเปเบฎเบปเบฒเบเบฐเบเบถเบเบชเบฒเบซเบฒเบฅเบทเบงเปเบฒเปเบเบฑเบเบซเบเบฑเบ tuples เปเบกเปเบเบเปเบฒเปเบเบฑเบเปเบฅเบฑเบเบเปเบญเบเบเปเปเบกเบฒ.
เบเบฑเปเบเบเบตเปเปเบเปเบเปเบฒเบงเบกเบฒเบเปเบฒเบเปเบเบดเบ, เบเปเปเบเบงเบฒเบกเบเบปเบงเบกเบฑเบเปเบญเบเบเปเปเบกเบตเบเบฅเบฑเบญเบเบเบญเบเบเปเปเบกเบนเบ; เปเบเบเบเบตเปเบเบฐ, เบกเบฑเบเบกเบตเบเบฝเบเปเบเปเบเบปเบงเบเบตเปเปเบเบซเบฒเบเบทเปเบเบเบตเปเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเบเบตเปเบเบฅเบฑเบญเบเบเบทเบเปเบเบฑเบเปเบงเป. เปเบเบชเปเบงเบเบเบตเป, เบฎเบนเบเบเบฒเบเบฅเบงเบกเบเบญเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบญเบเบเบนเปเบชเบทเปเบเปเบฒเบงเปเบกเปเบ reminiscent เบเบญเบเบชเบฒเบเบเบฐเบเบนเปเบเบเบฒเบเบนเบ "Monsters, Inc.," เบเปเบญเบเบเบตเปเบเบฐเบเบน (เบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบฑเบเบเปเปเบกเบนเบ - เบซเปเบญเบ) เปเบเบทเปเบญเบเบเบตเปเบเปเบงเบเบเบงเบฒเบกเปเบง insane เบเบฒเบก conveyors overhead, เปเบเบเบฐเบเบฐเบเบตเปเบซเปเบญเบเบเบญเบเบเบปเบเปเบญเบ. เบเบฑเบเบเปเปเบกเบตเบเบฒเบเปเบเบทเปเบญเบเปเบซเบง.
เปเบเบเบฑเบเบเบธเบเบฑเบ, เบเบฒเบเปเบเบทเปเบญเบเบเปเบฒเบเปเบเบเบฒเบกเบฅเปเบฒเบเบฑเบเบเบฑเปเบเบเบฒเบเบฅเบธเปเบกเบซเบฒเปเบเบดเบ, เปเบซเปเบเบดเบเบฒเบฅเบฐเบเบฒเบขเปเบฒเบเบฅเบฐเบญเบฝเบเบเปเบฝเบงเบเบฑเบเบซเบเปเบงเบเบเบฒเบเบเบตเปเบกเบตเบฅเบฒเบเบเบทเปเบเบญเบเบเบปเบเปเบเบเบฒเบเบชเบปเปเบเบเปเปเบกเบนเบเปเบเบชเบทเป streamer.
เบเบฅเบฑเบญเบเบเปเปเบกเบนเบ dblk_t
เบเบฅเบฑเบญเบเบเปเปเบกเบนเบเบเบฐเบเบญเบเบเปเบงเบ header เปเบฅเบฐ buffer เบเปเปเบกเบนเบ. เบชเปเบงเบเบซเบปเบงเปเบกเปเบเบญเบฐเบเบดเบเบฒเบเปเบเบเปเบเบเบชเปเบฒเบเบเปเปเปเบเบเบตเป,
typedef struct datab
{
unsigned char *db_base; // ะฃะบะฐะทะฐัะตะปั ะฝะฐ ะฝะฐัะฐะปะพ ะฑััะตั ะดะฐะฝะฝัั
.
unsigned char *db_lim; // ะฃะบะฐะทะฐัะตะปั ะฝะฐ ะบะพะฝะตั ะฑััะตั ะดะฐะฝะฝัั
.
void (*db_freefn)(void*); // ะคัะฝะบัะธั ะพัะฒะพะฑะพะถะดะตะฝะธั ะฟะฐะผััะธ ะฟัะธ ัะดะฐะปะตะฝะธะธ ะฑะปะพะบะฐ.
int db_ref; // ะกัะตััะธะบ ัััะปะพะบ.
} dblk_t;
เบเปเบญเบเบเปเปเบกเบนเบเบเบญเบเปเบเบเบชเปเบฒเบเบกเบตเบเบปเบงเบเบตเปเปเบเบซเบฒเบเบธเบเปเบฅเบตเปเบกเบเบปเปเบเบเบญเบเบเบฑเบเปเบเบต, เบเบธเบเบชเบดเปเบเบชเบธเบเบเบญเบเบเบฑเบเปเบเบต, เปเบฅเบฐเบเบฑเบเบเบฑเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบฅเบถเบเปเบเบฑเบเบญเบฑเบเบเปเปเบกเบนเบ. เบญเบปเบเบเบฐเบเบญเบเบชเบธเบเบเปเบฒเบเปเบเบชเปเบงเบเบซเบปเบง db_ref โ เบเบปเบงโเบเบตเปโเบงเบฑเบโเบเบฒเบโเบญเปเบฒเบโเบญเบตเบโ, เบเปเบฒโเบซเบฒเบโเบงเปเบฒโเบกเบฑเบโเปเบโเบฎเบญเบโเบชเบนเบโ, เบเบตเปโเปเบฎเบฑเบโเบซเบเปเบฒโเบเบตเปโเปเบเบฑเบโเบชเบฑเบโเบเบฒเบโเบเบตเปโเบเบฐโเบฅเบปเบ block เบเบตเปโเบเบฒเบโเบเบงเบฒเบกโเบเบปเบโเบเปเบฒโ. เบเปเบฒเบเบฅเบฑเบญเบเบเปเปเบกเบนเบเบเบทเบเบชเปเบฒเบเบเบทเปเบเปเบเบเบเบฑเบเบเบฑเบ datab_alloc() , เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ buffer เบเปเปเบกเบนเบเบเบฐเบเบทเบเบงเบฒเบเปเบงเปเปเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเบเบฑเบเบเบตเบซเบผเบฑเบเบเบฒเบ header. เปเบเบเปเบฅเบฐเบเบตเบญเบทเปเบเปเบเบฑเบเบซเบกเบปเบ, buffer เบชเบฒเบกเบฒเบเบเบฑเปเบเบขเบนเปเบเปเบญเบเปเบเบเปเบญเบเบซเบเบถเปเบเปเบเบเบเปเบฒเบเบซเบฒเบ. เบเปเปเบกเบนเบ buffer เบเบฐเบกเบตเบเบปเบงเบขเปเบฒเบเบชเบฑเบเบเบฒเบเบซเบผเบทเบเปเปเบกเบนเบเบญเบทเปเบเปเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฒเบเบเบตเปเบเบฐเบเปเบฒเปเบเบตเบเบเบฒเบเบเบฑเบเบเบฒเบเบเบฑเปเบเบเบญเบ.
เบเบปเบงเบขเปเบฒเบเปเปเปเบเบญเบเบเบฅเบฑเบญเบเบเปเปเบกเบนเบเบเบทเบเบชเปเบฒเบเบเบทเปเบเปเบเบเปเบเปเบเบฑเบเบเบฑเบ:
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_เบเบฑเบเปเบ, เปเบเบดเปเบเบกเบตเบเบงเบฒเบกเบเปเบฒเปเบเบฑเบเปเบเบเบฒเบเบเบฑเบเบเบฑเปเบเบเบฑเบเบเบตเบฅเบฒเบเบเบทเปเบเบตเปเปเบเบทเปเบญเบกเบเปเปเบชเบญเบเปเบเบปเปเบฒ (เปเบเบดเปเบเปเบเบฑเบเปเบเบง เบเบดเบง_เบ).
เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเบปเบงเบเบตเปเบกเบฒ b_cont, เปเบเบดเปเบเบเบทเบเบเปเบฒเปเบเปเบเบฝเบเปเบเปเปเบเปเบงเบฅเบฒเบเบตเปเบเปเปเบเบงเบฒเบกเปเบเบฑเบเบชเปเบงเบเบซเบเบถเปเบเบเบญเบ tuple. เบชเปเบฒเบฅเบฑเบเบเปเปเบเบงเบฒเบกเบชเบธเบเบเปเบฒเบเปเบ tuple, เบเบปเบงเบเบตเปเบเบตเปเบเบฑเบเบเบปเบเปเบเบฑเบ null.
เบเปเปเปเบเบเบงเบเปเบฎเบปเบฒเปเบซเบฑเบเบเบปเบงเบเบตเปเปเบเบซเบฒเบเบฅเบฑเบญเบเบเปเปเบกเบนเบ b_datap, เบชเปเบฒเบฅเบฑเบเบเปเปเบเบงเบฒเบกเบเบตเปเบกเบตเบขเบนเป. เบกเบฑเบเบเบดเบเบเบฒเบกเบเปเบงเบเบเบปเบงเบเบตเปเปเบเบซเบฒเบเบทเปเบเบเบตเปเบเบฒเบเปเบ buffer เบเปเปเบกเบนเบเบเบฅเบฑเบญเบ. เบเบฒเบเบชเบฐเบซเบเบฒเบก b_rptr เบฅเบฐเบเบธเบชเบฐเบเบฒเบเบเบตเปเบเบตเปเบเปเปเบกเบนเบเบเบฒเบ buffer เบเบฐเบเบทเบเบญเปเบฒเบ. เบเบฒเบเบชเบฐเบซเบเบฒเบก b_wptr เบเบตเปเบเบญเบเบชเบฐเบเบฒเบเบเบตเปเบเบตเปเบเบฝเบเปเบชเป buffer เบเบฐเบเบทเบเบเบฐเบเบดเบเบฑเบ.
เบเบปเปเบเบเบฒเบเบตเปเบเบฑเบเปเบซเบผเบทเบญเปเบกเปเบเบกเบตเบฅเบฑเบเบชเบฐเบเบฐเบเบฒเบเบเปเบฅเบดเบเบฒเบเปเบฅเบฐเบเปเปเบเปเบฝเบงเบเปเบญเบเบเบฑเบเบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบเบเบญเบเบเบปเบเปเบเบเบฒเบเปเบญเบเบเปเปเบกเบนเบ.
เบเปเบฒเบเบฅเบธเปเบกเบเบตเปเปเบกเปเบเบเปเปเบเบงเบฒเบกเบเบฝเบงเบเบตเปเบกเบตเบเบทเป 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(), เบเบฐเบชเปเบฒเบ buffer เบเปเปเบกเบนเบ. เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเปเบญเบเบเปเปเบกเบนเบเปเบเปเบเบเบชเปเบฒเบเบเบฐเบเบทเบเบเบฑเปเบเบเปเบฒ:
mp->b_datap=datab;
mp->b_rptr=mp->b_wptr=datab->db_base;
mp->b_next=mp->b_prev=mp->b_cont=NULL;
เบขเบนเปเบเบตเปเบเบปเบเบเบฐเบฅเบดเบเบเบงเบเปเบฎเบปเบฒเปเบเปเบฎเบฑเบเบเปเปเบเบงเบฒเบกเปเบซเบกเปเบเบตเปเบกเบตเบเปเบญเบเบเปเปเบกเบนเบเปเบเบทเปเบญเบเบเบปเปเบเปเบฅเบฐ buffer เบเปเปเบกเบนเบเบซเบงเปเบฒเบเปเบเบปเปเบฒ. เปเบเบทเปเบญโเปเบเบตเปเบกโเบเปเปโเบกเบนเบโเปเบชเปโเบเปเปโเบเบงเบฒเบกโเปเบโเบซเบเบถเปเบโ, เบเปเบฒเบโเบเปเบฒโเปเบเบฑเบโเบเปเบญเบโเบชเปเบฒโเปเบเบปเบฒโเปเบญเบปเบฒโเบกเบฑเบโเปเบโเบเบตเปโเบเปเปโเบกเบนเบ block bufferโ:
memcpy(msg->b_rptr, data, size);
เบเปเบญเบเบเบตเป เบเปเปเบกเบนเบ เปเบเบฑเบเบเบปเบงเบเบตเปเปเบเบซเบฒเปเบซเบผเปเบเบเปเปเบกเบนเบ, เปเบฅเบฐ เบเบฐเบซเบเบฒเบ - เบเบฐโเบซเบเบฒเบโเบเบญเบโเปเบเบปเบฒโเปเบเบปเปเบฒโ.
เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเบเบฑเบเบเบธเบเบเบปเบงเบเบตเปเปเบเบซเบฒเบเบธเบเบเบฝเบเปเบเบทเปเบญเปเบซเปเบกเบฑเบเบเบตเปเปเบซเปเปเบซเบฑเบเปเบเบดเบเบเบธเบเปเบฅเบตเปเบกเบเบปเปเบเบเบญเบเบเบทเปเบเบเบตเปเบซเบงเปเบฒเบเปเบ buffer:
msg->b_wptr = msg->b_wptr + size
เบเปเบฒเบเปเบฒเบเบเปเบญเบเบเบฒเบเบชเปเบฒเบเบเปเปเบเบงเบฒเบกเบเบฒเบ buffer เบเบตเปเบกเบตเบขเบนเปเปเบฅเปเบง, เปเบเบเบเปเปเบกเบตเบเบฒเบเบเบฑเบเบฅเบญเบ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเปเบเปเบเบฑเบเบเบฑเบ:
mblk_t *esballoc(uint8_t *buf, int size, int pri, void (*freefn)(void*));
เบเบฑเบเบเบฑเบ, เบซเบผเบฑเบเบเบฒเบเบเบฒเบเบชเปเบฒเบเบเปเปเบเบงเบฒเบกเปเบฅเบฐเปเบเบเบชเปเบฒเบเบเบญเบเบเบฑเบเบเปเปเบกเบนเบ, เบเบฐ configure เบเบปเบงเบเบตเปเบเบญเบเบกเบฑเบเบเบฑเบเบเปเปเบกเบนเบเบขเบนเปเปเบเบเบตเปเบขเบนเป. buff. เปเบซเบผเบปเปเบฒเบเบฑเปเบ. เปเบโเบเปโเบฅเบฐโเบเบตโเบเบตเป, buffer เบเปเปโเบกเบนเบโเบเปเปโเปเบเปโเบเบฑเปเบโเบขเบนเปโเบซเบผเบฑเบโเบเบฒเบโเบเบฒเบโเบชเบฐโเบซเบเบฒเบก header เบเบญเบ block เบเปเปโเบกเบนเบ, เปเบเบฑเปเบโเบเบฝเบงโเบเบฑเบโเบเบฑเบโเบเปโเบฅเบฐโเบเบตโเปเบโเบเบฒเบโเบชเปเบฒเบ block เบเปเปโเบกเบนเบโเบเบตเปโเบกเบตโเบซเบเปเบฒโเบเบตเป datab_alloc(). buffer เบเบตเปเบกเบตเบเปเปเบกเบนเบเบเบตเปเบชเบปเปเบเบเบฑเบเบเบฑเบเบเบฑเบเบเบฐเบเบฑเบเบเบปเบเบขเบนเป, เปเบเปเบเปเบงเบเบเบฒเบเบเปเบงเบเปเบซเบผเบทเบญเบเบญเบ pointers เบกเบฑเบเบเบฐเบเบดเบเบเบฑเบ header เบเบตเปเบชเปเบฒเบเบเบถเปเบเปเบซเบกเปเบเบญเบ block เบเปเปเบกเบนเบ, เปเบฅเบฐเบงเปเบฒ, เบเบฒเบกเบเบงเบฒเบกเปเบซเบกเบฒเบฐเบชเบปเบก, เบเปเปเบเบงเบฒเบก.
เบเปเปเบเบฑเบเบเปเปเบเบงเบฒเบกเบเบฝเบง mblk_t เบเบฅเบฑเบญเบเบเปเปเบกเบนเบเบซเบผเบฒเบเบญเบฑเบเบชเบฒเบกเบฒเบเปเบเบปเปเบฒเบเบฑเบเปเบเปเบเบฒเบกเบฅเบณเบเบฑเบ. เบเบตเปเปเบกเปเบเปเบฎเบฑเบเปเบเปเปเบเบเบซเบเปเบฒเบเบตเป:
mblk_t * appendb(mblk_t *mp, const char *data, int size, bool_t pad);
mp โ เบเปเปเบเบงเบฒเบกเบเบตเปเบเบฅเบฑเบญเบเบเปเปเบกเบนเบเบญเบทเปเบเบเบฐเบเบทเบเปเบเบตเปเบก;
เบเปเปเบกเบนเบ โ เบเบตเปเปเบเบเบตเปเบเบฅเบฑเบญเบ, เบชเบณเปเบเบปเบฒเบเบตเปเบเบฐเบเบทเบเปเบเบตเปเบกเปเบชเปเบเปเปเบเบงเบฒเบก;
เบเบฐเบซเบเบฒเบ - เบเบฐโเบซเบเบฒเบโเบเปเปโเบกเบนเบโ;
pad โ เบเบธเบเบงเปเบฒเบเบฐเปเบฒเบเบเบญเบเปเปเบงเบเบเบงเบฒเบกเบเบณเบเบตเปเบเบฑเบเบชเบฑเบเบเปเบญเบเบเบทเบเบเบฑเบเบฅเบฝเบเบเบฒเบกเบเบญเบเปเบเบ 4-byte (padding เบเบฐเปเบฎเบฑเบเบเปเบงเบเบชเบนเบ).
เบเปเบฒเบกเบตเบเบทเปเบเบเบตเปเบเบฝเบเบเปเปเบ buffer เบเปเปเบกเบนเบเบเปเปเบเบงเบฒเบกเบเบตเปเบกเบตเบขเบนเปเปเบฅเปเบง, เบเปเปเบกเบนเบเปเบซเบกเปเบเบฐเบเบทเบเบงเบฒเบเปเบงเปเบเบฒเบเบซเบฅเบฑเบเบเบญเบเบเปเปเบกเบนเบเบเบตเปเบกเบตเบขเบนเปเปเบฅเปเบง. เบเปเบฒเบกเบตเบเบทเปเบเบเบตเปเบซเบงเปเบฒเบเบซเบเปเบญเบเบฅเบปเบเปเบเบเปเปเบเบงเบฒเบก buffer เบเปเปเบกเบนเบ เบเบฐเบซเบเบฒเบ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเปเปเบเบงเบฒเบกเปเบซเบกเปเบเบทเบเบชเปเบฒเบเบเบทเปเบเบเปเบงเบเบเบฐเบซเบเบฒเบ buffer เบเบตเปเบเบฝเบเบเปเปเบฅเบฐเบเปเปเบกเบนเบเบเบฐเบเบทเบเบเบฑเบเบฅเบญเบเปเบเบเบตเป 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);
เบกเบฑเบเบเบฐ loop เบเปเบฒเบเบเปเปเบเบงเบฒเบกเบเบฑเบเบซเบกเบปเบเปเบ tuple เปเบฅเบฐเบชเบปเปเบเบเบทเบเบเปเบฒเบเบงเบเบเปเปเบกเบนเบเบเบฑเบเบซเบกเบปเบเปเบ buffers เบเปเปเบกเบนเบเบเบญเบเบเปเปเบเบงเบฒเบกเปเบซเบผเบปเปเบฒเบเบฑเปเบ. เบชเปเบฒเบฅเบฑเบเปเบเปเบฅเบฐเบเปเปเบเบงเบฒเบก, เบเปเบฒเบเบงเบเบเปเปเบกเบนเบเปเบกเปเบเบเบดเบเปเบฅเปเบเบฑเปเบเบเปเปเปเบเบเบตเป:
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, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเบฐเบซเบเบฒเบเบเบญเบ buffer เบเบตเปเบเบทเบเบเบฑเบเบชเบฑเบเปเบกเปเบเบเบทเบเบเปเบฒเบเบปเบเปเบเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบ. เบเปเบฒ len เปเบเบฑเบเบเบปเบงเปเบฅเบเบเบงเบ, buffer เบเบฐเบซเบเบฒเบเบเบตเปเบเบฐเบเบทเบเบชเปเบฒเบเบเบทเปเบเปเบฅเบฐเบเปเปเบกเบนเบเบเปเปเบเบงเบฒเบก tuple เบเบฐเบเบทเบเบเบฑเบเบฅเบญเบเปเบชเปเบกเบฑเบ. เบเปเบฒเบเบฑเบเปเบเบตเปเบปเบ, เบเบฒเบเบชเบณเปเบเบปเบฒเบเบฐเบขเบธเบเบขเบนเปเบเบตเปเบเบฑเปเบ. เบเปเปเบเบงเบฒเบกเบเปเบฒเบญเบดเบเบเบญเบ tuple เบเบฐเปเบเปเบฎเบฑเบ buffer เบเบฐเบซเบเบฒเบเปเบซเบกเปเบเบตเปเบกเบตเบเปเปเบกเบนเบเบเบตเปเบเบฑเบเบฅเบญเบ. เบเปเปเบเบงเบฒเบกเบเบตเปเบเบฑเบเปเบซเบผเบทเบญเบเบฐเบเบทเบเบฅเบถเบเบญเบญเบเปเบฅเบฐเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเปเบเปเบเบฑเบเบเบทเบเบชเบนเป heap.
เปเบกเบทเปเบญเบฅเบถเบเปเบเบเบชเปเบฒเบ mblk_t เบเปเบฒเบเบงเบเบเบฒเบเบญเปเบฒเบเบญเบดเบเบเบญเบเบเบฑเบเบเปเปเบกเบนเบเปเบเปเบเบทเบเบเบดเบเบฒเบฅเบฐเบเบฒเบเปเบฒเบซเบฒเบเบงเปเบฒ, เปเบเปเบงเบฅเบฒเบเบตเปเปเบเบซเบฒ freeb() เบกเบฑเบเบเปเบฝเบเปเบเบฑเบเบชเบนเบ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ buffer เบเปเปเบกเบนเบเบเบทเบเบฅเบถเบเบเปเบญเบกเบเบฑเบเบเบปเบงเบขเปเบฒเบ mblk_t, เปเบเบดเปเบเบเบตเปเปเบซเปเปเบซเบฑเบเบกเบฑเบ.
เบเบฒเบเปเบฅเบตเปเบกเบเบปเปเบเบเปเบญเบเบเปเปเบกเบนเบเบเบญเบเบเปเปเบเบงเบฒเบกเปเปเป:
void mblk_init(mblk_t *mp);
เบเบฒเบเปเบเบตเปเบกเบเปเปเบกเบนเบเบญเบทเปเบเปเบชเปเบเปเปเบเบงเบฒเบก:
mblk_t * appendb(mblk_t *mp, const char *data, size_t size, bool_t pad);
เบเปเบฒเบเปเปเบกเบนเบเปเบซเบกเปเบเปเปเปเบซเบกเบฒเบฐเบชเบปเบกเบเบฑเบเบเบทเปเบเบเบตเปเบซเบงเปเบฒเบเบเบญเบเบเปเปเบกเบนเบเบเปเปเบเบงเบฒเบก, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเปเปเบเบงเบฒเบกเบเบตเปเบเบทเบเบชเปเบฒเบเบเบทเปเบเปเบเบเบเปเบฒเบเบซเบฒเบเบเบตเปเบกเบต buffer เบเบญเบเบเบฐเบซเบเบฒเบเบเบตเปเบเปเบฒเบเบปเบเปเบงเปเปเบกเปเบเบเบดเบเบเบฑเบเบเปเปเบเบงเบฒเบก (เบเบปเบงเบเบตเปเปเบเบซเบฒเบเปเปเบเบงเบฒเบกเบเบตเปเปเบเบตเปเบกเปเบกเปเบเบเบทเบเบเปเบฒเบเบปเบเปเบงเปเปเบเบเปเปเบเบงเบฒเบกเบเปเบฒเบญเบดเบ) เปเบฅเบฐ เบเปเปเบเบงเบฒเบกเบเปเบฝเบเปเบเบฑเบ tuple.
เบเบฒเบเปเบเบตเปเบกเบเบดเปเบเบชเปเบงเบเบเบญเบเบเปเปเบกเบนเบเปเบชเป tuple:
void msgappend(mblk_t *mp, const char *data, size_t size, bool_t pad);
เบเบฑเบเบเบฑเบเปเบญเบตเปเบ appendb() เปเบ loop.
เบชเบปเบกเบเบปเบเบชเบญเบ 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, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเบฐเบซเบเบฒเบเบเบญเบ buffer เบเบตเปเบเบทเบเบเบฑเบเบชเบฑเบเปเบกเปเบเบเบทเบเบเปเบฒเบเบปเบเปเบเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบ.
เบเบฒเบเบฅเบถเบเบเปเปเบเบงเบฒเบก, tuple:
void freemsg(mblk_t *mp);
เบเบณเบเบงเบเบญเปเบฒเบเบญเบตเบเบเบญเบเบเบฅเบฑเบญเบเบเปเปเบกเบนเบเปเบกเปเบเบซเบผเบธเบเบฅเบปเบเปเบเบทเปเบญเบฅเบฐเบญเบฑเบ. เบเปเบฒเบกเบฑเบเบฎเบญเบเบชเบนเบ, เบเบฅเบฑเบญเบเบเปเปเบกเบนเบเบเปเปเบเบฐเบเบทเบเบฅเบถเบเบเบดเปเบก.
เบเบฒเบเบเบดเบเปเบฅเปเบเปเบฒเบเบงเบเบเปเปเบกเบนเบเบเบฑเบเบซเบกเบปเบเปเบเบเปเปเบเบงเบฒเบกเบซเบผเบท tuple.
size_t msgdsize(const mblk_t *mp);
เบเบถเบเบเปเปเบเบงเบฒเบกเบเบฒเบเบซเบฒเบเบเบญเบเบเบดเบง:
mblk_t *ms_queue_peek_last (q);
เบเบฒเบเบเบฑเบเบฅเบญเบเปเบเบทเปเบญเปเบเบเบญเบเบเปเบญเบเบเปเปเบกเบนเบเบเบตเปเบชเบฐเบซเบเบงเบเปเบงเปเบเบญเบเบเปเปเบเบงเบฒเบกเบซเบเบถเปเบเปเบเบปเปเบฒเปเบเปเบเบเปเปเบเบงเบฒเบกเบญเบทเปเบ (เปเบเบเบงเบฒเบกเปเบเบฑเบเบเบดเบ, เบเปเบญเบเบเปเปเบกเบนเบเปเบซเบผเบปเปเบฒเบเบตเปเบกเบตเบเบธเบเบเบตเปเบเบทเบเบเปเบฒเปเบเปเปเบเบ media streamer):
mblk_meta_copy(const mblk_t *source, mblk *dest);
เบเบดเบง เบเบดเบง_เบ
เปเบเบงเบเปเปเบเบงเบฒเบกเปเบเบเบปเบงเบเปเบฒเบเบเบญเบเบชเบทเปเปเบกเปเบเบเบทเบเบเบฐเบเบดเบเบฑเบเปเบเบฑเบเบฅเบฒเบเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบชเบญเบเปเบเบปเปเบฒเบงเบปเบเบงเบฝเบ. เปเบเปเบฅเบฐเบญเบปเบเบเบฐเบเบญเบเบฅเบฒเบเบเบทเปเบเบฐเบเบญเบเบเปเบงเบเบเบปเบงเบเบตเปเปเบเบซเบฒเบเบฅเบฑเบญเบเบเปเปเบกเบนเบเบเบตเปเบกเบตเบเบปเบงเบขเปเบฒเบเบชเบฑเบเบเบฒเบ. เบกเบฑเบ turns เปเบซเปเปเบซเบฑเบเบงเปเบฒเบเบฝเบเปเบเปเบเบตเปเปเบซเปเปเบซเบฑเบเปเบเบดเบ block เบเปเปเบกเบนเบเบเปเบฒเบเปเบ turns, เปเบเบเบฐเบเบฐเบเบตเปเบเปเปเบกเบนเบเบเบปเบงเบกเบฑเบเปเบญเบเบเบฑเบ motionless. เปเบซเบผเบปเปเบฒเบเบฑเปเบ. เบเบฝเบเปเบเปเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบฑเบเบเบงเบเบกเบฑเบเบเบทเบเบเปเบฒเบ.
เปเบเบเบชเปเบฒเบเบญเบฐเบเบดเบเบฒเบเปเบเบง เบเบดเบง_เบ, เบชเบฐโเปเบเบโเปเบซเปโเปเบซเบฑเบโเบเปเบฒเบโเบฅเบธเปเบกโเบเบตเปโ:
typedef struct _queue
{
mblk_t _q_stopper; /* "ะฅะพะปะพััะพะน" ัะปะตะผะตะฝั ะพัะตัะตะดะธ, ะฝะต ัะบะฐะทัะฒะฐะตั ะฝะฐ ะดะฐะฝะฝัะต, ะธัะฟะพะปัะทัะตััั ัะพะปัะบะพ ะดะปั ัะฟัะฐะฒะปะตะฝะธั ะพัะตัะตะดัั. ะัะธ ะธะฝะธัะธะฐะปะธะทะฐัะธะธ ะพัะตัะตะดะธ (qinit()) ะตะณะพ ัะบะฐะทะฐัะตะปะธ ะฝะฐัััะฐะธะฒะฐัััั ัะฐะบ, ััะพะฑั ะพะฝะธ ัะบะฐะทัะฒะฐะปะธ ะฝะฐ ะฝะตะณะพ ัะฐะผะพะณะพ. */
int q_mcount; // ะะพะปะธัะตััะฒะพ ัะปะตะผะตะฝัะพะฒ ะฒ ะพัะตัะตะดะธ.
} queue_t;
เปเบเบเบชเปเบฒเบเบเบฐเบเบญเบเบเปเบงเบเบเบฒเบเบชเบฐเบซเบเบฒเบก - เบเบปเบงเบเบตเป _q_เบขเบธเบ เบเบดเบก *mblk_t, เบกเบฑเบเบเบตเปเปเบเบซเบฒเบญเบปเบเบเบฐเบเบญเบเบเปเบฒเบญเบดเบ (เบเปเปเบเบงเบฒเบก) เปเบเปเบเบง. เบเบฒเบเบชเบฐเบซเบเบฒเบกเบเบตเบชเบญเบเบเบญเบเปเบเบเบชเปเบฒเบเปเบกเปเบ counter เบเบญเบเบเปเปเบเบงเบฒเบกเปเบเปเบเบง.
เบฎเบนเบเบเปเบฒเบเบฅเบธเปเบกเบเบตเปเบชเบฐเปเบเบเปเบซเปเปเบซเบฑเบเปเบเบงเบเบทเป 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_เบขเบธเบ (เบเปเปโเปเบโเบเบตเปโเบเบงเบโเปเบฎเบปเบฒโเบเบฐโเปเบญเบตเปเบโเบกเบฑเบโเบงเปเบฒ "stopperโ"โ) เปเบกเปเบโเปเบฅเบตเปเบกโเบเบปเปเบโเปเบเบโเบเบฒเบโเบเปเบฒโเบเบฒเบโ mblk_init(), เบญเบปเบเบเบฐเบเบญเบเบเปเบญเบเบซเบเปเบฒเบเบญเบเบกเบฑเบเปเบฅเบฐเบเบปเบงเบเบตเปเบญเบปเบเบเบฐเบเบญเบเบเปเปเปเบเปเบกเปเบเบเบทเบเบเบฑเบเปเบซเปเบเบตเปเปเบเบซเบฒเบเบปเบงเบกเบฑเบเปเบญเบ. เบเบปเบงเบเบฑเบเบญเบปเบเบเบฐเบเบญเบเปเบเบงเบเบทเบเบฃเบตเปเบเบฑเบเปเบเบฑเบเบชเบนเบ.
เปเบเบตเปเบกเบญเบปเบเบเบฐเบเบญเบเปเบซเบกเป (เบเปเปเบเบงเบฒเบก):
void putq(queue_t *q, mblk_t *m);
เบญเบปเบเบเบฐเบเบญเบเปเบซเบกเป m เปเบเปเบเบทเบเปเบเบตเปเบกเปเบชเปเปเบเบเบญเบเบเปเบฒเบเบเบญเบเบเบฑเบเบเบตเบฅเบฒเบเบเบทเป, เบเบปเบงเบเบตเปเบญเบปเบเบเบฐเบเบญเบเปเบเปเบเบทเบเบเบฑเบเปเบเบทเปเบญเปเบซเป stopper เบเบฒเบเปเบเบฑเบเบญเบปเบเบเบฐเบเบญเบเบเปเปเปเบเบชเปเบฒเบฅเบฑเบเบกเบฑเบ, เปเบฅเบฐเบกเบฑเบเบเบฐเบเบฒเบเปเบเบฑเบเบญเบปเบเบเบฐเบเบญเบเบเบตเปเบเปเบฒเบเบกเบฒเบชเปเบฒเบฅเบฑเบ stopper. เบเบปเบงเบเบฑเบเบญเบปเบเบเบฐเบเบญเบเปเบเบงเปเบกเปเบเปเบเบตเปเบกเบเบถเปเบ.
เบเบถเบเบเปเปเบกเบนเบเบญเบปเบเบเบฐเบเบญเบเบเบฒเบเบเบดเบง:
mblk_t * getq(queue_t *q);
เบเปเปเบเบงเบฒเบกเบเบตเปเบกเบฒเบซเบผเบฑเบเบเบฒเบ stopper เปเบเปเบเบทเบเบเบถเบเบกเบฒ, เปเบฅเบฐเบเบปเบงเบเบฑเบเบญเบปเบเบเบฐเบเบญเบเปเบกเปเบ decremented. เบเปเบฒเบเปเปเบกเบตเบญเบปเบเบเบฐเบเบญเบเปเบเปเบเบงเบเบปเบเปเบงเบฑเปเบ 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);
เบเบฒเบเปเบเปเบเบฝเบ เบงเบดเบเบตเบเบฒเบ เบเปเปโเปเบเปโเบเปเบฒโเปเบเป. เบเบปเบงเบเบฑเบเบญเบปเบเบเบฐเบเบญเบเปเบเบงเบเบทเบเบเบฑเปเบเปเบเบฑเบเบชเบนเบ.
Macro เบชเปเบฒเบฅเบฑเบเบเบฒเบเบญเปเบฒเบเบเบปเบงเบเบตเปเปเบเบซเบฒเบญเบปเบเบเบฐเบเบญเบเบชเบธเบเบเปเบฒเบเบเบญเบเปเบเบง:
mblk_t * qlast(queue_t *q);
เปเบกเบทเปเบญเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบเบดเบงเบเปเปเบเบงเบฒเบก, เบเบปเปเบเบฎเบนเปเบงเปเบฒเปเบกเบทเปเบญเบเปเบฒเบเปเบเบซเบฒ ms_queue_put(q, m) เบเปเบงเบเบเบปเบงเบเบตเป null เปเบเบซเบฒเบเปเปเบเบงเบฒเบก, เบเบฑเบเบเบฑเบ loops. เปเบเบโเบเบฒเบโเบเบญเบโเบเปเบฒเบโเบเบฐ freezeโ. เบเบฐเบเบดเบเบฑเบเบเบปเบงเบเปเบฒเบเบเบทเบเบฑเบ ms_queue_next(q, m).
เปเบเบทเปเบญเบกเบเปเปเบเบปเบงเบเบญเบ
เปเบเบงเบเบตเปเบญเบฐเบเบดเบเบฒเบเปเบงเปเบเปเบฒเบเปเบเบดเบเปเบกเปเบเปเบเปเปเบเบทเปเบญเบชเบปเปเบเบเปเปเบเบงเบฒเบกเบเบฒเบเบเบปเบงเบเบญเบเปเบถเปเบเปเบเบซเบฒเบญเบตเบเบเบปเบงเบเบญเบเปเบถเปเบ เบซเบผเบทเบเบฒเบเปเบถเปเบเปเบเบซเบฒเบซเบผเบฒเบเบเบปเบงเบเบญเบ. เบเบฒเบเบเบฑเปเบเบเบญเบเปเบฅเบฐเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบญเบเปเบเบปเบฒเปเบเบปเปเบฒเบเบฐเบเบญเบเปเบเบฑเบเปเบชเบฑเปเบเบชเบฐเปเบเบเบเบฒเบเบเบตเปเบเปเบฒ. เบเบฒเบเบเปเบญเบเบเปเปเบกเบนเบเบซเบผเบทเบเบปเบเบเบฐเบฅเบดเบเบเบญเบเบเบฒเบเบเบฑเปเบเบเบญเบเบเบฐเบเบทเบเปเบญเบตเปเบเบงเปเบฒ "pin". เปเบเบทเปเบญเบญเบฐเบเบดเบเบฒเบเบฅเปเบฒเบเบฑเบเบเบตเปเบเบปเบงเบเบญเบเปเบเบทเปเบญเบกเบเปเปเบเบฑเบ, เบเบนเปเบชเบทเปเปเบเบชเบฐเบเบฒเปเบเปเปเบเบงเบเบงเบฒเบกเบเบดเบเบเบญเบ "เบเบธเบเบชเบฑเบเบเบฒเบ". เบเบธเบเบชเบฑเบเบเบฒเบเปเบกเปเบเปเบเบเบชเปเบฒเบ _MSCPPoint, เปเบเบดเปเบเบเบฐเบเบญเบเบเปเบงเบเบเบปเบงเบเบตเปเปเบเบซเบฒเบเบปเบงเบเบญเบเปเบฅเบฐเบเปเบฒเบเบงเบเบเบญเบเบซเบเบถเปเบเบเบญเบ pins เบเบญเบเบกเบฑเบ; เบเบฒเบกเบเบฑเปเบ, เบกเบฑเบเบญเบฐเบเบดเบเบฒเบเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบญเบเบซเบเบถเปเบเปเบ inputs เบซเบผเบท outputs เบเบญเบเบเบฒเบเบเบฑเปเบเบเบญเบ.
เบเบธเบเบชเบฑเบเบเบฒเบเบเบญเบเบเบฒเบเบเบฐเบกเบงเบเบเบปเบเบเปเปเบกเบนเบ
typedef struct _MSCPoint{
struct _MSFilter *filter; // ะฃะบะฐะทะฐัะตะปั ะฝะฐ ัะธะปััั ะผะตะดะธะฐัััะธะผะตัะฐ.
int pin; // ะะพะผะตั ะพะดะฝะพะณะพ ะธะท ะฒั
ะพะดะพะฒ ะธะปะธ ะฒัั
ะพะดะพะฒ ัะธะปัััะฐ, ั.ะต. ะฟะธะฝ.
} MSCPoint;
pins เบเบฒเบเบเบฑเปเบเบเบญเบเปเบกเปเบเบเบปเบงเปเบฅเบเปเบฅเบตเปเบกเบเบปเปเบเบเบฒเบเบชเบนเบ.
เบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบญเบเบชเบญเบ pins เปเบเบเปเบเบงเบเปเปเบเบงเบฒเบกเปเบกเปเบเบญเบฐเบเบดเบเบฒเบเปเบเบเปเบเบเบชเปเบฒเบ _MSQueue, เปเบเบดเปเบเบเบฐเบเบญเบเบเปเบงเบเปเบเบงเบเปเปเบเบงเบฒเบกเปเบฅเบฐเบเบปเบงเบเบตเปเปเบเบซเบฒเบชเบญเบเบเบธเบเบชเบฑเบเบเบฒเบเบเบตเปเบกเบฑเบเปเบเบทเปเบญเบกเบเปเป:
typedef struct _MSQueue
{
queue_t q;
MSCPoint prev;
MSCPoint next;
}MSQueue;
เบเบงเบเปเบฎเบปเบฒเบเบฐเปเบญเบตเปเบเปเบเบเบชเปเบฒเบเบเบตเปเบงเปเบฒเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบชเบฑเบเบเบฒเบ. เปเบเปเบฅเบฐเบเบปเบงเบเบญเบเบชเบทเป streamer เบกเบตเบเบฒเบเบฐเบฅเบฒเบเบเบญเบเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบฒเปเบเบปเปเบฒเปเบฅเบฐเบเบฒเบเบฐเบฅเบฒเบเบเบญเบเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบปเบเบเบฐเบฅเบดเบ (MSQueue). เบเบฐโเบซเบเบฒเบโเบเบญเบโเบเบฒโเบเบฐโเบฅเบฒเบโเปเบเปโเบเบทเบโเบเปเบฒโเบเบปเบโเปเบโเปเบงโเบฅเบฒโเบเบตเปโเบเบฒเบโเบชเปเบฒเบโเบเบปเบงโเบเบฑเปเบโเบเบญเบโ; เบเบงเบโเปเบฎเบปเบฒโเปเบเปโเปเบฎเบฑเบโเบเบฒเบโเบเบตเปโเปเบฅเปเบงโเปเบเบโเบเบฒเบโเบเปเบฒโเปเบเปโเบเบปเบงโเปเบโเบเบตเปโเบชเบปเปเบโเบญเบญเบโเบเบญเบโเบเบฐโเปเบเบโ MSFilterDesc, เปเบกเบทเปเบญเบเบงเบเปเบฎเบปเบฒเบเบฑเบเบเบฐเบเบฒเบเบปเบงเบเบญเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบญเบ. เบเปเบฒเบเบฅเบธเปเบกเบเบตเปเปเบกเปเบเปเบเบเบชเปเบฒเบเบเบตเปเบญเบฐเบเบดเบเบฒเบเบเบฒเบเบเบฑเปเบเบเบญเบเปเบเปเปเบเบชเบทเป streamer, 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 เบเบฒเบกเปเบเบเบเบฒเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ (เปเบเปเบเปเปเปเบเปเปเบเบทเปเบญเบกเบเปเป ticker), เบเบฑเปเบเบเบฑเปเบเบเบงเบเปเบฎเบปเบฒเบเบถเปเบเบชเปเบฒเบเปเบชเบฑเปเบเบชเบฐเปเบเบเบเบฒเบเบเบตเปเบเปเบฒ, เปเบชเบฑเปเบเบเบตเปเปเบเบฑเบเบเบปเบงเบขเปเบฒเบเบเบญเบเปเบเบเบชเปเบฒเบ. MSFilter, เปเบฅเบฐเบเบญเบเปเบกเปเบเบเบปเบงเบขเปเบฒเบเบเบญเบเบเบฒเบเปเบเบทเปเบญเบกเบเปเป MSQueue.
เบเบดเบเบเบฐเบเปเบฒเบเบฒเบเบซเบฅเบฑเบเบเบญเบ ticker เปเบเป
เปเบกเบทเปเบญเบเปเบญเบเบเบญเบเปเบเบปเปเบฒเบงเปเบฒ ticker เปเบกเปเบเบเบปเบงเบเบญเบเบชเปเบฒเบฅเบฑเบเปเบซเบผเปเบเบเบญเบเบซเบกเบฒเบเบเบดเบ, เบกเบฑเบเบเปเปเปเบกเปเบเบเบงเบฒเบกเบเบดเบเบเบฑเบเบซเบกเบปเบเบเปเบฝเบงเบเบฑเบเบกเบฑเบ. เปเบเบทเปเบญเบเปเบฒเบเบเบดเบเปเบกเปเบเบงเบฑเบเบเบธเบเบตเปเปเบฎเบฑเบเบงเบฝเบเบขเบนเปเปเบเปเบกเบ เบเบฐเบเบงเบเบเบฒเบ() เบเบฒเบเบเบฑเปเบเบเบญเบเบเบฑเบเบซเบกเบปเบเบเบญเบเบงเบปเบเบเบญเบ (เบเบฒเบ) เบเบตเปเบกเบฑเบเปเบเบทเปเบญเบกเบเปเป. เปเบกเบทเปเบญเบเบงเบเปเบฎเบปเบฒเปเบเบทเปเบญเบกเบเปเป ticker เบเบฑเบเบเบปเบงเบเบญเบเบเบฒเบเปเบเปเบเบเบเบฒเบ C, เบเบงเบเปเบฎเบปเบฒเบชเบฐเปเบเบ ticker เปเบชเบฑเปเบเบชเบฐเปเบเบเบเบตเปเบกเบฑเบเบเบฐเบเบงเบเบเบธเบกเบเบฒเบเบเบตเปเบเบปเบเบเปเบงเบฒเบเบงเบเปเบฎเบปเบฒเบเบดเบเบกเบฑเบ. เบซเบผเบฑเบเบเบฒเบเบเบฒเบเปเบเบทเปเบญเบกเบเปเป, ticker เปเบฅเบตเปเบกเบเบปเปเบเบเบงเบเปเบเบดเปเบเบเบฒเบเบเบตเปเบกเบญเบเปเบซเปเบเบฒเบเบเบนเปเบฅเบเบญเบเบกเบฑเบ, เบฅเบงเบเบฅเบงเบกเบเบฑเบเบเบตเบฅเบฒเบเบเบทเปเบเบญเบเบเบฒเบเบเบฑเปเบเบเบญเบเบเบตเปเบเบฐเบเบญเบเบกเบตเบกเบฑเบ. เปเบเบทเปเบญเบเปเปเปเบซเป "เบเบฑเบ" เบเบปเบงเบเบญเบเบเบฝเบงเบเบฑเบเบชเบญเบเบเบฑเปเบ, เบกเบฑเบเบซเบกเบฒเบเบเบฒเบเบเบฑเปเบเบเบญเบเบเบตเปเบเบงเบเบเบปเบเปเบเบเบเบฒเบเบงเบฒเบเบเปเบญเบเบเบฒเปเบเบทเปเบญเบเบซเบกเบฒเบเปเบชเปเบเบงเบเบกเบฑเบ. เปเบซเบฑเบ. เบเบฒเบเบเบปเปเบเบซเบฒเปเบกเปเบเบเปเบฒเปเบเบตเบเบเบฒเบเปเบเบเปเบเปเบเบฒเบเบฐเบฅเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบตเปเปเบเปเบฅเบฐเบเบปเบงเบเบญเบเบกเบต.
เปเบเบฅเบฐเบซเบงเปเบฒเบเบเบฒเบเบเปเบฒเบเปเบฝเบงเบเบญเบเบเบฒเบเบเบญเบเบกเบฑเบ, ticker เบเบงเบเปเบเบดเปเบเบงเปเบฒเปเบเบเบฑเบเบเบฒเบเบปเบงเบเบญเบเบกเบตเบขเปเบฒเบเบซเบเปเบญเบเบซเบเบถเปเบเบเบตเปเปเบฎเบฑเบเบซเบเปเบฒเบเบตเปเปเบเบฑเบเปเบซเบผเปเบเบเบญเบเบเบฅเบฑเบญเบเบเปเปเบกเบนเบ. เบเปเบฒเบเปเปเบกเบต, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เปเบชเบฑเปเบเบชเบฐเปเบเบเปเบกเปเบเบเบทเบงเปเบฒเบเปเปเบเบทเบเบเปเบญเบเปเบฅเบฐ ticker crashes.
เบเปเบฒเปเบชเบฑเปเบเบชเบฐเปเบเบเบเบฒเบเปเบเบฑเบ "เบเบทเบเบเปเบญเบ", เบชเปเบฒเบฅเบฑเบเปเบเปเบฅเบฐเบเบปเบงเบเบญเบเบเบตเปเบเบปเบเปเบซเบฑเบ, เบซเบเปเบฒเบเบตเปเบเบทเบเปเบญเบตเปเบเบงเปเบฒเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบฅเบตเปเบกเบเบปเปเบ เบเบฐเบเบงเบเบเบฒเบเบเปเบญเบ (). เบเบฑเบเบเบตเบเบตเปเบกเบฒเบฎเบญเบเบเบฑเบเบเบธเบเบฑเบเบชเปเบฒเบฅเบฑเบเบฎเบญเบเบเบฐเบกเบงเบเบเบปเบเบเปเปเปเบ (เบเบธเบเป 10 milliseconds เบเบฒเบกเบเปเบฒเปเบฅเบตเปเบกเบเบปเปเบ), ticker เปเบเบซเบฒเบเบฑเบเบเบฑเบ. เบเบฐเบเบงเบเบเบฒเบ() เบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฑเปเบเบเบญเบเปเบซเบผเปเบเบเบฑเบเบซเบกเบปเบเบเบตเปเบเบปเบเปเบเปเบกเบทเปเบญเบเปเบญเบ, เปเบฅเบฐเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฑเปเบเบเบญเบเบเบตเปเบเบฑเบเปเบซเบผเบทเบญเบขเบนเปเปเบเบเบฑเบเบเบตเบฅเบฒเบเบเบทเป. เบเปเบฒเบเบปเบงเบเบญเบเบกเบตเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบฒเปเบเบปเปเบฒ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฒเปเบเบตเบเบเบฒเบเบเบฑเบเบเบฑเบ เบเบฐเบเบงเบเบเบฒเบ() เปเบฎเบฑเบเปเบฅเบทเปเบกเบเบทเบเบเบปเบเบเปเบงเบฒเบเบดเบงเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบฒเปเบเบปเปเบฒเบซเบงเปเบฒเบเปเบเบปเปเบฒ. เบซเบผเบฑเบเบเบฒเบเบเบตเป, เบกเบฑเบเบเปเบฒเบเปเบเบเบปเบงเบเบญเบเบเปเปเปเบเปเบเบเบฑเบเบเบตเบฅเบฒเบเบเบทเปเปเบฅเบฐ "เปเบฅเบทเปเบญเบ" เบกเบฑเบเบเบปเบเบเปเบงเบฒเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบฒเปเบเบปเปเบฒเบเปเปเบกเบตเบเปเปเบเบงเบฒเบก. ticker เบเปเบฒเบเบเบฒเบเบเบฒเบเบเบฑเปเบเบเบญเบเปเบเบซเบฒเบเบฒเบเบเบฑเปเบเบเบญเบเบเบปเบเบเปเบงเบฒเบเบฑเบเบเบตเบฅเบฒเบเบเบทเปเบชเบดเปเบเบชเบธเบเบฅเบปเบ. เบเบตเปเบชเปเบฒเปเบฅเบฑเบเบเบฒเบเบเบธเบเปเบเปเบเบเบญเบเบงเบปเบเบเบญเบ.
เบเบญเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบฐเบเบฑเบเบเบทเบเบชเบนเป tuples เปเบฅเบฐเบชเบปเบเบเบฐเบเบฒเบเปเบฝเบงเบเบฑเบเบงเปเบฒเปเบเบฑเบเบซเบเบฑเบเบซเบเปเบงเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบงเบเบทเบเปเบเบตเปเบกเปเบเบปเปเบฒเปเบ media streamer. เปเบเบเบเบปเปเบงเปเบเปเบฅเปเบง, เบเปเบฒเบเบงเบเบเปเปเบกเบนเบเบเบตเปเบเปเบญเบเบเบฒเบเปเบเบ algorithm เบเบตเปเบเปเบฒเปเบเบตเบเบเบฒเบเบเบฒเบเปเบเบเบปเบงเบเบญเบเบเปเปเบเบปเบเบเบฑเบเปเบฅเบฐเบเปเปเปเบกเปเบเบเบงเบฒเบกเบซเบผเบฒเบเบซเบผเบฒเบเบเบญเบเบเบฐเบซเบเบฒเบเบเบญเบ buffers เบเปเปเบกเบนเบเบเบตเปเปเบเปเบฎเบฑเบเบขเบนเปเปเบเบงเบฑเบเบชเบฐเบเบธเบเปเบญเบ. เบเบปเบงเบขเปเบฒเบ, เบเบงเบเปเบฎเบปเบฒเบเปเบฒเบฅเบฑเบเบเบฝเบเบเบปเบงเบเบญเบเบเบตเปเบเบฐเบเบดเบเบฑเบเบเบฒเบเบซเบฑเบเบเปเบฝเบ Fourier เปเบง, เปเบเบดเปเบเบเบฒเบกเบเปเบฒเบเบดเบเบฒเบกเบเบฝเบเปเบเปเบชเบฒเบกเบฒเบเบเบธเบเปเบเปเบเบเปเปเบกเบนเบเบเบตเปเบกเบตเบเบฐเบซเบเบฒเบเบเบญเบเบชเบญเบ. เปเบซเปเบกเบฑเบเปเบเบฑเบ 512 เบเบฑเบ. เบเปเบฒเบเปเปเบกเบนเบเบเบทเบเบชเปเบฒเบเบเบทเปเบเปเบเบเบเปเบญเบเบเบฒเบเปเบเบฅเบฐเบชเบฑเบ, เบเปเปเบกเบนเบ buffer เบเบญเบเปเบเปเบฅเบฐเบเปเปเบเบงเบฒเบกเบขเบนเปเบเบตเปเบงเบฑเบเบชเบฐเบเบธเบเปเบญเบเบเบฐเบเปเบฒเบเบงเบเปเบฎเบปเบฒ 160 เบเบปเบงเบขเปเบฒเบเบชเบฑเบเบเบฒเบ. เบกเบฑเบเปเบเบฑเบเบเบฒเบเบฅเปเปเบฅเบงเบเบเบตเปเบเบฐเบเปเปเปเบเบฑเบเบเปเบฒเบเปเปเบกเบนเบเบเบฒเบเบเบฒเบเบเปเบญเบเบเปเปเบกเบนเบเบเบปเบเบเปเบงเบฒเบเปเบฒเบเบงเบเบเปเปเบกเบนเบเบเบตเปเบเปเบฒเปเบเบฑเบเบขเบนเปเบเบตเปเบเบฑเปเบ. เปเบเปเปเบเบเปเบฅเบฐเบเบตเบเบตเป, เบเบฒเบเบเบฑเบเบเบฑเบเบเบฐเปเบเบตเบเบเบทเปเบเบเบฑเบ ticker, เปเบเบดเปเบเบเปเปเบชเปเบฒเปเบฅเบฑเบเบเบฐเบเบฐเบเบฒเบเบฒเบกเปเบฅเบทเปเบญเบเบเบปเบงเบเบญเบเบเบปเบเบเปเบงเบฒเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบฒเปเบเบปเปเบฒเบเบฐเบซเบงเปเบฒเบเปเบเบปเปเบฒ. เบเปเบญเบเบซเบเปเบฒเบเบตเป, เบเบงเบเปเบฎเบปเบฒเปเบเปเบเปเบฒเบเบปเบเบเบปเบเบฅเบฐเบเบฝเบเบเบตเปเปเบเบฑเบเบซเบผเบฑเบเบเบฒเบเบเบตเบชเบฒเบกเบเบญเบเบเบฒเบเบเบฑเปเบเบเบญเบ. เบญเบตเบเบเบฒเบกเบซเบผเบฑเบเบเบฒเบเบเบตเป, เบเบฐเบเบงเบเบเบฒเบเบเบญเบเบเบปเบงเบเบญเบเบเปเบญเบเปเบญเบปเบฒเบเปเปเบกเบนเบเบเบฑเบเบซเบกเบปเบเบเบฒเบเปเบเบงเบเปเบญเบเบเปเปเบกเบนเบ.
เบเบญเบเบเบฒเบเบเบฑเปเบ, เบกเบฑเบเบเบฐเบเปเปเบชเบฒเบกเบฒเบเปเบญเบปเบฒเบเบฝเบเปเบเป 512 เบเบปเบงเบขเปเบฒเบเบเบฒเบเบเบฒเบเบเปเบญเบเบเปเปเบกเบนเบ, เปเบเบฒเบฐเบงเปเบฒเบเปเบฒเบเบเบฝเบเปเบเปเบชเบฒเบกเบฒเบเปเบญเบปเบฒเบเปเบญเบเปเบกเปเบเบฑเบเบซเบกเบปเบ, i.e. เบเบฒเบเบเบฑเปเบเบเบญเบเบเบฐเบเปเบญเบเปเบญเบปเบฒ 640 เบเบปเบงเบขเปเบฒเบเปเบฅเบฐเบเปเบฒเปเบเป 512 เบเบญเบเบเบงเบเปเบเบปเบฒ, เบชเปเบงเบเบเบตเปเปเบซเบผเบทเบญเบเปเบญเบเบเบตเปเบเบฐเบชเบฐเบชเบปเบกเบเปเปเบกเบนเบเปเบซเบกเป. เบเบฑเปเบเบเบฑเปเบ, เบเบฒเบเบเบฑเปเบเบเบญเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ, เบเบญเบเปเบซเบเบทเบญเบเบฒเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบปเปเบเบเปเบเบญเบเบกเบฑเบ, เบเปเบญเบเบชเบฐเบซเบเบญเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฒเบเบเปเบงเบเปเบซเบผเบทเบญเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบเบฑเบเบฎเบฑเบเบชเบฒเบเปเปเบกเบนเบเบเบฒเบเบเปเบญเบเบเปเปเบกเบนเบเบฅเบฐเบเบฑเบเบเบฒเบเบเบฒเบ. เบเบฑเบเบเบฑเบเบเบฐเบเบฒเบเบญเบ media streamer เปเบฅเบฐเบเบฒเบเปเบเปเปเบเบเบฑเบเบซเบฒเบเบปเปเบงเปเบเบเบตเปเปเบเปเบเบฑเบเบเบฐเบเบฒเบงเบฑเบเบเบธเบเบดเปเบชเบ - MSBufferizer (buffer), เปเบเบดเปเบเปเบเปเปเบเบเบฑเบเบซเบฒเบเบตเปเปเบเบเปเบเป tuples.
Bufferizer (MSBufferizer)
เบเบตเปเปเบกเปเบเบงเบฑเบเบเบธเบเบตเปเบเบฐเบชเบฐเบชเบปเบกเบเปเปเบกเบนเบเบเปเบญเบเปเบเบปเปเบฒเบเบฒเบเปเบเบเบฒเบเบเบฑเปเบเบเบญเบเปเบฅเบฐเปเบฅเบตเปเบกเบเบปเปเบเบชเบปเปเบเบกเบฑเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฐเบกเบงเบเบเบปเบเบเบฑเบเบเบตเบเบตเปเบเปเบฒเบเบงเบเบเปเปเบกเบนเบเบเบฝเบเบเปเปเบเบทเปเบญเบเปเบฒเปเบเบตเบเบเบฒเบ algorithm เบเบฒเบเบเบฑเปเบเบเบญเบ. เปเบเบเบฐเบเบฐเบเบตเป buffer เบเบณ เบฅเบฑเบเบชเบฐเบชเบปเบกเบเปเปเบกเบนเบ, เบเบปเบงเบเบญเบเบเบฐเปเบฎเบฑเบเบงเบฝเบเบขเบนเปเปเบเปเปเบเบเปเปเปเบฎเบฑเบเบงเบฝเบ, เปเบเบเบเปเปเบเปเบญเบเปเบเปเบเบฐเบฅเบฑเบเบเบฒเบเบเบฐเบกเบงเบเบเบปเบเบเบญเบเปเบเปเบเบเปเบเบต. เปเบเปเบเบฑเบเบเบตเบเบตเปเบเบฑเบเบเบฑเบเบเบฒเบเบญเปเบฒเบเบเบฒเบ bufferer เบชเบปเปเบเบเบทเบเบเปเบฒเบญเบทเปเบเบเบตเปเบเปเปเปเบกเปเบเบชเบนเบ, เบเบฑเบเบเบฑเบ process() เบเบญเบเบเบปเบงเบเบญเบเบเบฐเปเบฅเบตเปเบกเปเบญเบปเบฒเปเบฅเบฐเบเบฐเบกเบงเบเบเบปเบเบเปเปเบกเบนเบเบเบฒเบ bufferer เปเบเบชเปเบงเบเบเบญเบเบเบฐเบซเบเบฒเบเบเบตเปเบเปเบญเบเบเบฒเบ, เบเบปเบเบเปเบงเบฒเบกเบฑเบเบซเบกเบปเบเปเบ.
เบเปเปเบกเบนเบเบเบตเปเบเบฑเบเบเปเปเบเบฑเบเปเบเปเบเปเบญเบเบเบฒเบเบเบฑเบเบเบปเบเบขเบนเปเปเบ buffer เปเบเบฑเบเบญเบปเบเบเบฐเบเบญเบเบเปเบฒเบญเบดเบเบเบญเบ tuple, เปเบเบดเปเบ blocks เบเปเปเปเบเบเบญเบเบเปเปเบกเบนเบเบเปเบญเบเปเบเบปเปเบฒ.
เปเบเบเบชเปเบฒเบเบเบตเปเบญเบฐเบเบดเบเบฒเบเปเบเบดเบ buffer:
struct _MSBufferizer{
queue_t q; /* ะัะตัะตะดั ัะพะพะฑัะตะฝะธะน. */
int size; /* ะกัะผะผะฐัะฝัะน ัะฐะทะผะตั ะดะฐะฝะฝัั
ะฝะฐั
ะพะดััะธั
ัั ะฒ ะฑััะตัะธะทะฐัะพัะต ะฒ ะดะฐะฝะฝัะน ะผะพะผะตะฝั. */
};
typedef struct _MSBufferizer MSBufferizer;
เบซเบเปเบฒเบเบตเปเปเบฎเบฑเบเบงเบฝเบเบเบฑเบ MSBufferizer
เบเบฒเบเบชเปเบฒเบเบเบปเบงเบขเปเบฒเบ buffer เปเปเป:
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 เบเบทเบเปเบเบตเปเบกเปเบชเปเบเบดเบง. เบเบฐโเบซเบเบฒเบโเบเบญเบโเบเบฒเบโเบเบดเบโเปเบฅเปโเบเบญเบโเบเปเปโเบกเบนเบโเปเบเปโเบเบทเบโเปเบเบตเปเบกโเปเบเบปเปเบฒโเปเบโเปเบโ เบเบฐเบซเบเบฒเบ.
เบเบฒเบเปเบญเบเบเปเปเบเบงเบฒเบกเบเบฑเบเปเบปเบเบเบฒเบเปเบเบงเบเปเปเบกเบนเบเปเบเบทเปเบญเบกเบเปเปเปเบเบซเบฒ buffer q:
void ms_bufferizer_put_from_queue(MSBufferizer *obj, MSQueue *q);
เบเบฒเบเปเบญเบเบเปเปเบเบงเบฒเบกเบเบฒเบเบเบฒเบเปเบเบทเปเบญเบกเบเปเป q เปเบ buffer เปเบกเปเบเบเปเบฒเปเบเบตเบเบเบฒเบเปเบเบเปเบเปเบเบฑเบเบเบฑเบ ms_bufferizer_put().
เบญเปเบฒเบเบเบฒเบ buffer:
int ms_bufferizer_read(MSBufferizer *obj, uint8_t *data, int datalen);
เบเปเบฒเบเบฐเบซเบเบฒเบเบเบญเบเบเปเปเบกเบนเบเบเบตเปเบชเบฐเบชเบปเบกเบขเบนเปเปเบ buffer เบซเบเปเบญเบเบเบงเปเบฒเบเบตเปเบฎเปเบญเบเบเป (เบเปเปเบกเบนเบเปเบฅเบ), เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเบฑเบเบเบฑเบเบเบฑเบเบเบทเบเบชเบนเบ, เบเปเปเบกเบนเบเบเปเปเปเบเปเบเบทเบเบเบฑเบเบฅเบญเบเปเบเบซเบฒเบเปเปเบกเบนเบ. เบเปเบฒเบเปเปเบเบฑเปเบเบเบฑเปเบ, เบเบฒเบเบเบฑเบเบฅเบญเบเบเปเปเบกเบนเบเบเบฒเบกเบฅเปเบฒเบเบฑเบเบเบฒเบ tuples เบเบตเปเบเบฑเปเบเบขเบนเปเปเบ buffer เปเบกเปเบเบเบฐเบเบดเบเบฑเบ. เบซเบผเบฑเบโเบเบฒเบโเบเบฒเบโเบชเปเบฒโเปเบเบปเบฒโ, tuple เบเบฐโเบเบทเบโเบฅเบปเบโเปเบฅเบฐโเบเบงเบฒเบกโเบเบปเบโเบเปเบฒโเปเบกเปเบโเปเบเปโเบเปเบญเบโเบญเบญเบโเบกเบฒโ. เบเบฒเบเบเบฑเบเบฅเบญเบเบเบฐเบชเบดเปเบเบชเบธเบเปเบเบเบฐเบเบฐเบเบตเปเปเบกเบทเปเบญ datalen bytes เบเบทเบเบชเบณเปเบเบปเบฒ. เบเปเบฒเบเบทเปเบเบเบตเปเบซเบงเปเบฒเบเบขเบนเปเปเบเบเบฒเบเบเบญเบเบเบฅเบฑเบญเบเบเปเปเบกเบนเบ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเปเบเบเปเปเบเบงเบฒเบกเบเบตเป, เบเบฅเบฑเบญเบเบเปเปเบกเบนเบเบเบฐเบเบทเบเบซเบผเบธเบเบฅเบปเบเปเบเบฑเบเบชเปเบงเบเบเบตเปเบเบฑเบเบเปเปเปเบเปเบเบฑเบเบฅเบญเบ. เปเบเบเบฑเปเบเบเปเปเปเบเบเบตเปเบเปเบฒเบเปเบเบซเบฒ, เบเบฒเบเบเบฑเบเบฅเบญเบเบเบฐเบชเบทเบเบเปเปเบเบฒเบเบเบธเบเบเบตเป.
เบเบฒเบเบญเปเบฒเบเบเปเบฒเบเบงเบเบเปเปเบกเบนเบเบเบตเปเบกเบตเบขเบนเปเปเบ buffer:
int ms_bufferizer_get_avail(MSBufferizer *obj);
เบชเบปเปเบเบเบทเบเบเบฒเบเบชเบฐเบซเบเบฒเบก เบเบฐเบซเบเบฒเบ buffer.
เบเบฒเบเบเบปเบเปเบฅเบตเบเบเบฒเบเบชเปเบงเบเบเบญเบเบเปเปเบกเบนเบเปเบ buffer:
void ms_bufferizer_skip_bytes(MSBufferizer *obj, int bytes);
เบเปเบฒเบเบงเบเปเบเบเปเบเบตเปเบฅเบฐเบเบธเปเบงเปเบเบฐเบเบทเบเบเบถเบ เปเบฅเบฐเบเบปเบเปเบฅเบตเบ. เบเปเปเบกเบนเบเปเบเบปเปเบฒเปเบเปเบเบตเปเบชเบธเบเบเบทเบเบเบปเบเปเบฅเบตเบ.
เบเบฒเบเบฅเบถเบเบเปเปเบเบงเบฒเบกเบเบฑเบเปเบปเบเปเบ buffer:
void ms_bufferizer_flush(MSBufferizer *obj);
เบเบปเบงเบเบฑเบเบเปเปเบกเบนเบเบเบทเบเบฃเบตเปเบเบฑเบเปเบเบฑเบเบชเบนเบ.
เบเบฒเบเบฅเบถเบเบเปเปเบเบงเบฒเบกเบเบฑเบเปเบปเบเปเบ buffer:
void ms_bufferizer_uninit(MSBufferizer *obj);
เปเบเบเบฑเบเบเปเปเปเบเปเบเบทเบเบเบฑเปเบเบเบทเบเปเปเป.
เบเบฒเบเบเบญเบเบเบฑเบเปเบเบตเปเบฅเบฐเบเปเบญเบเบเบงเบฒเบกเบเบปเบเบเปเบฒ:
void ms_bufferizer_destroy(MSBufferizer *obj);
เบเบปเบงเบขเปเบฒเบเบเบญเบเบเบฒเบเปเบเป buffer เบชเบฒเบกเบฒเบเบเบปเบเปเบเปเปเบเบฅเบฐเบซเบฑเบเปเบซเบผเปเบเบเบญเบเบเบปเบงเบเบญเบเบเบฐเปเบชเบชเบทเปเบซเบผเบฒเบเบญเบฑเบ. เบเบปเบงเบขเปเบฒเบ, เปเบเบเบปเบงเบเบญเบ MS_L16_ENC, เปเบเบดเปเบเบเบฑเบเบฅเบฝเบเปเบเบเปเบเบทเบเปเบซเบกเปเปเบเบเบปเบงเบขเปเบฒเบเบเบฒเบเบฅเปเบฒเบเบฑเบเปเบเบทเบญเบเปเบฒเบเปเบเบซเบฒเบเปเบฒเบชเบฑเปเบเปเบฎเบ:
เปเบเบเบปเบเบเบงเบฒเบกเบเปเปเปเบ, เบเบงเบเปเบฎเบปเบฒเบเบฐเปเบเบดเปเบเบเบฑเบเบซเบฒเบเบญเบเบเบฒเบเบเบฒเบเบเบฐเปเบเบเบฒเบเปเบซเบผเบเปเบ ticker เปเบฅเบฐเบงเบดเบเบตเบเบฒเบเบเบตเปเบเบฐเบเปเปเบชเบนเปเบเบฑเบเบเบฒเบเปเบซเบผเบเบเบญเบกเบเบดเบงเปเบเบตเปเบซเบผเบฒเบเปเบเบตเบเปเบเปเบ media streamer.
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com