ื•ื™ืกืคืึธืจืฉืŸ ื“ื™ Mediastreamer2 ื•ื•ืึธื™ืคึผ ืžืึธื˜ืึธืจ. ื˜ื™ื™ืœ 11

ื“ืขืจ ืžืึทื˜ืขืจื™ืึทืœ ืคื•ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ ืื™ื– ื’ืขื ื•ืžืขืŸ ืคื•ืŸ ืžื™ื™ืŸ ื–ืขืŸ ืงืึทื ืึทืœ.

ื•ื™ืกืคืึธืจืฉืŸ ื“ื™ Mediastreamer2 ื•ื•ืึธื™ืคึผ ืžืึธื˜ืึธืจ. ื˜ื™ื™ืœ 11

ื“ืึทื˜ืึท ื‘ืึทื•ื•ืขื’ื•ื ื’ ืžืขืงืึทื ื™ื–ืึทื

  • ื“ืึทื˜ืŸ ื‘ืœืึธืง dblk_t
  • ืึธื ื–ืึธื’ mblk_t
  • ืคืึทื ื’ืงืฉืึทื ื– ืคึฟืึทืจ ืืจื‘ืขื˜ืŸ ืžื™ื˜ ืึทืจื˜ื™ืงืœืขืŸ mblk_t
  • ืจื™ื™ queue_t
  • ืคืึทื ื’ืงืฉืึทื ื– ืคึฟืึทืจ ืืจื‘ืขื˜ืŸ ืžื™ื˜ ืงื™ื•ื– queue_t
  • ืงืึทื ืขืงื˜ื™ื ื’ ืคื™ืœื˜ืขืจืก
  • ืกื™ื’ื ืึทืœ ืคื•ื ื˜ ืคื•ืŸ ื“ืึทื˜ืŸ ืคึผืจืึทืกืขืกื™ื ื’ ื’ืจืึทืคื™ืง
  • ื”ื™ื ื˜ืขืจ ื“ื™ ืกื™ื ื– ืึทืงื˜ื™ื•ื•ื™ื˜ืขื˜ืŸ ืคื•ืŸ ื“ื™ ื˜ื™ืงืขืจ
  • Bufferizer (MSBufferizer)
  • ืคืึทื ื’ืงืฉืึทื ื– ืคึฟืึทืจ ืืจื‘ืขื˜ืŸ ืžื™ื˜ MSBufferizer

ืื™ืŸ ื“ืขืจ ืคืึทืจื’ืึทื ื’ืขื ื”ื™ื™ื˜ ืึทืจื˜ื™ืงืœ ืžื™ืจ ื”ืึธื‘ืŸ ื“ืขื•ื•ืขืœืึธืคึผืขื“ ืื•ื ื“ื–ืขืจ ืื™ื™ื’ืŸ ืคื™ืœื˜ืขืจ. ื“ืขืจ ืึทืจื˜ื™ืงืœ ื•ื•ืขื˜ ืคืึธืงื•ืก ืื•ื™ืฃ ื“ื™ ื™ื ืขืจืœืขืš ืžืขืงืึทื ื™ื–ืึทื ืคึฟืึทืจ ืžืึธื•ื•ื™ื ื’ ื“ืึทื˜ืŸ ืฆื•ื•ื™ืฉืŸ ืžืขื“ื™ืข ืกื˜ืจื™ืžืขืจ ืคื™ืœื˜ืขืจืก. ื“ืึธืก ื•ื•ืขื˜ ืœืึธื–ืŸ ืื™ืจ ืฆื• ืฉืจื™ื™ึทื‘ืŸ ืกืึทืคื™ืกื˜ืึทืงื™ื™ื˜ื™ื“ ืคื™ืœื˜ืขืจืก ืžื™ื˜ ื•ื•ื™ื™ื ื™ืงืขืจ ืžื™ ืื™ืŸ ื“ืขืจ ืฆื•ืงื•ื ืคึฟื˜.

ื“ืึทื˜ืึท ื‘ืึทื•ื•ืขื’ื•ื ื’ ืžืขืงืึทื ื™ื–ืึทื

ื“ืึทื˜ืŸ ื‘ืึทื•ื•ืขื’ื•ื ื’ ืื™ืŸ ื“ื™ ืžื™ื“ื™ืึท ืกื˜ืจื™ืžืขืจ ืื™ื– ื“ื•ืจื›ื’ืขืงืึธื›ื˜ ืžื™ื˜ ืงื™ื•ื– ื“ื™ืกืงืจื™ื™ื‘ื“ ื“ื•ืจืš ื“ื™ ืกื˜ืจื•ืงื˜ื•ืจ queue_t. ืกื˜ืจื™ื ื’ืก ืคื•ืŸ ืึทืจื˜ื™ืงืœืขืŸ ื•ื•ื™ mblk_t, ื•ื•ืึธืก ื–ื™ืš ื˜ืึธืŸ ื ื™ื˜ ืึทื ื˜ื”ืึทืœื˜ืŸ ืกื™ื’ื ืึทืœ ื“ืึทื˜ืŸ, ืึธื‘ืขืจ ื‘ืœื•ื™ื– ืœื™ื ืงืก ืฆื• ื“ื™ ืคืจื™ืขืจื“ื™ืงืข, ื•ื•ื™ื™ึทื˜ืขืจ ืึธื ื–ืึธื’ ืื•ืŸ ืฆื• ื“ื™ ื“ืึทื˜ืŸ ื‘ืœืึธืง. ืื™ืŸ ื“ืขืจืฆื•, ืื™ืš ื•ื•ื™ืœืŸ ืฆื• ืกืคึผืขืฆื™ืขืœ ื•ื ื˜ืขืจืฉื˜ืจื™ื™ึทื›ืŸ ืึทื– ืขืก ืื™ื– ืื•ื™ืš ืึท ืคืขืœื“ ืคึฟืึทืจ ืึท ืœื™ื ืง ืฆื• ืึท ืึธื ื–ืึธื’ ืคื•ืŸ ื“ื™ ื–ืขืœื‘ืข ื˜ื™ืคึผ, ื•ื•ืึธืก ืึทืœืึทื•ื– ืื™ืจ ืฆื• ืึธืจื’ืึทื ื™ื–ื™ืจืŸ ืึท ืื™ื™ืŸ-ืœื™ื ื’ืงื˜ ืจืฉื™ืžื” ืคื•ืŸ ืึทืจื˜ื™ืงืœืขืŸ. ืžื™ืจ ื•ื•ืขืœืŸ ืจื•ืคืŸ ืึท ื’ืจื•ืคึผืข ืคื•ืŸ โ€‹โ€‹ืึทืจื˜ื™ืงืœืขืŸ ืคึฟืึทืจืื™ื™ื ื™ืงื˜ืข ื“ื•ืจืš ืึทื–ืึท ืึท ืจืฉื™ืžื” ืึท ื˜ื•ืคึผืœืข. ืื–ื•ื™, ืงื™ื™ืŸ ืขืœืขืžืขื ื˜ ืคื•ืŸ ื“ืขืจ ืจื™ื™ ืงืขื ืขืŸ ื–ื™ื™ืŸ ืึท ืื™ื™ืŸ ืึธื ื–ืึธื’ mblk_t, ืื•ืŸ ืืคึฟืฉืจ ื“ืขืจ ืงืึธืคึผ ืคื•ืŸ ืึท ืึธื ื–ืึธื’ ื˜ื•ืคึผืœืข mblk_t. ื™ืขื“ืขืจ ื˜ื•ืคึผืœืข ืึธื ื–ืึธื’ ืงืขื ืขืŸ ื”ืึธื‘ืŸ ื–ื™ื™ืŸ ืื™ื™ื’ืขื ืข ืึธืคึผื˜ื™ื™ืœื•ื ื’ ื“ืึทื˜ืŸ ื‘ืœืึธืง. ืžื™ืจ ื•ื•ืขืœืŸ ื“ื™ืกืงื•ื˜ื™ืจืŸ ื•ื•ืึธืก ื˜ื•ืคึผืœืขืก ื–ืขื ืขืŸ ื“ืืจืฃ ืึท ื‘ื™ืกืœ ืฉืคึผืขื˜ืขืจ.

ื•ื•ื™ ื“ืขืจืžืื ื˜ ืื•ื™ื‘ืŸ, ื“ืขืจ ืึธื ื–ืึธื’ ื–ื™ืš ื˜ื•ื˜ ื ื™ืฉื˜ ืึทื ื˜ื”ืึทืœื˜ืŸ ืึท ื‘ืœืึธืง ืคื•ืŸ ื“ืึทื˜ืŸ; ืึทื ืฉื˜ืึธื˜, ืขืก ื›ึผื•ืœืœ ื‘ืœื•ื™ื– ืึท ื˜ื™ื™ึทื˜ืœ ืฆื• ื“ื™ ื–ื›ึผืจื•ืŸ ื’ืขื’ื ื˜ ื•ื•ื• ื“ื™ ื‘ืœืึธืง ืื™ื– ืกื˜ืึธืจื“. ืื™ืŸ ื“ืขื ื˜ื™ื™ืœ, ื“ื™ ืงื•ื™ืœืขืœื“ื™ืง ื‘ื™ืœื“ ืคื•ืŸ ื“ื™ ื•ื•ืขืจืง ืคื•ืŸ ื“ื™ ืžื™ื“ื™ืึท ืกื˜ืจื™ืžืขืจ ืื™ื– ืจืขืžืึทื ื™ืกืึทื ื˜ ืคื•ืŸ ื“ื™ ื˜ื™ืจ ื•ื•ืขืจื›ืึทื•ืก ืื™ืŸ ื“ื™ ืงืึทืจื˜ื•ืŸ "ืžืึธื ืกื˜ืขืจืก, ื™ื ืง.," ื•ื•ื• ื˜ื™ืจืŸ (ืœื™ื ืงืก ืฆื• ื“ืึทื˜ืŸ - ืจื•ืžื–) ืžืึทืš ืžื™ื˜ ืึท ืžืขืฉื•ื’ืข ื’ื™ื›ืงื™ื™ึทื˜ ืฆื•ื–ืืžืขืŸ ืึธื•ื•ื•ืขืจื›ืขื“ ืงืึทื ื•ื•ื™ื™ืขืจื–, ื‘ืฉืขืช ื“ื™ ืจื•ืžื– ื–ื™ืš ื‘ืœื™ื™ึทื‘ืŸ ื‘ืึทื•ื•ืขื’ืœืขืš.

ืื™ืฆื˜, ืžืึธื•ื•ื™ื ื’ ืฆื•ื–ืืžืขืŸ ื“ื™ ื›ื™ื™ืขืจืึทืจืงื™ ืคื•ืŸ ื“ื ืึธ ืฆื• ืฉืคึผื™ืฅ, ืœืึธื–ืŸ ืื•ื ื“ื– ื‘ืึทื˜ืจืึทื›ื˜ืŸ ืื™ืŸ ื“ืขื˜ืึทืœ ื“ื™ ืœื™ืกื˜ืขื“ ืขื ื˜ื™ื˜ื™ื– ืคื•ืŸ ื“ื™ ื“ืึทื˜ืŸ ื˜ืจืึทื ืกืžื™ืกื™ืข ืžืขืงืึทื ื™ื–ืึทื ืื™ืŸ ื“ื™ ืžื™ื“ื™ืึท ืกื˜ืจื™ืžืขืจ.

ื“ืึทื˜ืึท ื‘ืœืึธืง dblk_t

ื“ื™ ื“ืึทื˜ืŸ ื‘ืœืึธืง ื‘ืืฉื˜ื™ื™ื˜ ืคื•ืŸ ืึท ื›ืขื“ืขืจ ืื•ืŸ ืึท ื“ืึทื˜ืŸ ื‘ืึทืคืขืจ. ื“ื™ ื›ืขื“ืขืจ ืื™ื– ื“ื™ืกืงืจื™ื™ื‘ื“ ื“ื•ืจืš ื“ื™ ืคืืœื’ืขื ื“ืข ืกื˜ืจื•ืงื˜ื•ืจ,

typedef struct datab
{
unsigned char *db_base; // ะฃะบะฐะทะฐั‚ะตะปัŒ ะฝะฐ ะฝะฐั‡ะฐะปะพ ะฑัƒั„ะตั€ ะดะฐะฝะฝั‹ั….
unsigned char *db_lim;  // ะฃะบะฐะทะฐั‚ะตะปัŒ ะฝะฐ ะบะพะฝะตั† ะฑัƒั„ะตั€ ะดะฐะฝะฝั‹ั….
void (*db_freefn)(void*); // ะคัƒะฝะบั†ะธั ะพัะฒะพะฑะพะถะดะตะฝะธั ะฟะฐะผัั‚ะธ ะฟั€ะธ ัƒะดะฐะปะตะฝะธะธ ะฑะปะพะบะฐ.
int db_ref; // ะกั‡ะตั‚ั‡ะธะบ ััั‹ะปะพะบ.
} dblk_t;

ื“ื™ ืคืขืœื“ืขืจ ืคื•ืŸ ื“ื™ ืกื˜ืจื•ืงื˜ื•ืจ ืึทื ื˜ื”ืึทืœื˜ืŸ ืคึผื•ื™ื ื˜ืขืจื– ืฆื• ื“ื™ ืึธื ื”ื™ื™ื‘ ืคื•ืŸ ื“ื™ ื‘ืึทืคืขืจ, ื“ื™ ืกื•ืฃ ืคื•ืŸ ื“ื™ ื‘ืึทืคืขืจ, ืื•ืŸ ื“ื™ ืคึฟื•ื ืงืฆื™ืข ืคึฟืึทืจ ื“ื™ืœื™ื˜ื™ื ื’ ื“ื™ ื“ืึทื˜ืŸ ื‘ืึทืคืขืจ. ืœืขืฆื˜ืข ืขืœืขืžืขื ื˜ ืื™ืŸ ื›ืขื“ืขืจ db_ref - ืจืขืคึฟืขืจืขื ืฅ ื˜ืึธืžื‘ืึทื ืง, ืื•ื™ื‘ ืขืก ืจื™ื˜ืฉืึทื– ื ื•ืœ, ื“ืึธืก ืกืขืจื•ื•ืขืก ื•ื•ื™ ืึท ืกื™ื’ื ืึทืœ ืฆื• ื•ื™ืกืžืขืงืŸ ื“ืขื ื‘ืœืึธืง ืคื•ืŸ ื–ื›ึผืจื•ืŸ. ืื•ื™ื‘ ื“ื™ ื“ืึทื˜ืŸ ื‘ืœืึธืง ืื™ื– ื‘ืืฉืืคืŸ ื“ื•ืจืš ื“ื™ ืคึฟื•ื ืงืฆื™ืข ื“ืึทื˜ืึทื‘_ืึทืœืœืึธืง() , ื“ืขืžืึธืœื˜ ื“ืขืจ ื“ืึทื˜ืŸ ื‘ืึทืคืขืจ ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขืฉื˜ืขืœื˜ ืื™ืŸ ื–ื›ึผืจื•ืŸ ืžื™ื“ ื ืึธืš ื“ื™ ื›ืขื“ืขืจ. ืื™ืŸ ืึทืœืข ืื ื“ืขืจืข ืงืึทืกืขืก, ื“ื™ ื‘ืึทืคืขืจ ืงืขื ืขืŸ ื–ื™ื™ืŸ ืœื™ื’ืŸ ืขืจื’ืขืฅ ืกืขืคึผืขืจืึทื˜ืœื™. ื“ื™ ื“ืึทื˜ืŸ ื‘ืึทืคืขืจ ื•ื•ืขื˜ ืึทื ื˜ื”ืึทืœื˜ืŸ ืกื™ื’ื ืึทืœ ืกืึทืžืคึผืึทืœื– ืึธื“ืขืจ ืื ื“ืขืจืข ื“ืึทื˜ืŸ ื•ื•ืึธืก ืžื™ืจ ื•ื•ื™ืœืŸ ืฆื• ืคึผืจืึธืฆืขืก ืžื™ื˜ ืคื™ืœื˜ืขืจืก.

ื ื ื™ื™ึทืข ื‘ื™ื™ึทืฉืคึผื™ืœ ืคื•ืŸ ืึท ื“ืึทื˜ืŸ ื‘ืœืึธืง ืื™ื– ื‘ืืฉืืคืŸ ืžื™ื˜ ื“ื™ ืคึฟื•ื ืงืฆื™ืข:

dblk_t *datab_alloc(int size);

ื•ื•ื™ ืึท ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘ ืคึผืึทืจืึทืžืขื˜ืขืจ, ืขืก ืื™ื– ื’ืขื’ืขื‘ืŸ ื“ื™ ื’ืจื™ื™ืก ืคื•ืŸ ื“ื™ ื“ืึทื˜ืŸ ื•ื•ืึธืก ื“ื™ ื‘ืœืึธืง ื•ื•ืขื˜ ืงืจืึธื. ืžืขืจ ื–ื›ึผืจื•ืŸ ืื™ื– ืึทืœืึทืงื™ื™ื˜ื™ื“ ืื™ืŸ ืกื“ืจ ืฆื• ืฉื˜ืขืœืŸ ืึท ื›ืขื“ืขืจ - ืกื˜ืจื•ืงื˜ื•ืจ - ืื™ืŸ ื“ื™ ืึธื ื”ื™ื™ื‘ ืคื•ืŸ ื“ื™ ืึทืœืึทืงื™ื™ื˜ื™ื“ ื–ื›ึผืจื•ืŸ ื“ืึทื˜ืึทื‘. ืึธื‘ืขืจ ื•ื•ืขืŸ ืื™ืจ ื ื•ืฆืŸ ืื ื“ืขืจืข ืคืึทื ื’ืงืฉืึทื ื–, ื“ืึธืก ืงืขืŸ ื ื™ืฉื˜ ืฉื˜ืขื ื“ื™ืง ืคึผืึทืกื™ืจืŸ; ืื™ืŸ ืขื˜ืœืขื›ืข ืงืึทืกืขืก, ื“ื™ ื“ืึทื˜ืŸ ื‘ืึทืคืขืจ ืงืขืŸ ื–ื™ื™ืŸ ืœื™ื’ืŸ ืกืขืคึผืขืจืึทื˜ืœื™ ืคึฟื•ืŸ ื“ื™ ื“ืึทื˜ืŸ ื‘ืœืึธืง ื›ืขื“ืขืจ. ื•ื•ืขืŸ ืงืจื™ื™ื™ื˜ื™ื ื’ ืึท ืกื˜ืจื•ืงื˜ื•ืจ, ื“ื™ ืคืขืœื“ืขืจ ื–ืขื ืขืŸ ืงืึทื ืคื™ื’ื™ืขืจื“ ืึทื–ื•ื™ ืึทื– ื–ื™ื™ึทืŸ ืคืขืœื“ db_base ืฉืคึผื™ืฆื™ืง ืฆื• ื“ื™ ืึธื ื”ื™ื™ื‘ ืคื•ืŸ ื“ื™ ื“ืึทื˜ืŸ ื’ืขื’ื ื˜, ืื•ืŸ db_lim ืฆื• ื–ื™ื™ึทืŸ ืกื•ืฃ. ืœื™ื ืง ืฆื™ื™ืœืŸ db_ref ืื™ื– ื‘ืึทืฉื˜ื™ืžื˜ ืฆื• ืื™ื™ืŸ. ื“ื™ ื“ืึทื˜ืŸ ืงืœืึธืจ ืคึฟื•ื ืงืฆื™ืข ื˜ื™ื™ึทื˜ืœ ืื™ื– ื‘ืึทืฉื˜ื™ืžื˜ ืฆื• ื ื•ืœ.

ืึธื ื–ืึธื’ 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_next, ื•ื•ืึธืก ื–ืขื ืขืŸ ื ื™ื™ื˜ื™ืง ืฆื• ืึธืจื’ืึทื ื™ื–ื™ืจืŸ ืึท ื“ืึทื‘ืœื™ ืœื™ื ื’ืงื˜ ืจืฉื™ืžื” (ื•ื•ืึธืก ืื™ื– ืึท ืจื™ื™ queue_t).

ื“ืขืจื ืึธืš ืงื•ืžื˜ ื“ืขืจ ืึธื ื•ื•ื™ื™ึทื– b_cont, ื•ื•ืึธืก ืื™ื– ื‘ืœื•ื™ื– ื’ืขื ื™ืฆื˜ ื•ื•ืขืŸ ื“ืขืจ ืึธื ื–ืึธื’ ืื™ื– ื˜ื™ื™ืœ ืคื•ืŸ ืึท ื˜ื•ืคึผืœืข. ืคึฟืึทืจ ื“ื™ ืœืขืฆื˜ืข ืึธื ื–ืึธื’ ืื™ืŸ ื“ื™ ื˜ื•ืคึผืœืข, ื“ืขื ื˜ื™ื™ึทื˜ืœ ื‘ืœื™ื™ื‘ื˜ ื ืึทืœ.

ื•ื•ื™ื™ึทื˜ืขืจ ืžื™ืจ ื–ืขืŸ ืึท ื˜ื™ื™ึทื˜ืœ ืฆื• ืึท ื“ืึทื˜ืŸ ื‘ืœืึธืง b_datap, ืคึฟืึทืจ ื•ื•ืึธืก ื“ืขืจ ืึธื ื–ืึธื’ ื™ื’ื–ื™ืกืฅ. ืขืก ืื™ื– ื ืื›ื’ืขื’ืื ื’ืขืŸ ื“ื•ืจืš ืคึผื•ื™ื ื˜ืขืจื– ืฆื• ื“ื™ ื’ืขื’ื ื˜ ื™ืŸ ื“ื™ ื‘ืœืึธืง ื“ืึทื˜ืŸ ื‘ืึทืคืขืจ. ืคืขืœื“ b_rptr ืกืคึผืขืฆื™ืคื™ืฆื™ืจื˜ ื“ื™ ืึธืจื˜ ืคื•ืŸ ื•ื•ืึธืก ื“ืึทื˜ืŸ ืคื•ืŸ ื“ื™ ื‘ืึทืคืขืจ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืœื™ื™ืขื ืขืŸ. ืคืขืœื“ b_wptr ื™ื ื“ื™ืงื™ื™ืฅ ื“ื™ ืึธืจื˜ ืคื•ืŸ ื•ื•ืึธืก ืฉืจื™ื™ื‘ื˜ ืฆื• ื“ื™ ื‘ืึทืคืขืจ ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขื˜ืืŸ.

ื“ื™ ืจื•ืขืŸ ืคืขืœื“ืขืจ ื–ืขื ืขืŸ ืคื•ืŸ ืึท ื“ื™ื ืกื˜ ื ืึทื˜ื•ืจ ืื•ืŸ ื˜ืึธืŸ ื ื™ื˜ ืคืึทืจื‘ื™ื ื“ืŸ ืฆื• ื“ื™ ืึธืคึผืขืจืึทืฆื™ืข ืคื•ืŸ โ€‹โ€‹ื“ื™ ื“ืึทื˜ืŸ ืึทืจื™ื‘ืขืจืคื™ืจืŸ ืžืขืงืึทื ื™ื–ืึทื.

ื•ื ื˜ืขืจ ืื™ื– ืึท ืื™ื™ืŸ ืึธื ื–ืึธื’ ืžื™ื˜ ื“ืขื ื ืึธืžืขืŸ m1 ืื•ืŸ ื“ืึทื˜ืŸ ื‘ืœืึธืง d1.
ื•ื™ืกืคืึธืจืฉืŸ ื“ื™ Mediastreamer2 ื•ื•ืึธื™ืคึผ ืžืึธื˜ืึธืจ. ื˜ื™ื™ืœ 11
ื“ื™ ืคืืœื’ืขื ื“ืข ืคื™ื’ื•ืจ ื•ื•ื™ื™ื–ื˜ ืึท ื˜ื•ืคึผืœืข ืคื•ืŸ โ€‹โ€‹ื“ืจื™ื™ ืึทืจื˜ื™ืงืœืขืŸ m1, ืž1_1, ืž1_2.
ื•ื™ืกืคืึธืจืฉืŸ ื“ื™ Mediastreamer2 ื•ื•ืึธื™ืคึผ ืžืึธื˜ืึธืจ. ื˜ื™ื™ืœ 11

ืžืขืกื™ื“ื–ืฉื™ื ื’ ืคืึทื ื’ืงืฉืึทื ื– mblk_t

ื ื ื™ื™ึทืข ืึธื ื–ืึธื’ mblk_t ื‘ืืฉืืคืŸ ื“ื•ืจืš ื“ื™ ืคึฟื•ื ืงืฆื™ืข:

mblk_t *allocb(int size, int pri); 

ื–ื™ ืœื™ื™ื’ื˜ ืึท ื ื™ื™ืข ืึธื ื–ืึธื’ ืื™ืŸ ื–ื›ึผืจื•ืŸ mblk_t ืžื™ื˜ ืึท ื“ืึทื˜ืŸ ื‘ืœืึธืง ืคื•ืŸ ื“ื™ ืกืคึผืขืกืึทืคื™ื™ื“ ื’ืจื™ื™ืก ื ื•ืžืขืจ, ืฆื•ื•ื™ื™ื˜ืข ื˜ืขื ื” - ืคึผืจื™ื™ึทื– ื ื™ื˜ ื’ืขื ื™ืฆื˜ ืื™ืŸ ื“ืขื ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹ื“ืขืจ ื‘ื™ื‘ืœื™ืึธื˜ืขืง. ืขืก ื–ืึธืœ ื‘ืœื™ื™ึทื‘ืŸ ื ื•ืœ. ื‘ืขืฉืึทืก ื“ื™ ืคื•ื ืงืฆื™ืข ืก ืึธืคึผืขืจืึทืฆื™ืข, ื–ื›ึผืจื•ืŸ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืึทืœืึทืงื™ื™ื˜ื™ื“ ืคึฟืึทืจ ื“ื™ ืกื˜ืจื•ืงื˜ื•ืจ ืคื•ืŸ ื“ื™ ื ื™ื™ึทืข ืึธื ื–ืึธื’ ืื•ืŸ ื“ื™ ืคึฟื•ื ืงืฆื™ืข ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขืจื•ืคึฟืŸ mblk_init(), ื•ื•ืึธืก ื•ื•ืขื˜ ื‘ืึทืฉื˜ืขื˜ื™ืง ืึทืœืข ืคืขืœื“ืขืจ ืคื•ืŸ ื“ื™ ื‘ืืฉืืคืŸ ื‘ื™ื™ึทืฉืคึผื™ืœ ืคื•ืŸ ื“ื™ ืกื˜ืจื•ืงื˜ื•ืจ ืื•ืŸ ื“ืขืžืึธืœื˜, ื ื™ืฆืŸ ื“ื™ ืื•ื™ื‘ืŸ ื“ืขืจืžืื ื˜ ื“ืึทื˜ืึทื‘_ืึทืœืœืึธืง(), ื•ื•ืขื˜ ืžืึทื›ืŸ ืึท ื“ืึทื˜ืŸ ื‘ืึทืคืขืจ. ื ืึธืš ื•ื•ืึธืก ื“ื™ ืคืขืœื“ืขืจ ืื™ืŸ ื“ื™ ืกื˜ืจื•ืงื˜ื•ืจ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืงืึทื ืคื™ื’ื™ืขืจื“:

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. ื™ืขื ืข. ืื™ืŸ ื“ืขื ืคืึทืœ, ื“ื™ ื“ืึทื˜ืŸ ื‘ืึทืคืขืจ ืื™ื– ื ื™ืฉื˜ ืœื™ื’ืŸ ื ืึธืš ื“ื™ ื›ืขื“ืขืจ ืคืขืœื“ืขืจ ืคื•ืŸ ื“ื™ ื“ืึทื˜ืŸ ื‘ืœืึธืง, ื•ื•ื™ ืื™ื– ื’ืขื•ื•ืขืŸ ื“ืขืจ ืคืึทืœ ื•ื•ืขืŸ ืงืจื™ื™ื™ื˜ื™ื ื’ ืึท ื“ืึทื˜ืŸ ื‘ืœืึธืง ืžื™ื˜ ื“ื™ ืคึฟื•ื ืงืฆื™ืข ื“ืึทื˜ืึทื‘_ืึทืœืœืึธืง(). ื“ืขืจ ื‘ืึทืคืขืจ ืžื™ื˜ ื“ืึทื˜ืŸ ื“ื•ืจื›ื’ืขื’ืื ื’ืขืŸ ืฆื• ื“ื™ ืคื•ื ืงืฆื™ืข ื•ื•ืขื˜ ื‘ืœื™ื™ึทื‘ืŸ ื•ื•ื• ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ, ืึธื‘ืขืจ ืžื™ื˜ ื“ื™ ื”ื™ืœืฃ ืคื•ืŸ ืคึผื•ื™ื ื˜ืขืจื– ืขืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ืึทื˜ืึทื˜ืฉื˜ ืฆื• ื“ื™ ื ื™ื™ ื‘ืืฉืืคืŸ ื›ืขื“ืขืจ ืคื•ืŸ ื“ื™ ื“ืึทื˜ืŸ ื‘ืœืึธืง, ืื•ืŸ ืึทื–, ืึทืงืึธืจื“ื™ื ื’ืœื™, ืฆื• ื“ืขืจ ืึธื ื–ืึธื’.

ืฆื• ืื™ื™ืŸ ืึธื ื–ืึธื’ mblk_t ืขื˜ืœืขื›ืข ื“ืึทื˜ืŸ ื‘ืœืึทืงืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ืงืึทื ืงืึทื˜ืึทื ื™ื™ื˜ืึทื“ ืกืึทืงื•ื•ืขื ื˜ืฉืึทืœื™. ื“ืึธืก ืื™ื– ื’ืขื˜ืืŸ ื“ื•ืจืš ื“ื™ ืคึฟื•ื ืงืฆื™ืข:

mblk_t * appendb(mblk_t *mp, const char *data, int size, bool_t pad); 

mp - ืึท ืึธื ื–ืึธื’ ืฆื• ื•ื•ืึธืก ืืŸ ืื ื“ืขืจ ื“ืึทื˜ืŸ ื‘ืœืึธืง ื•ื•ืขื˜ ื–ื™ื™ืŸ ืžื•ืกื™ืฃ;
ื“ืึทื˜ืข - ื˜ื™ื™ึทื˜ืœ ืฆื• ื“ื™ ื‘ืœืึธืง, ืึท ืงืึธืคึผื™ืข ืคื•ืŸ โ€‹โ€‹ื•ื•ืึธืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ืžื•ืกื™ืฃ ืฆื• ื“ื™ ืึธื ื–ืึธื’;
ื ื•ืžืขืจ - ื“ืึทื˜ืŸ ื’ืจื™ื™ืก;
ื‘ืœืึธืง - ืึท ืคืึธืŸ ืึทื– ื“ื™ ื’ืจื™ื™ืก ืคื•ืŸ ื“ื™ ืึทืœืึทืงื™ื™ื˜ื™ื“ ื–ื›ึผืจื•ืŸ ืžื•ื–ืŸ ื–ื™ื™ืŸ ืึทืœื™ื™ื ื“ ืฆื•ื–ืืžืขืŸ ืึท 4-ื‘ื™ื˜ืข ื’ืจืขื ืขืฅ (ื•ื•ืึทื“ื™ื ื’ ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขื˜ืืŸ ืžื™ื˜ ื–ืขืจืึธืก).

ืื•ื™ื‘ ืขืก ืื™ื– ื’ืขื ื•ื’ ืคึผืœืึทืฅ ืื™ืŸ ื“ื™ ื™ื’ื–ื™ืกื˜ื™ื ื’ ืึธื ื–ืึธื’ ื“ืึทื˜ืŸ ื‘ืึทืคืขืจ, ื“ื™ ื ื™ื™ึทืข ื“ืึทื˜ืŸ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืคึผื™ื™ืกื˜ื™ื“ ื”ื™ื ื˜ืขืจ ื“ื™ ื“ืึทื˜ืŸ ืฉื•ื™ืŸ ื“ืึธืจื˜. ืื•ื™ื‘ ืขืก ืื™ื– ื•ื•ื™ื™ื ื™ืงืขืจ ืคืจื™ื™ ืคึผืœืึทืฅ ืื™ืŸ ื“ื™ ืึธื ื–ืึธื’ ื“ืึทื˜ืŸ ื‘ืึทืคืขืจ ื•ื•ื™ ื ื•ืžืขืจ, ื“ืขืžืึธืœื˜ ืึท ื ื™ื™ึทืข ืึธื ื–ืึธื’ ืื™ื– ื‘ืืฉืืคืŸ ืžื™ื˜ ืึท ื’ืขื ื•ื’ ื‘ืึทืคืขืจ ื’ืจื™ื™ืก ืื•ืŸ ื“ื™ ื“ืึทื˜ืŸ ื–ืขื ืขืŸ ืงืึทืคึผื™ื“ ืฆื• ื–ื™ื™ึทืŸ ื‘ืึทืคืขืจ. ื“ืึธืก ืื™ื– ืึท ื ื™ื™ึทืข ืึธื ื–ืึธื’, ืœื™ื ื’ืงื˜ ืฆื• ื“ืขืจ ืึธืจื™ื’ื™ื ืขืœ ืžื™ื˜ ืึท ื˜ื™ื™ึทื˜ืœ b_cont. ืื™ืŸ ื“ืขื ืคืึทืœ, ื“ืขืจ ืึธื ื–ืึธื’ ื˜ื•ืจื ืก ืื™ืŸ ืึท ื˜ื•ืคึผืœืข.

ืื•ื™ื‘ ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืœื™ื™ื’ืŸ ืืŸ ืื ื“ืขืจ ื‘ืœืึธืง ืคื•ืŸ ื“ืึทื˜ืŸ ืฆื• ื“ื™ ื˜ื•ืคึผืœืข, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื ื•ืฆืŸ ื“ื™ ืคื•ื ืงืฆื™ืข:

void msgappend(mblk_t *mp, const char *data, int size, bool_t pad);

ื–ื™ ื•ื•ืขื˜ ื’ืขืคึฟื™ื ืขืŸ ื“ื™ ืœืขืฆื˜ืข ืึธื ื–ืึธื’ ืื™ืŸ ื“ื™ ื˜ื•ืคึผืœืข (ืขืจ ื”ืื˜ b_cont ื•ื•ืขื˜ ื–ื™ื™ืŸ ื ืึทืœ) ืื•ืŸ ื•ื•ืขื˜ ืจื•ืคืŸ ื“ื™ ืคึฟื•ื ืงืฆื™ืข ืคึฟืึทืจ ื“ืขื ืึธื ื–ืึธื’ ืึทืคึผืคึผืขื ื“ื‘ ().

ืื™ืจ ืงืขื ืขืŸ ื’ืขืคึฟื™ื ืขืŸ ื“ื™ ื’ืจื™ื™ืก ืคื•ืŸ ื“ืึทื˜ืŸ ืื™ืŸ ืึท ืึธื ื–ืึธื’ ืึธื“ืขืจ ื˜ื•ืคืœืข ื ื™ืฆืŸ ื“ื™ ืคึฟื•ื ืงืฆื™ืข:

int msgdsize(const mblk_t *mp);

ืขืก ื•ื•ืขื˜ ืฉืœื™ื™ืฃ ื“ื•ืจืš ืึทืœืข ื“ื™ ืึทืจื˜ื™ืงืœืขืŸ ืื™ืŸ ื“ื™ ื˜ื•ืคึผืœืข ืื•ืŸ ืฆื•ืจื™ืงืงื•ืžืขืŸ ื“ื™ ื’ืึทื ืฅ ืกื•ืžืข ืคื•ืŸ โ€‹โ€‹ื“ืึทื˜ืŸ ืื™ืŸ ื“ื™ ื“ืึทื˜ืŸ ื‘ืึทืคืขืจื– ืคื•ืŸ ื“ื™ ืึทืจื˜ื™ืงืœืขืŸ. ืคึฟืึทืจ ื™ืขื“ืขืจ ืึธื ื–ืึธื’, ื“ื™ ืกื•ืžืข ืคื•ืŸ โ€‹โ€‹ื“ืึทื˜ืŸ ืื™ื– ืงืึทืœืงื™ืึทืœื™ื™ื˜ื™ื“ ื•ื•ื™ ื’ื™ื™ื˜:

 mp->b_wptr - mp->b_rptr

ืฆื• ืคืึทืจื‘ื™ื ื“ืŸ ืฆื•ื•ื™ื™ ื˜ื•ืคึผืœืขืก, ื ื•ืฆืŸ ื“ื™ ืคึฟื•ื ืงืฆื™ืข:

mblk_t *concatb(mblk_t *mp, mblk_t *newm);

ื–ื™ ืœื™ื™ื’ื˜ ืฆื• ื“ืขื ื˜ื•ืคืœ newm ืฆื• ื“ื™ ืขืง ืคื•ืŸ ื“ื™ ื˜ื•ืคึผืœืข mp ืื•ืŸ ืงืขืจื˜ ืึท ื˜ื™ื™ึทื˜ืœ ืฆื• ื“ื™ ืœืขืฆื˜ืข ืึธื ื–ืึธื’ ืคื•ืŸ ื“ื™ ืจื™ื–ืึทืœื˜ื™ื ื’ ื˜ื•ืคึผืœืข.

ืื•ื™ื‘ ื ื™ื™ื˜ื™ืง, ืึท ื˜ื•ืคึผืœืข ืงืขื ืขืŸ ื–ื™ื™ืŸ ืคืืจื•ื•ืื ื“ืœืขืŸ ืื™ืŸ ืื™ื™ืŸ ืึธื ื–ืึธื’ ืžื™ื˜ ืึท ืื™ื™ืŸ ื‘ืœืึธืง ืคื•ืŸ ื“ืึทื˜ืŸ; ื“ืึธืก ืื™ื– ื’ืขื˜ืืŸ ื“ื•ืจืš ื“ื™ ืคึฟื•ื ืงืฆื™ืข:

void msgpullup(mblk_t *mp,int len);

ืื•ื™ื‘ ืึทืจื’ื•ืžืขื ื˜ ืœืขืŸ ืื™ื– -1, ื“ืขืžืึธืœื˜ ื“ื™ ื’ืจื™ื™ืก ืคื•ืŸ ื“ื™ ืึทืœืึทืงื™ื™ื˜ื™ื“ ื‘ืึทืคืขืจ ืื™ื– ื‘ืืฉืœืืกืŸ ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ. ืื•ื™ื‘ ืœืขืŸ ืื™ื– ืึท positive ื ื•ืžืขืจ, ืึท ื‘ืึทืคืขืจ ืคื•ืŸ ื“ืขื ื’ืจื™ื™ืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ื‘ืืฉืืคืŸ ืื•ืŸ ื“ื™ ื˜ื•ืคึผืœืข ืึธื ื–ืึธื’ ื“ืึทื˜ืŸ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืงืึทืคึผื™ื“ ืื™ืŸ ืขืก. ืื•ื™ื‘ ื“ืขืจ ื‘ืึทืคืขืจ ืœื•ื™ืคื˜ ืื•ื™ืก, ืงืึทืคึผื™ื™ื ื’ ื•ื•ืขื˜ ื”ืึทืœื˜ืŸ ื“ืึธืจื˜. ื“ืขืจ ืขืจืฉื˜ืขืจ ืึธื ื–ืึธื’ ืคื•ืŸ ื“ื™ ื˜ื•ืคึผืœืข ื•ื•ืขื˜ ื‘ืึทืงื•ืžืขืŸ ืึท ื ื™ื™ึท ื’ืจื™ื™ืก ื‘ืึทืคืขืจ ืžื™ื˜ ื“ื™ ืงืึทืคึผื™ื“ ื“ืึทื˜ืŸ. ื“ื™ ืจื•ืขืŸ ืึทืจื˜ื™ืงืœืขืŸ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืื•ื™ืกื’ืขืžืขืงื˜ ืื•ืŸ ื“ืขืจ ื–ื›ึผืจื•ืŸ ืื•ืžื’ืขืงืขืจื˜ ืฆื• ื“ื™ ืงื•ืคึผืข.

ื•ื•ืขืŸ ื“ื™ืœื™ื˜ื™ื ื’ ืึท ืกื˜ืจื•ืงื˜ื•ืจ mblk_t ื“ื™ ืจืขืคึฟืขืจืขื ืฅ ืฆื™ื™ืœืŸ ืคื•ืŸ ื“ื™ ื“ืึทื˜ืŸ ื‘ืœืึธืง ืื™ื– ื’ืขื ื•ืžืขืŸ ืื™ืŸ ื—ืฉื‘ื•ืŸ ืื•ื™ื‘, ื•ื•ืขืŸ ืคืึทืš ืคืจื™ื™ื‘ () ืขืก ื˜ื•ืจื ืก ืื•ื™ืก ืฆื• ื–ื™ื™ืŸ ื ื•ืœ, ืื•ืŸ ื“ื™ ื“ืึทื˜ืŸ ื‘ืึทืคืขืจ ืื™ื– ืื•ื™ืกื’ืขืžืขืงื˜ ืฆื•ื–ืืžืขืŸ ืžื™ื˜ ื“ืขื ื‘ื™ื™ึทืฉืคึผื™ืœ mblk_t, ื•ื•ืึธืก ื•ื•ื™ื™ื–ื˜ ืื•ื™ืฃ ืื™ื.

ื™ื ื™ื˜ื™ืึทืœื™ื–ื™ื ื’ ื“ื™ ืคืขืœื“ืขืจ ืคื•ืŸ ืึท ื ื™ื™ึทืข ืึธื ื–ืึธื’:

void mblk_init(mblk_t *mp);

ืึทื“ื™ื ื’ ืืŸ ืื ื“ืขืจ ืฉื˜ื™ืง ืคื•ืŸ ื“ืึทื˜ืŸ ืฆื• ื“ื™ ืึธื ื–ืึธื’:

mblk_t * appendb(mblk_t *mp, const char *data, size_t size, bool_t pad);

ืื•ื™ื‘ ื“ื™ ื ื™ื™ึทืข ื“ืึทื˜ืŸ ื–ืขื ืขืŸ ื ื™ืฉื˜ ืคึผืึทืกื™ืง ืื™ืŸ ื“ื™ ืคืจื™ื™ ืคึผืœืึทืฅ ืคื•ืŸ ื“ื™ ืึธื ื–ืึธื’ ื“ืึทื˜ืŸ ื‘ืึทืคืขืจ, ืึท ืกืขืคึผืขืจืึทื˜ืœื™ ื‘ืืฉืืคืŸ ืึธื ื–ืึธื’ ืžื™ื˜ ืึท ื‘ืึทืคืขืจ ืคื•ืŸ ื“ื™ ืคืืจืœืื ื’ื˜ ื’ืจื™ื™ืก ืื™ื– ืึทื˜ืึทื˜ืฉื˜ ืฆื• ื“ืขืจ ืึธื ื–ืึธื’ (ืึท ื˜ื™ื™ึทื˜ืœ ืฆื• ื“ื™ ืฆื•ื’ืขื’ืขื‘ืŸ ืึธื ื–ืึธื’ ืื™ื– ื‘ืึทืฉื˜ื™ืžื˜ ืื™ืŸ ื“ืขืจ ืขืจืฉื˜ืขืจ ืึธื ื–ืึธื’) ืึธื ื–ืึธื’ ื˜ื•ืจื ืก ืื™ืŸ ืึท ื˜ื•ืคึผืœืข.

ืึทื“ื™ื ื’ ืึท ืฉื˜ื™ืง ืคื•ืŸ ื“ืึทื˜ืŸ ืฆื• ืึท ื˜ื•ืคึผืœืข:

void msgappend(mblk_t *mp, const char *data, size_t size, bool_t pad); 

ื“ื™ ืคึฟื•ื ืงืฆื™ืข ืจื•ืคื˜ ืึทืคึผืคึผืขื ื“ื‘ () ืื™ืŸ ืึท ืฉืœื™ื™ืฃ.

ืงืึทืžื‘ื™ื™ื ื™ื ื’ ืฆื•ื•ื™ื™ ื˜ื•ืคึผืœืขืก ืื™ืŸ ืื™ื™ืŸ:

mblk_t *concatb(mblk_t *mp, mblk_t *newm);

ืึธื ื–ืึธื’ newm ื•ื•ืขื˜ ื–ื™ื™ืŸ ืึทื˜ืึทื˜ืฉื˜ ืฆื• mp.

ืžืึทื›ืŸ ืึท ืงืึธืคึผื™ืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ืึท ืื™ื™ืŸ ืึธื ื–ืึธื’:

mblk_t *copyb(const mblk_t *mp);

ื’ืึทื ืฅ ืงืึทืคึผื™ื™ื ื’ ืคื•ืŸ ืึท ื˜ื•ืคึผืœืข ืžื™ื˜ ืึทืœืข ื“ืึทื˜ืŸ ื‘ืœืึทืงืก:

mblk_t *copymsg(const mblk_t *mp);

ื“ื™ ืขืœืขืžืขื ื˜ืŸ ืคื•ืŸ ื“ื™ ื˜ื•ืคึผืœืข ื–ืขื ืขืŸ ืงืึทืคึผื™ื“ ื“ื•ืจืš ื“ื™ ืคึฟื•ื ืงืฆื™ืข ืงืึธืคึผื™ืขื‘ ().

ืฉืึทืคึฟืŸ ืึทืŸ ื’ืจื™ื ื’ ืงืึธืคึผื™ืข ืคื•ืŸ โ€‹โ€‹ืึท ืึธื ื–ืึธื’ mblk_t. ืื™ืŸ ื“ืขื ืคืึทืœ, ื“ื™ ื“ืึทื˜ืŸ ื‘ืœืึธืง ืื™ื– ื ื™ืฉื˜ ืงืึทืคึผื™ื“, ืึธื‘ืขืจ ื–ื™ื™ึทืŸ ืจืขืคึฟืขืจืขื ืฅ ื˜ืึธืžื‘ืึทื ืง ืื™ื– ื’ืขื•ื•ืืงืกืŸ db_ref:

mblk_t *dupb(mblk_t *mp);

ืžืึทื›ืŸ ืึท ืœื™ื™ื˜ื•ื•ื™ื™ื˜ ืงืึธืคึผื™ืข ืคื•ืŸ โ€‹โ€‹ืึท ื˜ื•ืคึผืœืข. ื“ืึทื˜ืŸ ื‘ืœืึทืงืก ื–ืขื ืขืŸ ื ื™ืฉื˜ ืงืึทืคึผื™ื“, ื ืึธืจ ื–ื™ื™ืขืจ ืจืขืคึฟืขืจืขื ืฅ ืงืึธื•ื ื˜ืขืจืก ื–ืขื ืขืŸ ื™ื ืงืจืึทืžืึทื ื˜ื™ื“ db_ref:

mblk_t *dupmsg(mblk_t* m);

ื’ืœื•ื™ื‘ื™ื ื’ ืึทืœืข ืึทืจื˜ื™ืงืœืขืŸ ืคื•ืŸ ืึท ื˜ื•ืคึผืœืข ืื™ืŸ ืื™ื™ืŸ ืึธื ื–ืึธื’:

void msgpullup(mblk_t *mp,size_t len);

ืื•ื™ื‘ ื“ื™ ื˜ืขื ื” ืœืขืŸ ืื™ื– -1, ื“ืขืžืึธืœื˜ ื“ื™ ื’ืจื™ื™ืก ืคื•ืŸ ื“ื™ ืึทืœืึทืงื™ื™ื˜ื™ื“ ื‘ืึทืคืขืจ ืื™ื– ื‘ืืฉืœืืกืŸ ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ.

ื•ื™ืกืžืขืงืŸ ืึท ืึธื ื–ืึธื’, ื˜ืึธืŸ:

void freemsg(mblk_t *mp);

ื“ื™ ืจืขืคึฟืขืจืขื ืฅ ืฆื™ื™ืœืŸ ืคื•ืŸ ื“ื™ ื“ืึทื˜ืŸ ื‘ืœืึธืง ืื™ื– ืจื™ื“ื•ืกื˜ ื“ื•ืจืš ืื™ื™ืŸ. ืื•ื™ื‘ ืขืก ืจื™ื˜ืฉืึทื– ื ื•ืœ, ื“ื™ ื“ืึทื˜ืŸ ื‘ืœืึธืง ืื™ื– ืื•ื™ืš ืื•ื™ืกื’ืขืžืขืงื˜.

ื›ืขื–ืฉื‘ืŸ ืคื•ืŸ ื“ื™ ื’ืึทื ืฅ ืกื•ืžืข ืคื•ืŸ โ€‹โ€‹ื“ืึทื˜ืŸ ืื™ืŸ ืึท ืึธื ื–ืึธื’ ืึธื“ืขืจ ื˜ื•ืคึผืœืข.

size_t msgdsize(const mblk_t *mp);

ืจื™ื˜ืจื™ื•ื•ื™ื ื’ ืึท ืึธื ื–ืึธื’ ืคื•ืŸ ื“ื™ ืขืง ืคื•ืŸ ื“ื™ ืจื™ื™:

mblk_t *ms_queue_peek_last (q);

ืงืึทืคึผื™ื™ื ื’ ื“ื™ ืื™ื ื”ืึทืœื˜ ืคื•ืŸ ื“ื™ ืจืขื–ืขืจื•ื•ื™ืจื˜ ืคืขืœื“ืขืจ ืคื•ืŸ ืื™ื™ืŸ ืึธื ื–ืึธื’ ืื™ืŸ ืืŸ ืื ื“ืขืจ ืึธื ื–ืึธื’ (ืื™ืŸ ืคืึทืงื˜, ื“ื™ ืคืขืœื“ืขืจ ืึทื ื˜ื”ืึทืœื˜ืŸ ืคืœืึทื’ืก ื•ื•ืึธืก ื–ืขื ืขืŸ ื’ืขื ื™ืฆื˜ ื“ื•ืจืš ื“ื™ ืžื™ื“ื™ืึท ืกื˜ืจื™ืžืขืจ):

mblk_meta_copy(const mblk_t *source, mblk *dest);

ื“ืจื™ื™ืขืŸ queue_t

ื“ืขืจ ืึธื ื–ืึธื’ ืจื™ื™ ืื™ืŸ ื“ื™ ืžืขื“ื™ืข ืกื˜ืจื™ืžืขืจ ืื™ื– ื™ืžืคึผืœืึทืžืขื ืึทื“ ื•ื•ื™ ืึท ืงื™ื™ึทืœืขื›ื™ืง ื“ืึทื‘ืœื™ ืœื™ื ื’ืงื˜ ืจืฉื™ืžื”. ื™ืขื“ืขืจ ืจืฉื™ืžื” ืขืœืขืžืขื ื˜ ื›ึผื•ืœืœ ืึท ื˜ื™ื™ึทื˜ืœ ืฆื• ืึท ื“ืึทื˜ืŸ ื‘ืœืึธืง ืžื™ื˜ ืกื™ื’ื ืึทืœ ืกืึทืžืคึผืึทืœื–. ืขืก ื˜ื•ืจื ืก ืื•ื™ืก ืึทื– ื‘ืœื•ื™ื– ืคึผื•ื™ื ื˜ืขืจื– ืฆื• ื“ื™ ื“ืึทื˜ืŸ ื‘ืœืึธืง ืžืึทืš ืื™ืŸ ืงืขืจ, ื‘ืฉืขืช ื“ื™ ื“ืึทื˜ืŸ ื–ื™ืš ื‘ืœื™ื™ื‘ื˜ ืžืึธื•ืฉืึทื ืœืึทืก. ื™ืขื ืข. ื‘ืœื•ื™ื– ืœื™ื ืงืก ืฆื• ื–ื™ื™ ื–ืขื ืขืŸ ืืจื™ื‘ืขืจื’ืขืคืืจืŸ.
ืกื˜ืจื•ืงื˜ื•ืจ ื“ื™ืกืงืจื™ื™ื‘ื™ื ื’ ื“ื™ ืจื™ื™ queue_t, ื’ืขื•ื•ื™ื–ืŸ ืื•ื ื˜ืŸ:

typedef struct _queue
{
   mblk_t _q_stopper; /* "ะฅะพะปะพัั‚ะพะน" ัะปะตะผะตะฝั‚ ะพั‡ะตั€ะตะดะธ, ะฝะต ัƒะบะฐะทั‹ะฒะฐะตั‚ ะฝะฐ ะดะฐะฝะฝั‹ะต, ะธัะฟะพะปัŒะทัƒะตั‚ัั ั‚ะพะปัŒะบะพ ะดะปั ัƒะฟั€ะฐะฒะปะตะฝะธั ะพั‡ะตั€ะตะดัŒัŽ. ะŸั€ะธ ะธะฝะธั†ะธะฐะปะธะทะฐั†ะธะธ ะพั‡ะตั€ะตะดะธ (qinit()) ะตะณะพ ัƒะบะฐะทะฐั‚ะตะปะธ ะฝะฐัั‚ั€ะฐะธะฒะฐัŽั‚ัั ั‚ะฐะบ, ั‡ั‚ะพะฑั‹ ะพะฝะธ ัƒะบะฐะทั‹ะฒะฐะปะธ ะฝะฐ ะฝะตะณะพ ัะฐะผะพะณะพ. */
   int q_mcount;        // ะšะพะปะธั‡ะตัั‚ะฒะพ ัะปะตะผะตะฝั‚ะพะฒ ะฒ ะพั‡ะตั€ะตะดะธ.
} queue_t;

ื“ื™ ืกื˜ืจื•ืงื˜ื•ืจ ื›ึผื•ืœืœ ืึท ืคืขืœื“ - ืึท ื˜ื™ื™ึทื˜ืœ _q_stopper ื˜ื™ืคึผ * mblk_t, ืขืก ื•ื•ื™ื™ื–ื˜ ืฆื• ื“ืขืจ ืขืจืฉื˜ืขืจ ืขืœืขืžืขื ื˜ (ืึธื ื–ืึธื’) ืื™ืŸ ื“ืขืจ ืจื™ื™. ื“ื™ ืฆื•ื•ื™ื™ื˜ืข ืคืขืœื“ ืคื•ืŸ ื“ื™ ืกื˜ืจื•ืงื˜ื•ืจ ืื™ื– ื“ื™ ื˜ืึธืžื‘ืึทื ืง ืคื•ืŸ ืึทืจื˜ื™ืงืœืขืŸ ืื™ืŸ ื“ืขืจ ืจื™ื™.
ื“ื™ ืคื™ื’ื•ืจ ืื•ื ื˜ืŸ ื•ื•ื™ื™ื–ื˜ ืึท ืจื™ื™ ืžื™ื˜ ื“ื™ ื ืึธืžืขืŸ q1 ืžื™ื˜ 4 ืึทืจื˜ื™ืงืœืขืŸ m1, m2, m3, m4.
ื•ื™ืกืคืึธืจืฉืŸ ื“ื™ Mediastreamer2 ื•ื•ืึธื™ืคึผ ืžืึธื˜ืึธืจ. ื˜ื™ื™ืœ 11
ื“ื™ ืคืืœื’ืขื ื“ืข ืคื™ื’ื•ืจ ื•ื•ื™ื™ื–ื˜ ืึท ืจื™ื™ ืžื™ื˜ ื“ื™ ื ืึธืžืขืŸ q1 ืžื™ื˜ 4 ืึทืจื˜ื™ืงืœืขืŸ m1,m2,m3,m4. ืึธื ื–ืึธื’ m2 ืื™ื– ื“ืขืจ ืงืึธืคึผ ืคื•ืŸ ืึท ื˜ื•ืคึผืœืข ื•ื•ืึธืก ื›ึผื•ืœืœ ืฆื•ื•ื™ื™ ืžืขืจ ืึทืจื˜ื™ืงืœืขืŸ m2_1 ืื•ืŸ m2_2.

ื•ื™ืกืคืึธืจืฉืŸ ื“ื™ Mediastreamer2 ื•ื•ืึธื™ืคึผ ืžืึธื˜ืึธืจ. ื˜ื™ื™ืœ 11

ืคืึทื ื’ืงืฉืึทื ื– ืคึฟืึทืจ ืืจื‘ืขื˜ืŸ ืžื™ื˜ ืงื™ื•ื– queue_t

ื™ื™ื˜ื™ืึทืœื™ื–ืึทื˜ื™ืึธืŸ ืคื•ืŸ ืจื™ื™:

void qinit(queue_t *q);

ืคืขืœื“ _q_stopper (ื“ืขืจื ืึธืš ืžื™ืจ ื•ื•ืขืœืŸ ืจื•ืคืŸ ืขืก "ืกื˜ืึทืคึผืขืจ") ืื™ื– ื™ื ื™ืฉืึทืœื™ื™ื–ื“ ื“ื•ืจืš ื“ื™ ืคึฟื•ื ืงืฆื™ืข mblk_init(), ื–ื™ื™ืŸ ืคืจื™ืขืจื“ื™ืงืŸ ืขืœืขืžืขื ื˜ ืื•ืŸ ื•ื•ื™ื™ึทื˜ืขืจ ืขืœืขืžืขื ื˜ ื˜ื™ื™ึทื˜ืœ ื–ืขื ืขืŸ ืึทื“ื–ืฉืึทืกื˜ื™ื“ ืฆื• ืคื•ื ื˜ ืฆื• ื–ื™ืš. ื“ืขืจ ืจื™ื™ ืขืœืขืžืขื ื˜ ื˜ืึธืžื‘ืึทื ืง ืื™ื– ื‘ืึทืฉื˜ืขื˜ื™ืง ืฆื• ื ื•ืœ.

ืึทื“ื™ื ื’ ืึท ื ื™ื™ึทืข ืขืœืขืžืขื ื˜ ( ืึทืจื˜ื™ืงืœืขืŸ):

void putq(queue_t *q, mblk_t *m);

ื ื™ื™ึท ืขืœืขืžืขื ื˜ m ืื™ื– ืฆื•ื’ืขืœื™ื™ื’ื˜ ืฆื• ื“ื™ ืกื•ืฃ ืคื•ืŸ ื“ืขืจ ืจืฉื™ืžื”, ื“ื™ ืขืœืขืžืขื ื˜ ื•ื•ื™ื™ื–ื˜ ื–ืขื ืขืŸ ืึทื“ื–ืฉืึทืกื˜ื™ื“ ืึทื–ื•ื™ ืึทื– ื“ื™ ืกื˜ืึทืคึผืขืจ ื•ื•ืขืจื˜ ื“ืขืจ ื•ื•ื™ื™ึทื˜ืขืจ ืขืœืขืžืขื ื˜ ืคึฟืึทืจ ืื™ื, ืื•ืŸ ืขืก ื•ื•ืขืจื˜ ื“ื™ ืคืจื™ืขืจื“ื™ืงืข ืขืœืขืžืขื ื˜ ืคึฟืึทืจ ื“ื™ ืกื˜ืึทืคึผืขืจ. ื“ืขืจ ืจื™ื™ ืขืœืขืžืขื ื˜ ื˜ืึธืžื‘ืึทื ืง ืื™ื– ื™ื ืงืจืึทืžืึทื ื˜ื™ื“.

ืจื™ื˜ืจื™ื•ื•ื™ื ื’ ืึทืŸ ืขืœืขืžืขื ื˜ ืคื•ืŸ ื“ืขืจ ืจื™ื™:

mblk_t * getq(queue_t *q); 

ื“ืขืจ ืึธื ื–ืึธื’ ื•ื•ืึธืก ืงื•ืžื˜ ื ืึธืš ื“ื™ ืกื˜ืึทืคึผืขืจ ืื™ื– ืจื™ื˜ืจื™ื•ื•ื“, ืื•ืŸ ื“ืขืจ ืขืœืขืžืขื ื˜ ื˜ืึธืžื‘ืึทื ืง ืื™ื– ื“ื™ืงืจืึทืžืขื ื˜ื™ื“. ืื•ื™ื‘ ืขืก ื–ืขื ืขืŸ ืงื™ื™ืŸ ืขืœืขืžืขื ื˜ืŸ ืื™ืŸ ื“ืขืจ ืจื™ื™ ืึทื—ื•ืฅ ื“ื™ ืกื˜ืึทืคึผืขืจ, ื“ืขืžืึธืœื˜ 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 (ืง, ืขื) ืžื™ื˜ ืึท ื ืึทืœ ื˜ื™ื™ึทื˜ืœ ืฆื• ื“ืขืจ ืึธื ื–ืึธื’, ื“ื™ ืคึฟื•ื ืงืฆื™ืข ืœื•ืคึผืก. ื“ื™ื™ืŸ ืคึผืจืึธื’ืจืึทื ื•ื•ืขื˜ ืคืจื™ืจืŸ. ืคื™ืจื˜ ื–ื™ืš ืขื ืœื™ืš ms_queue_next(q, m).

ืงืึทื ืขืงื˜ื™ื ื’ ืคื™ืœื˜ืขืจืก

ื“ื™ ืจื™ื™ ื“ื™ืกืงืจื™ื™ื‘ื“ ืื•ื™ื‘ืŸ ืื™ื– ื’ืขื ื™ืฆื˜ ืฆื• ืคืึธืจืŸ ืึทืจื˜ื™ืงืœืขืŸ ืคื•ืŸ ืื™ื™ืŸ ืคื™ืœื˜ืขืจ ืฆื• ืื ื“ืขืจืŸ ืึธื“ืขืจ ืคื•ืŸ ืื™ื™ืŸ ืฆื• ืขื˜ืœืขื›ืข ืคื™ืœื˜ืขืจืก. ืคื™ืœื˜ืขืจืก ืื•ืŸ ื–ื™ื™ืขืจ ืงืึทื ืขืงืฉืึทื ื– ืคืึธืจืขื ืึท ื“ื™ืจืขืงื˜ืขื“ ื’ืจืึทืคื™ืง. ื“ืขืจ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘ ืึธื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜ ืคื•ืŸ ื“ื™ ืคื™ืœื˜ืขืจ ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขืจื•ืคืŸ ื“ื™ ืึทืœื’ืขืžื™ื™ื ืข ื•ื•ืึธืจื˜ "ืฉืคึผื™ืœืงืข". ืฆื• ื‘ืึทืฉืจื™ื™ึทื‘ืŸ ื“ื™ ืกื“ืจ ืื™ืŸ ื•ื•ืึธืก ืคื™ืœื˜ืขืจืก ื–ืขื ืขืŸ ืคืืจื‘ื•ื ื“ืŸ ืฆื• ื™ืขื“ืขืจ ืื ื“ืขืจืขืจ, โ€‹โ€‹ื“ื™ ืžื™ื“ื™ืึท ืกื˜ืจื™ืžืขืจ ื ื™ืฆื˜ ื“ืขื ื‘ืึทื’ืจื™ืฃ ืคื•ืŸ ืึท "ืกื™ื’ื ืึทืœ ืคื•ื ื˜". ืกื™ื’ื ืึทืœ ืคื•ื ื˜ ืื™ื– ืกื˜ืจื•ืงื˜ื•ืจ _MSCPoint, ื•ื•ืึธืก ื›ึผื•ืœืœ ืึท ื˜ื™ื™ึทื˜ืœ ืฆื• ื“ื™ ืคื™ืœื˜ืขืจ ืื•ืŸ ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ืื™ื™ื ืขืจ ืคื•ืŸ ื–ื™ื™ึทืŸ ืคึผื™ื ืก; ืึทืงืึธืจื“ื™ื ื’ืœื™, ืขืก ื‘ืืฉืจื™ื™ื‘ื˜ ื“ื™ ืงืฉืจ ืคื•ืŸ ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ื™ื ืคึผื•ืฅ ืึธื“ืขืจ ืึทื•ื˜ืคึผื•ืฅ ืคื•ืŸ ื“ื™ ืคื™ืœื˜ืขืจ.

ืกื™ื’ื ืึทืœ ืคื•ื ื˜ ืคื•ืŸ ื“ืึทื˜ืŸ ืคึผืจืึทืกืขืกื™ื ื’ ื’ืจืึทืคื™ืง

typedef struct _MSCPoint{
struct _MSFilter *filter; // ะฃะบะฐะทะฐั‚ะตะปัŒ ะฝะฐ ั„ะธะปัŒั‚ั€ ะผะตะดะธะฐัั‚ั€ะธะผะตั€ะฐ.
int pin;                        // ะะพะผะตั€ ะพะดะฝะพะณะพ ะธะท ะฒั…ะพะดะพะฒ ะธะปะธ ะฒั‹ั…ะพะดะพะฒ ั„ะธะปัŒั‚ั€ะฐ, ั‚.ะต. ะฟะธะฝ.
} MSCPoint;

ืคื™ืœื˜ืขืจ ืคึผื™ื ืก ื–ืขื ืขืŸ ื’ืขืฆื™ื™ืœื˜ ืกื˜ืึทืจื˜ื™ื ื’ ืคื•ืŸ ื ื•ืœ.

ื“ื™ ืงืฉืจ ืคื•ืŸ ืฆื•ื•ื™ื™ ืคึผื™ื ืก ื“ื•ืจืš ืึท ืึธื ื–ืึธื’ ืจื™ื™ ืื™ื– ื“ื™ืกืงืจื™ื™ื‘ื“ ื“ื•ืจืš ื“ื™ ืกื˜ืจื•ืงื˜ื•ืจ _MSQueue, ื•ื•ืึธืก ื›ึผื•ืœืœ ืึท ืึธื ื–ืึธื’ ืจื™ื™ ืื•ืŸ ืคึผื•ื™ื ื˜ืขืจื– ืฆื• ื“ื™ ืฆื•ื•ื™ื™ ืกื™ื’ื ืึทืœ ื•ื•ื™ื™ื–ื˜ ืขืก ืงืึทื ืขืงืฅ:

typedef struct _MSQueue
{
queue_t q;
MSCPoint prev;
MSCPoint next;
}MSQueue;

ืžื™ืจ ื•ื•ืขืœืŸ ืจื•ืคืŸ ื“ืขื ืกื˜ืจื•ืงื˜ื•ืจ ืึท ืกื™ื’ื ืึทืœ ืœื™ื ืง. ื™ืขื“ืขืจ ืžืขื“ื™ืข ืกื˜ืจื™ืžืขืจ ืคื™ืœื˜ืขืจ ื›ึผื•ืœืœ ืึท ื˜ื™ืฉ ืคื•ืŸ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘ ืคึฟืึทืจื‘ื™ื ื“ื•ื ื’ืขืŸ ืื•ืŸ ืึท ื˜ื™ืฉ ืคื•ืŸ ืจืขื–ื•ืœื˜ืึทื˜ ืคึฟืึทืจื‘ื™ื ื“ื•ื ื’ืขืŸ (MSQueue). ื“ื™ ื’ืจื™ื™ืก ืคื•ืŸ ื˜ื™ืฉืŸ ืื™ื– ื‘ืึทืฉื˜ื™ืžื˜ ื•ื•ืขืŸ ืงืจื™ื™ื™ื˜ื™ื ื’ ืึท ืคื™ืœื˜ืขืจ; ืžื™ืจ ื”ืึธื‘ืŸ ืฉื•ื™ืŸ ื“ื•ืจื›ื’ืขืงืึธื›ื˜ ื“ืขื ืžื™ื˜ ืึทืŸ ื™ืงืกืคึผืึธืจื˜ืึทื“ ื‘ื™ื™ึทื˜ืขื•ื•ื“ื™ืง ืคื•ืŸ ื˜ื™ืคึผ MSFilterDesc, ื•ื•ืขืŸ ืžื™ืจ ื“ืขื•ื•ืขืœืึธืคึผืขื“ ืื•ื ื“ื–ืขืจ ืื™ื™ื’ืŸ ืคื™ืœื˜ืขืจ. ื•ื ื˜ืขืจ ืื™ื– ืึท ืกื˜ืจื•ืงื˜ื•ืจ ื•ื•ืึธืก ื‘ืืฉืจื™ื™ื‘ื˜ ืงื™ื™ืŸ ืคื™ืœื˜ืขืจ ืื™ืŸ ืึท ืžืขื“ื™ืข ืกื˜ืจื™ืžืขืจ, 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 ืคึผืจืึธื’ืจืึทื ืื™ืŸ ืœื•ื™ื˜ ืžื™ื˜ ืื•ื ื“ื–ืขืจ ืคึผืœืึทืŸ (ืึธื‘ืขืจ ืžื™ืจ ื”ืึธื‘ืŸ ื ื™ืฉื˜ ืงืึธื ื ืขืงื˜ืขื“ ื“ื™ ื˜ื™ืงืขืจ), ืžื™ืจ ื“ืขืจืžื™ื˜ ื‘ืืฉืืคืŸ ืึท ื“ื™ืจืขืงื˜ืขื“ ื’ืจืึทืคื™ืง, ื“ื™ ื ืึธื•ื“ื– ืคื•ืŸ ื•ื•ืึธืก ื–ืขื ืขืŸ ื™ื ืกื˜ืึทื ืกื™ื– ืคื•ืŸ ื“ื™ ืกื˜ืจื•ืงื˜ื•ืจ MSFilter, ืื•ืŸ ืขื“ื–ืฉืึทื– ื–ืขื ืขืŸ ื™ื ืกื˜ืึทื ืกื™ื– ืคื•ืŸ ืœื™ื ืงืก MSQueue.

ื”ื™ื ื˜ืขืจ ื“ื™ ืกื™ื ื– ืึทืงื˜ื™ื•ื•ื™ื˜ืขื˜ืŸ ืคื•ืŸ ื“ื™ ื˜ื™ืงืขืจ

ื•ื•ืขืŸ ืื™ืš ื”ืื‘ ื“ื™ืจ ื’ืขื–ืื’ื˜ ืื– ื“ืขืจ ื˜ื™ืงืขืจ ืื™ื– ื ืคื™ืœื˜ืขืจ ืคืืจ ื“ื™ ืžืงื•ืจ ืคื•ืŸ ื˜ื™ืงืขืŸ, ืื™ื– ืขืก ื ื™ืฉื˜ ื’ืขื•ื•ืขืŸ ื“ืขืจ ื’ืื ืฆืขืจ ืืžืช ื“ืขืจืคื•ืŸ. ื ื˜ื™ืงืขืจ ืื™ื– ืึท ื›ื™ื™ืคืขืฅ ื•ื•ืึธืก ืœื•ื™ืคื˜ ืคืึทื ื’ืงืฉืึทื ื– ืื•ื™ืฃ ื“ื™ ื–ื™ื™ื’ืขืจ ืคึผืจืึธืฆืขืก () ืึทืœืข ืคื™ืœื˜ืขืจืก ืคื•ืŸ ื“ื™ ืงืจื™ื™ึทื– (ื’ืจืึทืฃ) ืฆื• ื•ื•ืึธืก ืขืก ืื™ื– ืคืืจื‘ื•ื ื“ืŸ. ื•ื•ืขืŸ ืžื™ืจ ืคืึทืจื‘ื™ื ื“ืŸ ืึท ื˜ื™ืงืขืจ ืฆื• ืึท ื’ืจืึทืคื™ืง ืคื™ืœื˜ืขืจ ืื™ืŸ ืึท C ืคึผืจืึธื’ืจืึทื, ืžื™ืจ ื•ื•ื™ื™ึทื–ืŸ ื“ื™ ื˜ื™ืงืขืจ ื“ื™ ื’ืจืึทืคื™ืง ื•ื•ืึธืก ืขืก ื•ื•ืขื˜ ืงืึธื ื˜ืจืึธืœื™ืจืŸ ืคึฟื•ืŸ ืื™ืฆื˜ ืื•ื™ืฃ ื‘ื™ื– ืžื™ืจ ืงืขืจ ืขืก ืึทื•ื•ืขืง. ื ืึธืš ืงืึทื ืขืงื˜ื™ื ื’, ื“ืขืจ ื˜ื™ืงืขืจ ื”ื™ื™ื‘ื˜ ืฆื• ื•ื ื˜ืขืจื–ื•ื›ืŸ ื“ื™ ื’ืจืึทืคื™ืง ืขื ื˜ืจืึทืกื˜ื™ื“ ืฆื• ื–ื™ื™ืŸ ื–ืึธืจื’, ืงืึทืžืคึผื™ื™ืœื™ื ื’ ืึท ืจืฉื™ืžื” ืคื•ืŸ ืคื™ืœื˜ืขืจืก ื•ื•ืึธืก ืึทืจื™ื™ึทื ื ืขืžืขืŸ ืขืก. ื›ึผื“ื™ ื ื™ืฉื˜ ืฆื• "ืฆื™ื™ืœืŸ" ื“ื™ ื–ืขืœื‘ืข ืคื™ืœื˜ืขืจ ืฆื•ื•ื™ื™ ืžืึธืœ, ืขืก ืžืึทืจืงืก ื“ื™ ื“ื™ื˜ืขืงื˜ืึทื“ ืคื™ืœื˜ืขืจืก ื“ื•ืจืš ืฉื˜ืขืœืŸ ืึท ื˜ืฉืขืงืงื‘ืึธืงืก ืื™ืŸ ื–ื™ื™ ื’ืขื–ืขืŸ. ื“ืขืจ ื–ื•ื›ืŸ ืื™ื– ื“ื•ืจื›ื’ืขืงืึธื›ื˜ ืžื™ื˜ ื“ื™ ืœื™ื ืง ื˜ื™ืฉืŸ ื•ื•ืึธืก ื™ืขื“ืขืจ ืคื™ืœื˜ืขืจ ื”ืื˜.

ื‘ืขืฉืึทืก ื–ื™ื™ืŸ ื™ื ื˜ืจืึทื“ืึทืงื˜ืขืจื™ ืจื™ื™ึทื–ืข ืคื•ืŸ โ€‹โ€‹ื“ื™ ื’ืจืึทืคื™ืง, ื“ืขืจ ื˜ื™ืงืขืจ ื˜ืฉืขืง ืฆื™ ืฆื•ื•ื™ืฉืŸ ื“ื™ ืคื™ืœื˜ืขืจืก ืขืก ืื™ื– ื‘ื™ื™ึท ืžื™ื ื“ืกื˜ืขืจ ืื™ื™ื ืขืจ ื•ื•ืึธืก ืึทืงื˜ ื•ื•ื™ ืึท ืžืงื•ืจ ืคื•ืŸ ื“ืึทื˜ืŸ ื‘ืœืึทืงืก. ืื•ื™ื‘ ืขืก ื–ืขื ืขืŸ ืงื™ื™ืŸ, ื“ื™ ื’ืจืึทืคื™ืง ืื™ื– ื’ืขื”ืืœื˜ืŸ ืคืึทืœืฉ ืื•ืŸ ื“ื™ ื˜ื™ืงืขืจ ืงืจืึทืฉื™ื–.

ืื•ื™ื‘ ื“ื™ ื’ืจืึทืคื™ืง ืื™ื– "ืจื™ื›ื˜ื™ืง", ืคึฟืึทืจ ื™ืขื“ืขืจ ื’ืขืคึฟื•ื ืขืŸ ืคื™ืœื˜ืขืจ, ื“ื™ ืคึฟื•ื ืงืฆื™ืข ืื™ื– ื’ืขืจื•ืคึฟืŸ ื™ื ื™ื˜ื™ืึทืœื™ื–ื™ื™ืฉืึทืŸ ืคึผืจื™ืคึผืจืึธืกืขืก (). ื•ื•ื™ ื‘ืึทืœื“ ื•ื•ื™ ื“ืขืจ ืžืึธืžืขื ื˜ ืงื•ืžื˜ ืคึฟืึทืจ ื“ืขืจ ื•ื•ื™ื™ึทื˜ืขืจ ืคึผืจืึทืกืขืกื™ื ื’ ืฆื™ืงืœ (ื™ืขื“ืขืจ 10 ืžื™ืœื™ืกืขืงืึทื ื“ื– ื“ื•ืจืš ืคืขืœื™ืงื™ื™ึทื˜), ื“ืขืจ ื˜ื™ืงืขืจ ืจื•ืคื˜ ื“ื™ ืคึฟื•ื ืงืฆื™ืข ืคึผืจืึธืฆืขืก () ืคึฟืึทืจ ืึทืœืข ืคืจื™ืขืจ ื’ืขืคึฟื•ื ืขืŸ ืžืงื•ืจ ืคื™ืœื˜ืขืจืก, ืื•ืŸ ื“ืขืžืึธืœื˜ ืคึฟืึทืจ ื“ื™ ืจื•ืขืŸ ืคื™ืœื˜ืขืจืก ืื™ืŸ ื“ืขืจ ืจืฉื™ืžื”. ืื•ื™ื‘ ื“ื™ ืคื™ืœื˜ืขืจ ื”ืื˜ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘ ืคึฟืึทืจื‘ื™ื ื“ื•ื ื’ืขืŸ, ืœื•ื™ืคืŸ ื“ื™ ืคื•ื ืงืฆื™ืข ืคึผืจืึธืฆืขืก () ืจื™ืคึผื™ืฅ ื‘ื™ื– ื“ื™ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘ ืœื™ื ืง ืงื™ื•ื– ื–ืขื ืขืŸ ืœื™ื™ื“ื™ืง. ื ืึธืš ื“ืขื, ืขืก ืžืึทืš ืื•ื™ืฃ ืฆื• ื“ืขืจ ื•ื•ื™ื™ึทื˜ืขืจ ืคื™ืœื˜ืขืจ ืื™ืŸ ื“ืขืจ ืจืฉื™ืžื” ืื•ืŸ "ืกืงืจืึธืœืœืก" ืขืก ื‘ื™ื– ื“ื™ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘ ืœื™ื ืงืก ื–ืขื ืขืŸ ืคืจื™ื™ ืคื•ืŸ ืึทืจื˜ื™ืงืœืขืŸ. ื“ืขืจ ื˜ื™ืงืขืจ ื‘ืื•ื•ืขื’ื˜ ืคื•ืŸ ืคื™ืœื˜ืขืจ ืฆื• ืคื™ืœื˜ืขืจ ื‘ื™ื– ื“ื™ ืจืฉื™ืžื” ืขื ื“ืก. ื“ืขื ืงืึทืžืคึผืœื™ืฅ ื“ื™ ืคึผืจืึทืกืขืกื™ื ื’ ืคื•ืŸ ื“ื™ ืฆื™ืงืœ.

ืื™ืฆื˜ ืžื™ืจ ื•ื•ืขืœืŸ ืฆื•ืจื™ืงืงื•ืžืขืŸ ืฆื• ื˜ื•ืคึผืœืขืก ืื•ืŸ ืจืขื“ืŸ ื•ื•ืขื’ืŸ ื•ื•ืึธืก ืึทื–ืึท ืึท ืขื ื˜ื™ื˜ื™ ืื™ื– ืฆื•ื’ืขื’ืขื‘ืŸ ืฆื• ื“ื™ ืžื™ื“ื™ืึท ืกื˜ืจื™ืžืขืจ. ืื™ืŸ ืึทืœื’ืขืžื™ื™ืŸ, ื“ื™ ืกื•ืžืข ืคื•ืŸ โ€‹โ€‹ื“ืึทื˜ืŸ ืคืืจืœืื ื’ื˜ ื“ื•ืจืš ื“ื™ ืึทืœื’ืขืจื™ื“ืึทื ืึทืคึผืขืจื™ื™ื˜ื™ื ื’ ืื™ืŸ ื“ื™ ืคื™ืœื˜ืขืจ ืื™ื– ื ื™ืฉื˜ ืฆื•ื ื•ื™ืคืคืึทืœืŸ ืื•ืŸ ืื™ื– ื ื™ืฉื˜ ืึท ืงื™ื™ืคืœ ืคื•ืŸ ื“ื™ ื’ืจื™ื™ืก ืคื•ืŸ ื“ื™ ื“ืึทื˜ืŸ ื‘ืึทืคืขืจื– ื‘ืืงื•ืžืขืŸ ืื™ืŸ ื“ื™ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘. ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืžื™ืจ ืฉืจื™ื™ึทื‘ืŸ ืึท ืคื™ืœื˜ืขืจ ื•ื•ืึธืก ืคึผืขืจืคืึธืจืžื– ืึท ืฉื ืขืœ ืคืึธืจื™ืขืจ ื™ื‘ืขืจืžืึทื›ืŸ, ื•ื•ืึธืก ื“ื•ืจืš ื“ืขืคึฟื™ื ื™ืฆื™ืข ืงืขื ืขืŸ ื‘ืœื•ื™ื– ืคึผืจืึธืฆืขืก ื“ืึทื˜ืŸ ื‘ืœืึทืงืก ื•ื•ืขืžืขื ืก ื’ืจื™ื™ืก ืื™ื– ืึท ืžืึทื›ื˜ ืคื•ืŸ ืฆื•ื•ื™ื™. ื–ืืœ ืขืก ื–ื™ื™ืŸ 512 ืงืึทื•ื ืฅ. ืื•ื™ื‘ ื“ื™ ื“ืึทื˜ืŸ ื–ืขื ืขืŸ ื“ื–ืฉืขื ืขืจื™ื™ื˜ืึทื“ ื“ื•ืจืš ืึท ื˜ืขืœืขืคืึธืŸ ืงืึทื ืึทืœ, ื“ื™ ื“ืึทื˜ืŸ ื‘ืึทืคืขืจ ืคื•ืŸ ื™ืขื“ืขืจ ืึธื ื–ืึธื’ ื‘ื™ื™ ื“ื™ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘ ื•ื•ืขื˜ ื‘ืจืขื ื’ืขืŸ ืื•ื ื“ื– 160 ืกื™ื’ื ืึทืœ ืกืึทืžืคึผืึทืœื–. ืขืก ืื™ื– ื˜ืขืžืคึผื˜ื™ื ื’ ื ื™ืฉื˜ ืฆื• ื–ืึทืžืœืขืŸ ื“ืึทื˜ืŸ ืคึฟื•ืŸ ื“ื™ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘ ื‘ื™ื– ื“ื™ ืคืืจืœืื ื’ื˜ ืกื•ืžืข ืคื•ืŸ โ€‹โ€‹ื“ืึทื˜ืŸ ืื™ื– ื“ืึธืจื˜. ืื‘ืขืจ ืื™ืŸ ื“ืขื ืคืึทืœ, ืึท ืฆื•ื ื•ื™ืคืฉื˜ื•ื™ืก ื•ื•ืขื˜ ืคึผืึทืกื™ืจืŸ ืžื™ื˜ ื“ื™ ื˜ื™ืงืขืจ, ื•ื•ืึธืก ื•ื•ืขื˜ ื ื™ื˜ ื’ืขืจืึธื˜ืŸ ืคึผืจื•ื‘ื™ืจืŸ ืฆื• ืžืขื’ื™ืœืข ื“ื™ ืคื™ืœื˜ืขืจ ื‘ื™ื– ื“ื™ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘ ืœื™ื ืง ืื™ื– ืœื™ื™ื“ื™ืง. ื‘ื™ื– ืึทื”ืขืจ, ืžื™ืจ ื“ืขื–ื™ื’ื ื™ื™ื˜ื™ื“ ื“ืขื ื”ืขืจืฉืŸ ื•ื•ื™ ื“ื™ ื“ืจื™ื˜ ืคึผืจื™ื ืฆื™ืคึผ ืคื•ืŸ ื“ื™ ืคื™ืœื˜ืขืจ. ืœื•ื™ื˜ ื“ืขื ืคึผืจื™ื ืฆื™ืคึผ, ื“ื™ ืคื™ืœื˜ืขืจ ืคึผืจืึธืฆืขืก () ืคึฟื•ื ืงืฆื™ืข ืžื•ื–ืŸ ื ืขืžืขืŸ ืึทืœืข ื“ืึทื˜ืŸ ืคึฟื•ืŸ ื“ื™ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘ ืงื™ื•ื–.

ืื™ืŸ ื“ืขืจืฆื•, ืขืก ื•ื•ืขื˜ ื ื™ื˜ ื–ื™ื™ืŸ ืžืขื’ืœืขืš ืฆื• ื ืขืžืขืŸ ื‘ืœื•ื™ื– 512 ืกืึทืžืคึผืึทืœื– ืคื•ืŸ ื“ื™ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘, ื•ื•ื™ื™ึทืœ ืื™ืจ ืงืขื ืขืŸ ื ืึธืจ ื ืขืžืขืŸ ื’ืึทื ืฅ ื‘ืœืึทืงืก, ื“.ื”. ื“ืขืจ ืคื™ืœื˜ืขืจ ื•ื•ืขื˜ ื”ืึธื‘ืŸ ืฆื• ื ืขืžืขืŸ 640 ืกืึทืžืคึผืึทืœื– ืื•ืŸ ื ื•ืฆืŸ 512 ืคื•ืŸ ื–ื™ื™, ื“ื™ ืจืขืฉื˜ ืื™ื™ื“ืขืจ ืึทืงื™ื•ืžื™ืึทืœื™ื™ื˜ื™ื ื’ ืึท ื ื™ื™ึท ื—ืœืง ืคื•ืŸ ื“ืึทื˜ืŸ. ืื–ื•ื™, ืื•ื ื“ื–ืขืจ ืคื™ืœื˜ืขืจ, ืื™ืŸ ืึทื“ื™ืฉืึทืŸ ืฆื• ื–ื™ื™ึทืŸ ื”ื•ื™ืคึผื˜ ืึทืจื‘ืขื˜, ืžื•ื–ืŸ ืฆื•ืฉื˜ืขืœืŸ ืึทื’ื–ื™ืœื™ืขืจื™ ืึทืงืฉืึทื ื– ืคึฟืึทืจ ื™ื ื˜ืขืจืžื™ื“ื™ื™ื˜ ืกื˜ืึธืจื™ื“ื–ืฉ ืคื•ืŸ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘ ื“ืึทื˜ืŸ. ื“ื™ ื“ืขื•ื•ืขืœืึธืคึผืขืจืก ืคื•ืŸ ื“ื™ ืžื™ื“ื™ืึท ืกื˜ืจื™ืžืขืจ ืื•ืŸ ื“ื™ ืœื™ื™ื–ื•ื ื’ ืฆื• ื“ืขื ื’ืขื ืขืจืึทืœ ืคึผืจืึธื‘ืœืขื ื”ืึธื‘ืŸ ื“ืขื•ื•ืขืœืึธืคึผืขื“ ืึท ืกืคึผืขืฆื™ืขืœ ื›ื™ื™ืคืขืฅ - MSBufferizer (ื‘ืึทืคืขืจืขืจ), ื•ื•ืึธืก ืกืึทืœื•ื•ื– ื“ืขื ืคึผืจืึธื‘ืœืขื ืžื™ื˜ ื˜ื•ืคึผืœืขืก.

Bufferizer (MSBufferizer)

ื“ืึธืก ืื™ื– ืึท ื›ื™ื™ืคืขืฅ ื•ื•ืึธืก ื•ื•ืขื˜ ืึธื ืงืœื™ื™ึทื‘ืŸ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘ ื“ืึทื˜ืŸ ื™ืŸ ื“ื™ ืคื™ืœื˜ืขืจ ืื•ืŸ ืึธื ื”ื™ื™ื‘ืŸ ืคืึธืจืœื™ื™ื’ืŸ ืขืก ืคึฟืึทืจ ืคึผืจืึทืกืขืกื™ื ื’ ื•ื•ื™ ื‘ืึทืœื“ ื•ื•ื™ ื“ื™ ืกื•ืžืข ืคื•ืŸ โ€‹โ€‹ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ืื™ื– ื’ืขื ื•ื’ ืฆื• ืœื•ื™ืคืŸ ื“ื™ ืคื™ืœื˜ืขืจ ืึทืœื’ืขืจื™ื“ืึทื. ื‘ืฉืขืช ื“ืขืจ ื‘ืึทืคืขืจ ืื™ื– ืึทืงื™ื•ืžื™ืึทืœื™ื™ื˜ื™ื ื’ ื“ืึทื˜ืŸ, ื“ื™ ืคื™ืœื˜ืขืจ ื•ื•ืขื˜ ืึทืจื‘ืขื˜ืŸ ืื™ืŸ ืœื™ื™ื“ื™ืง ืžืึธื“ืข, ืึธืŸ ื ื™ืฆืŸ ื“ื™ ืคึผืจืึทืกืขืกื™ื ื’ ืžืึทื›ื˜ ืคื•ืŸ ื“ื™ ืคึผืจืึทืกืขืกืขืจ. ืื‘ืขืจ ื•ื•ื™ ื‘ืึทืœื“ ื•ื•ื™ ื“ื™ ืœื™ื™ืขื ืขืŸ ืคึฟื•ื ืงืฆื™ืข ืคื•ืŸ โ€‹โ€‹ื“ื™ ื‘ืึทืคืขืจืขืจ ืงืขืจื˜ ืึท ื•ื•ืขืจื˜ ืื ื“ืขืจืข ื•ื•ื™ ื ื•ืœ, ื“ื™ ืคึผืจืึธืฆืขืก () ืคึฟื•ื ืงืฆื™ืข ืคื•ืŸ โ€‹โ€‹ื“ื™ ืคื™ืœื˜ืขืจ ื”ื™ื™ื‘ื˜ ืฆื• ื ืขืžืขืŸ ืื•ืŸ ืคึผืจืึธืฆืขืก ื“ืึทื˜ืŸ ืคื•ืŸ ื“ื™ ื‘ืึทืคืขืจืขืจ ืื™ืŸ ืคึผืึธืจืฉืึทื ื– ืคื•ืŸ ื“ื™ ืคืืจืœืื ื’ื˜ ื’ืจื™ื™ืก, ื‘ื™ื– ืขืก ืื™ื– ื•ื™ืกื’ืขืžืึทื˜ืขืจื˜.
ื“ืึทื˜ืŸ ื•ื•ืึธืก ื–ืขื ืขืŸ ื ืึธืš ื ื™ืฉื˜ ืคืืจืœืื ื’ื˜, ื‘ืœื™ื™ื‘ืŸ ืื™ืŸ ื“ื™ ื‘ืึทืคืขืจ ื•ื•ื™ ื“ืขืจ ืขืจืฉื˜ืขืจ ืขืœืขืžืขื ื˜ ืคื•ืŸ ื“ื™ ื˜ื•ืคึผืœืข, ืฆื• ื•ื•ืึธืก ืกืึทื‘ืกืึทืงื•ื•ืึทื ื˜ ื‘ืœืึทืงืก ืคื•ืŸ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘ ื“ืึทื˜ืŸ ื–ืขื ืขืŸ ืึทื˜ืึทื˜ืฉื˜.

ื“ื™ ืกื˜ืจื•ืงื˜ื•ืจ ื•ื•ืึธืก ื‘ืืฉืจื™ื™ื‘ื˜ ื“ื™ ื‘ืึทืคืขืจ:

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

ืื•ื™ื‘ ื“ื™ ื’ืจื™ื™ืก ืคื•ืŸ ื“ื™ ื“ืึทื˜ืŸ ืึทืงื™ื•ืžื™ืึทืœื™ื™ื˜ื™ื“ ืื™ืŸ ื“ื™ ื‘ืึทืคืขืจ ืื™ื– ื•ื•ื™ื™ื ื™ืงืขืจ ื•ื•ื™ ื“ื™ ื’ืขื‘ืขื˜ืŸ ืื™ื™ื ืขืจ (ื“ืึทื˜ืขืœืขืŸ), ื“ืขืžืึธืœื˜ ื“ืขืจ ืคึฟื•ื ืงืฆื™ืข ืงืขืจื˜ ื ื•ืœ, ื“ืึทื˜ืŸ ื–ืขื ืขืŸ ื ื™ืฉื˜ ืงืึทืคึผื™ื“ ืฆื• ื“ืึทื˜ืŸ. ืึทื ื“ืขืจืฉ, ืกืึทืงื•ื•ืขื ื˜ืฉืึทืœ ืงืึทืคึผื™ื™ื ื’ ื“ืึทื˜ืŸ ืคื•ืŸ ื˜ื•ืคึผืœืขืก ืœื™ื’ืŸ ืื™ืŸ ื“ื™ ื‘ืึทืคืขืจ ืื™ื– ื“ื•ืจื›ื’ืขืงืึธื›ื˜. ื ืึธืš ืงืึทืคึผื™ื™ื ื’, ื“ื™ ื˜ื•ืคึผืœืข ืื™ื– ืื•ื™ืกื’ืขืžืขืงื˜ ืื•ืŸ ื“ืขืจ ื–ื›ึผืจื•ืŸ ืื™ื– ื‘ืืคืจื™ื™ื˜. ืงืึทืคึผื™ื™ื ื’ ืขื ื“ืก ืื™ืŸ ื“ืขื ืžืึธืžืขื ื˜ ื•ื•ืขืŸ ื“ืึทื˜ืึทืœืขืŸ ื‘ื™ื˜ืขืก ื–ืขื ืขืŸ ืงืึทืคึผื™ื“. ืื•ื™ื‘ ืคึผืœืึทืฅ ืœื•ื™ืคื˜ ืื•ื™ืก ืื™ืŸ ื“ื™ ืžื™ื˜ืŸ ืคื•ืŸ ืึท ื“ืึทื˜ืŸ ื‘ืœืึธืง, ืื™ืŸ ื“ืขื ืึธื ื–ืึธื’, ื“ื™ ื“ืึทื˜ืŸ ื‘ืœืึธืง ื•ื•ืขื˜ ื–ื™ื™ืŸ ืจื™ื“ื•ืกื˜ ืฆื• ื“ื™ ืจื•ืขืŸ ืึทื ืงืึทืคึผื™ื“ ื˜ื™ื™ืœ. ื“ืขืจ ื•ื•ื™ื™ึทื˜ืขืจ ืžืึธืœ ืื™ืจ ืจื•ืคืŸ, ืงืึทืคึผื™ื™ื ื’ ื•ื•ืขื˜ ืคืึธืจื–ืขืฆืŸ ืคึฟื•ืŸ ื“ืขื ืคื•ื ื˜.

ืœื™ื™ืขื ืขืŸ ื“ื™ ืกื•ืžืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ื“ืึทื˜ืŸ ื•ื•ืึธืก ืื™ื– ื“ืขืจื•ื•ื™ื™ึทืœ ื‘ื ื™ืžืฆื ืื™ืŸ ื“ื™ ื‘ืึทืคืขืจ:

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

ื‘ื™ื™ืฉืคื™ืœืŸ ืคื•ืŸ ื ื™ืฆืŸ ื“ื™ ื‘ืึทืคืขืจืขืจ ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขืคึฟื•ื ืขืŸ ืื™ืŸ ื“ื™ ืžืงื•ืจ ืงืึธื“ ืคื•ืŸ ืขื˜ืœืขื›ืข ืžืขื“ื™ืข ืกื˜ืจื™ืžืขืจ ืคื™ืœื˜ืขืจืก. ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืื™ืŸ ื“ื™ MS_L16_ENC ืคื™ืœื˜ืขืจ, ื•ื•ืึธืก ืจื™ืขืจื™ื™ื ื“ื–ืฉื™ื– ื“ื™ ื‘ื™ื˜ืขืก ืื™ืŸ ื“ื™ ืกืึทืžืคึผืึทืœื– ืคื•ืŸ ื“ื™ ื ืขืฅ ืกื“ืจ ืฆื• ื“ืขืจ ื‘ืึทืœืขื‘ืึธืก ืกื“ืจ: l16.c

ืื™ืŸ ื“ืขืจ ื•ื•ื™ื™ึทื˜ืขืจ ืึทืจื˜ื™ืงืœ, ืžื™ืจ ื•ื•ืขืœืŸ ืงื•ืงืŸ ืื™ืŸ ื“ื™ ืึทืจื•ื™ืกื’ืขื‘ืŸ ืคื•ืŸ ืึธืคึผืฉืึทืฆืŸ ื“ื™ ืžืึทืกืข ืื•ื™ืฃ ืึท ื˜ื™ืงืขืจ ืื•ืŸ ื•ื•ืขื’ืŸ ืฆื• ืงืึทืžื‘ืึทื˜ ื™ื‘ืขืจื™ืง ืงืึทืžืคึผื™ื•ื˜ื™ื ื’ ืžืึทืกืข ืื™ืŸ ืึท ืžืขื“ื™ืข ืกื˜ืจื™ืžืขืจ.

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’