123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- #pragma once
- #include "media/base/video_broadcaster.h"
- #include "api/media_stream_interface.h"
- #include "api/video/i420_buffer.h"
- class VideoScaler : public rtc::VideoSinkInterface<webrtc::VideoFrame>, public rtc::VideoSourceInterface<webrtc::VideoFrame>
- {
- public:
- VideoScaler(rtc::scoped_refptr<webrtc::VideoTrackSourceInterface> videoSource, const std::map<std::string, std::string> &opts) :
- m_videoSource(videoSource),
- m_width(0), m_height(0),
- m_rotation(webrtc::kVideoRotation_0)
-
- {
- if (opts.find("width") != opts.end())
- {
- m_width = std::stoi(opts.at("width"));
- }
- if (opts.find("height") != opts.end())
- {
- m_height = std::stoi(opts.at("height"));
- }
- if (opts.find("rotation") != opts.end())
- {
- int rotation = std::stoi(opts.at("rotation"));
- switch (rotation) {
- case 90: m_rotation = webrtc::kVideoRotation_90; break;
- case 180: m_rotation = webrtc::kVideoRotation_180; break;
- case 270: m_rotation = webrtc::kVideoRotation_270; break;
- }
- }
-
- }
- virtual ~VideoScaler()
- {
- }
- void OnFrame(const webrtc::VideoFrame &frame) override
- {
-
-
-
-
-
-
-
- m_broadcaster.OnFrame(frame);
-
- }
- void AddOrUpdateSink(rtc::VideoSinkInterface<webrtc::VideoFrame> *sink, const rtc::VideoSinkWants &wants) override
- {
- m_videoSource->AddOrUpdateSink(this,wants);
- m_broadcaster.AddOrUpdateSink(sink, wants);
- }
- void RemoveSink(rtc::VideoSinkInterface<webrtc::VideoFrame> *sink) override
- {
- m_videoSource->RemoveSink(this);
- m_broadcaster.RemoveSink(sink);
- }
-
-
- private:
- rtc::scoped_refptr<webrtc::VideoTrackSourceInterface> m_videoSource;
- rtc::VideoBroadcaster m_broadcaster;
- int m_width;
- int m_height;
- webrtc::VideoRotation m_rotation;
-
- };
|