blob: 7e0fcdb12a2149f78bf0bb8259ac6de0c931b73a [file] [log] [blame]
Niels Möllercbcbc222018-09-28 09:07:24 +02001/*
2 * Copyright (c) 2018 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
11#ifndef TEST_VIDEO_DECODER_PROXY_FACTORY_H_
12#define TEST_VIDEO_DECODER_PROXY_FACTORY_H_
13
14#include <memory>
15#include <vector>
16
Niels Möllercbcbc222018-09-28 09:07:24 +020017#include "api/video_codecs/video_decoder.h"
18#include "api/video_codecs/video_decoder_factory.h"
19
20namespace webrtc {
21namespace test {
22
23// An decoder factory with a single underlying VideoDecoder object, intended for
24// test purposes. Each call to CreateVideoDecoder returns a proxy for the same
25// decoder, typically an instance of FakeDecoder or MockEncoder.
26class VideoDecoderProxyFactory final : public VideoDecoderFactory {
27 public:
28 explicit VideoDecoderProxyFactory(VideoDecoder* decoder)
29 : decoder_(decoder) {}
30
31 // Unused by tests.
32 std::vector<SdpVideoFormat> GetSupportedFormats() const override {
33 RTC_NOTREACHED();
34 return {};
35 }
36
37 std::unique_ptr<VideoDecoder> CreateVideoDecoder(
38 const SdpVideoFormat& format) override {
Mirko Bonadei317a1f02019-09-17 17:06:18 +020039 return std::make_unique<DecoderProxy>(decoder_);
Niels Möllercbcbc222018-09-28 09:07:24 +020040 }
41
42 private:
43 // Wrapper class, since CreateVideoDecoder needs to surrender
44 // ownership to the object it returns.
45 class DecoderProxy final : public VideoDecoder {
46 public:
47 explicit DecoderProxy(VideoDecoder* decoder) : decoder_(decoder) {}
48
49 private:
50 int32_t Decode(const EncodedImage& input_image,
51 bool missing_frames,
Niels Möllercbcbc222018-09-28 09:07:24 +020052 int64_t render_time_ms) override {
Niels Möller7aacdd92019-03-25 09:11:40 +010053 return decoder_->Decode(input_image, missing_frames, render_time_ms);
Niels Möllercbcbc222018-09-28 09:07:24 +020054 }
55 int32_t InitDecode(const VideoCodec* config,
56 int32_t number_of_cores) override {
57 return decoder_->InitDecode(config, number_of_cores);
58 }
59 int32_t RegisterDecodeCompleteCallback(
60 DecodedImageCallback* callback) override {
61 return decoder_->RegisterDecodeCompleteCallback(callback);
62 }
63 int32_t Release() override { return decoder_->Release(); }
64 bool PrefersLateDecoding() const { return decoder_->PrefersLateDecoding(); }
65 const char* ImplementationName() const override {
66 return decoder_->ImplementationName();
67 }
68
69 VideoDecoder* const decoder_;
70 };
71
72 VideoDecoder* const decoder_;
73};
74
75} // namespace test
76} // namespace webrtc
77
78#endif // TEST_VIDEO_DECODER_PROXY_FACTORY_H_