private void seekFinished() { long pos = scaleUnit.toNanos(getValue()); if (pos != seekingPos) { // Slider changed position - start the whole seek process over again. segmentSeek(pos); } else { isSeeking.set(false); } } }
@Override public void setValue(int newValue) { super.setValue(newValue); // // Only seek when the slider is being dragged, and not when updating the // position from the poll // if (!updating && !isSeeking.get()) { long pos = scaleUnit.toNanos(getValue()); if (pos != seekingPos) { seekTo(pos); } } }
controls.add(new JSlider(positionModel = new PipelinePositionModel(mediaPlayer.getPipeline()))); positionModel.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { BoundedRangeModel m = (BoundedRangeModel)e.getSource();
private void updatePosition(long duration, long position) { // Don't update the slider when it is being dragged if (isSeeking.get() || getValueIsAdjusting()) { return; } final int min = 0; final int max = (int) duration; final int pos = (int) position; //System.out.printf("Setting range properties to %02d, %02d, %02d%n", min, max, pos); updating = true; super.setRangeProperties(pos, 1, min, max, false); updating = false; }
@Override public void removeChangeListener(ChangeListener l) { super.removeChangeListener(l); if (listenerList.getListenerCount() == 0) { stopPoll(); } } private void updatePosition(long duration, long position) {
@Override public void addChangeListener(ChangeListener l) { if (listenerList.getListenerCount() == 0) { startPoll(); } super.addChangeListener(l); } @Override
private void segmentDone(final long position) { long pos = scaleUnit.toNanos(getValue()); // System.out.println("Segment done position=" + position // + ", seekingPos=" + seekingPos + ", getValue()=" + pos); if (pos != seekingPos) { // // If the slider moved since this segment seek began, just start a new seek // segmentSeek(pos); } else { // Continue playing from this position Gst.getExecutor().execute(new Runnable() { public void run() { pipeline.seek(1.0, Format.TIME, SeekFlags.FLUSH | SeekFlags.KEY_UNIT, SeekType.SET, position, SeekType.SET, -1); pipeline.getState(50, TimeUnit.MILLISECONDS); SwingUtilities.invokeLater(new Runnable() { public void run() { seekFinished(); } }); } }); } } private void seekFinished() {