1 // Copyright 2019 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIARECORDER_FAKE_ENCODED_VIDEO_FRAME_H_
6 #define THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIARECORDER_FAKE_ENCODED_VIDEO_FRAME_H_
7 
8 #include <stdint.h>
9 
10 #include "base/containers/span.h"
11 #include "third_party/blink/public/web/modules/mediastream/encoded_video_frame.h"
12 
13 namespace blink {
14 
15 class FakeEncodedVideoFrame : public EncodedVideoFrame {
16  public:
17   class Builder {
18    public:
WithKeyFrame(bool is_key_frame)19     Builder& WithKeyFrame(bool is_key_frame) {
20       is_key_frame_ = is_key_frame;
21       return *this;
22     }
WithData(std::string data)23     Builder& WithData(std::string data) {
24       data_ = std::move(data);
25       return *this;
26     }
WithCodec(media::VideoCodec codec)27     Builder& WithCodec(media::VideoCodec codec) {
28       codec_ = codec;
29       return *this;
30     }
WithColorSpace(media::VideoColorSpace color_space)31     Builder& WithColorSpace(media::VideoColorSpace color_space) {
32       color_space_ = color_space;
33       return *this;
34     }
WithResolution(gfx::Size resolution)35     Builder& WithResolution(gfx::Size resolution) {
36       resolution_ = resolution;
37       return *this;
38     }
BuildRefPtr()39     scoped_refptr<FakeEncodedVideoFrame> BuildRefPtr() {
40       return base::MakeRefCounted<FakeEncodedVideoFrame>(
41           is_key_frame_, std::move(data_), codec_, std::move(color_space_),
42           resolution_);
43     }
44 
45    private:
46     bool is_key_frame_ = false;
47     std::string data_;
48     media::VideoCodec codec_ = media::kCodecVP8;
49     base::Optional<media::VideoColorSpace> color_space_;
50     gfx::Size resolution_{0, 0};
51   };
52 
FakeEncodedVideoFrame(bool is_key_frame,std::string data,media::VideoCodec codec,base::Optional<media::VideoColorSpace> color_space,gfx::Size resolution)53   FakeEncodedVideoFrame(bool is_key_frame,
54                         std::string data,
55                         media::VideoCodec codec,
56                         base::Optional<media::VideoColorSpace> color_space,
57                         gfx::Size resolution)
58       : is_key_frame_(is_key_frame),
59         data_(std::move(data)),
60         codec_(codec),
61         color_space_(std::move(color_space)),
62         resolution_(resolution) {}
63 
Data()64   base::span<const uint8_t> Data() const override {
65     return base::make_span(reinterpret_cast<const uint8_t*>(data_.data()),
66                            data_.size());
67   }
Codec()68   media::VideoCodec Codec() const override { return codec_; }
IsKeyFrame()69   bool IsKeyFrame() const override { return is_key_frame_; }
ColorSpace()70   base::Optional<media::VideoColorSpace> ColorSpace() const override {
71     return color_space_;
72   }
Resolution()73   gfx::Size Resolution() const override { return resolution_; }
74 
75  private:
76   bool is_key_frame_;
77   std::string data_;
78   media::VideoCodec codec_;
79   base::Optional<media::VideoColorSpace> color_space_;
80   gfx::Size resolution_;
81 };
82 
83 }  // namespace blink
84 
85 #endif  // THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIARECORDER_FAKE_ENCODED_VIDEO_FRAME_H_
86