* Revert "post all desktop capturer apis to worker threads"
This reverts commit 5a28759fea.
* refactor: desktop capturer module
* Creates the screen and window capturer for the liftime of the app
* Fixes incorrect usage of weak ptr
* build: add //ui/snapshot to chromium_src deps
* fix: handle scenarios when there are no captured sources
		
	
			
		
			
				
	
	
		
			73 lines
		
	
	
	
		
			2.3 KiB
			
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
	
		
			2.3 KiB
			
		
	
	
	
		
			C++
		
	
	
	
	
	
// Copyright (c) 2015 GitHub, Inc.
 | 
						|
// Use of this source code is governed by the MIT license that can be
 | 
						|
// found in the LICENSE file.
 | 
						|
 | 
						|
#ifndef ATOM_BROWSER_API_ATOM_API_DESKTOP_CAPTURER_H_
 | 
						|
#define ATOM_BROWSER_API_ATOM_API_DESKTOP_CAPTURER_H_
 | 
						|
 | 
						|
#include <memory>
 | 
						|
#include <string>
 | 
						|
#include <vector>
 | 
						|
 | 
						|
#include "atom/browser/api/event_emitter.h"
 | 
						|
#include "chrome/browser/media/webrtc/desktop_media_list_observer.h"
 | 
						|
#include "chrome/browser/media/webrtc/native_desktop_media_list.h"
 | 
						|
#include "native_mate/handle.h"
 | 
						|
 | 
						|
namespace atom {
 | 
						|
 | 
						|
namespace api {
 | 
						|
 | 
						|
class DesktopCapturer : public mate::EventEmitter<DesktopCapturer>,
 | 
						|
                        public DesktopMediaListObserver {
 | 
						|
 public:
 | 
						|
  struct Source {
 | 
						|
    DesktopMediaList::Source media_list_source;
 | 
						|
    // Will be an empty string if not available.
 | 
						|
    std::string display_id;
 | 
						|
  };
 | 
						|
 | 
						|
  static mate::Handle<DesktopCapturer> Create(v8::Isolate* isolate);
 | 
						|
 | 
						|
  static void BuildPrototype(v8::Isolate* isolate,
 | 
						|
                             v8::Local<v8::FunctionTemplate> prototype);
 | 
						|
 | 
						|
  void StartHandling(bool capture_window,
 | 
						|
                     bool capture_screen,
 | 
						|
                     const gfx::Size& thumbnail_size);
 | 
						|
 | 
						|
 protected:
 | 
						|
  explicit DesktopCapturer(v8::Isolate* isolate);
 | 
						|
  ~DesktopCapturer() override;
 | 
						|
 | 
						|
  // DesktopMediaListObserver overrides.
 | 
						|
  void OnSourceAdded(DesktopMediaList* list, int index) override;
 | 
						|
  void OnSourceRemoved(DesktopMediaList* list, int index) override;
 | 
						|
  void OnSourceMoved(DesktopMediaList* list,
 | 
						|
                     int old_index,
 | 
						|
                     int new_index) override;
 | 
						|
  void OnSourceNameChanged(DesktopMediaList* list, int index) override;
 | 
						|
  void OnSourceThumbnailChanged(DesktopMediaList* list, int index) override;
 | 
						|
  void OnSourceUnchanged(DesktopMediaList* list) override;
 | 
						|
  bool ShouldScheduleNextRefresh(DesktopMediaList* list) override;
 | 
						|
 | 
						|
 private:
 | 
						|
  void UpdateSourcesList(DesktopMediaList* list);
 | 
						|
 | 
						|
  std::unique_ptr<DesktopMediaList> window_capturer_;
 | 
						|
  std::unique_ptr<DesktopMediaList> screen_capturer_;
 | 
						|
  std::vector<DesktopCapturer::Source> captured_sources_;
 | 
						|
  bool capture_window_ = false;
 | 
						|
  bool capture_screen_ = false;
 | 
						|
#if defined(OS_WIN)
 | 
						|
  bool using_directx_capturer_ = false;
 | 
						|
#endif  // defined(OS_WIN)
 | 
						|
 | 
						|
  DISALLOW_COPY_AND_ASSIGN(DesktopCapturer);
 | 
						|
};
 | 
						|
 | 
						|
}  // namespace api
 | 
						|
 | 
						|
}  // namespace atom
 | 
						|
 | 
						|
#endif  // ATOM_BROWSER_API_ATOM_API_DESKTOP_CAPTURER_H_
 |