• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright (c) 2013 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_MODULES_AUDIO_DEVICE_ANDROID_LOW_LATENCY_EVENT_H_
12 #define WEBRTC_MODULES_AUDIO_DEVICE_ANDROID_LOW_LATENCY_EVENT_H_
13 
14 #include <errno.h>
15 #include <limits.h>
16 #include <fcntl.h>
17 #include <stdio.h>
18 #include <sys/ioctl.h>
19 #include <sys/socket.h>
20 #include <sys/types.h>
21 
22 namespace webrtc {
23 
24 // Implementation of event for single waiter, single signal threads. Event
25 // is sticky.
26 class LowLatencyEvent {
27  public:
28   LowLatencyEvent();
29   ~LowLatencyEvent();
30 
31   // Readies the event. Must be called before signaling or waiting for event.
32   // Returns true on success.
33   bool Start();
34   // Shuts down the event and releases threads calling WaitOnEvent. Once
35   // stopped SignalEvent and WaitOnEvent will have no effect. Start can be
36   // called to re-enable the event.
37   // Returns true on success.
38   bool Stop();
39 
40   // Releases thread calling WaitOnEvent in a sticky fashion.
41   void SignalEvent(int event_id, int event_msg);
42   // Waits until SignalEvent or Stop is called.
43   void WaitOnEvent(int* event_id, int* event_msg);
44 
45  private:
46   typedef int Handle;
47   static const Handle kInvalidHandle;
48   static const int kReadHandle;
49   static const int kWriteHandle;
50 
51   // Closes the handle. Returns true on success.
52   static bool Close(Handle* handle);
53 
54   // SignalEvent and WaitOnEvent are actually read/write to file descriptors.
55   // Write is signal.
56   void WriteFd(int message_id, int message);
57   // Read is wait.
58   void ReadFd(int* message_id, int* message);
59 
60   Handle handles_[2];
61 };
62 
63 }  // namespace webrtc
64 
65 #endif  // WEBRTC_MODULES_AUDIO_DEVICE_ANDROID_LOW_LATENCY_EVENT_H_
66