diff --git a/trunk/src/app/srs_app_source.cpp b/trunk/src/app/srs_app_source.cpp index d2a3dcce0..549a3bde0 100644 --- a/trunk/src/app/srs_app_source.cpp +++ b/trunk/src/app/srs_app_source.cpp @@ -211,22 +211,24 @@ int SrsMessageQueue::enqueue(SrsSharedPtrMessage* msg, bool* is_overflow) int SrsMessageQueue::dump_packets(int max_count, SrsMessage** pmsgs, int& count) { int ret = ERROR_SUCCESS; - - if (msgs.empty()) { + + int nb_msgs = (int)msgs.size(); + if (nb_msgs <= 0) { return ret; } 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++) { - pmsgs[i] = msgs[i]; + pmsgs[i] = omsgs[i]; } - SrsMessage* last = msgs[count - 1]; + SrsSharedPtrMessage* last = omsgs[count - 1]; 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. msgs.clear(); } else { @@ -1108,9 +1110,11 @@ int SrsSource::on_audio(SrsMessage* __audio) #endif // copy to all consumer - if (true) { - for (int i = 0; i < (int)consumers.size(); i++) { - SrsConsumer* consumer = consumers.at(i); + int nb_consumers = (int)consumers.size(); + if (nb_consumers > 0) { + SrsConsumer** pconsumer = consumers.data(); + for (int i = 0; i < nb_consumers; i++) { + SrsConsumer* consumer = pconsumer[i]; SrsSharedPtrMessage* copy = msg.copy(); if ((ret = consumer->enqueue(copy, atc, sample_rate, frame_rate, jitter_algorithm)) != ERROR_SUCCESS) { srs_error("dispatch the audio failed. ret=%d", ret);