oocapability.c

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

C
2,030
字号
   case OO_GSMHALFRATE:   case OO_GSMENHANCEDFULLRATE:     if(((OOGSMCapParams*)txCap->params)->txframes <=                                 ((OOGSMCapParams*)rxCap->params)->rxframes)       return TRUE;     else{       OOTRACEDBGA3("GSM caps are not compatible. (%s, %s)\n", call->callType,                     call->callToken);       return FALSE;     }     default:     OOTRACEWARN3("WARN: Unsupported capabilities being compared. (%s, %s)\n",                   call->callType, call->callToken);   }   return FALSE;}#endifooH323EpCapability* ooIsAudioDataTypeGSMSupported   (OOH323CallData *call, H245AudioCapability* audioCap, int dir){   unsigned framesPerPkt=0;   int cap=0;   ooH323EpCapability *cur = NULL, *epCap=NULL;   OOGSMCapParams *params = NULL;   switch(audioCap->t)   {   case T_H245AudioCapability_gsmFullRate:      framesPerPkt = (audioCap->u.gsmFullRate->audioUnitSize)/OO_GSMFRAMESIZE;      cap = OO_GSMFULLRATE;      break;   case T_H245AudioCapability_gsmHalfRate:      framesPerPkt = (audioCap->u.gsmHalfRate->audioUnitSize)/OO_GSMFRAMESIZE;      cap = OO_GSMHALFRATE;      break;   case T_H245AudioCapability_gsmEnhancedFullRate:      framesPerPkt = (audioCap->u.gsmEnhancedFullRate->audioUnitSize)/OO_GSMFRAMESIZE;      cap = OO_GSMENHANCEDFULLRATE;      break;   default:      OOTRACEERR3("Error:Invalid GSM capability type.(%s, %s)\n",                                            call->callType, call->callToken);     return NULL;   }   OOTRACEDBGC4("Determined audio data type to be of type %d. Searching"                " for matching capability.(%s, %s)\n", cap, call->callType,                 call->callToken);   /* If we have call specific caps then we use them, otherwise we use      general endpoint caps*/   if(call->ourCaps)         cur = call->ourCaps;   else      cur = gH323ep.myCaps;   while(cur)   {      OOTRACEDBGC4("Local cap being compared %d. (%s, %s)\n", cur->cap,                     call->callType, call->callToken);            if(cur->cap == cap && (cur->dir & dir))         break;      cur = cur->next;   }      if(!cur) return NULL;      OOTRACEDBGC4("Found matching audio capability type %d. Comparing"                " other parameters. (%s, %s)\n", cap, call->callType,                 call->callToken);      /* can we receive this capability */   if(dir & OORX)   {      if(((OOGSMCapParams*)cur->params)->rxframes < framesPerPkt)         return NULL;      else{         epCap = (ooH323EpCapability*)memAlloc(call->pctxt,                                                  sizeof(ooH323EpCapability));         params =(OOGSMCapParams*)memAlloc(call->pctxt,sizeof(OOGSMCapParams));         if(!epCap || !params)         {            OOTRACEERR3("Error:Memory - ooIsAudioDataTypeGSMSupported - "                        "epCap/params (%s, %s)\n", call->callType,                         call->callToken);            return NULL;         }         epCap->params = params;         epCap->cap = cur->cap;         epCap->dir = cur->dir;         epCap->capType = cur->capType;         epCap->startReceiveChannel = cur->startReceiveChannel;         epCap->startTransmitChannel= cur->startTransmitChannel;         epCap->stopReceiveChannel = cur->stopReceiveChannel;         epCap->stopTransmitChannel = cur->stopTransmitChannel;         epCap->next = NULL;         memcpy(epCap->params, cur->params, sizeof(OOGSMCapParams));         return epCap;      }   }   /* Can we transmit compatible stream */   if(dir & OOTX)   {      epCap = (ooH323EpCapability*)memAlloc(call->pctxt,                                                 sizeof(ooH323EpCapability));      params =(OOGSMCapParams*)memAlloc(call->pctxt,sizeof(OOGSMCapParams));      if(!epCap || !params)      {         OOTRACEERR3("Error:Memory - ooIsAudioDataTypeGSMSupported - "                     "epCap/params (%s, %s)\n", call->callType,                      call->callToken);         return NULL;      }      epCap->params = params;      epCap->cap = cur->cap;      epCap->dir = cur->dir;      epCap->capType = cur->capType;      epCap->startReceiveChannel = cur->startReceiveChannel;      epCap->startTransmitChannel= cur->startTransmitChannel;      epCap->stopReceiveChannel = cur->stopReceiveChannel;      epCap->stopTransmitChannel = cur->stopTransmitChannel;      epCap->next = NULL;      memcpy(epCap->params, cur->params, sizeof(OOGSMCapParams));      if(params->txframes > framesPerPkt)      {         OOTRACEINFO5("Reducing framesPerPkt for transmission of GSM "                      "capability from %d to %d to match receive capability of"                      " remote endpoint.(%s, %s)\n", params->txframes,                       framesPerPkt, call->callType, call->callToken);         params->txframes = framesPerPkt;      }      return epCap;   }   return NULL;}/* used for g711 ulaw/alaw, g729, g729a, g7231 */ooH323EpCapability* ooIsAudioDataTypeSimpleSupported   (OOH323CallData *call, H245AudioCapability* audioCap, int dir){   int cap, framesPerPkt=0;   ooH323EpCapability *cur=NULL, *epCap=NULL;   OOCapParams * params= NULL;   /* Find similar capability */   switch(audioCap->t)   {      case T_H245AudioCapability_g711Alaw64k:         framesPerPkt = audioCap->u.g711Alaw64k;         cap = OO_G711ALAW64K;         break;      case T_H245AudioCapability_g711Alaw56k:         framesPerPkt = audioCap->u.g711Alaw56k;         cap = OO_G711ALAW56K;         break;      case T_H245AudioCapability_g711Ulaw56k:         framesPerPkt = audioCap->u.g711Ulaw56k;         cap = OO_G711ULAW56K;         break;      case T_H245AudioCapability_g711Ulaw64k:         framesPerPkt = audioCap->u.g711Ulaw64k;         cap = OO_G711ULAW64K;         break;      case T_H245AudioCapability_g729:         framesPerPkt = audioCap->u.g729;         cap = OO_G729;         break;      case T_H245AudioCapability_g729AnnexA:         framesPerPkt = audioCap->u.g729AnnexA;         cap = OO_G729A;         break;      case T_H245AudioCapability_g7231:         framesPerPkt = audioCap->u.g7231->maxAl_sduAudioFrames;         cap = OO_G7231;         break;      default:	return NULL;   }   OOTRACEDBGC4("Determined Simple audio data type to be of type %s. Searching"                " for matching capability.(%s, %s)\n",                 ooGetCapTypeText(cap), call->callType, call->callToken);   /* If we have call specific caps, we use them; otherwise use general      endpoint caps   */      if(call->ourCaps)     cur = call->ourCaps;   else     cur = gH323ep.myCaps;   while(cur)   {      OOTRACEDBGC4("Local cap being compared %s. (%s, %s)\n",               ooGetCapTypeText(cur->cap),call->callType, call->callToken);            if(cur->cap == cap && (cur->dir & dir))         break;      cur = cur->next;   }      if(!cur) return NULL;      OOTRACEDBGC4("Found matching simple audio capability type %s. Comparing"                " other parameters. (%s, %s)\n", ooGetCapTypeText(cap),                 call->callType, call->callToken);      /* can we receive this capability */   if(dir & OORX)   {     if(((OOCapParams*)cur->params)->rxframes < framesPerPkt)         return NULL;     else{        OOTRACEDBGC4("We can receive Simple capability %s. (%s, %s)\n",                       ooGetCapTypeText(cur->cap), call->callType,                       call->callToken);        epCap = (ooH323EpCapability*)memAlloc(call->pctxt,                                                  sizeof(ooH323EpCapability));        params=(OOCapParams*)memAlloc(call->pctxt,sizeof(OOCapParams));        if(!epCap || !params)        {           OOTRACEERR3("Error:Memory - ooIsAudioDataTypeSimpleSupported - "                       "epCap/params (%s, %s)\n", call->callType,                        call->callToken);           return NULL;        }        epCap->params = params;        epCap->cap = cur->cap;        epCap->dir = cur->dir;        epCap->capType = cur->capType;        epCap->startReceiveChannel = cur->startReceiveChannel;        epCap->startTransmitChannel= cur->startTransmitChannel;        epCap->stopReceiveChannel = cur->stopReceiveChannel;        epCap->stopTransmitChannel = cur->stopTransmitChannel;        epCap->next = NULL;        memcpy(epCap->params, cur->params, sizeof(OOCapParams));        OOTRACEDBGC4("Returning copy of matched receive capability %s. "                     "(%s, %s)\n",                      ooGetCapTypeText(cur->cap), call->callType,                      call->callToken);        return epCap;     }   }   /* Can we transmit compatible stream */   if(dir & OOTX)   {      OOTRACEDBGC4("We can transmit Simple capability %s. (%s, %s)\n",                    ooGetCapTypeText(cur->cap), call->callType,                    call->callToken);      epCap = (ooH323EpCapability*)memAlloc(call->pctxt,                                                 sizeof(ooH323EpCapability));      params =(OOCapParams*)memAlloc(call->pctxt,sizeof(OOCapParams));      if(!epCap || !params)      {         OOTRACEERR3("Error:Memory - ooIsAudioDataTypeSimpleSupported - "                     "epCap/params (%s, %s)\n", call->callType,                      call->callToken);         return NULL;      }      epCap->params = params;      epCap->cap = cur->cap;      epCap->dir = cur->dir;      epCap->capType = cur->capType;      epCap->startReceiveChannel = cur->startReceiveChannel;      epCap->startTransmitChannel= cur->startTransmitChannel;      epCap->stopReceiveChannel = cur->stopReceiveChannel;      epCap->stopTransmitChannel = cur->stopTransmitChannel;      epCap->next = NULL;      memcpy(epCap->params, cur->params, sizeof(OOCapParams));      if(params->txframes > framesPerPkt)      {         OOTRACEINFO5("Reducing framesPerPkt for transmission of Simple "                      "capability from %d to %d to match receive capability of"                      " remote endpoint.(%s, %s)\n", params->txframes,                       framesPerPkt, call->callType, call->callToken);         params->txframes = framesPerPkt;      }      OOTRACEDBGC4("Returning copy of matched transmit capability %s."                   "(%s, %s)\n",                    ooGetCapTypeText(cur->cap), call->callType,                    call->callToken);      return epCap;   }   return NULL;}ooH323EpCapability* ooIsAudioDataTypeSupported   (OOH323CallData *call, H245AudioCapability* audioCap, int dir){   /* Find similar capability */   switch(audioCap->t)   {      case T_H245AudioCapability_g711Alaw64k:      case T_H245AudioCapability_g711Alaw56k:      case T_H245AudioCapability_g711Ulaw56k:      case T_H245AudioCapability_g711Ulaw64k:      case T_H245AudioCapability_g729:      case T_H245AudioCapability_g729AnnexA:      case T_H245AudioCapability_g7231:         return ooIsAudioDataTypeSimpleSupported(call, audioCap, dir);      case T_H245AudioCapability_gsmFullRate:      case T_H245AudioCapability_gsmHalfRate:      case T_H245AudioCapability_gsmEnhancedFullRate:         return ooIsAudioDataTypeGSMSupported(call, audioCap, dir);         default:         return NULL;   }   }ooH323EpCapability* ooIsVideoDataTypeH263Supported   (OOH323CallData *call, H245H263VideoCapability* pH263Cap, int dir,     OOPictureFormat picFormat){   int cap;   ooH323EpCapability *cur=NULL, *epCap=NULL;   OOH263CapParams *params= NULL;      char *pictureType=NULL;   unsigned mpi=0;   cap = OO_H263VIDEO;   if(picFormat == OO_PICFORMAT_SQCIF && pH263Cap->m.sqcifMPIPresent)   {      pictureType = "SQCIF";      mpi = pH263Cap->sqcifMPI;   }   if(picFormat == OO_PICFORMAT_QCIF && pH263Cap->m.qcifMPIPresent)   {      pictureType = "QCIF";      mpi = pH263Cap->qcifMPI;   }   if(picFormat == OO_PICFORMAT_CIF && pH263Cap->m.cifMPIPresent)   {      pictureType = "CIF";      mpi = pH263Cap->cifMPI;   }   if(picFormat == OO_PICFORMAT_CIF4 && pH263Cap->m.cif4MPIPresent)   {      pictureType = "CIF4";      mpi = pH263Cap->cif4MPI;   }   if(picFormat == OO_PICFORMAT_CIF16 && pH263Cap->m.cif16MPIPresent)   {      pictureType = "CIF16";      mpi = pH263Cap->cif16MPI;   }      OOTRACEDBGA4("Looking for H263 video capability(%s). (%s, %s)\n",                  pictureType, call->callType, call->callToken);  /* If we have call specific caps, we use them; otherwise use general      endpoint caps   */      if(call->ourCaps)     cur = call->ourCaps;   else     cur = gH323ep.myCaps;   while(cur)   {      OOTRACEDBGC4("Local cap being compared %s. (%s, %s)\n",               ooGetCapTypeText(cur->cap),call->callType, call->callToken);            if(cur->cap == cap && (cur->dir & dir))      {	 if(((OOH263CapParams*)cur->params)->picFormat == picFormat)           break;      }      cur = cur->next;   }      if(!cur) return NULL;      OOTRACEDBGC4("Found matching simple audio capability type %s. Comparing"                " other parameters. (%s, %s)\n", ooGetCapTypeText(cap),                 call->callType, call->callToken);      if(dir & OORX)   {      if(mpi < ((OOH263CapParams*)cur->params)->MPI)         return NULL;      else{	 epCap = (ooH323EpCapability*)memAlloc(call->pctxt,                                                    sizeof(ooH323EpCapability));         params = (OOH263CapParams*) memAlloc(call->pctxt,                                                       sizeof(OOH263CapParams));         if(!epCap || !params)         {	   OOTRACEERR3("Error:Memory - ooIsVideoDataTypeH263Supported - "                       "epCap/params. (%s, %s)\n", call->callType,                         call->callToken);           return NULL;         }         epCap->params = params;         epCap->cap = cur->cap;

⌨️ 快捷键说明

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