bool StrangeNNGene::createNeuron( Neuron& neuron, std::string const& str ) { // Extract all dendrites std::vector<std::string> values = splitToken( str, GENEFILE_TOKEN_DENDRITE ); std::vector<std::string>::iterator valueIt = values.begin(); // For every dendrite for ( ; valueIt != values.end(); ++valueIt ) { // Extract the index and the bias std::vector<std::string> dendriteData = splitToken( *valueIt, GENEFILE_TOKEN_COMMA ); // Some sanity if ( dendriteData.size() != 2 ) { assert( false ); return false; } // Insert this dendrite. neuron.insert( std::make_pair( atoi( dendriteData[0].c_str() ), atoi( dendriteData[1].c_str() ) ) ); } return true; }
FskErr lpcmPacketParserNew(RTPPacketParser parser) { LPCMPacketParser lpcmPacketParser; SDPMediaDescription mediaDescription; FskErr err; err = FskMemPtrNewClear(sizeof(LPCMPacketParserRecord), &lpcmPacketParser); BAIL_IF_ERR(err); parser->handlerRefCon = lpcmPacketParser; // Tuck away the sample size, sample rate, and bits per sample mediaDescription = parser->mediaDescription; if (NULL != mediaDescription) { SDPAttribute attribute; attribute = SDPFindMediaAttribute(mediaDescription, "rtpmap"); if (NULL != attribute) { char *value, *parts[3]; UInt16 nParts = 2; value = FskStrDoCopy(attribute->value); splitToken(value, &nParts, ' ', &parts[0]); if (*parts[1] == 'L') { nParts = 3; splitToken(parts[1]+1, &nParts, '/', &parts[0]); lpcmPacketParser->bitsPerSample = (UInt16)FskStrToNum(parts[0]); lpcmPacketParser->sampleRate = FskStrToNum(parts[1]); lpcmPacketParser->nChannels = (UInt16)FskStrToNum(parts[2]); parser->mediaFormat = (16 == lpcmPacketParser->bitsPerSample ? kRTPAudioFormatPCM16BitBigEndian : kRTPAudioFormatPCM8BitOffsetBinary); lpcmPacketParser->mediaFormat = parser->mediaFormat; } FskMemPtrDispose(value); } } bail: return err; }
bool StrangeNNGene::createGeneData( std::string const& str ) { // Extract all the neurons std::vector<std::string> values = splitToken( str, GENEFILE_TOKEN_NEURON ); if ( values.empty() ) return false; std::vector<std::string>::iterator valueIt = values.begin(); // Read the generation count geneGeneration_ = atoi( valueIt->c_str() ); // The rest are neuron data sets. ++valueIt; data_.resize( values.size() - 1 ); GeneData::iterator neuronIt = data_.begin(); // For every neuron for ( ; valueIt != values.end(); ++valueIt, ++neuronIt ) { if ( ! createNeuron( *neuronIt, *valueIt ) ) return false; } return true; }
FskErr h263PacketParserNew(RTPPacketParser parser) { FskErr err; H263PacketParser h263PacketParser; SDPMediaDescription mediaDescription; SDPAttribute attribute; err = FskMemPtrNew(sizeof(H263PacketParserRecord), &h263PacketParser); if (0 != err) goto bail; parser->handlerRefCon = h263PacketParser; h263PacketParser->frames = NULL; h263PacketParser->mediaFormat = kRTPVideoFormatH263; h263PacketParser->width = 0; h263PacketParser->height = 0; h263PacketParser->lastTimeStamp = 0; // look for the "a=framesize" attribute in the SDP for width and height // referenced in 3GPP TS 26.234 version 6.3.0 Release 6 if (0 == h263PacketParser->width) { char *tmp = NULL, *p[3] = {0}; UInt16 nParts; attribute = SDPFindMediaAttribute(parser->mediaDescription, "framesize"); if (attribute) { SDPMediaFormat mediaFormat = parser->mediaDescription->formatList->head; tmp = FskStrDoCopy(attribute->value); splitToken(tmp, &nParts, ' ', &p[0]); if ((UInt32)FskStrToNum(p[0]) == mediaFormat->payloadType) { splitToken(p[1], &nParts, '-', &p[0]); h263PacketParser->width = FskStrToNum(p[0]); h263PacketParser->height = FskStrToNum(p[1]); } FskMemPtrDispose(tmp); } } // look for the "a=Width" and "a=Height" attributes (TMI server) // a=Width:integer;176 // a=Height:integer;144 if (0 == h263PacketParser->width) { char *p[3] = {0}; UInt16 nParts; attribute = SDPFindMediaAttribute(parser->mediaDescription, "Width"); if (attribute) { char *value; value = FskStrDoCopy(attribute->value); splitToken(value, &nParts, ';', &p[0]); h263PacketParser->width = FskStrToNum(p[1]); FskMemPtrDispose(value); } } if (0 == h263PacketParser->height) { char *p[3] = {0}; UInt16 nParts; attribute = SDPFindMediaAttribute(parser->mediaDescription, "Height"); if (attribute) { char *value; value = FskStrDoCopy(attribute->value); splitToken(value, &nParts, ';', &p[0]); h263PacketParser->height = FskStrToNum(p[1]); FskMemPtrDispose(value); } } // Next try the cliprect attribute if (0 == h263PacketParser->width) { attribute = SDPFindMediaAttribute(parser->mediaDescription, "cliprect"); if (NULL != attribute) { char *value, *parts[5]; UInt16 nParts; value = FskStrDoCopy(attribute->value); splitToken(value, &nParts, ',', &parts[0]); if (4 == nParts) { h263PacketParser->width = FskStrToNum(parts[3]); h263PacketParser->height = FskStrToNum(parts[2]); } FskMemPtrDispose(value); } } // Next try the framesize in the fmtp attribute if (0 == h263PacketParser->width) { attribute = SDPFindMediaAttribute(parser->mediaDescription, "fmtp"); if (NULL != attribute) { char *attr; if (NULL != copyAttributeValue(attribute->value, "framesize", &attr)) { char *value, *parts[5]; UInt16 nParts; value = FskStrDoCopy(attr); splitToken(value, &nParts, '-', &parts[0]); if (2 == nParts) { h263PacketParser->width = FskStrToNum(parts[0]); h263PacketParser->height = FskStrToNum(parts[1]); } FskMemPtrDispose(attr); FskMemPtrDispose(value); } } } // Grab the timescale - should always be 90000 h263PacketParser->timeScale = 90000; mediaDescription = parser->mediaDescription; if (NULL != mediaDescription) { SDPAttribute attribute; attribute = SDPFindMediaAttribute(mediaDescription, "rtpmap"); if (NULL != attribute) { char *value, *parts[4]; UInt16 nParts = 2; value = FskStrDoCopy(attribute->value); splitToken(value, &nParts, '/', &parts[0]); h263PacketParser->timeScale = FskStrToNum(parts[1]); FskMemPtrDispose(value); } } bail: return err; }