1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*
2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *
4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  Use of this source code is governed by a BSD-style license
5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  that can be found in the LICENSE file in the root of the source
6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  tree. An additional intellectual property rights grant can be found
7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  in the file PATENTS.  All contributing project authors may
8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  be found in the AUTHORS file in the root of the source tree.
9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */
10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
11b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ViESharedData contains data and instances common to all interface
12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// implementations.
13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifndef WEBRTC_VIDEO_ENGINE_VIE_SHARED_DATA_H_
15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define WEBRTC_VIDEO_ENGINE_VIE_SHARED_DATA_H_
16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
17bf76ae2bdfc0b4e8e875f6cce1c85d4d66357bebmflodman@webrtc.org#include <map>
18bf76ae2bdfc0b4e8e875f6cce1c85d4d66357bebmflodman@webrtc.org
197645e4dedc3700d785a8e6b377db8c1659ff2583mflodman@webrtc.org#include "webrtc/system_wrappers/interface/scoped_ptr.h"
20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace webrtc {
22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
23ac6d919eec548c708588f29923f617a17283c7e2andresp@webrtc.orgclass Config;
24bf76ae2bdfc0b4e8e875f6cce1c85d4d66357bebmflodman@webrtc.orgclass CpuOveruseObserver;
25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass ProcessThread;
26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass ViEChannelManager;
27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass ViEInputManager;
28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass ViERenderManager;
29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass ViESharedData {
31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org public:
327645e4dedc3700d785a8e6b377db8c1659ff2583mflodman@webrtc.org  explicit ViESharedData(const Config& config);
33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  ~ViESharedData();
34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  void SetLastError(const int error) const;
36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  int LastErrorInternal() const;
37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  int NumberOfCores() const;
38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
397645e4dedc3700d785a8e6b377db8c1659ff2583mflodman@webrtc.org  // TODO(mflodman) Remove all calls to 'instance_id()'.
407645e4dedc3700d785a8e6b377db8c1659ff2583mflodman@webrtc.org  int instance_id() { return 0;}
417645e4dedc3700d785a8e6b377db8c1659ff2583mflodman@webrtc.org  ViEChannelManager* channel_manager() { return channel_manager_.get(); }
427645e4dedc3700d785a8e6b377db8c1659ff2583mflodman@webrtc.org  ViEInputManager* input_manager() { return input_manager_.get(); }
437645e4dedc3700d785a8e6b377db8c1659ff2583mflodman@webrtc.org  ViERenderManager* render_manager() { return render_manager_.get(); }
44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
45bf76ae2bdfc0b4e8e875f6cce1c85d4d66357bebmflodman@webrtc.org  std::map<int, CpuOveruseObserver*>* overuse_observers() {
46bf76ae2bdfc0b4e8e875f6cce1c85d4d66357bebmflodman@webrtc.org    return &overuse_observers_; }
47bf76ae2bdfc0b4e8e875f6cce1c85d4d66357bebmflodman@webrtc.org
48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org private:
49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  const int number_cores_;
50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
517645e4dedc3700d785a8e6b377db8c1659ff2583mflodman@webrtc.org  scoped_ptr<ViEChannelManager> channel_manager_;
527645e4dedc3700d785a8e6b377db8c1659ff2583mflodman@webrtc.org  scoped_ptr<ViEInputManager> input_manager_;
537645e4dedc3700d785a8e6b377db8c1659ff2583mflodman@webrtc.org  scoped_ptr<ViERenderManager> render_manager_;
54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  ProcessThread* module_process_thread_;
55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  mutable int last_error_;
56bf76ae2bdfc0b4e8e875f6cce1c85d4d66357bebmflodman@webrtc.org
57bf76ae2bdfc0b4e8e875f6cce1c85d4d66357bebmflodman@webrtc.org  std::map<int, CpuOveruseObserver*> overuse_observers_;
58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org};
59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}  // namespace webrtc
61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif  // WEBRTC_VIDEO_ENGINE_VIE_SHARED_DATA_H_
63