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