| OLD | NEW | 
|    1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |    1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
|    2 // Use of this source code is governed by a BSD-style license that can be |    2 // Use of this source code is governed by a BSD-style license that can be | 
|    3 // found in the LICENSE file. |    3 // found in the LICENSE file. | 
|    4  |    4  | 
|    5 #ifndef MEDIA_VIDEO_CAPTURE_SCREEN_SCREEN_CAPTURER_H_ |    5 #ifndef MEDIA_VIDEO_CAPTURE_SCREEN_SCREEN_CAPTURER_H_ | 
|    6 #define MEDIA_VIDEO_CAPTURE_SCREEN_SCREEN_CAPTURER_H_ |    6 #define MEDIA_VIDEO_CAPTURE_SCREEN_SCREEN_CAPTURER_H_ | 
|    7  |    7  | 
|    8 #include "base/basictypes.h" |    8 #include "base/basictypes.h" | 
|    9 #include "base/callback.h" |    9 #include "base/callback.h" | 
|   10 #include "base/memory/ref_counted.h" |   10 #include "base/memory/ref_counted.h" | 
|   11 #include "base/shared_memory.h" |   11 #include "base/shared_memory.h" | 
|   12 #include "media/base/media_export.h" |   12 #include "media/base/media_export.h" | 
|   13 #include "media/video/capture/screen/shared_buffer.h" |   13 #include "media/video/capture/screen/shared_buffer.h" | 
|   14 #include "third_party/skia/include/core/SkRegion.h" |  | 
|   15  |   14  | 
|   16 namespace media { |   15 namespace media { | 
|   17  |   16  | 
|   18 class ScreenCaptureData; |   17 class ScreenCaptureData; | 
|   19 struct MouseCursorShape; |   18 struct MouseCursorShape; | 
|   20 class SharedBuffer; |   19 class SharedBuffer; | 
|   21  |   20  | 
|   22 // Class used to capture video frames asynchronously. |   21 // Class used to capture video frames asynchronously. | 
|   23 // |   22 // | 
|   24 // The full capture sequence is as follows: |   23 // The full capture sequence is as follows: | 
|   25 // |   24 // | 
|   26 // (1) Start |   25 // (1) Start | 
|   27 //     This is when pre-capture steps are executed, such as flagging the |   26 //     This is when pre-capture steps are executed, such as flagging the | 
|   28 //     display to prevent it from sleeping during a session. |   27 //     display to prevent it from sleeping during a session. | 
|   29 // |   28 // | 
|   30 // (2) InvalidateRegion |   29 // (2) CaptureFrame | 
|   31 //     This is an optional step where regions of the screen are marked as |  | 
|   32 //     invalid. Some platforms (Windows, for now) won't use this and will |  | 
|   33 //     instead calculate the diff-regions later (in step (2). Other |  | 
|   34 //     platforms (Mac) will use this to mark all the changed regions of the |  | 
|   35 //     screen. Some limited rect-merging (e.g., to eliminate exact |  | 
|   36 //     duplicates) may be done here. |  | 
|   37 // |  | 
|   38 // (3) CaptureFrame |  | 
|   39 //     This is where the bits for the invalid rects are packaged up and sent |   30 //     This is where the bits for the invalid rects are packaged up and sent | 
|   40 //     to the encoder. |   31 //     to the encoder. | 
|   41 //     A screen capture is performed if needed. For example, Windows requires |   32 //     A screen capture is performed if needed. For example, Windows requires | 
|   42 //     a capture to calculate the diff from the previous screen, whereas the |   33 //     a capture to calculate the diff from the previous screen, whereas the | 
|   43 //     Mac version does not. |   34 //     Mac version does not. | 
|   44 // |   35 // | 
|   45 // (4) Stop |  | 
|   46 //     This is when post-capture steps are executed, such as releasing the |  | 
|   47 //     assertion that prevents the display from sleeping. |  | 
|   48 // |  | 
|   49 // Implementation has to ensure the following guarantees: |   36 // Implementation has to ensure the following guarantees: | 
|   50 // 1. Double buffering |   37 // 1. Double buffering | 
|   51 //    Since data can be read while another capture action is happening. |   38 //    Since data can be read while another capture action is happening. | 
|   52 class MEDIA_EXPORT ScreenCapturer { |   39 class MEDIA_EXPORT ScreenCapturer { | 
|   53  public: |   40  public: | 
|   54   // Provides callbacks used by the capturer to pass captured video frames and |   41   // Provides callbacks used by the capturer to pass captured video frames and | 
|   55   // mouse cursor shapes to the processing pipeline. |   42   // mouse cursor shapes to the processing pipeline. | 
|   56   class MEDIA_EXPORT Delegate { |   43   class MEDIA_EXPORT Delegate { | 
|   57    public: |   44    public: | 
|   58     // Creates a shared memory buffer of the given size. Returns NULL if shared |   45     // Creates a shared memory buffer of the given size. Returns NULL if shared | 
| (...skipping 26 matching lines...) Expand all  Loading... | 
|   85 #if defined(OS_LINUX) |   72 #if defined(OS_LINUX) | 
|   86   // Creates platform-specific capturer and instructs it whether it should use |   73   // Creates platform-specific capturer and instructs it whether it should use | 
|   87   // X DAMAGE support. |   74   // X DAMAGE support. | 
|   88   static scoped_ptr<ScreenCapturer> CreateWithXDamage(bool use_x_damage); |   75   static scoped_ptr<ScreenCapturer> CreateWithXDamage(bool use_x_damage); | 
|   89 #endif  // defined(OS_LINUX) |   76 #endif  // defined(OS_LINUX) | 
|   90  |   77  | 
|   91   // Called at the beginning of a capturing session. |delegate| must remain |   78   // Called at the beginning of a capturing session. |delegate| must remain | 
|   92   // valid until Stop() is called. |   79   // valid until Stop() is called. | 
|   93   virtual void Start(Delegate* delegate) = 0; |   80   virtual void Start(Delegate* delegate) = 0; | 
|   94  |   81  | 
|   95   // Called at the end of a capturing session. |  | 
|   96   virtual void Stop() = 0; |  | 
|   97  |  | 
|   98   // Invalidates the specified region. |  | 
|   99   virtual void InvalidateRegion(const SkRegion& invalid_region) = 0; |  | 
|  100  |  | 
|  101   // Captures the screen data associated with each of the accumulated |   82   // Captures the screen data associated with each of the accumulated | 
|  102   // dirty region. When the capture is complete, the delegate is notified even |   83   // dirty region. When the capture is complete, the delegate is notified even | 
|  103   // if the dirty region is empty. |   84   // if the dirty region is empty. | 
|  104   // |   85   // | 
|  105   // It is OK to call this method while another thread is reading |   86   // It is OK to call this method while another thread is reading | 
|  106   // data of the previous capture. There can be at most one concurrent read |   87   // data of the previous capture. There can be at most one concurrent read | 
|  107   // going on when this method is called. |   88   // going on when this method is called. | 
|  108   virtual void CaptureFrame() = 0; |   89   virtual void CaptureFrame() = 0; | 
|  109 }; |   90 }; | 
|  110  |   91  | 
|  111 }  // namespace media |   92 }  // namespace media | 
|  112  |   93  | 
|  113 #endif  // MEDIA_VIDEO_CAPTURE_SCREEN_SCREEN_CAPTURER_H_ |   94 #endif  // MEDIA_VIDEO_CAPTURE_SCREEN_SCREEN_CAPTURER_H_ | 
| OLD | NEW |