| /* | |
| * Copyright 2013 The WebRTC project authors. All Rights Reserved. | |
| * | |
| * Use of this source code is governed by a BSD-style license | |
| * that can be found in the LICENSE file in the root of the source | |
| * tree. An additional intellectual property rights grant can be found | |
| * in the file PATENTS. All contributing project authors may | |
| * be found in the AUTHORS file in the root of the source tree. | |
| */ | |
| package org.webrtc; | |
| /** Java wrapper for a C++ MediaSourceInterface. */ | |
| public class MediaSource { | |
| /** Tracks MediaSourceInterface.SourceState */ | |
| public enum State { | |
| INITIALIZING, | |
| LIVE, | |
| ENDED, | |
| MUTED; | |
| @CalledByNative | |
| static State fromNativeIndex(int nativeIndex) { | |
| return values()[nativeIndex]; | |
| } | |
| } | |
| private final RefCountDelegate refCountDelegate; | |
| private long nativeSource; | |
| public MediaSource(long nativeSource) { | |
| refCountDelegate = new RefCountDelegate(() -> JniCommon.nativeReleaseRef(nativeSource)); | |
| this.nativeSource = nativeSource; | |
| } | |
| public State state() { | |
| checkMediaSourceExists(); | |
| return nativeGetState(nativeSource); | |
| } | |
| public void dispose() { | |
| checkMediaSourceExists(); | |
| refCountDelegate.release(); | |
| nativeSource = 0; | |
| } | |
| /** Returns a pointer to webrtc::MediaSourceInterface. */ | |
| protected long getNativeMediaSource() { | |
| checkMediaSourceExists(); | |
| return nativeSource; | |
| } | |
| /** | |
| * Runs code in {@code runnable} holding a reference to the media source. If the object has | |
| * already been released, does nothing. | |
| */ | |
| void runWithReference(Runnable runnable) { | |
| if (refCountDelegate.safeRetain()) { | |
| try { | |
| runnable.run(); | |
| } finally { | |
| refCountDelegate.release(); | |
| } | |
| } | |
| } | |
| private void checkMediaSourceExists() { | |
| if (nativeSource == 0) { | |
| throw new IllegalStateException("MediaSource has been disposed."); | |
| } | |
| } | |
| private static native State nativeGetState(long pointer); | |
| } |