tor-browser

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

decoder_database_unittest.cc (2763B)


      1 /*
      2 *  Copyright (c) 2022 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 #include "modules/video_coding/decoder_database.h"
     12 
     13 #include <memory>
     14 #include <utility>
     15 
     16 #include "api/test/mock_video_decoder.h"
     17 #include "api/video/video_codec_type.h"
     18 #include "api/video_codecs/video_decoder.h"
     19 #include "test/gmock.h"
     20 #include "test/gtest.h"
     21 
     22 namespace webrtc {
     23 namespace {
     24 
     25 using ::testing::NiceMock;
     26 
     27 // Test registering and unregistering an external decoder instance.
     28 TEST(VCMDecoderDatabaseTest, RegisterExternalDecoder) {
     29  VCMDecoderDatabase db;
     30  constexpr int kPayloadType = 1;
     31  ASSERT_FALSE(db.IsExternalDecoderRegistered(kPayloadType));
     32 
     33  auto decoder = std::make_unique<NiceMock<MockVideoDecoder>>();
     34  bool decoder_deleted = false;
     35  EXPECT_CALL(*decoder, Destruct).WillOnce([&decoder_deleted] {
     36    decoder_deleted = true;
     37  });
     38 
     39  db.RegisterExternalDecoder(kPayloadType, std::move(decoder));
     40  EXPECT_TRUE(db.IsExternalDecoderRegistered(kPayloadType));
     41  db.DeregisterExternalDecoder(kPayloadType);
     42  EXPECT_TRUE(decoder_deleted);
     43  EXPECT_FALSE(db.IsExternalDecoderRegistered(kPayloadType));
     44 }
     45 
     46 TEST(VCMDecoderDatabaseTest, RegisterReceiveCodec) {
     47  VCMDecoderDatabase db;
     48  constexpr int kPayloadType = 1;
     49  ASSERT_FALSE(db.DeregisterReceiveCodec(kPayloadType));
     50 
     51  VideoDecoder::Settings settings;
     52  settings.set_codec_type(kVideoCodecVP8);
     53  settings.set_max_render_resolution({10, 10});
     54  settings.set_number_of_cores(4);
     55  db.RegisterReceiveCodec(kPayloadType, settings);
     56 
     57  EXPECT_TRUE(db.DeregisterReceiveCodec(kPayloadType));
     58 }
     59 
     60 TEST(VCMDecoderDatabaseTest, DeregisterReceiveCodecs) {
     61  VCMDecoderDatabase db;
     62  constexpr int kPayloadType1 = 1;
     63  constexpr int kPayloadType2 = 2;
     64  ASSERT_FALSE(db.DeregisterReceiveCodec(kPayloadType1));
     65  ASSERT_FALSE(db.DeregisterReceiveCodec(kPayloadType2));
     66 
     67  VideoDecoder::Settings settings1;
     68  settings1.set_codec_type(kVideoCodecVP8);
     69  settings1.set_max_render_resolution({10, 10});
     70  settings1.set_number_of_cores(4);
     71 
     72  VideoDecoder::Settings settings2 = settings1;
     73  settings2.set_codec_type(kVideoCodecVP9);
     74 
     75  db.RegisterReceiveCodec(kPayloadType1, settings1);
     76  db.RegisterReceiveCodec(kPayloadType2, settings2);
     77 
     78  db.DeregisterReceiveCodecs();
     79 
     80  // All receive codecs must have been removed.
     81  EXPECT_FALSE(db.DeregisterReceiveCodec(kPayloadType1));
     82  EXPECT_FALSE(db.DeregisterReceiveCodec(kPayloadType2));
     83 }
     84 
     85 }  // namespace
     86 }  // namespace webrtc