xref: /aosp_15_r20/external/webrtc/test/video_decoder_proxy_factory.h (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1 /*
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 
17 #include "api/video_codecs/video_decoder.h"
18 #include "api/video_codecs/video_decoder_factory.h"
19 
20 namespace webrtc {
21 namespace test {
22 
23 // A 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.
26 class VideoDecoderProxyFactory final : public VideoDecoderFactory {
27  public:
VideoDecoderProxyFactory(VideoDecoder * decoder)28   explicit VideoDecoderProxyFactory(VideoDecoder* decoder)
29       : decoder_(decoder) {}
30 
31   // Unused by tests.
GetSupportedFormats()32   std::vector<SdpVideoFormat> GetSupportedFormats() const override {
33     RTC_DCHECK_NOTREACHED();
34     return {};
35   }
36 
CreateVideoDecoder(const SdpVideoFormat & format)37   std::unique_ptr<VideoDecoder> CreateVideoDecoder(
38       const SdpVideoFormat& format) override {
39     return std::make_unique<DecoderProxy>(decoder_);
40   }
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:
DecoderProxy(VideoDecoder * decoder)47     explicit DecoderProxy(VideoDecoder* decoder) : decoder_(decoder) {}
48 
49    private:
Decode(const EncodedImage & input_image,bool missing_frames,int64_t render_time_ms)50     int32_t Decode(const EncodedImage& input_image,
51                    bool missing_frames,
52                    int64_t render_time_ms) override {
53       return decoder_->Decode(input_image, missing_frames, render_time_ms);
54     }
Configure(const Settings & settings)55     bool Configure(const Settings& settings) override {
56       return decoder_->Configure(settings);
57     }
RegisterDecodeCompleteCallback(DecodedImageCallback * callback)58     int32_t RegisterDecodeCompleteCallback(
59         DecodedImageCallback* callback) override {
60       return decoder_->RegisterDecodeCompleteCallback(callback);
61     }
Release()62     int32_t Release() override { return decoder_->Release(); }
GetDecoderInfo()63     DecoderInfo GetDecoderInfo() const override {
64       return decoder_->GetDecoderInfo();
65     }
ImplementationName()66     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_
80