blob: 21640df6a69009e61744d75ca6a80a2e6bd5a591 [file] [log] [blame]
magjed509e4fe2016-11-18 01:34:11 -08001/*
2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020011#include "media/engine/internalencoderfactory.h"
magjed509e4fe2016-11-18 01:34:11 -080012
13#include <utility>
14
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020015#include "modules/video_coding/codecs/h264/include/h264.h"
16#include "modules/video_coding/codecs/vp8/include/vp8.h"
17#include "modules/video_coding/codecs/vp9/include/vp9.h"
magjed509e4fe2016-11-18 01:34:11 -080018
19namespace cricket {
20
21InternalEncoderFactory::InternalEncoderFactory() {
Magnus Jedvert849b3ae2017-09-29 17:54:09 +020022 supported_codecs_.push_back(VideoCodec(kVp8CodecName));
magjed509e4fe2016-11-18 01:34:11 -080023 if (webrtc::VP9Encoder::IsSupported())
Magnus Jedvert849b3ae2017-09-29 17:54:09 +020024 supported_codecs_.push_back(VideoCodec(kVp9CodecName));
magjed509e4fe2016-11-18 01:34:11 -080025
Magnus Jedvert849b3ae2017-09-29 17:54:09 +020026 for (const webrtc::SdpVideoFormat& format : webrtc::SupportedH264Codecs())
27 supported_codecs_.push_back(VideoCodec(format));
magjed509e4fe2016-11-18 01:34:11 -080028}
29
30InternalEncoderFactory::~InternalEncoderFactory() {}
31
32// WebRtcVideoEncoderFactory implementation.
33webrtc::VideoEncoder* InternalEncoderFactory::CreateVideoEncoder(
Magnus Jedvert849b3ae2017-09-29 17:54:09 +020034 const VideoCodec& codec) {
magjed10165ab2016-11-22 10:16:57 -080035 const webrtc::VideoCodecType codec_type =
kthelgason1cdddc92017-08-24 03:52:48 -070036 webrtc::PayloadStringToCodecType(codec.name);
magjed10165ab2016-11-22 10:16:57 -080037 switch (codec_type) {
magjed509e4fe2016-11-18 01:34:11 -080038 case webrtc::kVideoCodecH264:
Magnus Jedvert46a27652017-11-13 14:10:02 +010039 return webrtc::H264Encoder::Create(codec).release();
magjed509e4fe2016-11-18 01:34:11 -080040 case webrtc::kVideoCodecVP8:
Magnus Jedvert46a27652017-11-13 14:10:02 +010041 return webrtc::VP8Encoder::Create().release();
magjed509e4fe2016-11-18 01:34:11 -080042 case webrtc::kVideoCodecVP9:
Magnus Jedvert46a27652017-11-13 14:10:02 +010043 return webrtc::VP9Encoder::Create().release();
magjed509e4fe2016-11-18 01:34:11 -080044 default:
45 return nullptr;
46 }
47}
48
Magnus Jedvert849b3ae2017-09-29 17:54:09 +020049const std::vector<VideoCodec>&
magjed509e4fe2016-11-18 01:34:11 -080050InternalEncoderFactory::supported_codecs() const {
51 return supported_codecs_;
52}
53
54void InternalEncoderFactory::DestroyVideoEncoder(
55 webrtc::VideoEncoder* encoder) {
56 delete encoder;
57}
58
59} // namespace cricket