1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "base/basictypes.h"
6#include "base/memory/scoped_ptr.h"
7#include "media/cdm/ppapi/cdm_video_decoder.h"
8
9#if defined(CLEAR_KEY_CDM_USE_FAKE_VIDEO_DECODER)
10#include "media/cdm/ppapi/fake_cdm_video_decoder.h"
11#endif
12
13#if defined(CLEAR_KEY_CDM_USE_FFMPEG_DECODER)
14#include "media/cdm/ppapi/ffmpeg_cdm_video_decoder.h"
15#endif
16
17#if defined(CLEAR_KEY_CDM_USE_LIBVPX_DECODER)
18#include "media/cdm/ppapi/libvpx_cdm_video_decoder.h"
19#endif
20
21namespace media {
22
23scoped_ptr<CdmVideoDecoder> CreateVideoDecoder(
24    ClearKeyCdmHost* host, const cdm::VideoDecoderConfig& config) {
25  scoped_ptr<CdmVideoDecoder> video_decoder;
26#if defined(CLEAR_KEY_CDM_USE_FAKE_VIDEO_DECODER)
27  video_decoder.reset(new FakeCdmVideoDecoder(host));
28
29  if (!video_decoder->Initialize(config))
30    video_decoder.reset();
31#else
32
33#if defined(CLEAR_KEY_CDM_USE_LIBVPX_DECODER)
34  if (config.codec == cdm::VideoDecoderConfig::kCodecVp8) {
35    video_decoder.reset(new LibvpxCdmVideoDecoder(host));
36
37    if (!video_decoder->Initialize(config))
38      video_decoder.reset();
39
40    return video_decoder.Pass();
41  }
42#endif
43
44#if defined(CLEAR_KEY_CDM_USE_FFMPEG_DECODER)
45  video_decoder.reset(new FFmpegCdmVideoDecoder(host));
46
47  if (!video_decoder->Initialize(config))
48    video_decoder.reset();
49#endif
50
51#endif  // CLEAR_KEY_CDM_USE_FAKE_VIDEO_DECODER
52
53  return video_decoder.Pass();
54}
55
56}  // namespace media
57