/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim:set ts=2 sw=2 sts=2 et cindent: */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "FFmpegEncoderModule.h" #include "FFmpegLog.h" #include "FFmpegAudioEncoder.h" #include "FFmpegVideoEncoder.h" // This must be the last header included #include "FFmpegLibs.h" namespace mozilla { template bool FFmpegEncoderModule::Supports(const EncoderConfig& aConfig) const { if (!CanLikelyEncode(aConfig)) { return false; } // We only support L1T2 and L1T3 ScalabilityMode in VP8 and VP9 encoders via // libvpx for now. if ((aConfig.mScalabilityMode != ScalabilityMode::None)) { if (aConfig.mCodec != CodecType::VP8 && aConfig.mCodec != CodecType::VP9) { return false; } } return SupportsCodec(aConfig.mCodec) != AV_CODEC_ID_NONE; } template bool FFmpegEncoderModule::SupportsCodec(CodecType aCodec) const { return GetFFmpegEncoderCodecId(aCodec) != AV_CODEC_ID_NONE; } template already_AddRefed FFmpegEncoderModule::CreateVideoEncoder( const EncoderConfig& aConfig, const RefPtr& aTaskQueue) const { AVCodecID codecId = GetFFmpegEncoderCodecId(aConfig.mCodec); if (codecId == AV_CODEC_ID_NONE) { FFMPEGV_LOG("No ffmpeg encoder for %s", GetCodecTypeString(aConfig.mCodec)); return nullptr; } RefPtr encoder = new FFmpegVideoEncoder(mLib, codecId, aTaskQueue, aConfig); FFMPEGV_LOG("ffmpeg %s encoder: %s has been created", GetCodecTypeString(aConfig.mCodec), encoder->GetDescriptionName().get()); return encoder.forget(); } template already_AddRefed FFmpegEncoderModule::CreateAudioEncoder( const EncoderConfig& aConfig, const RefPtr& aTaskQueue) const { AVCodecID codecId = GetFFmpegEncoderCodecId(aConfig.mCodec); if (codecId == AV_CODEC_ID_NONE) { FFMPEGV_LOG("No ffmpeg encoder for %s", GetCodecTypeString(aConfig.mCodec)); return nullptr; } RefPtr encoder = new FFmpegAudioEncoder(mLib, codecId, aTaskQueue, aConfig); FFMPEGA_LOG("ffmpeg %s encoder: %s has been created", GetCodecTypeString(aConfig.mCodec), encoder->GetDescriptionName().get()); return encoder.forget(); } template class FFmpegEncoderModule; } // namespace mozilla