17e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger// Copyright 2013 The Chromium Authors. All rights reserved. 2ae665a522bd46bea44c5ea84c89c8b1731954170Stephen Hemminger// Use of this source code is governed by a BSD-style license that can be 37e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger// found in the LICENSE file. 47e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger 57e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger#ifndef MEDIA_BASE_VIDEO_FRAME_POOL_H_ 67e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger#define MEDIA_BASE_VIDEO_FRAME_POOL_H_ 77e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger 87e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger#include "media/base/media_export.h" 9ae665a522bd46bea44c5ea84c89c8b1731954170Stephen Hemminger#include "media/base/video_frame.h" 10ae665a522bd46bea44c5ea84c89c8b1731954170Stephen Hemminger 117e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemmingernamespace media { 127e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger 137e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger// Simple VideoFrame pool used to avoid unnecessarily allocating and destroying 147e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger// VideoFrame objects. The pool manages the memory for the VideoFrame 157e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger// returned by CreateFrame(). When one of these VideoFrames is destroyed, 167e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger// the memory is returned to the pool for use by a subsequent CreateFrame() 177e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger// call. The memory in the pool is retained for the life of the 187e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger// VideoFramePool object. If the parameters passed to CreateFrame() change 197e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger// during the life of this object, then the memory used by frames with the old 207e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger// parameter values will be purged from the pool. 217e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemmingerclass MEDIA_EXPORT VideoFramePool { 227e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger public: 237e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger VideoFramePool(); 247e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger ~VideoFramePool(); 257e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger 267e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger // Returns a frame from the pool that matches the specified 277e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger // parameters or creates a new frame if no suitable frame exists in 287e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger // the pool. 297e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger scoped_refptr<VideoFrame> CreateFrame(VideoFrame::Format format, 307e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger const gfx::Size& coded_size, 317e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger const gfx::Rect& visible_rect, 327e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger const gfx::Size& natural_size, 337e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger base::TimeDelta timestamp); 347e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger 357e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemmingerprotected: 367e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger friend class VideoFramePoolTest; 377e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger 387e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger // Returns the number of frames in the pool for testing purposes. 397e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger size_t GetPoolSizeForTesting() const; 407e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger 417e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger private: 427e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger class PoolImpl; 437e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger scoped_refptr<PoolImpl> pool_; 447e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger 457e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger DISALLOW_COPY_AND_ASSIGN(VideoFramePool); 467e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger}; 477e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger 487e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger} // namespace media 497e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger 507e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger#endif // MEDIA_BASE_VIDEO_FRAME_POOL_H_ 517e7c737245a48cac0c9386b4cab6c35622fde629net[shemminger]!shemminger