1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

refine source and queue dump msgs.

This commit is contained in:
winlin 2014-12-05 22:00:57 +08:00
parent e80c8603d4
commit 528ae1e9b1

View file

@ -211,22 +211,24 @@ int SrsMessageQueue::enqueue(SrsSharedPtrMessage* msg, bool* is_overflow)
int SrsMessageQueue::dump_packets(int max_count, SrsMessage** pmsgs, int& count) int SrsMessageQueue::dump_packets(int max_count, SrsMessage** pmsgs, int& count)
{ {
int ret = ERROR_SUCCESS; int ret = ERROR_SUCCESS;
if (msgs.empty()) { int nb_msgs = (int)msgs.size();
if (nb_msgs <= 0) {
return ret; return ret;
} }
srs_assert(max_count > 0); srs_assert(max_count > 0);
count = srs_min(max_count, (int)msgs.size()); count = srs_min(max_count, nb_msgs);
SrsSharedPtrMessage** omsgs = msgs.data();
for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) {
pmsgs[i] = msgs[i]; pmsgs[i] = omsgs[i];
} }
SrsMessage* last = msgs[count - 1]; SrsSharedPtrMessage* last = omsgs[count - 1];
av_start_time = last->header.timestamp; av_start_time = last->header.timestamp;
if (count == (int)msgs.size()) { if (count >= nb_msgs) {
// the pmsgs is big enough and clear msgs at most time. // the pmsgs is big enough and clear msgs at most time.
msgs.clear(); msgs.clear();
} else { } else {
@ -1108,9 +1110,11 @@ int SrsSource::on_audio(SrsMessage* __audio)
#endif #endif
// copy to all consumer // copy to all consumer
if (true) { int nb_consumers = (int)consumers.size();
for (int i = 0; i < (int)consumers.size(); i++) { if (nb_consumers > 0) {
SrsConsumer* consumer = consumers.at(i); SrsConsumer** pconsumer = consumers.data();
for (int i = 0; i < nb_consumers; i++) {
SrsConsumer* consumer = pconsumer[i];
SrsSharedPtrMessage* copy = msg.copy(); SrsSharedPtrMessage* copy = msg.copy();
if ((ret = consumer->enqueue(copy, atc, sample_rate, frame_rate, jitter_algorithm)) != ERROR_SUCCESS) { if ((ret = consumer->enqueue(copy, atc, sample_rate, frame_rate, jitter_algorithm)) != ERROR_SUCCESS) {
srs_error("dispatch the audio failed. ret=%d", ret); srs_error("dispatch the audio failed. ret=%d", ret);