blob: d6101980df9d94f2b3295ead677c488aed3ad5fa [file] [log] [blame]
// Copyright 2021 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "remoting/protocol/webrtc_video_frame_adapter.h"
#include <utility>
#include "base/notreached.h"
#include "third_party/webrtc/rtc_base/ref_counted_object.h"
namespace remoting {
namespace protocol {
WebrtcVideoFrameAdapter::WebrtcVideoFrameAdapter(
std::unique_ptr<webrtc::DesktopFrame> frame)
: frame_(std::move(frame)), frame_size_(frame_->size()) {}
WebrtcVideoFrameAdapter::~WebrtcVideoFrameAdapter() = default;
// static
webrtc::VideoFrame WebrtcVideoFrameAdapter::CreateVideoFrame(
std::unique_ptr<webrtc::DesktopFrame> desktop_frame) {
rtc::scoped_refptr<WebrtcVideoFrameAdapter> adapter =
new rtc::RefCountedObject<WebrtcVideoFrameAdapter>(
std::move(desktop_frame));
return webrtc::VideoFrame::Builder().set_video_frame_buffer(adapter).build();
}
std::unique_ptr<webrtc::DesktopFrame>
WebrtcVideoFrameAdapter::TakeDesktopFrame() {
return std::move(frame_);
}
webrtc::VideoFrameBuffer::Type WebrtcVideoFrameAdapter::type() const {
return Type::kNative;
}
int WebrtcVideoFrameAdapter::width() const {
return frame_size_.width();
}
int WebrtcVideoFrameAdapter::height() const {
return frame_size_.height();
}
rtc::scoped_refptr<webrtc::I420BufferInterface>
WebrtcVideoFrameAdapter::ToI420() {
// Strictly speaking all adapters must implement ToI420(), so that if the
// external encoder fails, an internal libvpx could be used. But the
// remoting encoder already uses libvpx, so there's no reason for fallback to
// happen.
NOTIMPLEMENTED();
return nullptr;
}
} // namespace protocol
} // namespace remoting