blob: f294f627133c251e8b6ca63e44200a5b74578e05 [file] [log] [blame]
Niels Möllercbcbc222018-09-28 07:07:241/*
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 07:07:2417#include "api/video_codecs/video_decoder.h"
18#include "api/video_codecs/video_decoder_factory.h"
19
20namespace webrtc {
21namespace test {
22
Hua, Chunbob2611182020-04-27 03:55:5623// A decoder factory with a single underlying VideoDecoder object, intended for
Niels Möllercbcbc222018-09-28 07:07:2424// 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 15:06:1839 return std::make_unique<DecoderProxy>(decoder_);
Niels Möllercbcbc222018-09-28 07:07:2440 }
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 07:07:2452 int64_t render_time_ms) override {
Niels Möller7aacdd92019-03-25 08:11:4053 return decoder_->Decode(input_image, missing_frames, render_time_ms);
Niels Möllercbcbc222018-09-28 07:07:2454 }
Danil Chapovalovd08930d2021-08-12 11:26:5555 bool Configure(const Settings& settings) override {
56 return decoder_->Configure(settings);
Niels Möllercbcbc222018-09-28 07:07:2457 }
58 int32_t RegisterDecodeCompleteCallback(
59 DecodedImageCallback* callback) override {
60 return decoder_->RegisterDecodeCompleteCallback(callback);
61 }
62 int32_t Release() override { return decoder_->Release(); }
Erik Språngc12f6252021-01-13 20:49:5963 DecoderInfo GetDecoderInfo() const override {
64 return decoder_->GetDecoderInfo();
65 }
Niels Möllercbcbc222018-09-28 07:07:2466 const char* ImplementationName() const override {
67 return decoder_->ImplementationName();
68 }
69
70 VideoDecoder* const decoder_;
71 };
72
73 VideoDecoder* const decoder_;
74};
75
76} // namespace test
77} // namespace webrtc
78
79#endif // TEST_VIDEO_DECODER_PROXY_FACTORY_H_