LCOV - code coverage report
Current view: top level - media/webrtc/trunk/webrtc/common_video/include - i420_buffer_pool.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 5 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 3 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  *  Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
       3             :  *
       4             :  *  Use of this source code is governed by a BSD-style license
       5             :  *  that can be found in the LICENSE file in the root of the source
       6             :  *  tree. An additional intellectual property rights grant can be found
       7             :  *  in the file PATENTS.  All contributing project authors may
       8             :  *  be found in the AUTHORS file in the root of the source tree.
       9             :  */
      10             : 
      11             : #ifndef WEBRTC_COMMON_VIDEO_INCLUDE_I420_BUFFER_POOL_H_
      12             : #define WEBRTC_COMMON_VIDEO_INCLUDE_I420_BUFFER_POOL_H_
      13             : 
      14             : #include <list>
      15             : #include <limits>
      16             : 
      17             : #include "webrtc/api/video/i420_buffer.h"
      18             : #include "webrtc/base/race_checker.h"
      19             : 
      20             : namespace webrtc {
      21             : 
      22             : // Simple buffer pool to avoid unnecessary allocations of I420Buffer objects.
      23             : // The pool manages the memory of the I420Buffer returned from CreateBuffer.
      24             : // When the I420Buffer is destructed, the memory is returned to the pool for use
      25             : // by subsequent calls to CreateBuffer. If the resolution passed to CreateBuffer
      26             : // changes, old buffers will be purged from the pool.
      27             : // Note that CreateBuffer will crash if more than kMaxNumberOfFramesBeforeCrash
      28             : // are created. This is to prevent memory leaks where frames are not returned.
      29           0 : class I420BufferPool {
      30             :  public:
      31           0 :   I420BufferPool()
      32           0 :       : I420BufferPool(false) {}
      33           0 :   explicit I420BufferPool(bool zero_initialize)
      34           0 :       : I420BufferPool(zero_initialize, std::numeric_limits<size_t>::max()) {}
      35             :   I420BufferPool(bool zero_initialze, size_t max_number_of_buffers);
      36             : 
      37             :   // Returns a buffer from the pool. If no suitable buffer exist in the pool
      38             :   // and there are less than |max_number_of_buffers| pending, a buffer is
      39             :   // created. Returns null otherwise.
      40             :   rtc::scoped_refptr<I420Buffer> CreateBuffer(int width, int height);
      41             :   // Clears buffers_ and detaches the thread checker so that it can be reused
      42             :   // later from another thread.
      43             :   void Release();
      44             : 
      45             :  private:
      46             :   // Explicitly use a RefCountedObject to get access to HasOneRef,
      47             :   // needed by the pool to check exclusive access.
      48             :   using PooledI420Buffer = rtc::RefCountedObject<I420Buffer>;
      49             : 
      50             :   rtc::RaceChecker race_checker_;
      51             :   std::list<rtc::scoped_refptr<PooledI420Buffer>> buffers_;
      52             :   // If true, newly allocated buffers are zero-initialized. Note that recycled
      53             :   // buffers are not zero'd before reuse. This is required of buffers used by
      54             :   // FFmpeg according to http://crbug.com/390941, which only requires it for the
      55             :   // initial allocation (as shown by FFmpeg's own buffer allocation code). It
      56             :   // has to do with "Use-of-uninitialized-value" on "Linux_msan_chrome".
      57             :   const bool zero_initialize_;
      58             :   // Max number of buffers this pool can have pending.
      59             :   const size_t max_number_of_buffers_;
      60             : };
      61             : 
      62             : }  // namespace webrtc
      63             : 
      64             : #endif  // WEBRTC_COMMON_VIDEO_INCLUDE_I420_BUFFER_POOL_H_

Generated by: LCOV version 1.13