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