1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* vim:set ts=2 sw=2 sts=2 et cindent: */ 3 /* This Source Code Form is subject to the terms of the Mozilla Public 4 * License, v. 2.0. If a copy of the MPL was not distributed with this 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 6 7 #include "AgnosticDecoderModule.h" 8 #include "mozilla/Logging.h" 9 #include "OpusDecoder.h" 10 #include "VorbisDecoder.h" 11 #include "VPXDecoder.h" 12 #include "WAVDecoder.h" 13 #include "TheoraDecoder.h" 14 15 namespace mozilla { 16 17 bool SupportsMimeType(const nsACString & aMimeType,DecoderDoctorDiagnostics * aDiagnostics) const18AgnosticDecoderModule::SupportsMimeType(const nsACString& aMimeType, 19 DecoderDoctorDiagnostics* aDiagnostics) const 20 { 21 bool supports = 22 VPXDecoder::IsVPX(aMimeType) || 23 OpusDataDecoder::IsOpus(aMimeType) || 24 VorbisDataDecoder::IsVorbis(aMimeType) || 25 WaveDataDecoder::IsWave(aMimeType) || 26 TheoraDecoder::IsTheora(aMimeType); 27 MOZ_LOG(sPDMLog, LogLevel::Debug, ("Agnostic decoder %s requested type", 28 supports ? "supports" : "rejects")); 29 return supports; 30 } 31 32 already_AddRefed<MediaDataDecoder> CreateVideoDecoder(const CreateDecoderParams & aParams)33AgnosticDecoderModule::CreateVideoDecoder(const CreateDecoderParams& aParams) 34 { 35 RefPtr<MediaDataDecoder> m; 36 37 if (VPXDecoder::IsVPX(aParams.mConfig.mMimeType)) { 38 m = new VPXDecoder(aParams); 39 } else if (TheoraDecoder::IsTheora(aParams.mConfig.mMimeType)) { 40 m = new TheoraDecoder(aParams); 41 } 42 43 return m.forget(); 44 } 45 46 already_AddRefed<MediaDataDecoder> CreateAudioDecoder(const CreateDecoderParams & aParams)47AgnosticDecoderModule::CreateAudioDecoder(const CreateDecoderParams& aParams) 48 { 49 RefPtr<MediaDataDecoder> m; 50 51 const TrackInfo& config = aParams.mConfig; 52 if (VorbisDataDecoder::IsVorbis(config.mMimeType)) { 53 m = new VorbisDataDecoder(aParams); 54 } else if (OpusDataDecoder::IsOpus(config.mMimeType)) { 55 m = new OpusDataDecoder(aParams); 56 } else if (WaveDataDecoder::IsWave(config.mMimeType)) { 57 m = new WaveDataDecoder(aParams); 58 } 59 60 return m.forget(); 61 } 62 63 } // namespace mozilla 64