示例#1
0
string RTSPStream::Setup(RTSPMessage *msg)
{
    ostringstream response;

    // find the client port in the transport params
    string transport = msg->ValueForOption("transport");
    vector<string> components = divideBy(transport, ";");
    vector<string> ports;
    for (vector<string>::iterator it = components.begin(); it != components.end(); it++)
    {
        string label = it->substr(0, 12);
        if (caselesscompare(label, "client_port="))
        {
            ports = divideBy(it->substr(12), "-");
            break;
        }
    }
    if (ports.size() == 2)
    {
        int portRTP = stoi(ports[0]);
        int portRTCP = stoi(ports[1]);
        if (MakeSession(portRTP, portRTCP))
        {
            response << msg->CreateResponse(200, "OK") << "Session: " << m_session  << "\r\n";
            response << "Transport: RTP/AVP;unicast;client_port=" << portRTP << "-" << portRTCP;
            response << ";server_port=" << m_portBase << "-" << m_portBase + 1 << "\r\n\r\n";
        }
    }
    if (response.str().length() == 0)
    {
        response << msg->CreateResponse(451, "transport setup failed");
    }
    return response.str();
}
示例#2
0
文件: anybase.c 项目: Antanas/objc
void convertToBase(uint32_t* number, char* buf, int base) {
  int n = 0;
  do {
    int digit = divideBy(number,base);
    buf[n++] = digits[digit];
  } while(!zero(number));
  buf[n] = '\0';
  reverse(buf);
}
示例#3
0
void ConvertXml::calcDivisions() {
//	cout << "ConvertXml::calcDivisions()" << endl;

	// init
	integers.clear();
	primes.clear();
	integers.append(120);		// quarter note length
	primes.append(2);
	primes.append(3);
	primes.append(5);
	primes.append(7);		// initialize with required prime numbers

// need to use note and rest duration as exported to MusicXML
// thus match ConvertXml::write's main loop

	// loop over all tracks
	for (auto row = 0; row < song->rowCount(); row++) {
		TabTrack* trk = song->index(row, 0).data(TabSong::TrackPtrRole).value<TabTrack*>();
		trk->calcVoices();	// LVIFIX: is this necessary ?
//		cout << "part id=P" << it+1 << endl;

		// loop over all bars
		for (int ib = 0; ib < trk->bars().size(); ib++) {
//			cout << "measure number=" << ib + 1 << endl;

			// loop over all voices in this bar
			for (int i = 0; i < 2; i++) {
				// write only voice 1 in single voice tracks,
				// write all voices in multi voice tracks
				if ((i == 1) || trk->hasMultiVoices()) {
//					cout << "voice number=" << i + 1 << endl;
					// loop over all columns in this bar
					for (int x = trk->bars()[ib].start; x <= trk->lastColumn(ib); /* nothing */) {
/*
						int tp;
						int dt;
						bool tr;
						bool res;
						res = trk->getNoteTypeAndDots(x, i, tp, dt, tr);
							// LVIFIX: error handling ?
							// false means no note in this column/voice
							// LVIFIX: add rest handling (see writecol)
						cout
							<< "x=" << x
							<< " res=" << res
							<< " tp=" << tp
							<< " dt=" << dt
							<< " tr=" << tr
							<< endl;
*/
						QTextStream dummy;
						x += writeCol(dummy, trk, x, i, false);
					} // end for (uint x = 0; ....
				} // end if ((i == 1) || ...
			} // end for (int i = 0; ...

		} // end for (uint ib = 0; ...

	} // end for (unsigned int it = 0; ...

	// do it: divide by all primes as often as possible
	for (auto& u : primes) {
		while (canDivideBy(u)) {
			divideBy(u);
		}
	}

//	cout << "res=" << integers[0] << endl;
	divisions = integers[0];
}