winlin

refine source and queue dump msgs.

@@ -211,22 +211,24 @@ int SrsMessageQueue::enqueue(SrsSharedPtrMessage* msg, bool* is_overflow) @@ -211,22 +211,24 @@ int SrsMessageQueue::enqueue(SrsSharedPtrMessage* msg, bool* is_overflow)
211 int SrsMessageQueue::dump_packets(int max_count, SrsMessage** pmsgs, int& count) 211 int SrsMessageQueue::dump_packets(int max_count, SrsMessage** pmsgs, int& count)
212 { 212 {
213 int ret = ERROR_SUCCESS; 213 int ret = ERROR_SUCCESS;
214 -  
215 - if (msgs.empty()) { 214 +
  215 + int nb_msgs = (int)msgs.size();
  216 + if (nb_msgs <= 0) {
216 return ret; 217 return ret;
217 } 218 }
218 219
219 srs_assert(max_count > 0); 220 srs_assert(max_count > 0);
220 - count = srs_min(max_count, (int)msgs.size());  
221 - 221 + count = srs_min(max_count, nb_msgs);
  222 +
  223 + SrsSharedPtrMessage** omsgs = msgs.data();
222 for (int i = 0; i < count; i++) { 224 for (int i = 0; i < count; i++) {
223 - pmsgs[i] = msgs[i]; 225 + pmsgs[i] = omsgs[i];
224 } 226 }
225 227
226 - SrsMessage* last = msgs[count - 1]; 228 + SrsSharedPtrMessage* last = omsgs[count - 1];
227 av_start_time = last->header.timestamp; 229 av_start_time = last->header.timestamp;
228 230
229 - if (count == (int)msgs.size()) { 231 + if (count >= nb_msgs) {
230 // the pmsgs is big enough and clear msgs at most time. 232 // the pmsgs is big enough and clear msgs at most time.
231 msgs.clear(); 233 msgs.clear();
232 } else { 234 } else {
@@ -1108,9 +1110,11 @@ int SrsSource::on_audio(SrsMessage* __audio) @@ -1108,9 +1110,11 @@ int SrsSource::on_audio(SrsMessage* __audio)
1108 #endif 1110 #endif
1109 1111
1110 // copy to all consumer 1112 // copy to all consumer
1111 - if (true) {  
1112 - for (int i = 0; i < (int)consumers.size(); i++) {  
1113 - SrsConsumer* consumer = consumers.at(i); 1113 + int nb_consumers = (int)consumers.size();
  1114 + if (nb_consumers > 0) {
  1115 + SrsConsumer** pconsumer = consumers.data();
  1116 + for (int i = 0; i < nb_consumers; i++) {
  1117 + SrsConsumer* consumer = pconsumer[i];
1114 SrsSharedPtrMessage* copy = msg.copy(); 1118 SrsSharedPtrMessage* copy = msg.copy();
1115 if ((ret = consumer->enqueue(copy, atc, sample_rate, frame_rate, jitter_algorithm)) != ERROR_SUCCESS) { 1119 if ((ret = consumer->enqueue(copy, atc, sample_rate, frame_rate, jitter_algorithm)) != ERROR_SUCCESS) {
1116 srs_error("dispatch the audio failed. ret=%d", ret); 1120 srs_error("dispatch the audio failed. ret=%d", ret);