1f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch/* 2f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * libjingle 3f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * Copyright 2004--2007, Google Inc. 4f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * 5f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * Redistribution and use in source and binary forms, with or without 6f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * modification, are permitted provided that the following conditions are met: 7f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * 8f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * 1. Redistributions of source code must retain the above copyright notice, 9f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * this list of conditions and the following disclaimer. 10f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * 2. Redistributions in binary form must reproduce the above copyright notice, 11f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * this list of conditions and the following disclaimer in the documentation 12f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * and/or other materials provided with the distribution. 13f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * 3. The name of the author may not be used to endorse or promote products 14f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * derived from this software without specific prior written permission. 15f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * 16f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 17f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 19f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 20f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 21f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 22f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 23f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 24f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 25f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch */ 27f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 28f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#ifndef TALK_SESSION_PHONE_CODEC_H_ 29f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#define TALK_SESSION_PHONE_CODEC_H_ 30f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 31f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#include <string> 32f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 33f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdochnamespace cricket { 34f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickstruct AudioCodec { 36f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch int id; 37f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch std::string name; 38f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch int clockrate; 39f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch int bitrate; 40f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch int channels; 41f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 42f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch int preference; 43f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 44f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch // Creates a codec with the given parameters. 453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick AudioCodec(int pt, const std::string& nm, int cr, int br, int cs, int pr) 46f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch : id(pt), name(nm), clockrate(cr), bitrate(br), 47f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch channels(cs), preference(pr) {} 48f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 49f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch // Creates an empty codec. 503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick AudioCodec() : id(0), clockrate(0), bitrate(0), channels(0), preference(0) {} 51f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 52731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Indicates if this codec is compatible with the specified codec. 53f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool Matches(int payload, const std::string& nm) const; 54731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick bool Matches(const AudioCodec& codec) const; 55f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick static bool Preferable(const AudioCodec& first, const AudioCodec& other) { 57f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return first.preference > other.preference; 58f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 59f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 60f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch std::string ToString() const; 613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick AudioCodec& operator=(const AudioCodec& c) { 633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick this->id = c.id; // id is reserved in objective-c 643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick name = c.name; 653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick clockrate = c.clockrate; 663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bitrate = c.bitrate; 673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick channels = c.channels; 683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick preference = c.preference; 693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return *this; 703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 713345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool operator==(const AudioCodec& c) const { 733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return this->id == c.id && // id is reserved in objective-c 743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick name == c.name && 753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick clockrate == c.clockrate && 763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bitrate == c.bitrate && 773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick channels == c.channels && 783345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick preference == c.preference; 793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 813345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool operator!=(const AudioCodec& c) const { 823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return !(*this == c); 833345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 84f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch}; 85f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 86f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdochstruct VideoCodec { 87f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch int id; 88f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch std::string name; 89f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch int width; 90f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch int height; 91f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch int framerate; 92f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 93f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch int preference; 94f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 95f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch // Creates a codec with the given parameters. 96f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch VideoCodec(int pt, const std::string& nm, int w, int h, int fr, int pr) 97f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch : id(pt), name(nm), width(w), height(h), framerate(fr), preference(pr) {} 98f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 99f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch // Creates an empty codec. 100f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch VideoCodec() 101f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch : id(0), width(0), height(0), framerate(0), preference(0) {} 102f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 103f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch bool Matches(int payload, const std::string& nm) const; 104731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick bool Matches(const VideoCodec& codec) const; 105f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 106f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch static bool Preferable(const VideoCodec& first, const VideoCodec& other) { 107f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch return first.preference > other.preference; 108f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch } 109f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 110f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch std::string ToString() const; 1113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick VideoCodec& operator=(const VideoCodec& c) { 1133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick this->id = c.id; // id is reserved in objective-c 1143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick name = c.name; 1153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick width = c.width; 1163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick height = c.height; 1173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick framerate = c.framerate; 1183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick preference = c.preference; 1193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return *this; 1203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 1213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool operator==(const VideoCodec& c) const { 1233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return this->id == c.id && // id is reserved in objective-c 1243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick name == c.name && 1253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick width == c.width && 1263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick height == c.height && 1273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick framerate == c.framerate && 1283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick preference == c.preference; 1293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 1303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool operator!=(const VideoCodec& c) const { 1323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return !(*this == c); 1333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 1343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}; 1353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickstruct VideoEncoderConfig { 1373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick static const int kDefaultMaxThreads = -1; 1383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick static const int kDefaultCpuProfile = -1; 1393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick VideoEncoderConfig() 1413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick : max_codec(), 1423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick num_threads(kDefaultMaxThreads), 1433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick cpu_profile(kDefaultCpuProfile) { 1443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 1453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick VideoEncoderConfig(const VideoCodec& c) 1473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick : max_codec(c), 1483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick num_threads(kDefaultMaxThreads), 1493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick cpu_profile(kDefaultCpuProfile) { 1503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 1513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick VideoEncoderConfig(const VideoCodec& c, int t, int p) 1533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick : max_codec(c), 1543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick num_threads(t), 1553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick cpu_profile(p) { 1563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 1573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick VideoEncoderConfig& operator=(const VideoEncoderConfig& config) { 1593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick max_codec = config.max_codec; 1603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick num_threads = config.num_threads; 1613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick cpu_profile = config.cpu_profile; 1623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return *this; 1633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 1643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool operator==(const VideoEncoderConfig& config) const { 1663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return max_codec == config.max_codec && 1673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick num_threads == config.num_threads && 1683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick cpu_profile == config.cpu_profile; 1693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 1703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1713345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool operator!=(const VideoEncoderConfig& config) const { 1723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return !(*this == config); 1733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 1743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick VideoCodec max_codec; 1763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int num_threads; 1773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int cpu_profile; 178f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch}; 179f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 180f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch} // namespace cricket 181f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch 182f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#endif // TALK_SESSION_PHONE_CODEC_H_ 183