uint16_t sip_config_video_add_codecs (rtp_ptype aSupportedCodecs[], uint16_t supportedCodecsLen, uint16_t codec_mask) { uint16_t count = 0; // All things being equal, prefer VP8 > H.264 p1 > H.264 p0 -> H.263 if ( codec_mask & VCM_CODEC_RESOURCE_VP8) { aSupportedCodecs[count] = RTP_VP8; count++; } if ( codec_mask & VCM_CODEC_RESOURCE_H264) { if (vcmGetVideoMaxSupportedPacketizationMode() == 1) { aSupportedCodecs[count] = RTP_H264_P1; count++; } aSupportedCodecs[count] = RTP_H264_P0; count++; } if ( codec_mask & VCM_CODEC_RESOURCE_H263) { aSupportedCodecs[count] = RTP_H263; count++; } return count; }
/* * sip_config_local_supported_codecs_get() * * Get the locally supported codec list. */ uint16_t sip_config_video_supported_codecs_get (rtp_ptype aSupportedCodecs[], uint16_t supportedCodecsLen, boolean isOffer) { uint16_t count = 0; int codec_mask; cc_uint32_t major_ver, minor_ver; if ( isOffer ) { codec_mask = vcmGetVideoCodecList(VCM_DSP_FULLDUPLEX); } else { /* we are trying to match the answer then we already have the rx stream open */ //codec_mask = vcmGetVideoCodecList(DSP_ENCODEONLY); codec_mask = vcmGetVideoCodecList(VCM_DSP_IGNORE); } if ( codec_mask & VCM_CODEC_RESOURCE_H264) { /* * include payload type for packetization mode 1 only if ucm sis version * is equal to or greater than 5.1.0 (AngelFire). */ platGetSISProtocolVer(&major_ver, &minor_ver, NULL, NULL); if ((major_ver > SIS_PROTOCOL_MAJOR_VERSION_ANGELFIRE) || (major_ver == SIS_PROTOCOL_MAJOR_VERSION_ANGELFIRE && minor_ver >= SIS_PROTOCOL_MINOR_VERSION_ANGELFIRE)) { if (vcmGetVideoMaxSupportedPacketizationMode() == 1) { aSupportedCodecs[count] = RTP_H264_P1; count++; } } aSupportedCodecs[count] = RTP_H264_P0; count++; } if ( codec_mask & VCM_CODEC_RESOURCE_VP8) { aSupportedCodecs[count] = RTP_VP8; count++; } if ( codec_mask & VCM_CODEC_RESOURCE_H263) { aSupportedCodecs[count] = RTP_H263; count++; } return count; }