Home | History | Annotate | Download | only in android
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef MEDIA_AUDIO_ANDROID_OPENSLES_UTIL_H_
      6 #define MEDIA_AUDIO_ANDROID_OPENSLES_UTIL_H_
      7 
      8 #include <SLES/OpenSLES.h>
      9 
     10 #include "base/logging.h"
     11 
     12 namespace media {
     13 
     14 template <typename SLType, typename SLDerefType>
     15 class ScopedSLObject {
     16  public:
     17   ScopedSLObject() : obj_(NULL) {}
     18 
     19   ~ScopedSLObject() { Reset(); }
     20 
     21   SLType* Receive() {
     22     DCHECK(!obj_);
     23     return &obj_;
     24   }
     25 
     26   SLDerefType operator->() { return *obj_; }
     27 
     28   SLType Get() const { return obj_; }
     29 
     30   void Reset() {
     31     if (obj_) {
     32       (*obj_)->Destroy(obj_);
     33       obj_ = NULL;
     34     }
     35   }
     36 
     37  private:
     38   SLType obj_;
     39 };
     40 
     41 typedef ScopedSLObject<SLObjectItf, const SLObjectItf_*> ScopedSLObjectItf;
     42 
     43 }  // namespace media
     44 
     45 #endif  // MEDIA_AUDIO_ANDROID_OPENSLES_UTIL_H_
     46