2 * Copyright (c) 2018 The WebRTC project authors. All Rights Reserved.
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.
11 #ifndef TEST_VIDEO_DECODER_PROXY_FACTORY_H_
12 #define TEST_VIDEO_DECODER_PROXY_FACTORY_H_
17 #include "api/video_codecs/video_decoder.h"
18 #include "api/video_codecs/video_decoder_factory.h"
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
{
28 explicit VideoDecoderProxyFactory(VideoDecoder
* decoder
)
29 : decoder_(decoder
) {}
32 std::vector
<SdpVideoFormat
> GetSupportedFormats() const override
{
33 RTC_DCHECK_NOTREACHED();
37 std::unique_ptr
<VideoDecoder
> CreateVideoDecoder(
38 const SdpVideoFormat
& format
) override
{
39 return std::make_unique
<DecoderProxy
>(decoder_
);
43 // Wrapper class, since CreateVideoDecoder needs to surrender
44 // ownership to the object it returns.
45 class DecoderProxy final
: public VideoDecoder
{
47 explicit DecoderProxy(VideoDecoder
* decoder
) : decoder_(decoder
) {}
50 int32_t Decode(const EncodedImage
& input_image
,
51 int64_t render_time_ms
) override
{
52 return decoder_
->Decode(input_image
, render_time_ms
);
54 bool Configure(const Settings
& settings
) override
{
55 return decoder_
->Configure(settings
);
57 int32_t RegisterDecodeCompleteCallback(
58 DecodedImageCallback
* callback
) override
{
59 return decoder_
->RegisterDecodeCompleteCallback(callback
);
61 int32_t Release() override
{ return decoder_
->Release(); }
62 DecoderInfo
GetDecoderInfo() const override
{
63 return decoder_
->GetDecoderInfo();
65 const char* ImplementationName() const override
{
66 return decoder_
->ImplementationName();
69 VideoDecoder
* const decoder_
;
72 VideoDecoder
* const decoder_
;
78 #endif // TEST_VIDEO_DECODER_PROXY_FACTORY_H_