Skip to content

Commit

Permalink
Add DTS Express Audio Enumerations and Definitions under
Browse files Browse the repository at this point in the history
ENABLE_PLATFORM_DTS_AUDIO build flag.

DTS Express will become an additional supported audio type, enabled only
under the existing ENABLE_PLATFORM_DTS_AUDIO build flag.  There will be
no change in behavior when this build flag is not enabled.

Bug: 1413791
Change-Id: Ib24ccc70fb3c89e0ed026dc8a43c39a4eaafc89e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4228514
Reviewed-by: Mark Foltz <mfoltz@chromium.org>
Reviewed-by: Xiaohan Wang <xhwang@chromium.org>
Commit-Queue: Dale Curtis <dalecurtis@chromium.org>
Reviewed-by: Yuchen Liu <yucliu@chromium.org>
Reviewed-by: Robert Sesek <rsesek@chromium.org>
Reviewed-by: Dale Curtis <dalecurtis@chromium.org>
Reviewed-by: Will Cassella <cassew@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1104039}
  • Loading branch information
Roy-Funderburk authored and Chromium LUCI CQ committed Feb 10, 2023
1 parent 476b49b commit c6ac8c4
Show file tree
Hide file tree
Showing 34 changed files with 124 additions and 37 deletions.
1 change: 1 addition & 0 deletions chrome/renderer/media/chrome_key_systems.cc
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,7 @@ SupportedCodecs GetSupportedCodecs(const media::CdmCapability& capability,
#if BUILDFLAG(ENABLE_PLATFORM_DTS_AUDIO)
case media::AudioCodec::kDTS:
supported_codecs |= media::EME_CODEC_DTS;
supported_codecs |= media::EME_CODEC_DTSE;
supported_codecs |= media::EME_CODEC_DTSXP2;
break;
#endif // BUILDFLAG(ENABLE_PLATFORM_DTS_AUDIO)
Expand Down
2 changes: 2 additions & 0 deletions chromecast/media/base/media_codec_support.cc
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ AudioCodec ToCastAudioCodec(const ::media::AudioCodec codec) {
return kCodecDTS;
case ::media::AudioCodec::kDTSXP2:
return kCodecDTSXP2;
case ::media::AudioCodec::kDTSE:
return kCodecDTSE;
case ::media::AudioCodec::kFLAC:
return kCodecFLAC;
case ::media::AudioCodec::kMpegHAudio:
Expand Down
5 changes: 5 additions & 0 deletions chromecast/media/cma/base/decoder_config_adapter.cc
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@ AudioCodec ToAudioCodec(const ::media::AudioCodec audio_codec) {
return kCodecDTS;
case ::media::AudioCodec::kDTSXP2:
return kCodecDTSXP2;
case ::media::AudioCodec::kDTSE:
return kCodecDTSE;
default:
LOG(ERROR) << "Unsupported audio codec " << audio_codec;
}
Expand All @@ -60,6 +62,7 @@ SampleFormat ToSampleFormat(const ::media::SampleFormat sample_format) {
case ::media::kSampleFormatDtsxP2:
case ::media::kSampleFormatMpegHAudio:
case ::media::kSampleFormatIECDts:
case ::media::kSampleFormatDtse:
return kUnknownSampleFormat;
case ::media::kSampleFormatU8:
return kSampleFormatU8;
Expand Down Expand Up @@ -141,6 +144,8 @@ ::media::AudioCodec ToMediaAudioCodec(
return ::media::AudioCodec::kDTS;
case kCodecDTSXP2:
return ::media::AudioCodec::kDTSXP2;
case kCodecDTSE:
return ::media::AudioCodec::kDTSE;
default:
return ::media::AudioCodec::kUnknown;
}
Expand Down
2 changes: 2 additions & 0 deletions chromecast/media/common/base/decoder_config_logging.cc
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ std::ostream& operator<<(std::ostream& stream,
return stream << "DTS";
case ::chromecast::media::kCodecDTSXP2:
return stream << "DTS:X Profile 2";
case ::chromecast::media::kCodecDTSE:
return stream << "DTS Express";
case ::chromecast::media::kCodecFLAC:
return stream << "FLAC";
case ::chromecast::media::kCodecMpegHAudio:
Expand Down
5 changes: 5 additions & 0 deletions chromecast/media/mojom/decoder_config_mojom_traits.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ struct mojo::EnumTraits<chromecast::media::mojom::AudioCodec,
return chromecast::media::mojom::AudioCodec::kCodecDTS;
case (chromecast::media::AudioCodec::kCodecDTSXP2):
return chromecast::media::mojom::AudioCodec::kCodecDTSXP2;
case (chromecast::media::AudioCodec::kCodecDTSE):
return chromecast::media::mojom::AudioCodec::kCodecDTSE;
case (chromecast::media::AudioCodec::kCodecFLAC):
return chromecast::media::mojom::AudioCodec::kCodecFLAC;
case (chromecast::media::AudioCodec::kCodecMpegHAudio):
Expand Down Expand Up @@ -83,6 +85,9 @@ struct mojo::EnumTraits<chromecast::media::mojom::AudioCodec,
case (chromecast::media::mojom::AudioCodec::kCodecDTSXP2):
*output = chromecast::media::AudioCodec::kCodecDTSXP2;
return true;
case (chromecast::media::mojom::AudioCodec::kCodecDTSE):
*output = chromecast::media::AudioCodec::kCodecDTSE;
return true;
case (chromecast::media::mojom::AudioCodec::kCodecFLAC):
*output = chromecast::media::AudioCodec::kCodecFLAC;
return true;
Expand Down
1 change: 1 addition & 0 deletions chromecast/media/mojom/media_types.mojom
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ enum AudioCodec {
kCodecAC3,
kCodecDTS,
kCodecDTSXP2,
kCodecDTSE,
kCodecFLAC,
kCodecMpegHAudio,
};
Expand Down
3 changes: 2 additions & 1 deletion chromecast/public/media/decoder_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,10 @@ enum AudioCodec : int {
kCodecFLAC,
kCodecMpegHAudio,
kCodecDTSXP2,
kCodecDTSE,

kAudioCodecMin = kAudioCodecUnknown,
kAudioCodecMax = kCodecDTSXP2,
kAudioCodecMax = kCodecDTSE,
};

enum class ChannelLayout {
Expand Down
3 changes: 2 additions & 1 deletion chromecast/renderer/media/key_systems_cast.cc
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,8 @@ SupportedCodecs GetCastEmeSupportedCodecs() {
#endif // BUILDFLAG(ENABLE_PLATFORM_AC3_EAC3_AUDIO)

#if BUILDFLAG(ENABLE_PLATFORM_DTS_AUDIO)
codecs |= ::media::EME_CODEC_DTS | ::media::EME_CODEC_DTSXP2;
codecs |= ::media::EME_CODEC_DTS | ::media::EME_CODEC_DTSE |
::media::EME_CODEC_DTSXP2;
#endif // BUILDFLAG(ENABLE_PLATFORM_DTS_AUDIO)

#if BUILDFLAG(ENABLE_PLATFORM_MPEG_H_AUDIO)
Expand Down
1 change: 1 addition & 0 deletions components/cdm/browser/cdm_message_filter_android.cc
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ const CodecInfo<media::AudioCodec> kMP4AudioCodecsToQuery[] = {
#if BUILDFLAG(ENABLE_PLATFORM_DTS_AUDIO)
{media::EME_CODEC_DTS, media::AudioCodec::kDTS},
{media::EME_CODEC_DTSXP2, media::AudioCodec::kDTSXP2},
{media::EME_CODEC_DTSE, media::AudioCodec::kDTSE},
#endif
#endif // BUILDFLAG(USE_PROPRIETARY_CODECS)
};
Expand Down
5 changes: 5 additions & 0 deletions media/base/android/media_codec_util.cc
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ const char kVp8MimeType[] = "video/x-vnd.on2.vp8";
const char kVp9MimeType[] = "video/x-vnd.on2.vp9";
const char kAv1MimeType[] = "video/av01";
const char kDtsMimeType[] = "audio/vnd.dts";
const char kDtseMimeType[] = "audio/vnd.dts;profile=lbr";
const char kDtsxP2MimeType[] = "audio/vnd.dts.uhd;profile=p2";
} // namespace

Expand Down Expand Up @@ -139,6 +140,8 @@ std::string MediaCodecUtil::CodecToAndroidMimeType(AudioCodec codec,
return kEac3MimeType;
case AudioCodec::kDTS:
return kDtsMimeType;
case AudioCodec::kDTSE:
return kDtseMimeType;
case AudioCodec::kDTSXP2:
return kDtsxP2MimeType;
default:
Expand Down Expand Up @@ -272,6 +275,8 @@ bool MediaCodecUtil::IsPassthroughAudioFormat(AudioCodec codec) {
switch (codec) {
case AudioCodec::kAC3:
case AudioCodec::kEAC3:
case AudioCodec::kDTS:
case AudioCodec::kDTSXP2:
case AudioCodec::kMpegHAudio:
return true;
default:
Expand Down
1 change: 1 addition & 0 deletions media/base/audio_buffer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -532,6 +532,7 @@ void AudioBuffer::TrimRange(int start, int end) {
case kSampleFormatDts:
case kSampleFormatDtsxP2:
case kSampleFormatIECDts:
case kSampleFormatDtse:
NOTREACHED() << "Invalid sample format!";
}
} else {
Expand Down
11 changes: 9 additions & 2 deletions media/base/audio_codecs.cc
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,8 @@ std::string GetCodecName(AudioCodec codec) {
return "dts";
case AudioCodec::kDTSXP2:
return "dtsx-p2";
case AudioCodec::kDTSE:
return "dtse";
}
}

Expand All @@ -70,10 +72,15 @@ AudioCodec StringToAudioCodec(const std::string& codec_id) {
return AudioCodec::kAC3;
if (codec_id == "ec-3" || codec_id == "mp4a.A6" || codec_id == "mp4a.a6")
return AudioCodec::kEAC3;
if (codec_id == "dtsc")
if (codec_id == "dtsc" || codec_id == "mp4a.A9" || codec_id == "mp4a.a9") {
return AudioCodec::kDTS;
if (codec_id == "dtsx")
}
if (codec_id == "dtse" || codec_id == "mp4a.AC" || codec_id == "mp4a.ac") {
return AudioCodec::kDTSE;
}
if (codec_id == "dtsx" || codec_id == "mp4a.B2" || codec_id == "mp4a.b2") {
return AudioCodec::kDTSXP2;
}
if (codec_id == "mp3" || codec_id == "mp4a.69" || codec_id == "mp4a.6B")
return AudioCodec::kMP3;
if (codec_id == "alac")
Expand Down
3 changes: 2 additions & 1 deletion media/base/audio_codecs.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,14 @@ enum class AudioCodec {
kMpegHAudio = 17,
kDTS = 18,
kDTSXP2 = 19,
kDTSE = 20,
// DO NOT ADD RANDOM AUDIO CODECS!
//
// The only acceptable time to add a new codec is if there is production code
// that uses said codec in the same CL.

// Must always be equal to the largest entry ever logged.
kMaxValue = kDTSXP2,
kMaxValue = kDTSE,
};

enum class AudioCodecProfile {
Expand Down
1 change: 1 addition & 0 deletions media/base/demuxer_memory_limit_cast.cc
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ size_t GetDemuxerStreamAudioMemoryLimit(
case AudioCodec::kAC3:
case AudioCodec::kDTS:
case AudioCodec::kDTSXP2:
case AudioCodec::kDTSE:
case AudioCodec::kMpegHAudio:
return internal::kDemuxerStreamAudioMemoryLimitMedium;
case AudioCodec::kAAC:
Expand Down
3 changes: 2 additions & 1 deletion media/base/eme_constants.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ enum EmeCodec : uint32_t {
EME_CODEC_HEVC_PROFILE_MAIN10 = 1 << 19,
EME_CODEC_DTS = 1 << 20,
EME_CODEC_DTSXP2 = 1 << 21,
EME_CODEC_DTSE = 1 << 22,
};

// *_ALL values should only be used for masking, do not use them to specify
Expand All @@ -73,7 +74,7 @@ constexpr SupportedCodecs GetMp4AudioCodecs() {
codecs |= EME_CODEC_AC3 | EME_CODEC_EAC3;
#endif // BUILDFLAG(ENABLE_PLATFORM_AC3_EAC3_AUDIO)
#if BUILDFLAG(ENABLE_PLATFORM_DTS_AUDIO)
codecs |= EME_CODEC_DTS | EME_CODEC_DTSXP2;
codecs |= EME_CODEC_DTS | EME_CODEC_DTSXP2 | EME_CODEC_DTSE;
#endif // BUILDFLAG(ENABLE_PLATFORM_DTS_AUDIO)
#if BUILDFLAG(ENABLE_PLATFORM_MPEG_H_AUDIO)
codecs |= EME_CODEC_MPEG_H_AUDIO;
Expand Down
2 changes: 2 additions & 0 deletions media/base/key_systems.cc
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,8 @@ EmeCodec ToAudioEmeCodec(AudioCodec codec) {
return EME_CODEC_DTS;
case AudioCodec::kDTSXP2:
return EME_CODEC_DTSXP2;
case AudioCodec::kDTSE:
return EME_CODEC_DTSE;
default:
DVLOG(1) << "Unsupported AudioCodec " << codec;
return EME_CODEC_NONE;
Expand Down
7 changes: 7 additions & 0 deletions media/base/mime_util_internal.cc
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,9 @@ const StringToCodecMap& GetStringToCodecMap() {
{"dtsc", MimeUtil::DTS},
{"mp4a.a9", MimeUtil::DTS},
{"mp4a.A9", MimeUtil::DTS},
{"dtse", MimeUtil::DTSE},
{"mp4a.ac", MimeUtil::DTSE},
{"mp4a.AC", MimeUtil::DTSE},
{"dtsx", MimeUtil::DTSXP2},
{"mp4a.b2", MimeUtil::DTSXP2},
{"mp4a.B2", MimeUtil::DTSXP2},
Expand Down Expand Up @@ -192,6 +195,8 @@ AudioCodec MimeUtilToAudioCodec(MimeUtil::Codec codec) {
return AudioCodec::kDTS;
case MimeUtil::DTSXP2:
return AudioCodec::kDTSXP2;
case MimeUtil::DTSE:
return AudioCodec::kDTSE;
default:
break;
}
Expand Down Expand Up @@ -353,6 +358,7 @@ void MimeUtil::AddSupportedMediaFormats() {
#if BUILDFLAG(ENABLE_PLATFORM_DTS_AUDIO)
mp4_audio_codecs.emplace(DTS);
mp4_audio_codecs.emplace(DTSXP2);
mp4_audio_codecs.emplace(DTSE);
#endif // BUILDFLAG(ENABLE_PLATFORM_DTS_AUDIO)

CodecSet mp4_codecs(mp4_audio_codecs);
Expand Down Expand Up @@ -665,6 +671,7 @@ bool MimeUtil::IsCodecSupportedOnAndroid(Codec codec,

case DTS:
case DTSXP2:
case DTSE:
#if BUILDFLAG(ENABLE_PLATFORM_DTS_AUDIO)
return true;
#else
Expand Down
3 changes: 2 additions & 1 deletion media/base/mime_util_internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,8 @@ class MEDIA_EXPORT MimeUtil {
MPEG_H_AUDIO,
DTS,
DTSXP2,
LAST_CODEC = DTSXP2
DTSE,
LAST_CODEC = DTSE
};

// Platform configuration structure. Controls which codecs are supported at
Expand Down
2 changes: 2 additions & 0 deletions media/base/mime_util_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -593,6 +593,7 @@ TEST(IsCodecSupportedOnAndroidTest, EncryptedCodecBehavior) {

case MimeUtil::DTS:
case MimeUtil::DTSXP2:
case MimeUtil::DTSE:
EXPECT_EQ(BUILDFLAG(ENABLE_PLATFORM_DTS_AUDIO), result);
break;
}
Expand Down Expand Up @@ -659,6 +660,7 @@ TEST(IsCodecSupportedOnAndroidTest, ClearCodecBehavior) {

case MimeUtil::DTS:
case MimeUtil::DTSXP2:
case MimeUtil::DTSE:
EXPECT_EQ(BUILDFLAG(ENABLE_PLATFORM_DTS_AUDIO), result);
break;
}
Expand Down
6 changes: 6 additions & 0 deletions media/base/sample_format.cc
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ int SampleFormatToBytesPerChannel(SampleFormat sample_format) {
case kSampleFormatMpegHAudio:
case kSampleFormatDts:
case kSampleFormatDtsxP2:
case kSampleFormatDtse:
return 1;
case kSampleFormatS16:
case kSampleFormatPlanarS16:
Expand Down Expand Up @@ -76,6 +77,8 @@ const char* SampleFormatToString(SampleFormat sample_format) {
return "Compressed DTSXP2 bitstream";
case kSampleFormatIECDts:
return "IEC-61937 encapsulated DTS bitstream";
case kSampleFormatDtse:
return "Compressed DTS Express bitstream";
}
NOTREACHED() << "Invalid sample format provided: " << sample_format;
return "";
Expand All @@ -100,6 +103,7 @@ bool IsPlanar(SampleFormat sample_format) {
case kSampleFormatDts:
case kSampleFormatDtsxP2:
case kSampleFormatIECDts:
case kSampleFormatDtse:
return false;
}

Expand All @@ -120,6 +124,7 @@ bool IsInterleaved(SampleFormat sample_format) {
case kSampleFormatDts:
case kSampleFormatDtsxP2:
case kSampleFormatIECDts:
case kSampleFormatDtse:
return true;
case kUnknownSampleFormat:
case kSampleFormatPlanarU8:
Expand Down Expand Up @@ -156,6 +161,7 @@ bool IsBitstream(SampleFormat sample_format) {
case kSampleFormatPlanarS16:
case kSampleFormatPlanarF32:
case kSampleFormatPlanarS32:
case kSampleFormatDtse:
return false;
}

Expand Down
3 changes: 2 additions & 1 deletion media/base/sample_format.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,10 @@ enum SampleFormat {
kSampleFormatDts, // Compressed DTS audio bitstream.
kSampleFormatDtsxP2, // Compressed DTSX audio bitstream.
kSampleFormatIECDts, // IEC-61937 encapsulated DTS audio bitstream.
kSampleFormatDtse, // Compressed DTS Express audio bitstream.

// Must always be equal to largest value ever logged.
kSampleFormatMax = kSampleFormatIECDts,
kSampleFormatMax = kSampleFormatDtse,
};

// Returns the number of bytes used per channel for the specified
Expand Down
2 changes: 2 additions & 0 deletions media/base/supported_types.cc
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,7 @@ bool IsAudioCodecProprietary(AudioCodec codec) {
case AudioCodec::kMpegHAudio:
case AudioCodec::kDTS:
case AudioCodec::kDTSXP2:
case AudioCodec::kDTSE:
return true;

case AudioCodec::kFLAC:
Expand Down Expand Up @@ -384,6 +385,7 @@ bool IsDefaultSupportedAudioType(const AudioType& type) {
return false;
case AudioCodec::kDTS:
case AudioCodec::kDTSXP2:
case AudioCodec::kDTSE:
#if BUILDFLAG(ENABLE_PLATFORM_DTS_AUDIO)
return true;
#else
Expand Down
1 change: 1 addition & 0 deletions media/filters/android/media_codec_audio_decoder.cc
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,7 @@ void MediaCodecAudioDecoder::Initialize(const AudioDecoderConfig& config,
case AudioCodec::kEAC3:
case AudioCodec::kDTS:
case AudioCodec::kDTSXP2:
case AudioCodec::kDTSE:
case AudioCodec::kMpegHAudio:
is_passthrough_ = sample_format_ != kUnknownSampleFormat;
// Check if MediaCodec Library supports decoding of the sample format.
Expand Down
1 change: 1 addition & 0 deletions media/filters/audio_renderer_algorithm_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@ class AudioRendererAlgorithmTest : public testing::Test {
1, 1, frame_size, kNoTimestamp);
break;
case kSampleFormatDts:
case kSampleFormatDtse:
case kSampleFormatDtsxP2:
buffer = MakeBitstreamAudioBuffer(
sample_format_, channel_layout_,
Expand Down

0 comments on commit c6ac8c4

Please sign in to comment.