oocapability.c
来自「一个非常美妙的proxy。功能强大。基于sip的协议。如果还要的话」· C语言 代码 · 共 2,030 行 · 第 1/5 页
C
2,030 行
pAudio->u.g711Ulaw64k = params->txframes; return pAudio; case OO_G711ULAW56K: pAudio->t = T_H245AudioCapability_g711Ulaw56k; if(dir & OORX) pAudio->u.g711Ulaw56k = params->rxframes; else pAudio->u.g711Ulaw64k = params->txframes; return pAudio; case OO_G729: pAudio->t = T_H245AudioCapability_g729; if(dir & OORX) pAudio->u.g729 = params->rxframes; else pAudio->u.g729 = params->txframes; return pAudio; case OO_G729A: pAudio->t = T_H245AudioCapability_g729AnnexA; if(dir & OORX) pAudio->u.g729AnnexA = params->rxframes; else pAudio->u.g729AnnexA = params->txframes; return pAudio; case OO_G7231: pAudio->t = T_H245AudioCapability_g7231; pAudio->u.g7231 = (H245AudioCapability_g7231*)memAlloc(pctxt, sizeof(H245AudioCapability_g7231)); if(!pAudio->u.g7231) { OOTRACEERR1("Error:Memory - ooCapabilityCreateSimpleCapability - g7231\n"); memFreePtr(pctxt, pAudio); return NULL; } pAudio->u.g7231->silenceSuppression = params->silenceSuppression; if(dir & OORX) pAudio->u.g7231->maxAl_sduAudioFrames = params->rxframes; else pAudio->u.g7231->maxAl_sduAudioFrames = params->txframes; return pAudio; default: OOTRACEERR2("ERROR: Don't know how to create audio capability %d\n", epCap->cap); } return NULL;}/*Used for g711 ulaw/alaw, g729, g729a, g7231 */ASN1BOOL ooCapabilityCheckCompatibility_Simple (OOH323CallData *call, ooH323EpCapability* epCap, H245AudioCapability* audioCap, int dir){ int noofframes=0, cap; switch(audioCap->t) { case T_H245AudioCapability_g711Ulaw56k: cap = OO_G711ULAW56K; noofframes = audioCap->u.g711Ulaw56k; break; case T_H245AudioCapability_g711Ulaw64k: cap = OO_G711ULAW64K; noofframes = audioCap->u.g711Ulaw64k; break; case T_H245AudioCapability_g711Alaw64k: cap = OO_G711ALAW64K; noofframes = audioCap->u.g711Alaw64k; break; case T_H245AudioCapability_g711Alaw56k: cap = OO_G711ALAW56K; noofframes = audioCap->u.g711Alaw56k; break; case T_H245AudioCapability_g729: cap = OO_G729; noofframes = audioCap->u.g729; break; case T_H245AudioCapability_g729AnnexA: cap = OO_G729; noofframes = audioCap->u.g729AnnexA; break; case T_H245AudioCapability_g7231: cap = OO_G7231; noofframes = audioCap->u.g7231->maxAl_sduAudioFrames; break; default: return FALSE; } /* can we receive this capability */ if(dir & OORX) { if(((OOCapParams*)epCap->params)->rxframes >= noofframes) return TRUE; } /* Can we transmit compatible stream */ if(dir & OOTX) { if(((OOCapParams*)epCap->params)->txframes <= noofframes) return TRUE; } return FALSE;}OOBOOL ooCapabilityCheckCompatibility_GSM (OOH323CallData *call, ooH323EpCapability* epCap, H245AudioCapability* audioCap, int dir){ unsigned noofframes=0, cap; switch(audioCap->t) { case T_H245AudioCapability_gsmFullRate: cap = OO_GSMFULLRATE; noofframes = (audioCap->u.gsmFullRate->audioUnitSize)/OO_GSMFRAMESIZE; break; case T_H245AudioCapability_gsmHalfRate: cap = OO_GSMHALFRATE; noofframes = (audioCap->u.gsmHalfRate->audioUnitSize)/OO_GSMFRAMESIZE; break; case T_H245AudioCapability_gsmEnhancedFullRate: cap = OO_GSMENHANCEDFULLRATE; noofframes = (audioCap->u.gsmEnhancedFullRate->audioUnitSize)/OO_GSMFRAMESIZE; break; default: return FALSE; } /* can we receive this capability */ if(dir & OORX) { if(((OOGSMCapParams*)epCap->params)->rxframes >= noofframes) return TRUE; } /* Make sure we transmit compatible stream */ if(dir & OOTX) { if(((OOGSMCapParams*)epCap->params)->txframes > noofframes){ OOTRACEDBGA5("Reducing txframes for GSM from %d to %d to match " "receive capability of remote end.(%s, %s)\n", ((OOGSMCapParams*)epCap->params)->txframes, noofframes, call->callType, call->callToken); ((OOGSMCapParams*)epCap->params)->txframes = noofframes; } return TRUE; } return FALSE;}OOBOOL ooCapabilityCheckCompatibility_H263Video (struct OOH323CallData *call, ooH323EpCapability *epCap, H245VideoCapability *pVideoCap, int dir){ H245H263VideoCapability *pH263Cap = NULL; OOH263CapParams *params = epCap->params; if(!pVideoCap->u.h263VideoCapability) { OOTRACEERR3("Error:No H263 video capability present in video capability" "structure. (%s, %s)\n", call->callType, call->callToken); return FALSE; } pH263Cap = pVideoCap->u.h263VideoCapability; /* can we receive/transmit this capability */ if(OORX & dir) { if(pH263Cap->m.sqcifMPIPresent) { if(params->picFormat != OO_PICFORMAT_SQCIF) { return FALSE; }else{ if(pH263Cap->sqcifMPI >= params->MPI) return TRUE; else return FALSE; } } if(pH263Cap->m.qcifMPIPresent) { if(params->picFormat != OO_PICFORMAT_QCIF) { return FALSE; }else{ if(pH263Cap->qcifMPI >= params->MPI) return TRUE; else return FALSE; } } if(pH263Cap->m.cifMPIPresent) { if(params->picFormat != OO_PICFORMAT_CIF) { return FALSE; }else{ if(pH263Cap->cifMPI >= params->MPI) return TRUE; else return FALSE; } } if(pH263Cap->m.cif4MPIPresent) { if(params->picFormat != OO_PICFORMAT_CIF4) { return FALSE; }else{ if(pH263Cap->cif4MPI >= params->MPI) return TRUE; else return FALSE; } } if(pH263Cap->m.cif16MPIPresent) { if(params->picFormat != OO_PICFORMAT_CIF16) { return FALSE; }else{ if(pH263Cap->cif16MPI >= params->MPI) return TRUE; else return FALSE; } } } /* Can we transmit */ if(OOTX & dir) { if(pH263Cap->m.sqcifMPIPresent) { if(params->picFormat != OO_PICFORMAT_SQCIF) { return FALSE; }else{ if(pH263Cap->sqcifMPI <= params->MPI) return TRUE; else return FALSE; } } if(pH263Cap->m.qcifMPIPresent) { if(params->picFormat != OO_PICFORMAT_QCIF) { return FALSE; }else{ if(pH263Cap->qcifMPI <= params->MPI) return TRUE; else return FALSE; } } if(pH263Cap->m.cifMPIPresent) { if(params->picFormat != OO_PICFORMAT_CIF) { return FALSE; }else{ if(pH263Cap->cifMPI <= params->MPI) return TRUE; else return FALSE; } } if(pH263Cap->m.cif4MPIPresent) { if(params->picFormat != OO_PICFORMAT_CIF4) { return FALSE; }else{ if(pH263Cap->cif4MPI <= params->MPI) return TRUE; else return FALSE; } } if(pH263Cap->m.cif16MPIPresent) { if(params->picFormat != OO_PICFORMAT_CIF16) { return FALSE; }else{ if(pH263Cap->cif16MPI <= params->MPI) return TRUE; else return FALSE; } } } return FALSE;}OOBOOL ooCapabilityCheckCompatibility_Audio (OOH323CallData *call, ooH323EpCapability* epCap, H245AudioCapability* audioCap, int dir){ switch(audioCap->t) { case T_H245AudioCapability_g711Ulaw56k: case T_H245AudioCapability_g711Ulaw64k: case T_H245AudioCapability_g711Alaw64k: case T_H245AudioCapability_g711Alaw56k: case T_H245AudioCapability_g729: case T_H245AudioCapability_g729AnnexA: case T_H245AudioCapability_g7231: return ooCapabilityCheckCompatibility_Simple(call, epCap, audioCap, dir); case T_H245AudioCapability_gsmFullRate: return ooCapabilityCheckCompatibility_GSM(call, epCap, audioCap, dir); default: return FALSE; } return FALSE; }OOBOOL ooCapabilityCheckCompatibility_Video (OOH323CallData *call, ooH323EpCapability* epCap, H245VideoCapability* videoCap, int dir){ switch(videoCap->t) { case T_H245VideoCapability_h263VideoCapability: return ooCapabilityCheckCompatibility_H263Video(call, epCap, videoCap, dir); default: OOTRACEDBGC3("ooCapabilityCheckCompatibility_Video - Unsupported video " "capability. (%s, $s)\n", call->callType, call->callToken); } return FALSE;}/* Note: In faststart if we sent transmit rate (x>y) and remote can receive only y, then we can't reduce our transmit rate */OOBOOL ooCapabilityCheckCompatibility (struct OOH323CallData *call, ooH323EpCapability* epCap, H245DataType* dataType, int dir){ switch(dataType->t) { case T_H245DataType_audioData: if(epCap->capType == OO_CAP_TYPE_AUDIO) return ooCapabilityCheckCompatibility_Audio(call, epCap, dataType->u.audioData, dir); break; case T_H245DataType_videoData: if(epCap->capType == OO_CAP_TYPE_VIDEO) return ooCapabilityCheckCompatibility_Video(call, epCap, dataType->u.videoData, dir); break; case T_H245DataType_data: default: OOTRACEDBGC3("ooCapabilityCheckCompatibility - Unsupported " "capability. (%s, $s)\n", call->callType, call->callToken); } return FALSE;}#if 0/** TODO: If txCap is local and number of txframes is greater than remote can receive, we should automatically decrease it. And logical channel cap should be the one where it should be decreased. The start logical channel will indicate the application that it is supposed to tx and a reduced rate. */ASN1BOOL ooCheckCompatibility (OOH323CallData *call, ooH323EpCapability *txCap, ooH323EpCapability *rxCap){ if(txCap->cap != rxCap->cap) return FALSE; if(!(txCap->dir & OOTX)) return FALSE; if(!(rxCap->dir & OORX)) return FALSE; switch(txCap->cap) { case OO_G711ALAW64K: case OO_G711ALAW56K: case OO_G711ULAW64K: case OO_G711ULAW56K: case OO_G729: case OO_G729A: case OO_G7231: if(((OOCapParams*)txCap->params)->txframes <= ((OOCapParams*)rxCap->params)->rxframes) return TRUE; else{ OOTRACEDBGA4("Simple caps %s are not compatible.(%s, %s)\n", ooGetCapTypeText(txCap->cap), call->callType, call->callToken); return FALSE; } case OO_GSMFULLRATE:
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?