oocapability.c

来自「一个非常美妙的proxy。功能强大。基于sip的协议。如果还要的话」· C语言 代码 · 共 2,030 行 · 第 1/5 页

C
2,030
字号
         if(!call->remoteCaps)            call->remoteCaps = epCap;         else{	    cur = call->remoteCaps;            while(cur->next) cur = cur->next;            cur->next = epCap;         }     }else{        /*Add as our capability */        OOTRACEDBGC4("Adding call specific capability %s. (%s, %s)\n",                      ooGetCapTypeText(epCap->cap), call->callType,                      call->callToken);        if(!call->ourCaps){           call->ourCaps = epCap;           ooResetCapPrefs(call);        }        else{	   cur = call->ourCaps;           while(cur->next) cur = cur->next;           cur->next = epCap;        }        ooAppendCapToCapPrefs(call, cap);     }   }              return OO_OK;}int ooCapabilityAddGSMCapability(OOH323CallData *call, int cap,                                 unsigned framesPerPkt, OOBOOL comfortNoise,                                OOBOOL scrambled, int dir,                                 cb_StartReceiveChannel startReceiveChannel,                                cb_StartTransmitChannel startTransmitChannel,                                cb_StopReceiveChannel stopReceiveChannel,                                cb_StopTransmitChannel stopTransmitChannel,                                 OOBOOL remote){   ooH323EpCapability *epCap = NULL, *cur=NULL;   OOGSMCapParams *params=NULL;      OOCTXT *pctxt = NULL;    if(!call) pctxt = &gH323ep.ctxt;   else pctxt = call->pctxt;   epCap = (ooH323EpCapability*)memAlloc(pctxt, sizeof(ooH323EpCapability));   params = (OOGSMCapParams*) memAlloc(pctxt, sizeof(OOGSMCapParams));   if(!epCap || !params)   {      OOTRACEERR1("Error:Memory - ooCapabilityAddGSMCapability - "                  "epCap/params\n");      return OO_FAILED;   }   params->rxframes = framesPerPkt;   params->txframes = framesPerPkt;   params->comfortNoise = comfortNoise;   params->scrambled = scrambled;   if(dir & OORXANDTX)   {      epCap->dir = OORX;      epCap->dir |= OOTX;   }else      epCap->dir = dir;   epCap->cap = cap;   epCap->capType = OO_CAP_TYPE_AUDIO;   epCap->params = (void*)params;   epCap->startReceiveChannel = startReceiveChannel;   epCap->startTransmitChannel = startTransmitChannel;   epCap->stopReceiveChannel = stopReceiveChannel;   epCap->stopTransmitChannel = stopTransmitChannel;      epCap->next = NULL;   /* Add as local capability */   if(!call)   {      if(!gH323ep.myCaps)         gH323ep.myCaps = epCap;      else{         cur = gH323ep.myCaps;         while(cur->next) cur = cur->next;         cur->next = epCap;      }      ooAppendCapToCapPrefs(NULL, cap);      gH323ep.noOfCaps++;   }else{      if(remote)      {         /*Add as remote capability */         if(!call->remoteCaps)            call->remoteCaps = epCap;         else{	    cur = call->remoteCaps;            while(cur->next) cur = cur->next;            cur->next = epCap;         }      }else{         OOTRACEDBGC4("Adding call specific capability %s. (%s, %s)\n",                      ooGetCapTypeText(epCap->cap), call->callType,                      call->callToken);         /*Add as our capability */         if(!call->ourCaps){            call->ourCaps = epCap;            ooResetCapPrefs(call);         }         else{	    cur = call->ourCaps;            while(cur->next) cur = cur->next;            cur->next = epCap;         }         ooAppendCapToCapPrefs(call, cap);      }   }   return OO_OK;}struct H245VideoCapability* ooCapabilityCreateVideoCapability      (ooH323EpCapability *epCap, OOCTXT *pctxt, int dir){   if(!epCap)   {     OOTRACEERR1("Error:Invalid capability parameter passed to "                 "ooCapabilityCreateVideoCapability.\n");     return NULL;   }      if(!(epCap->dir & dir))   {      OOTRACEERR1("Error:Failed to create capability due to direction "                  "mismatch.\n");      return NULL;   }   switch(epCap->cap)   {   case OO_H263VIDEO:     return ooCapabilityCreateH263VideoCapability(epCap, pctxt, dir);   case OO_NONSTDVIDEO:   case OO_H261VIDEO:   case OO_H262VIDEO:   case OO_IS11172VIDEO:   case OO_GENERICVIDEO:   case OO_EXTELEMVIDEO:   default:      OOTRACEERR2("ERROR: Don't know how to create video capability %s\n",		  ooGetCapTypeText(epCap->cap));   }   return NULL;}   struct H245AudioCapability* ooCapabilityCreateAudioCapability      (ooH323EpCapability *epCap, OOCTXT *pctxt, int dir){   if(!epCap)   {     OOTRACEERR1("Error:Invalid capability parameter passed to "                 "ooCapabilityCreateAudioCapability.\n");     return NULL;   }      if(!(epCap->dir & dir))   {      OOTRACEERR1("Error:Failed to create capability due to direction "                  "mismatch.\n");      return NULL;   }   switch(epCap->cap)   {   case OO_G711ALAW64K:   case OO_G711ALAW56K:   case OO_G711ULAW64K:   case OO_G711ULAW56K:   case OO_G729:   case OO_G729A:   case OO_G7231:     return ooCapabilityCreateSimpleCapability(epCap, pctxt, dir);   case OO_GSMFULLRATE:      return ooCapabilityCreateGSMFullRateCapability(epCap, pctxt, dir);   default:      OOTRACEERR2("ERROR: Don't know how to create audio capability %d\n",		  epCap->cap);   }   return NULL;}void* ooCapabilityCreateDTMFCapability(int cap, OOCTXT *pctxt){   H245AudioTelephonyEventCapability *pATECap=NULL;   H245UserInputCapability *userInput = NULL;   char *events=NULL;   switch(cap)   {   case OO_CAP_DTMF_RFC2833:      pATECap = (H245AudioTelephonyEventCapability*)memAlloc(pctxt,                                    sizeof(H245AudioTelephonyEventCapability));      if(!pATECap)      {         OOTRACEERR1("Error:Memory - ooCapabilityCreateDTMFCapability - pATECap\n");         return NULL;      }      memset(pATECap, 0, sizeof(H245AudioTelephonyEventCapability));      pATECap->dynamicRTPPayloadType = giDynamicRTPPayloadType;      events = (char*)memAlloc(pctxt, strlen("0-16")+1);      if(!events)      {         OOTRACEERR1("Error:Memory - ooCapabilityCreateDTMFCapability - events\n");         memFreePtr(pctxt, pATECap);         return NULL;      }      strncpy(events, "0-16", strlen("0-16"));      pATECap->audioTelephoneEvent = events;      return pATECap;   case OO_CAP_DTMF_H245_alphanumeric:      userInput = (H245UserInputCapability*)memAllocZ(pctxt,                                           sizeof(H245UserInputCapability));      if(!userInput)      {         OOTRACEERR1("Error:Memory - ooCapabilityCreateDTMFCapability - "                     "userInput\n");         return NULL;      }      userInput->t = T_H245UserInputCapability_basicString;      return userInput;   case OO_CAP_DTMF_H245_signal:      userInput = (H245UserInputCapability*)memAllocZ(pctxt,                                           sizeof(H245UserInputCapability));      if(!userInput)      {         OOTRACEERR1("Error:Memory - ooCapabilityCreateDTMFCapability - "                     "userInput\n");         return NULL;      }      userInput->t = T_H245UserInputCapability_dtmf;      return userInput;   default:     OOTRACEERR1("Error:unknown dtmf capability type\n");   }   return NULL;}struct H245VideoCapability* ooCapabilityCreateH263VideoCapability   (ooH323EpCapability *epCap, OOCTXT* pctxt, int dir){   H245VideoCapability *pVideo=NULL;   OOH263CapParams *params=NULL;   H245H263VideoCapability *pH263Cap=NULL;   if(!epCap || !epCap->params)   {     OOTRACEERR1("Error:Invalid capability parameters to "                 "ooCapabilityCreateH263VideoCapability.\n");     return NULL;   }   params =(OOH263CapParams*)epCap->params;   pVideo = (H245VideoCapability*)memAllocZ(pctxt,                                                   sizeof(H245VideoCapability));   pH263Cap = (H245H263VideoCapability*) memAllocZ(pctxt,                                              sizeof(H245H263VideoCapability));   if(!pVideo || !pH263Cap)   {      OOTRACEERR1("ERROR:Memory - ooCapabilityCreateH263VideoCapability - "                  "pVideo/pH263Cap\n");      return NULL;   }   pVideo->t = T_H245VideoCapability_h263VideoCapability;   pVideo->u.h263VideoCapability = pH263Cap;   if(params->picFormat ==  OO_PICFORMAT_SQCIF)   {      pH263Cap->m.sqcifMPIPresent = TRUE;      pH263Cap->sqcifMPI = params->MPI;   }else if(params->picFormat == OO_PICFORMAT_QCIF)   {      pH263Cap->m.qcifMPIPresent = TRUE;      pH263Cap->qcifMPI = params->MPI;   }else if(params->picFormat == OO_PICFORMAT_CIF)   {      pH263Cap->m.cifMPIPresent = TRUE;      pH263Cap->cifMPI = params->MPI;   }else if(params->picFormat == OO_PICFORMAT_CIF4)   {      pH263Cap->m.cif4MPIPresent  = TRUE;      pH263Cap->cif4MPI = params->MPI;   }else if(params->picFormat == OO_PICFORMAT_CIF16)   {      pH263Cap->m.cif16MPIPresent = TRUE;      pH263Cap->cif16MPI = params->MPI;   }   pH263Cap->m.errorCompensationPresent = TRUE;   pH263Cap->maxBitRate = params->maxBitRate;   pH263Cap->unrestrictedVector = FALSE;   pH263Cap->arithmeticCoding = FALSE;   pH263Cap->advancedPrediction = FALSE;   pH263Cap->pbFrames = FALSE;   pH263Cap->temporalSpatialTradeOffCapability = FALSE;   pH263Cap->hrd_B = 0;   pH263Cap->bppMaxKb = 0;   pH263Cap->slowSqcifMPI = FALSE;   pH263Cap->slowQcifMPI = FALSE;   pH263Cap->slowCifMPI = FALSE;   pH263Cap->slowCif4MPI = FALSE;   pH263Cap->slowCif16MPI = FALSE;   pH263Cap->errorCompensation = FALSE;   return pVideo;}struct H245AudioCapability* ooCapabilityCreateGSMFullRateCapability   (ooH323EpCapability *epCap, OOCTXT* pctxt, int dir){   H245AudioCapability *pAudio=NULL;   H245GSMAudioCapability *pGSMCap=NULL;   if(!epCap || !epCap->params)   {     OOTRACEERR1("Error:Invalid capability parameters to "                 "ooCapabilityCreateGSMFullRateCapability.\n");     return NULL;   }   pAudio = (H245AudioCapability*)memAlloc(pctxt,                                                 sizeof(H245AudioCapability));   pGSMCap = (H245GSMAudioCapability*)memAlloc(pctxt,                                               sizeof(H245GSMAudioCapability));   if(!pAudio || !pGSMCap)   {      OOTRACEERR1("ERROR:Memory - ooCapabilityCreateGSMFullRateCapability - "                  "pAudio/pGSMCap\n");      return NULL;   }      pAudio->t = T_H245AudioCapability_gsmFullRate;   pAudio->u.gsmFullRate = pGSMCap;   if(dir & OORX)      pGSMCap->audioUnitSize = ((OOGSMCapParams*)epCap->params)->rxframes*OO_GSMFRAMESIZE;   else      pGSMCap->audioUnitSize = ((OOGSMCapParams*)epCap->params)->txframes*OO_GSMFRAMESIZE;    pGSMCap->comfortNoise = ((OOGSMCapParams*)epCap->params)->comfortNoise;   pGSMCap->scrambled = ((OOGSMCapParams*)epCap->params)->scrambled;   return pAudio;}/* This is used for g711 ulaw/alaw, g729, g729A, g7231*/struct H245AudioCapability* ooCapabilityCreateSimpleCapability   (ooH323EpCapability *epCap, OOCTXT* pctxt, int dir){   H245AudioCapability *pAudio=NULL;   OOCapParams *params;   if(!epCap || !epCap->params)   {     OOTRACEERR1("Error:Invalid capability parameters to "                 "ooCapabilityCreateSimpleCapability.\n");     return NULL;   }   params =(OOCapParams*)epCap->params;   pAudio = (H245AudioCapability*)memAlloc(pctxt,                                                 sizeof(H245AudioCapability));   if(!pAudio)   {      OOTRACEERR1("ERROR:Memory - ooCapabilityCreateSimpleCapability - pAudio\n");      return NULL;   }      switch(epCap->cap)   {   case OO_G711ALAW64K:      pAudio->t = T_H245AudioCapability_g711Alaw64k;      if(dir & OORX)         pAudio->u.g711Alaw64k = params->rxframes;      else         pAudio->u.g711Alaw64k = params->txframes;      return pAudio;   case OO_G711ALAW56K:      pAudio->t = T_H245AudioCapability_g711Alaw56k;      if(dir & OORX)         pAudio->u.g711Alaw56k = params->rxframes;      else         pAudio->u.g711Alaw56k = params->txframes;       return pAudio;   case OO_G711ULAW64K:      pAudio->t = T_H245AudioCapability_g711Ulaw64k;      if(dir & OORX)         pAudio->u.g711Ulaw64k = params->rxframes;      else

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?