10529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 20529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Use of this source code is governed by a BSD-style license that can be 30529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// found in the LICENSE file. 40529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef MEDIA_CAST_SENDER_SOFTWARE_VIDEO_ENCODER_H_ 6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define MEDIA_CAST_SENDER_SOFTWARE_VIDEO_ENCODER_H_ 70529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 80529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/basictypes.h" 90529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/memory/ref_counted.h" 100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochnamespace media { 120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass VideoFrame; 130529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 140529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochnamespace media { 160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochnamespace cast { 17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)struct EncodedFrame; 180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass SoftwareVideoEncoder { 200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch public: 210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual ~SoftwareVideoEncoder() {} 220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Initialize the encoder before Encode() can be called. This method 240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // must be called on the thread that Encode() is called. 250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual void Initialize() = 0; 260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Encode a raw image (as a part of a video stream). 280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual bool Encode(const scoped_refptr<media::VideoFrame>& video_frame, 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EncodedFrame* encoded_image) = 0; 300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 310529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Update the encoder with a new target bit rate. 320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual void UpdateRates(uint32 new_bitrate) = 0; 330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 340529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Set the next frame to be a key frame. 350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual void GenerateKeyFrame() = 0; 360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Set the last frame to reference. 380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual void LatestFrameIdToReference(uint32 frame_id) = 0; 390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}; 400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} // namespace cast 420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} // namespace media 430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif // MEDIA_CAST_SENDER_SOFTWARE_VIDEO_ENCODER_H_ 45