рд╣рдо Mediastreamer2 рд╡реАрдУрдЖрдИрдкреА рдЗрдВрдЬрди рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рддреЗ рд╣реИрдВред рднрд╛рдЧ резрез

рдореЗрд░реЗ рдЬрд╝реЗрди рдЪреИрдирд▓ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд▓реЗрдЦ рд╕рд╛рдордЧреНрд░реА ред



рдбреЗрдЯрд╛ рдЖрдВрджреЛрд▓рди рддрдВрддреНрд░


  • Dblk_t рдбреЗрдЯрд╛ рдмреНрд▓реЙрдХ
  • рд╕рдВрджреЗрд╢ mblk_t
  • Mblk_t рд╕рдВрджреЗрд╢ рдХрд╛рд░реНрдп
  • рдХрддрд╛рд░_рдд рдХрддрд╛рд░
  • Queue_t рдкрдВрдХреНрддрд┐рдмрджреНрдз рдХрд╛рд░реНрдп
  • рдлрд╝рд┐рд▓реНрдЯрд░ рдХрдиреЗрдХреНрд╢рди
  • рдбрд╛рдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдЧреНрд░рд╛рдл рдХрд╛ рд╕рд┐рдЧреНрдирд▓ рдкреНрд╡рд╛рдЗрдВрдЯ
  • рдмреИрдХрд╕реНрдЯреЗрдЬ рдЯрд┐рдХрд░ рдПрдХреНрдЯрд┐рд╡рд┐рдЯреА
  • рдмрдлрд░ 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 тАФ , , . datab_alloc() , . - . , .


:


dblk_t *datab_alloc(int size);

, . , тАФ datab. , . , 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_next, ( queue_t).


b_cont, , . .


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 size, тАФ pri . BPRI_MED, ( ). 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 тАФ , size тАФ .
, :


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 тАФ , ;
size тАФ ;
pad тАФ , 4 ( ).


, . size, , . , b_cont. .


, :


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

( b_cont ) appendb().


:


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

len -1, . len , . , . . , .


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

, ( ) .


:


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

appendb() .


:


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

copyb().


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

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, () . , .
c q1, 4 m1,m2, m3, m4.

c q1, 4 m1,m2, m3, m4. m2 , m2_1 m2_2.



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

how . .


:


mblk_t * qlast(queue_t *q);

, ms_queue_put(q, m) , . . 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;

, - ( ), , , MSFilter, MSQueue.



тАФ , . , process() () . - , , , . , , . "" , seen. , .


, , , . , .


"", , , preprocess(). ( 10 ), process() , . , process() , . , "" . . .


. , , , , . , , , . 512 . , 160 . , . , . . , process() .


512 , , .. 640 512 , . , , . тАФ MSBufferizer (), .


MSBufferizer


, . , , . , process() , .
, .


, :


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, size .


:


void ms_bufferizer_put(MSBufferizer *obj, mblk_t *m); 

m . size.


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

(datalen), , data . . . , datalen . , , . .


, :


int ms_bufferizer_get_avail(MSBufferizer *obj); 

size .


, :


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


, .


All Articles