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#ifndef WEBRTC_MODULES_AUDIO_PROCESSING_PROCESSING_COMPONENT_H_
12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define WEBRTC_MODULES_AUDIO_PROCESSING_PROCESSING_COMPONENT_H_
13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <vector>
15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
16a1a60018a1f1ec863451ad0ed4eae58239882920andrew@webrtc.org#include "webrtc/common.h"
17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace webrtc {
1925613ea5abb9c44acaab04519677f6d17fe5e306andrew@webrtc.org
20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass ProcessingComponent {
21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org public:
2224add9260e60f34e85ed8d936da014128e19fd84pbos@webrtc.org  ProcessingComponent();
23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  virtual ~ProcessingComponent();
24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  virtual int Initialize();
2625613ea5abb9c44acaab04519677f6d17fe5e306andrew@webrtc.org  virtual void SetExtraOptions(const Config& config) {}
27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  virtual int Destroy();
28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  bool is_component_enabled() const;
30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org protected:
32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  virtual int Configure();
33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  int EnableComponent(bool enable);
34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  void* handle(int index) const;
35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  int num_handles() const;
36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org private:
38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  virtual void* CreateHandle() const = 0;
39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  virtual int InitializeHandle(void* handle) const = 0;
40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  virtual int ConfigureHandle(void* handle) const = 0;
41ffc2de0133683fb103eef61f21134f469bc099dbbjornv@webrtc.org  virtual void DestroyHandle(void* handle) const = 0;
42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  virtual int num_handles_required() const = 0;
43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  virtual int GetHandleError(void* handle) const = 0;
44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  std::vector<void*> handles_;
46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  bool initialized_;
47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  bool enabled_;
48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  int num_handles_;
49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org};
5025613ea5abb9c44acaab04519677f6d17fe5e306andrew@webrtc.org
51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}  // namespace webrtc
52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif  // WEBRTC_MODULES_AUDIO_PROCESSING_PROCESSING_COMPONENT_H__
54