Understanding Codecs: Complexity, Hardware Support, MOS, and Negotiation