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