/*
* Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package com.sun.media.jfxmediaimpl.platform.osx;
import com.sun.media.jfxmedia.MediaException;
import com.sun.media.jfxmedia.effects.AudioEqualizer;
import com.sun.media.jfxmedia.effects.AudioSpectrum;
import com.sun.media.jfxmedia.locator.Locator;
import com.sun.media.jfxmedia.control.MediaPlayerOverlay;
import com.sun.media.jfxmediaimpl.NativeMedia;
import com.sun.media.jfxmediaimpl.NativeMediaPlayer;
Mac OS X MediaPlayer implementation.
/**
* Mac OS X MediaPlayer implementation.
*/
final class OSXMediaPlayer extends NativeMediaPlayer {
private final AudioEqualizer audioEq;
private final AudioSpectrum audioSpectrum;
private final Locator mediaLocator;
OSXMediaPlayer(NativeMedia sourceMedia) {
super(sourceMedia);
init();
mediaLocator = sourceMedia.getLocator();
// This will throw an exception if we can't create the player
osxCreatePlayer(mediaLocator.getStringLocation());
audioEq = createNativeAudioEqualizer(osxGetAudioEqualizerRef());
audioSpectrum = createNativeAudioSpectrum(osxGetAudioSpectrumRef());
}
OSXMediaPlayer(Locator source) {
this(new OSXMedia(source));
}
@Override
public AudioEqualizer getEqualizer() {
return audioEq;
}
@Override
public AudioSpectrum getAudioSpectrum() {
return audioSpectrum;
}
@Override
public MediaPlayerOverlay getMediaPlayerOverlay() {
return null; // Not needed
}
@Override
protected long playerGetAudioSyncDelay() throws MediaException {
return osxGetAudioSyncDelay();
}
@Override
protected void playerSetAudioSyncDelay(long delay) throws MediaException {
osxSetAudioSyncDelay(delay);
}
@Override
protected void playerPlay() throws MediaException {
osxPlay();
}
@Override
protected void playerStop() throws MediaException {
osxStop();
}
@Override
protected void playerPause() throws MediaException {
osxPause();
}
@Override
protected void playerFinish() throws MediaException {
osxFinish();
}
@Override
protected float playerGetRate() throws MediaException {
return osxGetRate();
}
@Override
protected void playerSetRate(float rate) throws MediaException {
osxSetRate(rate);
}
@Override
protected double playerGetPresentationTime() throws MediaException {
return osxGetPresentationTime();
}
@Override
protected boolean playerGetMute() throws MediaException {
return osxGetMute();
}
@Override
protected void playerSetMute(boolean state) throws MediaException {
osxSetMute(state);
}
@Override
protected float playerGetVolume() throws MediaException {
return osxGetVolume();
}
@Override
protected void playerSetVolume(float volume) throws MediaException {
osxSetVolume(volume);
}
@Override
protected float playerGetBalance() throws MediaException {
return osxGetBalance();
}
@Override
protected void playerSetBalance(float balance) throws MediaException {
osxSetBalance(balance);
}
@Override
protected double playerGetDuration() throws MediaException {
double duration = osxGetDuration();
if (duration == -1.0) {
return Double.POSITIVE_INFINITY;
}
return duration;
}
@Override
protected void playerSeek(double streamTime) throws MediaException {
osxSeek(streamTime);
}
@Override
protected void playerDispose() {
osxDispose();
}
@Override
public void playerInit() throws MediaException {
}
private native void osxCreatePlayer(String sourceURI) throws MediaException;
// Have to use native references for these two things
private native long osxGetAudioEqualizerRef();
private native long osxGetAudioSpectrumRef();
private native long osxGetAudioSyncDelay() throws MediaException;
private native void osxSetAudioSyncDelay(long delay) throws MediaException;
private native void osxPlay() throws MediaException;
private native void osxStop() throws MediaException;
private native void osxPause() throws MediaException;
private native void osxFinish() throws MediaException;
private native float osxGetRate() throws MediaException;
private native void osxSetRate(float rate) throws MediaException;
private native double osxGetPresentationTime() throws MediaException;
private native boolean osxGetMute() throws MediaException;
private native void osxSetMute(boolean state) throws MediaException;
private native float osxGetVolume() throws MediaException;
private native void osxSetVolume(float volume) throws MediaException;
private native float osxGetBalance() throws MediaException;
private native void osxSetBalance(float balance) throws MediaException;
private native double osxGetDuration() throws MediaException;
private native void osxSeek(double streamTime) throws MediaException;
private native void osxDispose();
}