public long getCurrentPosition() { if (nativeMode) return mVideoView.getCurrentPosition(); long time = mVlcPlayer.getTime(); if (mForcedTime != -1 && mLastTime != -1) { /* XXX: After a seek, mLibVLC.getTime can return the position before or after * the seek position. Therefore we return mForcedTime in order to avoid the seekBar * to move between seek position and the actual position. * We have to wait for a valid position (that is after the seek position). * to re-init mLastTime and mForcedTime to -1 and return the actual position. */ if (mLastTime > mForcedTime) { if (time <= mLastTime && time > mForcedTime) mLastTime = mForcedTime = -1; } else { if (time > mForcedTime) mLastTime = mForcedTime = -1; } } return mForcedTime == -1 ? time : mForcedTime; }
public long seekTo(long pos) { if (nativeMode) { Long intPos = pos; mVideoView.seekTo(intPos.intValue()); return pos; } else { if (mVlcPlayer == null || !mVlcPlayer.isSeekable()) return -1; mForcedTime = pos; mLastTime = mVlcPlayer.getTime(); TvApp.getApplication().getLogger().Info("VLC length in seek is: " + mVlcPlayer.getLength()); try { if (getDuration() > 0) mVlcPlayer.setPosition((float) pos / getDuration()); else mVlcPlayer.setTime(pos); return pos; } catch (Exception e) { TvApp.getApplication().getLogger().ErrorException("Error seeking in VLC", e); Utils.showToast(mActivity, "Unable to seek"); return -1; } } }