www.pudn.com > rtp11.rar > payload.c


#ifdef __cplusplus
extern "C" {
#endif



/*

  NOTICE:
  This document contains information that is proprietary to RADVISION LTD..
  No part of this publication may be reproduced in any form whatsoever without
  written prior approval by RADVISION LTD..

    RADVISION LTD. reserves the right to revise this publication and make changes
    without obligation to notify any person of such revisions or changes.

*/

#include 
#include "bitfield.h"
#include 

#include "rtp.h"
#include "payload.h"

RVAPI
INT32 RVCALLCONV rtpPCMUPack(
                              IN    void*buf,
                              IN    INT32 len,
                              IN    rtpParam*p,
                              IN    void*param)
{
  if(buf || len || param);
    p->payload=PCMU;
    return 0;
}

RVAPI
INT32 RVCALLCONV rtpPCMUUnpack(
                                OUT void*buf,
                                IN  INT32 len,
                                OUT rtpParam*p,
                                OUT void*param)
{
  if(buf || len || p || param);

    return 0;
}

RVAPI
INT32 RVCALLCONV rtpPCMUGetHeaderLength(void)
{
    return rtpGetHeaderLength();
}

RVAPI
INT32 RVCALLCONV rtpPCMAPack(
                              IN    void*buf,
                              IN    INT32 len,
                              IN    rtpParam*p,
                              IN    void*param)
{
  if(buf || len || param);

    p->payload=PCMA;
    return 0;
}

RVAPI
INT32 RVCALLCONV rtpPCMAUnpack(
                                OUT     void*buf,
                                IN  INT32 len,
                                OUT     rtpParam*p,
                                OUT void*param)
{
  if(buf || len || p || param);
    return 0;
}

RVAPI
INT32 RVCALLCONV rtpPCMAGetHeaderLength(void)
{
    return rtpGetHeaderLength();
}

RVAPI
INT32 RVCALLCONV rtpG722Pack(
                              IN    void*buf,
                              IN    INT32 len,
                              IN    rtpParam*p,
                              IN    void*param)
{
  if(buf || len || param);

    p->payload=G722;
    return 0;
}

RVAPI
INT32 RVCALLCONV rtpG722Unpack(
                                OUT     void*buf,
                                IN  INT32 len,
                                OUT rtpParam*p,
                                OUT void*param)
{
  if(buf || len || p || param);

    return 0;
}

RVAPI
INT32 RVCALLCONV rtpG722GetHeaderLength(void)
{
    return rtpGetHeaderLength();
}

RVAPI
INT32 RVCALLCONV rtpG728Pack(
                              IN    void*buf,
                              IN    INT32 len,
                              IN    rtpParam*p,
                              IN    void*param)
{
  if(buf || len || param);

    p->payload=G728;
    return 0;
}

RVAPI
INT32 RVCALLCONV rtpG728Unpack(
                                OUT     void*buf,
                                IN  INT32 len,
                                OUT rtpParam*p,
                                OUT void*param)
{
  if(buf || len || p || param);

    return 0;
}

RVAPI
INT32 RVCALLCONV rtpG728GetHeaderLength(void)
{
    return rtpGetHeaderLength();
}

RVAPI
INT32 RVCALLCONV rtpG729Pack(
                              IN    void*buf,
                              IN    INT32 len,
                              IN    rtpParam*p,
                              IN    void*param)
{
  if(buf || len || param);

    p->payload=G729;
    return 0;
}

RVAPI
INT32 RVCALLCONV rtpG729Unpack(
                                OUT     void*buf,
                                IN  INT32 len,
                                OUT rtpParam*p,
                                OUT void*param)
{
  if(buf || len || p || param);

    return 0;
}

RVAPI
INT32 RVCALLCONV rtpG729GetHeaderLength(void)
{
    return rtpGetHeaderLength();
}

RVAPI
INT32 RVCALLCONV rtpG7231Pack(
                              IN    void*buf,
                              IN    INT32 len,
                              IN    rtpParam*p,
                              IN    void*param)
{
  if(buf || len || param);

    p->payload=G7231;
    return 0;
}

RVAPI
INT32 RVCALLCONV rtpG7231Unpack(
                                OUT     void*buf,
                                IN  INT32 len,
                                OUT rtpParam*p,
                                OUT void*param)
{
 if(buf || len || param || p);
    return 0;
}

RVAPI
INT32 RVCALLCONV rtpG7231GetHeaderLength(void)
{
    return rtpGetHeaderLength();
}


RVAPI
INT32 RVCALLCONV rtpH261Pack(
                              IN    void*buf,
                              IN    INT32 len,
                              IN    rtpParam*p,
                              IN    void*param)
{
    H261param*h261=(H261param*)param;
    UINT32*hPtr;
    p->sByte-=4;
    hPtr=(UINT32*)((BYTE*)buf+p->sByte);
    hPtr[0]=bitfieldSet(0,h261->v,24,1);
    hPtr[0]=bitfieldSet(hPtr[0],h261->i,25,1);
    if(len);

    if (h261->gobN)
    {
        hPtr[0]=bitfieldSet(hPtr[0],h261->vMvd,0,5);
        hPtr[0]=bitfieldSet(hPtr[0],h261->hMvd,5,5);
        hPtr[0]=bitfieldSet(hPtr[0],h261->quant,10,5);
        hPtr[0]=bitfieldSet(hPtr[0],h261->mbaP,15,5);
        hPtr[0]=bitfieldSet(hPtr[0],h261->gobN,20,4);
    }
    hPtr[0]=bitfieldSet(hPtr[0],h261->eBit,26,3);
    hPtr[0]=bitfieldSet(hPtr[0],h261->sBit,29,3);
    p->payload=H261;
    liConvertHeader2l((BYTE*)hPtr,0,1);
    return 0;
}

RVAPI
INT32 RVCALLCONV rtpH261Unpack(
                                OUT void*buf,
                                IN  INT32 len,
                                OUT rtpParam*p,
                                OUT void*param)
{
    H261param*h261=(H261param*)param;
    UINT32*hPtr=(UINT32*)((BYTE*)buf+p->sByte);
    if(len);

    p->sByte+=4;
    liConvertHeader2h((BYTE*)hPtr,0,1);
    h261->vMvd=bitfieldGet(hPtr[0],0,5);
    h261->hMvd=bitfieldGet(hPtr[0],5,5);
    h261->quant=bitfieldGet(hPtr[0],10,5);
    h261->mbaP=bitfieldGet(hPtr[0],15,5);
    h261->gobN=bitfieldGet(hPtr[0],20,4);
    h261->v=bitfieldGet(hPtr[0],24,1);
    h261->i=bitfieldGet(hPtr[0],25,1);
    h261->eBit=bitfieldGet(hPtr[0],26,3);
    h261->sBit=bitfieldGet(hPtr[0],29,3);
    return 0;
}

RVAPI
INT32 RVCALLCONV rtpH261GetHeaderLength()
{
    return rtpGetHeaderLength()+4;
}


INT32 RVCALLCONV rtpH263Pack(
                              IN    void*buf,
                              IN    INT32 len,
                              IN    rtpParam*p,
                              IN    void*param)
{
    H263param*h263=(H263param*)param;
    UINT32*hPtr=NULL;
    int dwords=0;
    if(len);

    if (h263->p)
    {
        dwords=1;
        p->sByte-=4;
        hPtr=(UINT32*)((BYTE*)buf+p->sByte);

        hPtr[0]=bitfieldSet(0,h263->dbq,11,2);
        hPtr[0]=bitfieldSet(hPtr[0],h263->trb,8,3);
        hPtr[0]=bitfieldSet(hPtr[0],h263->tr,0,8);
    }

    if (h263->f)
    {
        dwords+=2;
        p->sByte-=8;
        hPtr=(UINT32*)((BYTE*)buf+p->sByte);
        hPtr[0]=bitfieldSet(0,h263->mbaP,0,8);
        hPtr[0]=bitfieldSet(hPtr[0],h263->gobN,8,5);
        hPtr[0]=bitfieldSet(hPtr[0],h263->quant,16,5);


        hPtr[1]=bitfieldSet(      0,h263->vMv2, 0,8);
        hPtr[1]=bitfieldSet(hPtr[1],h263->hMv2, 8,8);
        hPtr[1]=bitfieldSet(hPtr[1],h263->vMv1,16,8);
        hPtr[1]=bitfieldSet(hPtr[1],h263->hMv1,24,8);
    }

    if (!h263->f && !h263->p)
    {
        dwords=1;
        p->sByte-=4;
        hPtr=(UINT32*)((BYTE*)buf+p->sByte);
        hPtr[0]=0;
    }

    hPtr[0]=bitfieldSet(hPtr[0],h263->f,31,1);
    hPtr[0]=bitfieldSet(hPtr[0],h263->p,30,1);
    hPtr[0]=bitfieldSet(hPtr[0],h263->sBit,27,3);
    hPtr[0]=bitfieldSet(hPtr[0],h263->eBit,24,3);
    hPtr[0]=bitfieldSet(hPtr[0],h263->src,21,3);
    hPtr[0]=bitfieldSet(hPtr[0],h263->i,15,1);
    hPtr[0]=bitfieldSet(hPtr[0],h263->a,14,1);
    hPtr[0]=bitfieldSet(hPtr[0],h263->s,13,1);
    p->payload=H263;
    liConvertHeader2l((BYTE*)hPtr,0,dwords);
    return 0;
}

INT32 RVCALLCONV rtpH263Unpack(
                                OUT     void*buf,
                                IN  INT32 len,
                                OUT     rtpParam*p,
                                OUT void*param)
{
    H263param*h263=(H263param*)param;
    UINT32*hPtr=(UINT32*)((BYTE*)buf+p->sByte);
    if(len);

    p->sByte+=4;

    liConvertHeader2h((BYTE*)hPtr,0,1);
    h263->f=bitfieldGet(hPtr[0],31,1);
    h263->p=bitfieldGet(hPtr[0],30,1);

    h263->sBit=bitfieldGet(hPtr[0],27,3);
    h263->eBit=bitfieldGet(hPtr[0],24,3);
    h263->src=bitfieldGet(hPtr[0],21,3);
    h263->i=bitfieldGet(hPtr[0],15,1);
    h263->a=bitfieldGet(hPtr[0],14,1);
    h263->s=bitfieldGet(hPtr[0],13,1);

    if (h263->f)
    {
        int aDwords=h263->p+1;
        liConvertHeader2h((BYTE*)hPtr,1,aDwords);
        p->sByte+=4*aDwords;
        h263->mbaP=bitfieldGet(hPtr[0],0,8);
        h263->gobN=bitfieldGet(hPtr[0],8,5);
        h263->quant=bitfieldGet(hPtr[0],16,5);


        h263->vMv2=bitfieldGet(hPtr[1],0,8);
        h263->hMv2=bitfieldGet(hPtr[1],8,8);
        h263->vMv1=bitfieldGet(hPtr[1],16,8);
        h263->hMv1=bitfieldGet(hPtr[1],24,8);
        hPtr=(UINT32*)((BYTE*)buf+p->sByte-4);
    }

    if (h263->p)
    {

        h263->dbq=bitfieldGet(hPtr[0],11,2);
        h263->trb=bitfieldGet(hPtr[0],8,3);
        h263->tr=bitfieldGet(hPtr[0],0,8);
    }


    return 0;
}

INT32 RVCALLCONV rtpH263GetHeaderLength()
{
    return rtpGetHeaderLength()+12;
}

INT32 RVCALLCONV rtpH263aPack(
                              IN    void*buf,
                              IN    INT32 len,
                              IN    rtpParam*p,
                              IN    void*param)
{
    H263aparam*h263a=(H263aparam*)param;
    UINT32*hPtr=NULL;
    int dwords=0;
    if(len);

    if (h263a->p)
    {
        dwords=1;
        p->sByte-=4;
        hPtr=(UINT32*)((BYTE*)buf+p->sByte);

        hPtr[0]=bitfieldSet(0,h263a->dbq,11,2);
        hPtr[0]=bitfieldSet(hPtr[0],h263a->trb,8,3);
        hPtr[0]=bitfieldSet(hPtr[0],h263a->tr,0,8);
    }

    if (h263a->f)
    {
        dwords+=2;
        p->sByte-=8;
        hPtr=(UINT32*)((BYTE*)buf+p->sByte);
        hPtr[0]=bitfieldSet(0,h263a->mbaP,2,9);
        hPtr[0]=bitfieldSet(hPtr[0],h263a->gobN,11,5);
        hPtr[0]=bitfieldSet(hPtr[0],h263a->quant,16,5);


        hPtr[1]=bitfieldSet(      0,h263a->vMv2, 0,7);
        hPtr[1]=bitfieldSet(hPtr[1],h263a->hMv2, 7,7);
        hPtr[1]=bitfieldSet(hPtr[1],h263a->vMv1,14,7);
        hPtr[1]=bitfieldSet(hPtr[1],h263a->hMv1,21,7);

    hPtr[1]=bitfieldSet(hPtr[1],h263a->a,28,1);
        hPtr[1]=bitfieldSet(hPtr[1],h263a->s,29,1);
        hPtr[1]=bitfieldSet(hPtr[1],h263a->u,30,1);
        hPtr[1]=bitfieldSet(hPtr[1],h263a->i,31,1);
    }

    if (!h263a->f && !h263a->p)
    {
        dwords=1;
        p->sByte-=4;
        hPtr=(UINT32*)((BYTE*)buf+p->sByte);
        hPtr[0]=bitfieldSet(      0,h263a->a,17,1);
        hPtr[0]=bitfieldSet(hPtr[0],h263a->s,18,1);
        hPtr[0]=bitfieldSet(hPtr[0],h263a->u,19,1);
        hPtr[0]=bitfieldSet(hPtr[0],h263a->i,20,1); ;
    }

    hPtr[0]=bitfieldSet(hPtr[0],h263a->f,31,1);
    hPtr[0]=bitfieldSet(hPtr[0],h263a->p,30,1);
    hPtr[0]=bitfieldSet(hPtr[0],h263a->sBit,27,3);
    hPtr[0]=bitfieldSet(hPtr[0],h263a->eBit,24,3);
    hPtr[0]=bitfieldSet(hPtr[0],h263a->src,21,3);

    p->payload=H263;
    liConvertHeader2l((BYTE*)hPtr,0,dwords);
    return 0;
}

INT32 RVCALLCONV rtpH263aUnpack(
                                OUT     void*buf,
                                IN  INT32 len,
                                OUT     rtpParam*p,
                                OUT void*param)
{
    H263aparam*h263a=(H263aparam*)param;
    UINT32*hPtr=(UINT32*)((BYTE*)buf+p->sByte);
    if(len);

    p->sByte+=4;

    liConvertHeader2h((BYTE*)hPtr,0,1);
    h263a->f=bitfieldGet(hPtr[0],31,1);
    h263a->p=bitfieldGet(hPtr[0],30,1);

    h263a->sBit=bitfieldGet(hPtr[0],27,3);
    h263a->eBit=bitfieldGet(hPtr[0],24,3);
    h263a->src=bitfieldGet(hPtr[0],21,3);


    if (h263a->f)
    {
        int aDwords=h263a->p+1;
        liConvertHeader2h((BYTE*)hPtr,1,aDwords);
        p->sByte+=4*aDwords;
        h263a->mbaP=bitfieldGet(hPtr[0],2,9);
        h263a->gobN=bitfieldGet(hPtr[0],11,5);
        h263a->quant=bitfieldGet(hPtr[0],16,5);


        h263a->vMv2=bitfieldGet(hPtr[1],0,7);
        h263a->hMv2=bitfieldGet(hPtr[1],7,7);
        h263a->vMv1=bitfieldGet(hPtr[1],14,7);
        h263a->hMv1=bitfieldGet(hPtr[1],21,7);

    h263a->i=bitfieldGet(hPtr[1],31,1);
    h263a->u=bitfieldGet(hPtr[1],30,1);
    h263a->s=bitfieldGet(hPtr[1],29,1);
    h263a->a=bitfieldGet(hPtr[1],28,1);

        hPtr=(UINT32*)((BYTE*)buf+p->sByte-4);
    }

    if (h263a->p)
    {

        h263a->dbq=bitfieldGet(hPtr[0],11,2);
        h263a->trb=bitfieldGet(hPtr[0],8,3);
        h263a->tr=bitfieldGet(hPtr[0],0,8);
    }

    if (!h263a->f && !h263a->p)
    {
      h263a->i=bitfieldGet(hPtr[0],20,1);
      h263a->u=bitfieldGet(hPtr[0],19,1);
      h263a->s=bitfieldGet(hPtr[0],18,1);
      h263a->a=bitfieldGet(hPtr[0],17,1);

    }


    return 0;
}

INT32 RVCALLCONV rtpH263aGetHeaderLength()
{
    return rtpGetHeaderLength()+12;
}






#ifdef __cplusplus
}
#endif