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