Open3D (C++ API)  0.15.1
VideoFilter.h
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // - Open3D: www.open3d.org -
3 // ----------------------------------------------------------------------------
4 // The MIT License (MIT)
5 //
6 // Copyright (c) 2018-2021 www.open3d.org
7 //
8 // Permission is hereby granted, free of charge, to any person obtaining a copy
9 // of this software and associated documentation files (the "Software"), to deal
10 // in the Software without restriction, including without limitation the rights
11 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 // copies of the Software, and to permit persons to whom the Software is
13 // furnished to do so, subject to the following conditions:
14 //
15 // The above copyright notice and this permission notice shall be included in
16 // all copies or substantial portions of the Software.
17 //
18 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
24 // IN THE SOFTWARE.
25 // ----------------------------------------------------------------------------
26 // ----------------------------------------------------------------------------
27 // Contains source code from
28 // https://github.com/mpromonet/webrtc-streamer
29 //
30 // This software is in the public domain, furnished "as is", without technical
31 // support, and with no warranty, express or implied, as to its usefulness for
32 // any purpose.
33 // ----------------------------------------------------------------------------
34 //
35 // This is a private header. It shall be hidden from Open3D's public API. Do not
36 // put this in Open3D.h.in.
37 
38 #pragma once
39 
40 #include <pc/video_track_source.h>
41 
43 
44 namespace open3d {
45 namespace visualization {
46 namespace webrtc_server {
47 
53 template <class T>
55 public:
56  static rtc::scoped_refptr<VideoFilter> Create(
57  rtc::scoped_refptr<BitmapTrackSourceInterface> video_source,
58  const std::map<std::string, std::string>& opts) {
59  std::unique_ptr<T> source = absl::WrapUnique(new T(video_source, opts));
60  if (!source) {
61  return nullptr;
62  }
63  return new rtc::RefCountedObject<VideoFilter>(std::move(source));
64  }
65 
66 protected:
67  explicit VideoFilter(std::unique_ptr<T> source)
68  : BitmapTrackSource(/*remote=*/false), source_(std::move(source)) {}
69 
70  SourceState state() const override { return kLive; }
71  bool GetStats(Stats* stats) override {
72  bool result = false;
73  T* source = source_.get();
74  if (source) {
75  stats->input_height = source->height();
76  stats->input_width = source->width();
77  result = true;
78  }
79  return result;
80  }
81 
82 private:
83  rtc::VideoSourceInterface<webrtc::VideoFrame>* source() override {
84  return source_.get();
85  }
86  std::unique_ptr<T> source_;
87 };
88 
89 } // namespace webrtc_server
90 } // namespace visualization
91 } // namespace open3d
VideoFilter is a templated class for video frame processing.
Definition: VideoFilter.h:54
VideoFilter(std::unique_ptr< T > source)
Definition: VideoFilter.h:67
SourceState state() const override
Definition: VideoFilter.h:70
static rtc::scoped_refptr< VideoFilter > Create(rtc::scoped_refptr< BitmapTrackSourceInterface > video_source, const std::map< std::string, std::string > &opts)
Definition: VideoFilter.h:56
bool GetStats(Stats *stats) override
Definition: VideoFilter.h:71
Definition: PinholeCameraIntrinsic.cpp:35
Definition: Device.h:138