/*
 *  Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */

#include "media/engine/webrtcvideodecoderfactory.h"

#include "api/video_codecs/video_codec.h"

namespace cricket {

webrtc::VideoDecoder* WebRtcVideoDecoderFactory::CreateVideoDecoderWithParams(
    const VideoCodec& codec,
    VideoDecoderParams params) {
  // Default implementation that delegates to old version in order to preserve
  // backwards-compatability.
  webrtc::VideoCodecType type = webrtc::PayloadStringToCodecType(codec.name);
  return CreateVideoDecoderWithParams(type, params);
}

webrtc::VideoDecoder* WebRtcVideoDecoderFactory::CreateVideoDecoder(
    webrtc::VideoCodecType type) {
  RTC_NOTREACHED();
  return nullptr;
}

webrtc::VideoDecoder* WebRtcVideoDecoderFactory::CreateVideoDecoderWithParams(
    webrtc::VideoCodecType type,
    VideoDecoderParams params) {
  return CreateVideoDecoder(type);
}

}  // namespace cricket
