blob: a5ee593a7a9eafb0f7aca73628e77122d11b33c5 [file] [log] [blame]
Niels Möllera0f44302018-11-30 10:45:12 +01001/*
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_FUNCTION_AUDIO_DECODER_FACTORY_H_
12#define TEST_FUNCTION_AUDIO_DECODER_FACTORY_H_
13
14#include <functional>
15#include <memory>
16#include <utility>
17#include <vector>
18
19#include "absl/memory/memory.h"
20#include "api/audio_codecs/audio_decoder_factory.h"
21#include "api/audio_codecs/audio_format.h"
22#include "rtc_base/checks.h"
23
24namespace webrtc {
25namespace test {
26
27// A decoder factory producing decoders by calling a supplied create function.
28class FunctionAudioDecoderFactory : public AudioDecoderFactory {
29 public:
30 explicit FunctionAudioDecoderFactory(
31 std::function<std::unique_ptr<AudioDecoder>()> create)
32 : create_([create](const SdpAudioFormat&,
33 absl::optional<AudioCodecPairId> codec_pair_id) {
34 return create();
35 }) {}
36 explicit FunctionAudioDecoderFactory(
37 std::function<std::unique_ptr<AudioDecoder>(
38 const SdpAudioFormat&,
39 absl::optional<AudioCodecPairId> codec_pair_id)> create)
40 : create_(std::move(create)) {}
41
42 // Unused by tests.
43 std::vector<AudioCodecSpec> GetSupportedDecoders() override {
44 RTC_NOTREACHED();
45 return {};
46 }
47
48 bool IsSupportedDecoder(const SdpAudioFormat& format) override {
49 return true;
50 }
51
52 std::unique_ptr<AudioDecoder> MakeAudioDecoder(
53 const SdpAudioFormat& format,
54 absl::optional<AudioCodecPairId> codec_pair_id) override {
55 return create_(format, codec_pair_id);
56 }
57
58 private:
59 const std::function<std::unique_ptr<AudioDecoder>(
60 const SdpAudioFormat&,
61 absl::optional<AudioCodecPairId> codec_pair_id)>
62 create_;
63};
64
65} // namespace test
66} // namespace webrtc
67
68#endif // TEST_FUNCTION_AUDIO_DECODER_FACTORY_H_