| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * libjingle | 2  * libjingle | 
| 3  * Copyright 2011 Google Inc. | 3  * Copyright 2011 Google Inc. | 
| 4  * | 4  * | 
| 5  * Redistribution and use in source and binary forms, with or without | 5  * Redistribution and use in source and binary forms, with or without | 
| 6  * modification, are permitted provided that the following conditions are met: | 6  * modification, are permitted provided that the following conditions are met: | 
| 7  * | 7  * | 
| 8  *  1. Redistributions of source code must retain the above copyright notice, | 8  *  1. Redistributions of source code must retain the above copyright notice, | 
| 9  *     this list of conditions and the following disclaimer. | 9  *     this list of conditions and the following disclaimer. | 
| 10  *  2. Redistributions in binary form must reproduce the above copyright notice, | 10  *  2. Redistributions in binary form must reproduce the above copyright notice, | 
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 93 bool MediaStreams::RemoveVideoStream( | 93 bool MediaStreams::RemoveVideoStream( | 
| 94     const StreamSelector& selector) { | 94     const StreamSelector& selector) { | 
| 95   return RemoveStream(&video_, selector); | 95   return RemoveStream(&video_, selector); | 
| 96 } | 96 } | 
| 97 | 97 | 
| 98 bool MediaStreams::RemoveDataStream( | 98 bool MediaStreams::RemoveDataStream( | 
| 99     const StreamSelector& selector) { | 99     const StreamSelector& selector) { | 
| 100   return RemoveStream(&data_, selector); | 100   return RemoveStream(&data_, selector); | 
| 101 } | 101 } | 
| 102 | 102 | 
| 103 static std::string SsrcsToString(const std::vector<uint32>& ssrcs) { | 103 static std::string SsrcsToString(const std::vector<uint32_t>& ssrcs) { | 
| 104   std::ostringstream ost; | 104   std::ostringstream ost; | 
| 105   ost << "ssrcs:["; | 105   ost << "ssrcs:["; | 
| 106   for (std::vector<uint32>::const_iterator it = ssrcs.begin(); | 106   for (std::vector<uint32_t>::const_iterator it = ssrcs.begin(); | 
| 107        it != ssrcs.end(); ++it) { | 107        it != ssrcs.end(); ++it) { | 
| 108     if (it != ssrcs.begin()) { | 108     if (it != ssrcs.begin()) { | 
| 109       ost << ","; | 109       ost << ","; | 
| 110     } | 110     } | 
| 111     ost << *it; | 111     ost << *it; | 
| 112   } | 112   } | 
| 113   ost << "]"; | 113   ost << "]"; | 
| 114   return ost.str(); | 114   return ost.str(); | 
| 115 } | 115 } | 
| 116 | 116 | 
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 154   } | 154   } | 
| 155   if (!cname.empty()) { | 155   if (!cname.empty()) { | 
| 156     ost << "cname:" << cname << ";"; | 156     ost << "cname:" << cname << ";"; | 
| 157   } | 157   } | 
| 158   if (!sync_label.empty()) { | 158   if (!sync_label.empty()) { | 
| 159     ost << "sync_label:" << sync_label; | 159     ost << "sync_label:" << sync_label; | 
| 160   } | 160   } | 
| 161   ost << "}"; | 161   ost << "}"; | 
| 162   return ost.str(); | 162   return ost.str(); | 
| 163 } | 163 } | 
| 164 void StreamParams::GetPrimarySsrcs(std::vector<uint32>* ssrcs) const { | 164 void StreamParams::GetPrimarySsrcs(std::vector<uint32_t>* ssrcs) const { | 
| 165   const SsrcGroup* sim_group = get_ssrc_group(kSimSsrcGroupSemantics); | 165   const SsrcGroup* sim_group = get_ssrc_group(kSimSsrcGroupSemantics); | 
| 166   if (sim_group == NULL) { | 166   if (sim_group == NULL) { | 
| 167     ssrcs->push_back(first_ssrc()); | 167     ssrcs->push_back(first_ssrc()); | 
| 168   } else { | 168   } else { | 
| 169     for (size_t i = 0; i < sim_group->ssrcs.size(); ++i) { | 169     for (size_t i = 0; i < sim_group->ssrcs.size(); ++i) { | 
| 170       ssrcs->push_back(sim_group->ssrcs[i]); | 170       ssrcs->push_back(sim_group->ssrcs[i]); | 
| 171     } | 171     } | 
| 172   } | 172   } | 
| 173 } | 173 } | 
| 174 | 174 | 
| 175 void StreamParams::GetFidSsrcs(const std::vector<uint32>& primary_ssrcs, | 175 void StreamParams::GetFidSsrcs(const std::vector<uint32_t>& primary_ssrcs, | 
| 176                                std::vector<uint32>* fid_ssrcs) const { | 176                                std::vector<uint32_t>* fid_ssrcs) const { | 
| 177   for (size_t i = 0; i < primary_ssrcs.size(); ++i) { | 177   for (size_t i = 0; i < primary_ssrcs.size(); ++i) { | 
| 178     uint32 fid_ssrc; | 178     uint32_t fid_ssrc; | 
| 179     if (GetFidSsrc(primary_ssrcs[i], &fid_ssrc)) { | 179     if (GetFidSsrc(primary_ssrcs[i], &fid_ssrc)) { | 
| 180       fid_ssrcs->push_back(fid_ssrc); | 180       fid_ssrcs->push_back(fid_ssrc); | 
| 181     } | 181     } | 
| 182   } | 182   } | 
| 183 } | 183 } | 
| 184 | 184 | 
| 185 bool StreamParams::AddSecondarySsrc(const std::string& semantics, | 185 bool StreamParams::AddSecondarySsrc(const std::string& semantics, | 
| 186                                     uint32 primary_ssrc, | 186                                     uint32_t primary_ssrc, | 
| 187                                     uint32 secondary_ssrc) { | 187                                     uint32_t secondary_ssrc) { | 
| 188   if (!has_ssrc(primary_ssrc)) { | 188   if (!has_ssrc(primary_ssrc)) { | 
| 189     return false; | 189     return false; | 
| 190   } | 190   } | 
| 191 | 191 | 
| 192   ssrcs.push_back(secondary_ssrc); | 192   ssrcs.push_back(secondary_ssrc); | 
| 193   std::vector<uint32> ssrc_vector; | 193   std::vector<uint32_t> ssrc_vector; | 
| 194   ssrc_vector.push_back(primary_ssrc); | 194   ssrc_vector.push_back(primary_ssrc); | 
| 195   ssrc_vector.push_back(secondary_ssrc); | 195   ssrc_vector.push_back(secondary_ssrc); | 
| 196   SsrcGroup ssrc_group = SsrcGroup(semantics, ssrc_vector); | 196   SsrcGroup ssrc_group = SsrcGroup(semantics, ssrc_vector); | 
| 197   ssrc_groups.push_back(ssrc_group); | 197   ssrc_groups.push_back(ssrc_group); | 
| 198   return true; | 198   return true; | 
| 199 } | 199 } | 
| 200 | 200 | 
| 201 bool StreamParams::GetSecondarySsrc(const std::string& semantics, | 201 bool StreamParams::GetSecondarySsrc(const std::string& semantics, | 
| 202                                     uint32 primary_ssrc, | 202                                     uint32_t primary_ssrc, | 
| 203                                     uint32* secondary_ssrc) const { | 203                                     uint32_t* secondary_ssrc) const { | 
| 204   for (std::vector<SsrcGroup>::const_iterator it = ssrc_groups.begin(); | 204   for (std::vector<SsrcGroup>::const_iterator it = ssrc_groups.begin(); | 
| 205        it != ssrc_groups.end(); ++it) { | 205        it != ssrc_groups.end(); ++it) { | 
| 206     if (it->has_semantics(semantics) && | 206     if (it->has_semantics(semantics) && | 
| 207           it->ssrcs.size() >= 2 && | 207           it->ssrcs.size() >= 2 && | 
| 208           it->ssrcs[0] == primary_ssrc) { | 208           it->ssrcs[0] == primary_ssrc) { | 
| 209       *secondary_ssrc = it->ssrcs[1]; | 209       *secondary_ssrc = it->ssrcs[1]; | 
| 210       return true; | 210       return true; | 
| 211     } | 211     } | 
| 212   } | 212   } | 
| 213   return false; | 213   return false; | 
| 214 } | 214 } | 
| 215 | 215 | 
| 216 bool IsOneSsrcStream(const StreamParams& sp) { | 216 bool IsOneSsrcStream(const StreamParams& sp) { | 
| 217   if (sp.ssrcs.size() == 1 && sp.ssrc_groups.empty()) { | 217   if (sp.ssrcs.size() == 1 && sp.ssrc_groups.empty()) { | 
| 218     return true; | 218     return true; | 
| 219   } | 219   } | 
| 220   if (sp.ssrcs.size() == 2) { | 220   if (sp.ssrcs.size() == 2) { | 
| 221     const SsrcGroup* fid_group = sp.get_ssrc_group(kFidSsrcGroupSemantics); | 221     const SsrcGroup* fid_group = sp.get_ssrc_group(kFidSsrcGroupSemantics); | 
| 222     if (fid_group != NULL) { | 222     if (fid_group != NULL) { | 
| 223       return (sp.ssrcs == fid_group->ssrcs); | 223       return (sp.ssrcs == fid_group->ssrcs); | 
| 224     } | 224     } | 
| 225   } | 225   } | 
| 226   return false; | 226   return false; | 
| 227 } | 227 } | 
| 228 | 228 | 
| 229 static void RemoveFirst(std::list<uint32>* ssrcs, uint32 value) { | 229 static void RemoveFirst(std::list<uint32_t>* ssrcs, uint32_t value) { | 
| 230   std::list<uint32>::iterator it = | 230   std::list<uint32_t>::iterator it = | 
| 231       std::find(ssrcs->begin(), ssrcs->end(), value); | 231       std::find(ssrcs->begin(), ssrcs->end(), value); | 
| 232   if (it != ssrcs->end()) { | 232   if (it != ssrcs->end()) { | 
| 233     ssrcs->erase(it); | 233     ssrcs->erase(it); | 
| 234   } | 234   } | 
| 235 } | 235 } | 
| 236 | 236 | 
| 237 bool IsSimulcastStream(const StreamParams& sp) { | 237 bool IsSimulcastStream(const StreamParams& sp) { | 
| 238   const SsrcGroup* const sg = sp.get_ssrc_group(kSimSsrcGroupSemantics); | 238   const SsrcGroup* const sg = sp.get_ssrc_group(kSimSsrcGroupSemantics); | 
| 239   if (sg == NULL || sg->ssrcs.size() < 2) { | 239   if (sg == NULL || sg->ssrcs.size() < 2) { | 
| 240     return false; | 240     return false; | 
| 241   } | 241   } | 
| 242   // Start with all StreamParams SSRCs. Remove simulcast SSRCs (from sg) and | 242   // Start with all StreamParams SSRCs. Remove simulcast SSRCs (from sg) and | 
| 243   // RTX SSRCs. If we still have SSRCs left, we don't know what they're for. | 243   // RTX SSRCs. If we still have SSRCs left, we don't know what they're for. | 
| 244   // Also we remove first-found SSRCs only. So duplicates should lead to errors. | 244   // Also we remove first-found SSRCs only. So duplicates should lead to errors. | 
| 245   std::list<uint32> sp_ssrcs(sp.ssrcs.begin(), sp.ssrcs.end()); | 245   std::list<uint32_t> sp_ssrcs(sp.ssrcs.begin(), sp.ssrcs.end()); | 
| 246   for (size_t i = 0; i < sg->ssrcs.size(); ++i) { | 246   for (size_t i = 0; i < sg->ssrcs.size(); ++i) { | 
| 247     RemoveFirst(&sp_ssrcs, sg->ssrcs[i]); | 247     RemoveFirst(&sp_ssrcs, sg->ssrcs[i]); | 
| 248   } | 248   } | 
| 249   for (size_t i = 0; i < sp.ssrc_groups.size(); ++i) { | 249   for (size_t i = 0; i < sp.ssrc_groups.size(); ++i) { | 
| 250     const SsrcGroup& group = sp.ssrc_groups[i]; | 250     const SsrcGroup& group = sp.ssrc_groups[i]; | 
| 251     if (group.semantics.compare(kFidSsrcGroupSemantics) != 0 || | 251     if (group.semantics.compare(kFidSsrcGroupSemantics) != 0 || | 
| 252         group.ssrcs.size() != 2) { | 252         group.ssrcs.size() != 2) { | 
| 253       continue; | 253       continue; | 
| 254     } | 254     } | 
| 255     RemoveFirst(&sp_ssrcs, group.ssrcs[1]); | 255     RemoveFirst(&sp_ssrcs, group.ssrcs[1]); | 
| 256   } | 256   } | 
| 257   // If there's SSRCs left that we don't know how to handle, we bail out. | 257   // If there's SSRCs left that we don't know how to handle, we bail out. | 
| 258   return sp_ssrcs.size() == 0; | 258   return sp_ssrcs.size() == 0; | 
| 259 } | 259 } | 
| 260 | 260 | 
| 261 }  // namespace cricket | 261 }  // namespace cricket | 
| OLD | NEW | 
|---|