11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#ifndef REMOTING_CODEC_VIDEO_ENCODER_HELPER_H_ 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define REMOTING_CODEC_VIDEO_ENCODER_HELPER_H_ 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/memory/scoped_ptr.h" 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "third_party/webrtc/modules/desktop_capture/desktop_geometry.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace webrtc { 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass DesktopFrame; 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass DesktopRegion; 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace remoting { 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass VideoPacket; 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass VideoEncoderHelper { 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci VideoEncoderHelper(); 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Returns a new VideoPacket with common fields (e.g. capture_time_ms, rects 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // list, frame shape if any) initialized based on the supplied |frame|. 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Screen width and height will be set iff |frame|'s size differs from that 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // of the previously-supplied frame. 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<VideoPacket> CreateVideoPacket(const webrtc::DesktopFrame& frame); 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Returns a new VideoPacket with the common fields populated from |frame|, 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // but the updated rects overridden by |updated_region|. This is useful for 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // encoders which alter the updated region e.g. by expanding it to macroblock 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // boundaries. 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<VideoPacket> CreateVideoPacketWithUpdatedRegion( 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const webrtc::DesktopFrame& frame, 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const webrtc::DesktopRegion& updated_region); 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private: 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The most recent screen size. Used to detect screen size changes. 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci webrtc::DesktopSize screen_size_; 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DISALLOW_COPY_AND_ASSIGN(VideoEncoderHelper); 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace remoting 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif // REMOTING_CODEC_VIDEO_ENCODER_HELPER_H_ 47