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 + -
显示快捷键?