Outlining MPV support, shifting to Drone CI
continuous-integration/drone/push Build encountered an error Details
continuous-integration/drone Build is passing Details

master
Dmitry Isaenko 2022-07-15 02:13:29 +03:00
parent d9ccb3a90a
commit 77f31dfb50
9 changed files with 127 additions and 53 deletions

18
.drone.yml Normal file
View File

@ -0,0 +1,18 @@
kind: pipeline
type: docker
name: default
steps:
- name: test
image: maven:3-jdk-11
commands:
- mvn -B -DskipTests clean package
- mvn test -B
volumes:
- name: m2
path: /root/.m2
volumes:
- name: m2
host:
path: /m2

View File

@ -1,6 +1,6 @@
# mplayer4anime
![License](https://img.shields.io/badge/License-GPLv3-blue.svg) ![Releases](https://img.shields.io/github/downloads/developersu/mplayer4anime/total.svg) ![CI](https://img.shields.io/jenkins/build?jobUrl=https%3A%2F%2Fredrise.ru%2Fjen%2Fjob%2Fmplayer4anime%2Fjob%2Fmaster%2F)
![License](https://img.shields.io/badge/License-GPLv3-blue.svg) ![Releases](https://img.shields.io/github/downloads/developersu/mplayer4anime/total.svg) [![Build Status](https://ci.redrise.ru/api/badges/desu/mplayer4anime/status.svg)](https://ci.redrise.ru/desu/mplayer4anime)
mplayer4anime is mplayer launcher to play video file with audio layer and/or subtitles (.ass, .srt, etc.) at once.

View File

@ -20,54 +20,21 @@ package mplayer4anime.mpv;
import com.sun.jna.ptr.IntByReference;
import mplayer4anime.ui.ServiceWindow;
import static mplayer4anime.mpv.Mpv_Events.*;
import static mplayer4anime.mpv.Mpv_Format.*;
public class MpvProcess implements Runnable{
private String videoFilename;
private final String videoFilename;
private final String audioFilename;
private final String subsFilename;
private final LibC libC = LibC.INSTANCE;
private final LibMpv libMpv = LibMpv.INSTANCE;
/** MPV_FORMAT*/
private final int MPV_FORMAT_NONE = 0;
private final int MPV_FORMAT_STRING = 1;
private final int MPV_FORMAT_OSD_STRING = 2;
private final int MPV_FORMAT_FLAG = 3;
private final int MPV_FORMAT_INT64 = 4;
private final int MPV_FORMAT_DOUBLE = 5;
private final int MPV_FORMAT_NODE = 6;
private final int MPV_FORMAT_NODE_ARRAY = 7;
private final int MPV_FORMAT_NODE_MAP = 8;
private final int MPV_FORMAT_BYTE_ARRAY = 9;
/** mpv_event_id */
private final int MPV_EVENT_NONE = 0;
private final int MPV_EVENT_SHUTDOWN = 1;
private final int MPV_EVENT_LOG_MESSAGE = 2;
private final int MPV_EVENT_GET_PROPERTY_REPLY = 3;
private final int MPV_EVENT_SET_PROPERTY_REPLY = 4;
private final int MPV_EVENT_COMMAND_REPLY = 5;
private final int MPV_EVENT_START_FILE = 6;
private final int MPV_EVENT_END_FILE = 7;
private final int MPV_EVENT_FILE_LOADED = 8;
private final int MPV_EVENT_TRACKS_CHANGED = 9;//DEPRECATED
private final int MPV_EVENT_TRACK_SWITCHED = 10;//DEPRECATED
private final int MPV_EVENT_IDLE = 11;//DEPRECATED
private final int MPV_EVENT_PAUSE = 12;//DEPRECATED
private final int MPV_EVENT_UNPAUSE = 13;//DEPRECATED
private final int MPV_EVENT_TICK = 14;//DEPRECATED
private final int MPV_EVENT_SCRIPT_INPUT_DISPATCH = 15;//DEPRECATED
private final int MPV_EVENT_CLIENT_MESSAGE = 16;
private final int MPV_EVENT_VIDEO_RECONFIG = 17;
private final int MPV_EVENT_AUDIO_RECONFIG = 18;
private final int MPV_EVENT_METADATA_UPDATE = 19;//DEPRECATED
private final int MPV_EVENT_SEEK = 20;
private final int MPV_EVENT_PLAYBACK_RESTART = 21;
private final int MPV_EVENT_PROPERTY_CHANGE = 22;
private final int MPV_EVENT_CHAPTER_CHANGE = 23;//DEPRECATED
private final int MPV_EVENT_QUEUE_OVERFLOW = 24;
private final int MPV_EVENT_HOOK = 25;
MpvProcess(String filename){
this.videoFilename = filename;
MpvProcess(String videoFilename, String audioFilename, String subsFilename){
this.videoFilename = videoFilename;
this.audioFilename = audioFilename;
this.subsFilename = subsFilename;
libC.setlocale(LibC.LC_NUMERIC, "C"); //Somehow it's important
}
@ -81,14 +48,20 @@ public class MpvProcess implements Runnable{
libMpv.mpv_set_option_string(ctx, "input-default-bindings", "yes");
libMpv.mpv_set_option_string(ctx, "input-vo-keyboard", "yes");
IntByReference value = new IntByReference(1);
libMpv.mpv_set_option(ctx, "osc", MPV_FORMAT_FLAG, value);
libMpv.mpv_set_option(ctx, "osc", MPV_FORMAT_FLAG.ordinal(), value);
libMpv.mpv_initialize(ctx);
libMpv.mpv_command(ctx, new String[]{"loadfile", videoFilename, null});
libMpv.mpv_command(ctx, new String[]{"loadfile", videoFilename});
//libMpv.mpv_command(ctx, new String[]{"audio-add", audioFilename});
//libMpv.mpv_command(ctx, new String[]{"subs-add", subsFilename});
while (true){
mpv_event event = libMpv.mpv_wait_event(ctx, 10000);
if (event.event_id == MPV_EVENT_SHUTDOWN)
if (event.event_id == MPV_EVENT_SHUTDOWN.ordinal())
break;
System.out.println(event.event_id);
System.out.println(Mpv_Events.values()[event.event_id].name());
if (event.event_id == MPV_EVENT_START_FILE.ordinal())
libMpv.mpv_command(ctx, new String[]{"audio-add", audioFilename});
}
libMpv.mpv_terminate_destroy(ctx);
}

View File

@ -68,7 +68,7 @@ public class MpvSlave implements ISlaveModeAppOrchestration {
boolean subtitlesHidden,
boolean isFullscreen) {
//TODO: fix
Thread thread = new Thread(new MpvProcess(VideoFile));
Thread thread = new Thread(new MpvProcess(VideoFile, AudioFile, SubtitlesFile));
thread.start();
}

View File

@ -0,0 +1,48 @@
/*
Copyright 2018-2021 Dmitry Isaenko
This file is part of mplayer4anime.
mplayer4anime 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.
mplayer4anime 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 mplayer4anime. If not, see <https://www.gnu.org/licenses/>.
*/
package mplayer4anime.mpv;
public enum Mpv_Events {
MPV_EVENT_NONE,//0
MPV_EVENT_SHUTDOWN,//1
MPV_EVENT_LOG_MESSAGE,//2
MPV_EVENT_GET_PROPERTY_REPLY,//3
MPV_EVENT_SET_PROPERTY_REPLY,//4
MPV_EVENT_COMMAND_REPLY,//5
MPV_EVENT_START_FILE,//6
MPV_EVENT_END_FILE,//7
MPV_EVENT_FILE_LOADED,//8
MPV_EVENT_TRACKS_CHANGED,//9 DEPRECATED
MPV_EVENT_TRACK_SWITCHED,//10 DEPRECATED
MPV_EVENT_IDLE,//11 DEPRECATED
MPV_EVENT_PAUSE,//12 DEPRECATED
MPV_EVENT_UNPAUSE,//13 DEPRECATED
MPV_EVENT_TICK,//14 DEPRECATED
MPV_EVENT_SCRIPT_INPUT_DISPATCH,//15 DEPRECATED
MPV_EVENT_CLIENT_MESSAGE,//16
MPV_EVENT_VIDEO_RECONFIG,//17
MPV_EVENT_AUDIO_RECONFIG,//18
MPV_EVENT_METADATA_UPDATE,//19 DEPRECATED
MPV_EVENT_SEEK,//20
MPV_EVENT_PLAYBACK_RESTART,//21
MPV_EVENT_PROPERTY_CHANGE,//22
MPV_EVENT_CHAPTER_CHANGE,//23 DEPRECATED
MPV_EVENT_QUEUE_OVERFLOW,//24
MPV_EVENT_HOOK,//25 ;
}

View File

@ -0,0 +1,32 @@
/*
Copyright 2018-2021 Dmitry Isaenko
This file is part of mplayer4anime.
mplayer4anime 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.
mplayer4anime 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 mplayer4anime. If not, see <https://www.gnu.org/licenses/>.
*/
package mplayer4anime.mpv;
public enum Mpv_Format {
MPV_FORMAT_NONE, //0;
MPV_FORMAT_STRING, //1;
MPV_FORMAT_OSD_STRING, //2;
MPV_FORMAT_FLAG, //3;
MPV_FORMAT_INT64, //4;
MPV_FORMAT_DOUBLE, //5;
MPV_FORMAT_NODE, //6;
MPV_FORMAT_NODE_ARRAY, //7;
MPV_FORMAT_NODE_MAP, //8;
MPV_FORMAT_BYTE_ARRAY; //9;
}

View File

@ -90,8 +90,8 @@ public class Playlists {
}
/**
* Interface for Opening playlists via FileChooser
* */
public static JsonStorage Read(ResourceBundle resourceBundle){
**/
public static JsonStorage OpenPlaylistFileChooser(ResourceBundle resourceBundle){
File playlistFile;
FileChooser fileChooser = new FileChooser();

View File

@ -108,6 +108,9 @@ public class LandingController implements Initializable {
}
playerToolbarController.initializeMainUiController(this);
/*
Playlists.ReadByPath(resourceBundle, playListFile);
* */
}
public void setHostServices(HostServices hostServices) {
@ -167,7 +170,7 @@ public class LandingController implements Initializable {
@FXML
private void openBtn() {
JsonStorage jsonStorage = Playlists.Read(resourceBundle);
JsonStorage jsonStorage = Playlists.OpenPlaylistFileChooser(resourceBundle);
setAllLists(jsonStorage);
}
private void setAllLists(JsonStorage jsonStorage){

View File

@ -151,7 +151,7 @@ public class ControllerPane implements Initializable {
lowerAndUpperExts.add(s);
lowerAndUpperExts.add(s.toUpperCase());
}
String[] filesExtension = lowerAndUpperExts.toArray(new String[lowerAndUpperExts.size()]);
String[] filesExtension = lowerAndUpperExts.toArray(new String[0]);
File directoryReceived; // Store files (folder) received from selector
DirectoryChooser dirSelect;