/*
* This file is part of VLCJ.
*
* VLCJ is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* VLCJ 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 for more details.
*
* You should have received a copy of the GNU General Public License
* along with VLCJ. If not, see <http://www.gnu.org/licenses/>.
*
* Copyright 2009-2016 Caprica Software Limited.
*/
package uk.co.caprica.vlcj.player.manager;
import java.util.Arrays;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import uk.co.caprica.vlcj.binding.LibVlc;
import uk.co.caprica.vlcj.binding.internal.libvlc_instance_t;
// FIXME this implementation is a long way from complete, need to integrate the VLM event manager
// and so on
/**
* Default implementation of a media manager component.
* <p>
* <code>This implementation is incomplete and untested and might be removed at
* any time.</code>
*/
public class DefaultMediaManager implements MediaManager {
/**
* Log.
*/
private final Logger logger = LoggerFactory.getLogger(DefaultMediaManager.class);
/**
* Native library interface.
*/
protected final LibVlc libvlc;
/**
* Libvlc instance.
*/
protected final libvlc_instance_t instance;
/**
* Create a media player.
*
* @param libvlc native library interface
* @param instance libvlc instance
*/
public DefaultMediaManager(LibVlc libvlc, libvlc_instance_t instance) {
this.libvlc = libvlc;
this.instance = instance;
createInstance();
}
@Override
public boolean addBroadcast(String name, String inputMrl, String outputMrl, boolean enable, boolean loop, String... options) {
logger.debug("addBrodcast(name={},inputMrl={},outputMrl={},enable={},loop={},options={})", name, inputMrl, outputMrl, enable, loop, Arrays.toString(options));
return libvlc.libvlc_vlm_add_broadcast(instance, name, inputMrl, outputMrl, options != null ? options.length : 0, options, enable ? 1 : 0, loop ? 1 : 0) == 0;
}
@Override
public boolean addVideoOnDemand(String name, String inputMrl, boolean enable, String mux, String... options) {
logger.debug("addVideoOnDemand(name={},inputMrl={},enable={},mux={},options={})", name, inputMrl, enable, mux, Arrays.toString(options));
return libvlc.libvlc_vlm_add_vod(instance, name, inputMrl, options != null ? options.length : 0, options, enable ? 1 : 0, mux) == 0;
}
@Override
public boolean removeMedia(String name) {
logger.debug("removeMedia(name={})", name);
return libvlc.libvlc_vlm_del_media(instance, name) == 0;
}
@Override
public boolean enableMedia(String name, boolean enable) {
logger.debug("enableMedia(name={},enable={})", name, enable);
return libvlc.libvlc_vlm_set_enabled(instance, name, enable ? 1 : 0) == 0;
}
@Override
public boolean setOutput(String name, String outputMrl) {
logger.debug("setOutput(name={},outputMrl={})", name, outputMrl);
return libvlc.libvlc_vlm_set_output(instance, name, outputMrl) == 0;
}
@Override
public boolean setInput(String name, String inputMrl) {
logger.debug("setInput(name={},inputMrl={})", name, inputMrl);
return libvlc.libvlc_vlm_set_input(instance, name, inputMrl) == 0;
}
@Override
public boolean addInput(String name, String inputMrl) {
logger.debug("addInput(name={},inputMrl={})", name, inputMrl);
return libvlc.libvlc_vlm_add_input(instance, name, inputMrl) == 0;
}
@Override
public boolean setLoop(String name, boolean loop) {
logger.debug("setLoop(name={},loop={})", name, loop);
return libvlc.libvlc_vlm_set_loop(instance, name, loop ? 1 : 0) == 0;
}
@Override
public boolean setMux(String name, String mux) {
logger.debug("setMux(name={},mux={})", name, mux);
return libvlc.libvlc_vlm_set_mux(instance, name, mux) == 0;
}
@Override
public boolean changeMedia(String name, String inputMrl, String outputMrl, boolean enable, boolean loop, String... options) {
logger.debug("changeMedia(name={},inputMrl={},outputMrl={},enable={},loop={},options={})", name, inputMrl, outputMrl, enable, loop, Arrays.toString(options));
return libvlc.libvlc_vlm_change_media(instance, name, inputMrl, outputMrl, options != null ? options.length : 0, options, enable ? 1 : 0, loop ? 1 : 0) == 0;
}
@Override
public boolean play(String name) {
logger.debug("play(name={})", name);
return libvlc.libvlc_vlm_play_media(instance, name) == 0;
}
@Override
public boolean stop(String name) {
logger.debug("stop(name={})", name);
return libvlc.libvlc_vlm_stop_media(instance, name) == 0;
}
@Override
public boolean pause(String name) {
logger.debug("pause(name={})", name);
return libvlc.libvlc_vlm_pause_media(instance, name) == 0;
}
@Override
public boolean seek(String name, float percentage) {
logger.debug("seek(name={},percentage={})", name, percentage);
return libvlc.libvlc_vlm_seek_media(instance, name, percentage) == 0;
}
@Override
public String show(String name) {
logger.debug("show(name={})", name);
return libvlc.libvlc_vlm_show_media(instance, name);
}
@Override
public float getPosition(String name, int instanceId) {
logger.debug("getPosition(name={},instanceId={})", name, instanceId);
return libvlc.libvlc_vlm_get_media_instance_position(instance, name, instanceId);
}
@Override
public int getTime(String name, int instanceId) {
logger.debug("getTime(name={},instanceId={})", name, instanceId);
return libvlc.libvlc_vlm_get_media_instance_time(instance, name, instanceId);
}
@Override
public int getLength(String name, int instanceId) {
logger.debug("getLength(name={},instanceId={})", name, instanceId);
return libvlc.libvlc_vlm_get_media_instance_length(instance, name, instanceId);
}
@Override
public int getRate(String name, int instanceId) {
logger.debug("getRate(name={},instanceId={})", name, instanceId);
return libvlc.libvlc_vlm_get_media_instance_rate(instance, name, instanceId);
}
@Override
public void release() {
logger.debug("release()");
destroyInstance();
}
private void createInstance() {
logger.debug("createInstance()");
}
private void destroyInstance() {
logger.debug("destroyInstance()");
libvlc.libvlc_vlm_release(instance);
}
}