xref: /aosp_15_r20/external/libvpx/test/codec_factory.h (revision fb1b10ab9aebc7c7068eedab379b749d7e3900be)
1*fb1b10abSAndroid Build Coastguard Worker /*
2*fb1b10abSAndroid Build Coastguard Worker  *  Copyright (c) 2013 The WebM project authors. All Rights Reserved.
3*fb1b10abSAndroid Build Coastguard Worker  *
4*fb1b10abSAndroid Build Coastguard Worker  *  Use of this source code is governed by a BSD-style license
5*fb1b10abSAndroid Build Coastguard Worker  *  that can be found in the LICENSE file in the root of the source
6*fb1b10abSAndroid Build Coastguard Worker  *  tree. An additional intellectual property rights grant can be found
7*fb1b10abSAndroid Build Coastguard Worker  *  in the file PATENTS.  All contributing project authors may
8*fb1b10abSAndroid Build Coastguard Worker  *  be found in the AUTHORS file in the root of the source tree.
9*fb1b10abSAndroid Build Coastguard Worker  */
10*fb1b10abSAndroid Build Coastguard Worker #ifndef VPX_TEST_CODEC_FACTORY_H_
11*fb1b10abSAndroid Build Coastguard Worker #define VPX_TEST_CODEC_FACTORY_H_
12*fb1b10abSAndroid Build Coastguard Worker 
13*fb1b10abSAndroid Build Coastguard Worker #include <tuple>
14*fb1b10abSAndroid Build Coastguard Worker 
15*fb1b10abSAndroid Build Coastguard Worker #include "./vpx_config.h"
16*fb1b10abSAndroid Build Coastguard Worker #include "vpx/vpx_decoder.h"
17*fb1b10abSAndroid Build Coastguard Worker #include "vpx/vpx_encoder.h"
18*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP8_ENCODER || CONFIG_VP9_ENCODER
19*fb1b10abSAndroid Build Coastguard Worker #include "vpx/vp8cx.h"
20*fb1b10abSAndroid Build Coastguard Worker #endif
21*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP8_DECODER || CONFIG_VP9_DECODER
22*fb1b10abSAndroid Build Coastguard Worker #include "vpx/vp8dx.h"
23*fb1b10abSAndroid Build Coastguard Worker #endif
24*fb1b10abSAndroid Build Coastguard Worker 
25*fb1b10abSAndroid Build Coastguard Worker #include "test/decode_test_driver.h"
26*fb1b10abSAndroid Build Coastguard Worker #include "test/encode_test_driver.h"
27*fb1b10abSAndroid Build Coastguard Worker namespace libvpx_test {
28*fb1b10abSAndroid Build Coastguard Worker 
29*fb1b10abSAndroid Build Coastguard Worker const int kCodecFactoryParam = 0;
30*fb1b10abSAndroid Build Coastguard Worker 
31*fb1b10abSAndroid Build Coastguard Worker class CodecFactory {
32*fb1b10abSAndroid Build Coastguard Worker  public:
CodecFactory()33*fb1b10abSAndroid Build Coastguard Worker   CodecFactory() {}
34*fb1b10abSAndroid Build Coastguard Worker 
~CodecFactory()35*fb1b10abSAndroid Build Coastguard Worker   virtual ~CodecFactory() {}
36*fb1b10abSAndroid Build Coastguard Worker 
37*fb1b10abSAndroid Build Coastguard Worker   virtual Decoder *CreateDecoder(vpx_codec_dec_cfg_t cfg) const = 0;
38*fb1b10abSAndroid Build Coastguard Worker 
39*fb1b10abSAndroid Build Coastguard Worker   virtual Decoder *CreateDecoder(vpx_codec_dec_cfg_t cfg,
40*fb1b10abSAndroid Build Coastguard Worker                                  const vpx_codec_flags_t flags) const = 0;
41*fb1b10abSAndroid Build Coastguard Worker 
42*fb1b10abSAndroid Build Coastguard Worker   virtual Encoder *CreateEncoder(vpx_codec_enc_cfg_t cfg,
43*fb1b10abSAndroid Build Coastguard Worker                                  vpx_enc_deadline_t deadline,
44*fb1b10abSAndroid Build Coastguard Worker                                  const unsigned long init_flags,
45*fb1b10abSAndroid Build Coastguard Worker                                  TwopassStatsStore *stats) const = 0;
46*fb1b10abSAndroid Build Coastguard Worker 
47*fb1b10abSAndroid Build Coastguard Worker   virtual vpx_codec_err_t DefaultEncoderConfig(vpx_codec_enc_cfg_t *cfg,
48*fb1b10abSAndroid Build Coastguard Worker                                                int usage) const = 0;
49*fb1b10abSAndroid Build Coastguard Worker };
50*fb1b10abSAndroid Build Coastguard Worker 
51*fb1b10abSAndroid Build Coastguard Worker /* Provide CodecTestWith<n>Params classes for a variable number of parameters
52*fb1b10abSAndroid Build Coastguard Worker  * to avoid having to include a pointer to the CodecFactory in every test
53*fb1b10abSAndroid Build Coastguard Worker  * definition.
54*fb1b10abSAndroid Build Coastguard Worker  */
55*fb1b10abSAndroid Build Coastguard Worker template <class T1>
56*fb1b10abSAndroid Build Coastguard Worker class CodecTestWithParam
57*fb1b10abSAndroid Build Coastguard Worker     : public ::testing::TestWithParam<
58*fb1b10abSAndroid Build Coastguard Worker           std::tuple<const libvpx_test::CodecFactory *, T1> > {};
59*fb1b10abSAndroid Build Coastguard Worker 
60*fb1b10abSAndroid Build Coastguard Worker template <class T1, class T2>
61*fb1b10abSAndroid Build Coastguard Worker class CodecTestWith2Params
62*fb1b10abSAndroid Build Coastguard Worker     : public ::testing::TestWithParam<
63*fb1b10abSAndroid Build Coastguard Worker           std::tuple<const libvpx_test::CodecFactory *, T1, T2> > {};
64*fb1b10abSAndroid Build Coastguard Worker 
65*fb1b10abSAndroid Build Coastguard Worker template <class T1, class T2, class T3>
66*fb1b10abSAndroid Build Coastguard Worker class CodecTestWith3Params
67*fb1b10abSAndroid Build Coastguard Worker     : public ::testing::TestWithParam<
68*fb1b10abSAndroid Build Coastguard Worker           std::tuple<const libvpx_test::CodecFactory *, T1, T2, T3> > {};
69*fb1b10abSAndroid Build Coastguard Worker 
70*fb1b10abSAndroid Build Coastguard Worker template <class T1, class T2, class T3, class T4>
71*fb1b10abSAndroid Build Coastguard Worker class CodecTestWith4Params
72*fb1b10abSAndroid Build Coastguard Worker     : public ::testing::TestWithParam<
73*fb1b10abSAndroid Build Coastguard Worker           std::tuple<const libvpx_test::CodecFactory *, T1, T2, T3, T4> > {};
74*fb1b10abSAndroid Build Coastguard Worker 
75*fb1b10abSAndroid Build Coastguard Worker /*
76*fb1b10abSAndroid Build Coastguard Worker  * VP8 Codec Definitions
77*fb1b10abSAndroid Build Coastguard Worker  */
78*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP8
79*fb1b10abSAndroid Build Coastguard Worker class VP8Decoder : public Decoder {
80*fb1b10abSAndroid Build Coastguard Worker  public:
VP8Decoder(vpx_codec_dec_cfg_t cfg)81*fb1b10abSAndroid Build Coastguard Worker   explicit VP8Decoder(vpx_codec_dec_cfg_t cfg) : Decoder(cfg) {}
82*fb1b10abSAndroid Build Coastguard Worker 
VP8Decoder(vpx_codec_dec_cfg_t cfg,const vpx_codec_flags_t flag)83*fb1b10abSAndroid Build Coastguard Worker   VP8Decoder(vpx_codec_dec_cfg_t cfg, const vpx_codec_flags_t flag)
84*fb1b10abSAndroid Build Coastguard Worker       : Decoder(cfg, flag) {}
85*fb1b10abSAndroid Build Coastguard Worker 
86*fb1b10abSAndroid Build Coastguard Worker  protected:
CodecInterface()87*fb1b10abSAndroid Build Coastguard Worker   vpx_codec_iface_t *CodecInterface() const override {
88*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP8_DECODER
89*fb1b10abSAndroid Build Coastguard Worker     return &vpx_codec_vp8_dx_algo;
90*fb1b10abSAndroid Build Coastguard Worker #else
91*fb1b10abSAndroid Build Coastguard Worker     return nullptr;
92*fb1b10abSAndroid Build Coastguard Worker #endif
93*fb1b10abSAndroid Build Coastguard Worker   }
94*fb1b10abSAndroid Build Coastguard Worker };
95*fb1b10abSAndroid Build Coastguard Worker 
96*fb1b10abSAndroid Build Coastguard Worker class VP8Encoder : public Encoder {
97*fb1b10abSAndroid Build Coastguard Worker  public:
VP8Encoder(vpx_codec_enc_cfg_t cfg,vpx_enc_deadline_t deadline,const unsigned long init_flags,TwopassStatsStore * stats)98*fb1b10abSAndroid Build Coastguard Worker   VP8Encoder(vpx_codec_enc_cfg_t cfg, vpx_enc_deadline_t deadline,
99*fb1b10abSAndroid Build Coastguard Worker              const unsigned long init_flags, TwopassStatsStore *stats)
100*fb1b10abSAndroid Build Coastguard Worker       : Encoder(cfg, deadline, init_flags, stats) {}
101*fb1b10abSAndroid Build Coastguard Worker 
102*fb1b10abSAndroid Build Coastguard Worker  protected:
CodecInterface()103*fb1b10abSAndroid Build Coastguard Worker   vpx_codec_iface_t *CodecInterface() const override {
104*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP8_ENCODER
105*fb1b10abSAndroid Build Coastguard Worker     return &vpx_codec_vp8_cx_algo;
106*fb1b10abSAndroid Build Coastguard Worker #else
107*fb1b10abSAndroid Build Coastguard Worker     return nullptr;
108*fb1b10abSAndroid Build Coastguard Worker #endif
109*fb1b10abSAndroid Build Coastguard Worker   }
110*fb1b10abSAndroid Build Coastguard Worker };
111*fb1b10abSAndroid Build Coastguard Worker 
112*fb1b10abSAndroid Build Coastguard Worker class VP8CodecFactory : public CodecFactory {
113*fb1b10abSAndroid Build Coastguard Worker  public:
VP8CodecFactory()114*fb1b10abSAndroid Build Coastguard Worker   VP8CodecFactory() : CodecFactory() {}
115*fb1b10abSAndroid Build Coastguard Worker 
CreateDecoder(vpx_codec_dec_cfg_t cfg)116*fb1b10abSAndroid Build Coastguard Worker   Decoder *CreateDecoder(vpx_codec_dec_cfg_t cfg) const override {
117*fb1b10abSAndroid Build Coastguard Worker     return CreateDecoder(cfg, 0);
118*fb1b10abSAndroid Build Coastguard Worker   }
119*fb1b10abSAndroid Build Coastguard Worker 
CreateDecoder(vpx_codec_dec_cfg_t cfg,const vpx_codec_flags_t flags)120*fb1b10abSAndroid Build Coastguard Worker   Decoder *CreateDecoder(vpx_codec_dec_cfg_t cfg,
121*fb1b10abSAndroid Build Coastguard Worker                          const vpx_codec_flags_t flags) const override {
122*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP8_DECODER
123*fb1b10abSAndroid Build Coastguard Worker     return new VP8Decoder(cfg, flags);
124*fb1b10abSAndroid Build Coastguard Worker #else
125*fb1b10abSAndroid Build Coastguard Worker     (void)cfg;
126*fb1b10abSAndroid Build Coastguard Worker     (void)flags;
127*fb1b10abSAndroid Build Coastguard Worker     return nullptr;
128*fb1b10abSAndroid Build Coastguard Worker #endif
129*fb1b10abSAndroid Build Coastguard Worker   }
130*fb1b10abSAndroid Build Coastguard Worker 
CreateEncoder(vpx_codec_enc_cfg_t cfg,vpx_enc_deadline_t deadline,const unsigned long init_flags,TwopassStatsStore * stats)131*fb1b10abSAndroid Build Coastguard Worker   Encoder *CreateEncoder(vpx_codec_enc_cfg_t cfg, vpx_enc_deadline_t deadline,
132*fb1b10abSAndroid Build Coastguard Worker                          const unsigned long init_flags,
133*fb1b10abSAndroid Build Coastguard Worker                          TwopassStatsStore *stats) const override {
134*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP8_ENCODER
135*fb1b10abSAndroid Build Coastguard Worker     return new VP8Encoder(cfg, deadline, init_flags, stats);
136*fb1b10abSAndroid Build Coastguard Worker #else
137*fb1b10abSAndroid Build Coastguard Worker     (void)cfg;
138*fb1b10abSAndroid Build Coastguard Worker     (void)deadline;
139*fb1b10abSAndroid Build Coastguard Worker     (void)init_flags;
140*fb1b10abSAndroid Build Coastguard Worker     (void)stats;
141*fb1b10abSAndroid Build Coastguard Worker     return nullptr;
142*fb1b10abSAndroid Build Coastguard Worker #endif
143*fb1b10abSAndroid Build Coastguard Worker   }
144*fb1b10abSAndroid Build Coastguard Worker 
DefaultEncoderConfig(vpx_codec_enc_cfg_t * cfg,int usage)145*fb1b10abSAndroid Build Coastguard Worker   vpx_codec_err_t DefaultEncoderConfig(vpx_codec_enc_cfg_t *cfg,
146*fb1b10abSAndroid Build Coastguard Worker                                        int usage) const override {
147*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP8_ENCODER
148*fb1b10abSAndroid Build Coastguard Worker     return vpx_codec_enc_config_default(&vpx_codec_vp8_cx_algo, cfg, usage);
149*fb1b10abSAndroid Build Coastguard Worker #else
150*fb1b10abSAndroid Build Coastguard Worker     (void)cfg;
151*fb1b10abSAndroid Build Coastguard Worker     (void)usage;
152*fb1b10abSAndroid Build Coastguard Worker     return VPX_CODEC_INCAPABLE;
153*fb1b10abSAndroid Build Coastguard Worker #endif
154*fb1b10abSAndroid Build Coastguard Worker   }
155*fb1b10abSAndroid Build Coastguard Worker };
156*fb1b10abSAndroid Build Coastguard Worker 
157*fb1b10abSAndroid Build Coastguard Worker const libvpx_test::VP8CodecFactory kVP8;
158*fb1b10abSAndroid Build Coastguard Worker 
159*fb1b10abSAndroid Build Coastguard Worker #define VP8_INSTANTIATE_TEST_SUITE(test, ...)                               \
160*fb1b10abSAndroid Build Coastguard Worker   INSTANTIATE_TEST_SUITE_P(                                                 \
161*fb1b10abSAndroid Build Coastguard Worker       VP8, test,                                                            \
162*fb1b10abSAndroid Build Coastguard Worker       ::testing::Combine(                                                   \
163*fb1b10abSAndroid Build Coastguard Worker           ::testing::Values(static_cast<const libvpx_test::CodecFactory *>( \
164*fb1b10abSAndroid Build Coastguard Worker               &libvpx_test::kVP8)),                                         \
165*fb1b10abSAndroid Build Coastguard Worker           __VA_ARGS__))
166*fb1b10abSAndroid Build Coastguard Worker #else
167*fb1b10abSAndroid Build Coastguard Worker // static_assert() is used to avoid warnings about an extra ';' outside of a
168*fb1b10abSAndroid Build Coastguard Worker // function.
169*fb1b10abSAndroid Build Coastguard Worker #define VP8_INSTANTIATE_TEST_SUITE(test, ...) static_assert(CONFIG_VP8 == 0, "")
170*fb1b10abSAndroid Build Coastguard Worker #endif  // CONFIG_VP8
171*fb1b10abSAndroid Build Coastguard Worker 
172*fb1b10abSAndroid Build Coastguard Worker /*
173*fb1b10abSAndroid Build Coastguard Worker  * VP9 Codec Definitions
174*fb1b10abSAndroid Build Coastguard Worker  */
175*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9
176*fb1b10abSAndroid Build Coastguard Worker class VP9Decoder : public Decoder {
177*fb1b10abSAndroid Build Coastguard Worker  public:
VP9Decoder(vpx_codec_dec_cfg_t cfg)178*fb1b10abSAndroid Build Coastguard Worker   explicit VP9Decoder(vpx_codec_dec_cfg_t cfg) : Decoder(cfg) {}
179*fb1b10abSAndroid Build Coastguard Worker 
VP9Decoder(vpx_codec_dec_cfg_t cfg,const vpx_codec_flags_t flag)180*fb1b10abSAndroid Build Coastguard Worker   VP9Decoder(vpx_codec_dec_cfg_t cfg, const vpx_codec_flags_t flag)
181*fb1b10abSAndroid Build Coastguard Worker       : Decoder(cfg, flag) {}
182*fb1b10abSAndroid Build Coastguard Worker 
183*fb1b10abSAndroid Build Coastguard Worker  protected:
CodecInterface()184*fb1b10abSAndroid Build Coastguard Worker   vpx_codec_iface_t *CodecInterface() const override {
185*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9_DECODER
186*fb1b10abSAndroid Build Coastguard Worker     return &vpx_codec_vp9_dx_algo;
187*fb1b10abSAndroid Build Coastguard Worker #else
188*fb1b10abSAndroid Build Coastguard Worker     return nullptr;
189*fb1b10abSAndroid Build Coastguard Worker #endif
190*fb1b10abSAndroid Build Coastguard Worker   }
191*fb1b10abSAndroid Build Coastguard Worker };
192*fb1b10abSAndroid Build Coastguard Worker 
193*fb1b10abSAndroid Build Coastguard Worker class VP9Encoder : public Encoder {
194*fb1b10abSAndroid Build Coastguard Worker  public:
VP9Encoder(vpx_codec_enc_cfg_t cfg,vpx_enc_deadline_t deadline,const unsigned long init_flags,TwopassStatsStore * stats)195*fb1b10abSAndroid Build Coastguard Worker   VP9Encoder(vpx_codec_enc_cfg_t cfg, vpx_enc_deadline_t deadline,
196*fb1b10abSAndroid Build Coastguard Worker              const unsigned long init_flags, TwopassStatsStore *stats)
197*fb1b10abSAndroid Build Coastguard Worker       : Encoder(cfg, deadline, init_flags, stats) {}
198*fb1b10abSAndroid Build Coastguard Worker 
199*fb1b10abSAndroid Build Coastguard Worker  protected:
CodecInterface()200*fb1b10abSAndroid Build Coastguard Worker   vpx_codec_iface_t *CodecInterface() const override {
201*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9_ENCODER
202*fb1b10abSAndroid Build Coastguard Worker     return &vpx_codec_vp9_cx_algo;
203*fb1b10abSAndroid Build Coastguard Worker #else
204*fb1b10abSAndroid Build Coastguard Worker     return nullptr;
205*fb1b10abSAndroid Build Coastguard Worker #endif
206*fb1b10abSAndroid Build Coastguard Worker   }
207*fb1b10abSAndroid Build Coastguard Worker };
208*fb1b10abSAndroid Build Coastguard Worker 
209*fb1b10abSAndroid Build Coastguard Worker class VP9CodecFactory : public CodecFactory {
210*fb1b10abSAndroid Build Coastguard Worker  public:
VP9CodecFactory()211*fb1b10abSAndroid Build Coastguard Worker   VP9CodecFactory() : CodecFactory() {}
212*fb1b10abSAndroid Build Coastguard Worker 
CreateDecoder(vpx_codec_dec_cfg_t cfg)213*fb1b10abSAndroid Build Coastguard Worker   Decoder *CreateDecoder(vpx_codec_dec_cfg_t cfg) const override {
214*fb1b10abSAndroid Build Coastguard Worker     return CreateDecoder(cfg, 0);
215*fb1b10abSAndroid Build Coastguard Worker   }
216*fb1b10abSAndroid Build Coastguard Worker 
CreateDecoder(vpx_codec_dec_cfg_t cfg,const vpx_codec_flags_t flags)217*fb1b10abSAndroid Build Coastguard Worker   Decoder *CreateDecoder(vpx_codec_dec_cfg_t cfg,
218*fb1b10abSAndroid Build Coastguard Worker                          const vpx_codec_flags_t flags) const override {
219*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9_DECODER
220*fb1b10abSAndroid Build Coastguard Worker     return new VP9Decoder(cfg, flags);
221*fb1b10abSAndroid Build Coastguard Worker #else
222*fb1b10abSAndroid Build Coastguard Worker     (void)cfg;
223*fb1b10abSAndroid Build Coastguard Worker     (void)flags;
224*fb1b10abSAndroid Build Coastguard Worker     return nullptr;
225*fb1b10abSAndroid Build Coastguard Worker #endif
226*fb1b10abSAndroid Build Coastguard Worker   }
227*fb1b10abSAndroid Build Coastguard Worker 
CreateEncoder(vpx_codec_enc_cfg_t cfg,vpx_enc_deadline_t deadline,const unsigned long init_flags,TwopassStatsStore * stats)228*fb1b10abSAndroid Build Coastguard Worker   Encoder *CreateEncoder(vpx_codec_enc_cfg_t cfg, vpx_enc_deadline_t deadline,
229*fb1b10abSAndroid Build Coastguard Worker                          const unsigned long init_flags,
230*fb1b10abSAndroid Build Coastguard Worker                          TwopassStatsStore *stats) const override {
231*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9_ENCODER
232*fb1b10abSAndroid Build Coastguard Worker     return new VP9Encoder(cfg, deadline, init_flags, stats);
233*fb1b10abSAndroid Build Coastguard Worker #else
234*fb1b10abSAndroid Build Coastguard Worker     (void)cfg;
235*fb1b10abSAndroid Build Coastguard Worker     (void)deadline;
236*fb1b10abSAndroid Build Coastguard Worker     (void)init_flags;
237*fb1b10abSAndroid Build Coastguard Worker     (void)stats;
238*fb1b10abSAndroid Build Coastguard Worker     return nullptr;
239*fb1b10abSAndroid Build Coastguard Worker #endif
240*fb1b10abSAndroid Build Coastguard Worker   }
241*fb1b10abSAndroid Build Coastguard Worker 
DefaultEncoderConfig(vpx_codec_enc_cfg_t * cfg,int usage)242*fb1b10abSAndroid Build Coastguard Worker   vpx_codec_err_t DefaultEncoderConfig(vpx_codec_enc_cfg_t *cfg,
243*fb1b10abSAndroid Build Coastguard Worker                                        int usage) const override {
244*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9_ENCODER
245*fb1b10abSAndroid Build Coastguard Worker     return vpx_codec_enc_config_default(&vpx_codec_vp9_cx_algo, cfg, usage);
246*fb1b10abSAndroid Build Coastguard Worker #else
247*fb1b10abSAndroid Build Coastguard Worker     (void)cfg;
248*fb1b10abSAndroid Build Coastguard Worker     (void)usage;
249*fb1b10abSAndroid Build Coastguard Worker     return VPX_CODEC_INCAPABLE;
250*fb1b10abSAndroid Build Coastguard Worker #endif
251*fb1b10abSAndroid Build Coastguard Worker   }
252*fb1b10abSAndroid Build Coastguard Worker };
253*fb1b10abSAndroid Build Coastguard Worker 
254*fb1b10abSAndroid Build Coastguard Worker const libvpx_test::VP9CodecFactory kVP9;
255*fb1b10abSAndroid Build Coastguard Worker 
256*fb1b10abSAndroid Build Coastguard Worker #define VP9_INSTANTIATE_TEST_SUITE(test, ...)                               \
257*fb1b10abSAndroid Build Coastguard Worker   INSTANTIATE_TEST_SUITE_P(                                                 \
258*fb1b10abSAndroid Build Coastguard Worker       VP9, test,                                                            \
259*fb1b10abSAndroid Build Coastguard Worker       ::testing::Combine(                                                   \
260*fb1b10abSAndroid Build Coastguard Worker           ::testing::Values(static_cast<const libvpx_test::CodecFactory *>( \
261*fb1b10abSAndroid Build Coastguard Worker               &libvpx_test::kVP9)),                                         \
262*fb1b10abSAndroid Build Coastguard Worker           __VA_ARGS__))
263*fb1b10abSAndroid Build Coastguard Worker #else
264*fb1b10abSAndroid Build Coastguard Worker // static_assert() is used to avoid warnings about an extra ';' outside of a
265*fb1b10abSAndroid Build Coastguard Worker // function.
266*fb1b10abSAndroid Build Coastguard Worker #define VP9_INSTANTIATE_TEST_SUITE(test, ...) static_assert(CONFIG_VP9 == 0, "")
267*fb1b10abSAndroid Build Coastguard Worker #endif  // CONFIG_VP9
268*fb1b10abSAndroid Build Coastguard Worker 
269*fb1b10abSAndroid Build Coastguard Worker }  // namespace libvpx_test
270*fb1b10abSAndroid Build Coastguard Worker #endif  // VPX_TEST_CODEC_FACTORY_H_
271