audio_codecs.cc 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. // Copyright 2016 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "media/base/audio_codecs.h"
  5. #include <ostream>
  6. #include "base/strings/string_util.h"
  7. namespace media {
  8. // These names come from src/third_party/ffmpeg/libavcodec/codec_desc.c
  9. std::string GetCodecName(AudioCodec codec) {
  10. switch (codec) {
  11. case AudioCodec::kUnknown:
  12. return "unknown";
  13. case AudioCodec::kAAC:
  14. return "aac";
  15. case AudioCodec::kMP3:
  16. return "mp3";
  17. case AudioCodec::kPCM:
  18. case AudioCodec::kPCM_S16BE:
  19. case AudioCodec::kPCM_S24BE:
  20. return "pcm";
  21. case AudioCodec::kVorbis:
  22. return "vorbis";
  23. case AudioCodec::kFLAC:
  24. return "flac";
  25. case AudioCodec::kAMR_NB:
  26. return "amr_nb";
  27. case AudioCodec::kAMR_WB:
  28. return "amr_wb";
  29. case AudioCodec::kPCM_MULAW:
  30. return "pcm_mulaw";
  31. case AudioCodec::kGSM_MS:
  32. return "gsm_ms";
  33. case AudioCodec::kOpus:
  34. return "opus";
  35. case AudioCodec::kPCM_ALAW:
  36. return "pcm_alaw";
  37. case AudioCodec::kEAC3:
  38. return "eac3";
  39. case AudioCodec::kALAC:
  40. return "alac";
  41. case AudioCodec::kAC3:
  42. return "ac3";
  43. case AudioCodec::kMpegHAudio:
  44. return "mpeg-h-audio";
  45. case AudioCodec::kDTS:
  46. return "dts";
  47. case AudioCodec::kDTSXP2:
  48. return "dtsx-p2";
  49. }
  50. }
  51. std::string GetProfileName(AudioCodecProfile profile) {
  52. switch (profile) {
  53. case AudioCodecProfile::kUnknown:
  54. return "unknown";
  55. case AudioCodecProfile::kXHE_AAC:
  56. return "xhe-aac";
  57. }
  58. }
  59. AudioCodec StringToAudioCodec(const std::string& codec_id) {
  60. if (codec_id == "aac")
  61. return AudioCodec::kAAC;
  62. if (codec_id == "ac-3" || codec_id == "mp4a.A5" || codec_id == "mp4a.a5")
  63. return AudioCodec::kAC3;
  64. if (codec_id == "ec-3" || codec_id == "mp4a.A6" || codec_id == "mp4a.a6")
  65. return AudioCodec::kEAC3;
  66. if (codec_id == "dtsc")
  67. return AudioCodec::kDTS;
  68. if (codec_id == "dtsx")
  69. return AudioCodec::kDTSXP2;
  70. if (codec_id == "mp3" || codec_id == "mp4a.69" || codec_id == "mp4a.6B")
  71. return AudioCodec::kMP3;
  72. if (codec_id == "alac")
  73. return AudioCodec::kALAC;
  74. if (codec_id == "flac")
  75. return AudioCodec::kFLAC;
  76. if (base::StartsWith(codec_id, "mhm1.", base::CompareCase::SENSITIVE) ||
  77. base::StartsWith(codec_id, "mha1.", base::CompareCase::SENSITIVE)) {
  78. return AudioCodec::kMpegHAudio;
  79. }
  80. if (codec_id == "opus")
  81. return AudioCodec::kOpus;
  82. if (codec_id == "vorbis")
  83. return AudioCodec::kVorbis;
  84. if (codec_id == "dtsc")
  85. return AudioCodec::kDTS;
  86. if (codec_id == "dtsx")
  87. return AudioCodec::kDTSXP2;
  88. if (base::StartsWith(codec_id, "mp4a.40.", base::CompareCase::SENSITIVE))
  89. return AudioCodec::kAAC;
  90. return AudioCodec::kUnknown;
  91. }
  92. std::ostream& operator<<(std::ostream& os, const AudioCodec& codec) {
  93. return os << GetCodecName(codec);
  94. }
  95. } // namespace media