tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

codec_factory.h (5392B)


      1 /*
      2 * Copyright (c) 2016, Alliance for Open Media. All rights reserved.
      3 *
      4 * This source code is subject to the terms of the BSD 2 Clause License and
      5 * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
      6 * was not distributed with this source code in the LICENSE file, you can
      7 * obtain it at www.aomedia.org/license/software. If the Alliance for Open
      8 * Media Patent License 1.0 was not distributed with this source code in the
      9 * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
     10 */
     11 #ifndef AOM_TEST_CODEC_FACTORY_H_
     12 #define AOM_TEST_CODEC_FACTORY_H_
     13 
     14 #include <tuple>
     15 
     16 #include "config/aom_config.h"
     17 
     18 #include "aom/aom_decoder.h"
     19 #include "aom/aom_encoder.h"
     20 #if CONFIG_AV1_ENCODER
     21 #include "aom/aomcx.h"
     22 #endif
     23 #if CONFIG_AV1_DECODER
     24 #include "aom/aomdx.h"
     25 #endif
     26 
     27 #include "test/decode_test_driver.h"
     28 #include "test/encode_test_driver.h"
     29 namespace libaom_test {
     30 
     31 const int kCodecFactoryParam = 0;
     32 
     33 class CodecFactory {
     34 public:
     35  CodecFactory() = default;
     36 
     37  virtual ~CodecFactory() = default;
     38 
     39  virtual Decoder *CreateDecoder(aom_codec_dec_cfg_t cfg) const = 0;
     40 
     41  virtual Decoder *CreateDecoder(aom_codec_dec_cfg_t cfg,
     42                                 const aom_codec_flags_t flags) const = 0;
     43 
     44  virtual Encoder *CreateEncoder(aom_codec_enc_cfg_t cfg,
     45                                 const aom_codec_flags_t init_flags,
     46                                 TwopassStatsStore *stats) const = 0;
     47 
     48  virtual aom_codec_err_t DefaultEncoderConfig(aom_codec_enc_cfg_t *cfg,
     49                                               unsigned int usage) const = 0;
     50 };
     51 
     52 /* Provide CodecTestWith<n>Params classes for a variable number of parameters
     53 * to avoid having to include a pointer to the CodecFactory in every test
     54 * definition.
     55 */
     56 template <class T1>
     57 class CodecTestWithParam
     58    : public ::testing::TestWithParam<
     59          std::tuple<const libaom_test::CodecFactory *, T1> > {};
     60 
     61 template <class T1, class T2>
     62 class CodecTestWith2Params
     63    : public ::testing::TestWithParam<
     64          std::tuple<const libaom_test::CodecFactory *, T1, T2> > {};
     65 
     66 template <class T1, class T2, class T3>
     67 class CodecTestWith3Params
     68    : public ::testing::TestWithParam<
     69          std::tuple<const libaom_test::CodecFactory *, T1, T2, T3> > {};
     70 
     71 template <class T1, class T2, class T3, class T4>
     72 class CodecTestWith4Params
     73    : public ::testing::TestWithParam<
     74          std::tuple<const libaom_test::CodecFactory *, T1, T2, T3, T4> > {};
     75 
     76 template <class T1, class T2, class T3, class T4, class T5>
     77 class CodecTestWith5Params
     78    : public ::testing::TestWithParam<
     79          std::tuple<const libaom_test::CodecFactory *, T1, T2, T3, T4, T5> > {
     80 };
     81 
     82 template <class T1, class T2, class T3, class T4, class T5, class T6>
     83 class CodecTestWith6Params
     84    : public ::testing::TestWithParam<std::tuple<
     85          const libaom_test::CodecFactory *, T1, T2, T3, T4, T5, T6> > {};
     86 
     87 /*
     88 * AV1 Codec Definitions
     89 */
     90 class AV1Decoder : public Decoder {
     91 public:
     92  explicit AV1Decoder(aom_codec_dec_cfg_t cfg) : Decoder(cfg) {}
     93 
     94  AV1Decoder(aom_codec_dec_cfg_t cfg, const aom_codec_flags_t flag)
     95      : Decoder(cfg, flag) {}
     96 
     97 protected:
     98  aom_codec_iface_t *CodecInterface() const override {
     99 #if CONFIG_AV1_DECODER
    100    return aom_codec_av1_dx();
    101 #else
    102    return nullptr;
    103 #endif
    104  }
    105 };
    106 
    107 class AV1Encoder : public Encoder {
    108 public:
    109  AV1Encoder(aom_codec_enc_cfg_t cfg, const aom_codec_flags_t init_flags,
    110             TwopassStatsStore *stats)
    111      : Encoder(cfg, init_flags, stats) {}
    112 
    113 protected:
    114  aom_codec_iface_t *CodecInterface() const override {
    115 #if CONFIG_AV1_ENCODER
    116    return aom_codec_av1_cx();
    117 #else
    118    return nullptr;
    119 #endif
    120  }
    121 };
    122 
    123 class AV1CodecFactory : public CodecFactory {
    124 public:
    125  AV1CodecFactory() : CodecFactory() {}
    126 
    127  Decoder *CreateDecoder(aom_codec_dec_cfg_t cfg) const override {
    128    return CreateDecoder(cfg, 0);
    129  }
    130 
    131  Decoder *CreateDecoder(aom_codec_dec_cfg_t cfg,
    132                         const aom_codec_flags_t flags) const override {
    133 #if CONFIG_AV1_DECODER
    134    return new AV1Decoder(cfg, flags);
    135 #else
    136    (void)cfg;
    137    (void)flags;
    138    return nullptr;
    139 #endif
    140  }
    141 
    142  Encoder *CreateEncoder(aom_codec_enc_cfg_t cfg,
    143                         const aom_codec_flags_t init_flags,
    144                         TwopassStatsStore *stats) const override {
    145 #if CONFIG_AV1_ENCODER
    146    return new AV1Encoder(cfg, init_flags, stats);
    147 #else
    148    (void)cfg;
    149    (void)init_flags;
    150    (void)stats;
    151    return nullptr;
    152 #endif
    153  }
    154 
    155  aom_codec_err_t DefaultEncoderConfig(aom_codec_enc_cfg_t *cfg,
    156                                       unsigned int usage) const override {
    157 #if CONFIG_AV1_ENCODER
    158    return aom_codec_enc_config_default(aom_codec_av1_cx(), cfg, usage);
    159 #else
    160    (void)cfg;
    161    (void)usage;
    162    return AOM_CODEC_INCAPABLE;
    163 #endif
    164  }
    165 };
    166 
    167 const libaom_test::AV1CodecFactory kAV1;
    168 
    169 #define AV1_INSTANTIATE_TEST_SUITE(test, ...)                               \
    170  INSTANTIATE_TEST_SUITE_P(                                                 \
    171      AV1, test,                                                            \
    172      ::testing::Combine(                                                   \
    173          ::testing::Values(static_cast<const libaom_test::CodecFactory *>( \
    174              &libaom_test::kAV1)),                                         \
    175          __VA_ARGS__))
    176 
    177 }  // namespace libaom_test
    178 #endif  // AOM_TEST_CODEC_FACTORY_H_