winlin

for #742, refine code

@@ -764,6 +764,78 @@ bool srs_hls_can_continue(int ret, SrsSharedPtrMessage* sh, SrsSharedPtrMessage* @@ -764,6 +764,78 @@ bool srs_hls_can_continue(int ret, SrsSharedPtrMessage* sh, SrsSharedPtrMessage*
764 return false; 764 return false;
765 } 765 }
766 766
  767 +SrsMixQueue::SrsMixQueue()
  768 +{
  769 + nb_videos = 0;
  770 + nb_audios = 0;
  771 +}
  772 +
  773 +SrsMixQueue::~SrsMixQueue()
  774 +{
  775 + clear();
  776 +}
  777 +
  778 +void SrsMixQueue::clear()
  779 +{
  780 + std::multimap<int64_t, SrsSharedPtrMessage*>::iterator it;
  781 + for (it = msgs.begin(); it != msgs.end(); ++it) {
  782 + SrsSharedPtrMessage* msg = it->second;
  783 + srs_freep(msg);
  784 + }
  785 + msgs.clear();
  786 +
  787 + nb_videos = 0;
  788 + nb_audios = 0;
  789 +}
  790 +
  791 +void SrsMixQueue::push(SrsSharedPtrMessage* msg)
  792 +{
  793 + msgs.insert(std::make_pair(msg->timestamp, msg));
  794 +
  795 + if (msg->is_video()) {
  796 + nb_videos++;
  797 + } else {
  798 + nb_audios++;
  799 + }
  800 +}
  801 +
  802 +SrsSharedPtrMessage* SrsMixQueue::pop()
  803 +{
  804 + bool mix_ok = false;
  805 +
  806 + // pure video
  807 + if (nb_videos >= SRS_MIX_CORRECT_PURE_AV && nb_audios == 0) {
  808 + mix_ok = true;
  809 + }
  810 +
  811 + // pure audio
  812 + if (nb_audios >= SRS_MIX_CORRECT_PURE_AV && nb_videos == 0) {
  813 + mix_ok = true;
  814 + }
  815 +
  816 + // got 1 video and 1 audio, mix ok.
  817 + if (nb_videos >= 1 && nb_audios >= 1) {
  818 + mix_ok = true;
  819 + }
  820 +
  821 + if (!mix_ok) {
  822 + return NULL;
  823 + }
  824 +
  825 + // pop the first msg.
  826 + std::multimap<int64_t, SrsSharedPtrMessage*>::iterator it = msgs.begin();
  827 + SrsSharedPtrMessage* msg = it->second;
  828 + msgs.erase(it);
  829 +
  830 + if (msg->is_video()) {
  831 + nb_videos--;
  832 + } else {
  833 + nb_audios--;
  834 + }
  835 +
  836 + return msg;
  837 +}
  838 +
767 SrsOriginHub::SrsOriginHub(SrsSource* s) 839 SrsOriginHub::SrsOriginHub(SrsSource* s)
768 { 840 {
769 source = s; 841 source = s;
@@ -1659,78 +1731,6 @@ void SrsSource::destroy() @@ -1659,78 +1731,6 @@ void SrsSource::destroy()
1659 pool.clear(); 1731 pool.clear();
1660 } 1732 }
1661 1733
1662 -SrsMixQueue::SrsMixQueue()  
1663 -{  
1664 - nb_videos = 0;  
1665 - nb_audios = 0;  
1666 -}  
1667 -  
1668 -SrsMixQueue::~SrsMixQueue()  
1669 -{  
1670 - clear();  
1671 -}  
1672 -  
1673 -void SrsMixQueue::clear()  
1674 -{  
1675 - std::multimap<int64_t, SrsSharedPtrMessage*>::iterator it;  
1676 - for (it = msgs.begin(); it != msgs.end(); ++it) {  
1677 - SrsSharedPtrMessage* msg = it->second;  
1678 - srs_freep(msg);  
1679 - }  
1680 - msgs.clear();  
1681 -  
1682 - nb_videos = 0;  
1683 - nb_audios = 0;  
1684 -}  
1685 -  
1686 -void SrsMixQueue::push(SrsSharedPtrMessage* msg)  
1687 -{  
1688 - msgs.insert(std::make_pair(msg->timestamp, msg));  
1689 -  
1690 - if (msg->is_video()) {  
1691 - nb_videos++;  
1692 - } else {  
1693 - nb_audios++;  
1694 - }  
1695 -}  
1696 -  
1697 -SrsSharedPtrMessage* SrsMixQueue::pop()  
1698 -{  
1699 - bool mix_ok = false;  
1700 -  
1701 - // pure video  
1702 - if (nb_videos >= SRS_MIX_CORRECT_PURE_AV && nb_audios == 0) {  
1703 - mix_ok = true;  
1704 - }  
1705 -  
1706 - // pure audio  
1707 - if (nb_audios >= SRS_MIX_CORRECT_PURE_AV && nb_videos == 0) {  
1708 - mix_ok = true;  
1709 - }  
1710 -  
1711 - // got 1 video and 1 audio, mix ok.  
1712 - if (nb_videos >= 1 && nb_audios >= 1) {  
1713 - mix_ok = true;  
1714 - }  
1715 -  
1716 - if (!mix_ok) {  
1717 - return NULL;  
1718 - }  
1719 -  
1720 - // pop the first msg.  
1721 - std::multimap<int64_t, SrsSharedPtrMessage*>::iterator it = msgs.begin();  
1722 - SrsSharedPtrMessage* msg = it->second;  
1723 - msgs.erase(it);  
1724 -  
1725 - if (msg->is_video()) {  
1726 - nb_videos--;  
1727 - } else {  
1728 - nb_audios--;  
1729 - }  
1730 -  
1731 - return msg;  
1732 -}  
1733 -  
1734 SrsSource::SrsSource() 1734 SrsSource::SrsSource()
1735 { 1735 {
1736 req = NULL; 1736 req = NULL;