Home | History | Annotate | Download | only in base
      1 // Copyright 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef MEDIA_BASE_VIDEO_FRAME_POOL_H_
      6 #define MEDIA_BASE_VIDEO_FRAME_POOL_H_
      7 
      8 #include "media/base/media_export.h"
      9 #include "media/base/video_frame.h"
     10 
     11 namespace media {
     12 
     13 // Simple VideoFrame pool used to avoid unnecessarily allocating and destroying
     14 // VideoFrame objects. The pool manages the memory for the VideoFrame
     15 // returned by CreateFrame(). When one of these VideoFrames is destroyed,
     16 // the memory is returned to the pool for use by a subsequent CreateFrame()
     17 // call. The memory in the pool is retained for the life of the
     18 // VideoFramePool object. If the parameters passed to CreateFrame() change
     19 // during the life of this object, then the memory used by frames with the old
     20 // parameter values will be purged from the pool.
     21 class MEDIA_EXPORT VideoFramePool {
     22  public:
     23   VideoFramePool();
     24   ~VideoFramePool();
     25 
     26   // Returns a frame from the pool that matches the specified
     27   // parameters or creates a new frame if no suitable frame exists in
     28   // the pool.
     29   scoped_refptr<VideoFrame> CreateFrame(VideoFrame::Format format,
     30                                         const gfx::Size& coded_size,
     31                                         const gfx::Rect& visible_rect,
     32                                         const gfx::Size& natural_size,
     33                                         base::TimeDelta timestamp);
     34 
     35 protected:
     36   friend class VideoFramePoolTest;
     37 
     38   // Returns the number of frames in the pool for testing purposes.
     39   size_t GetPoolSizeForTesting() const;
     40 
     41  private:
     42   class PoolImpl;
     43   scoped_refptr<PoolImpl> pool_;
     44 
     45   DISALLOW_COPY_AND_ASSIGN(VideoFramePool);
     46 };
     47 
     48 }  // namespace media
     49 
     50 #endif  // MEDIA_BASE_VIDEO_FRAME_POOL_H_
     51