/** * Trigger and remove the marker with the specified state. * @param state The state of the marker to pass to the handler. */ public void trigger(TrackMarkerHandler.MarkerState state) { TrackMarker marker = current.getAndSet(null); if (marker != null) { marker.handler.handle(state); } }
private void trigger(TrackMarker marker, TrackMarkerHandler.MarkerState state) { if (current.compareAndSet(marker, null)) { marker.handler.handle(state); } } }
/** * Set a new track position marker. * @param marker Marker * @param currentTimecode Current timecode of the track when this marker is set */ public void set(TrackMarker marker, long currentTimecode) { TrackMarker previous = current.getAndSet(marker); if (previous != null) { previous.handler.handle(marker != null ? OVERWRITTEN : REMOVED); } if (marker != null && currentTimecode >= marker.timecode) { trigger(marker, LATE); } }