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