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#ifndef CONTENT_RENDERER_MEDIA_RTC_VIDEO_DECODER_FACTORY_H_
6#define CONTENT_RENDERER_MEDIA_RTC_VIDEO_DECODER_FACTORY_H_
7
8#include "base/message_loop/message_loop_proxy.h"
9#include "base/threading/thread.h"
10#include "content/common/content_export.h"
11#include "third_party/libjingle/source/talk/media/webrtc/webrtcvideodecoderfactory.h"
12#include "third_party/webrtc/modules/video_coding/codecs/interface/video_codec_interface.h"
13
14namespace webrtc {
15class VideoDecoder;
16}  // namespace webrtc
17
18namespace media {
19class GpuVideoAcceleratorFactories;
20}  // namespace media
21
22namespace content {
23
24// TODO(wuchengli): add unittest.
25class CONTENT_EXPORT RTCVideoDecoderFactory
26    : NON_EXPORTED_BASE(public cricket::WebRtcVideoDecoderFactory) {
27 public:
28  explicit RTCVideoDecoderFactory(
29      const scoped_refptr<media::GpuVideoAcceleratorFactories>& gpu_factories);
30  virtual ~RTCVideoDecoderFactory();
31
32  // Runs on Chrome_libJingle_WorkerThread. The child thread is blocked while
33  // this runs.
34  virtual webrtc::VideoDecoder* CreateVideoDecoder(webrtc::VideoCodecType type)
35      OVERRIDE;
36
37  // Runs on Chrome_libJingle_WorkerThread. The child thread is blocked while
38  // this runs.
39  virtual void DestroyVideoDecoder(webrtc::VideoDecoder* decoder) OVERRIDE;
40
41 private:
42  scoped_refptr<media::GpuVideoAcceleratorFactories> gpu_factories_;
43
44  DISALLOW_COPY_AND_ASSIGN(RTCVideoDecoderFactory);
45};
46
47}  // namespace content
48
49#endif  // CONTENT_RENDERER_MEDIA_RTC_VIDEO_DECODER_FACTORY_H_
50