Home | History | Annotate | Download | only in android
      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