From 386e8cd16d0b9740433ece4bf2744da055d513da Mon Sep 17 00:00:00 2001 From: wm4 Date: Fri, 24 Nov 2017 14:04:53 +0100 Subject: [PATCH] player: change 3 remaining GPL-only code pieces to LGPL There has been no new developments or agreements, but I was uncertain about the copyright status of them. Thus this part of code was marked as being potentially GPL, and was not built in LGPL mode. Now I've taken a close look again, and decided that these can be relicensed using the existing relicensing agreements. OSD level 3 was introduced in commit 8d190244, with the author being unreachable. As I decided in commit 6ddd95fd, OSD level 3 itself can be kept, but the "osd" command had to go, and the "rendering" of OSD level 3 (the HAVE_GPL code in osd.c) was uncertain. But the code for this was rewritten: instead of duplicating the time/percent formatting code, it was changed to use common code, and some weird extra logic was removed. The code inside of the "if" is exactly the same as the code that formats the OSD status line (covered by LGPL relicensing). The current commands for adding/removing sub/audio tracks more or less originated from commit 2f376d1b39, with the author being unreachable. But the original code was very different, mostly due to MPlayer's incredibly messy handling of subtitles in general. Nothing of this remains in the current code. Even the command declarations were rewritten. The commands (as seen from the user side) are rather similar in naming and semantics, but we don't consider this copyrightable. So it doesn't look like anything copyrightable is left. The add/cycle commands were more or less based on step_property, introduced in commit 7a71da01d6, with the patch author disagreeing with the LGPL relicensing. But all code original to the patch has been replaced in later mpv changes, and the original code was mostly copied from MP_CMD_SET_PROPERTY anyway. The underlying property interface was completely changed, the error handling was redone, and all of this is very similar to the changes that were done on SET_PROPERTY. The command declarations are completely different in the first place, because the semantic change from step to add/cycle. The commit also seems to have been co-authored by reimar to some degree. He also had the idea to change the original patch from making the command modify a specific property to making it generic. (The error message line, especially with its %g formatting, might contain some level of originality, so change that just to be sure. This commit Copies and adapts the error message for SET_PROPERTY.) Although I'm a bit on the fence with all the above things, it really doesn't look like there's anything substantial that would cause issues. I thus claim that there is no problem with changing the license to LGPL for the above things. It's probably still slightly below the standard that was usually applied in the code relicensing in mpv, but probably still far above to the usual in open source relicensing (and above commercial standards as well, if you look what certain tech giants do). --- Copyright | 9 ++------- input/cmd_list.c | 6 ------ player/command.c | 11 +---------- player/osd.c | 5 ----- 4 files changed, 3 insertions(+), 28 deletions(-) diff --git a/Copyright b/Copyright index aea1d98166..08c3d10ae2 100644 --- a/Copyright +++ b/Copyright @@ -42,12 +42,10 @@ them quite central: - many builtin video filters (use libavfilter instead) - automatic rotation and stereoscopic video handling - Linux TV input -- the add/cycle and sub-add/audio-add/sub-remove/audio-remove commands - video format conversion (if not supported by the VO) - minor features: jack, DVD, CDDA, SMB, CACA, legacy direct3d VO -Some of these will be fixed in the future. The lack of the add/cycle commands -makes this particularly useless for CLI mode, and most of the appeal of LGPL -is for libmpv anyway. Thus it's not recommended to build mpv CLI in LGPL mode +Some of these will be fixed in the future. The intended use for LGPL mode is +with libmpv, and currently it's not recommended to build mpv CLI in LGPL mode at all. The following files are still GPL only (--enable-lgpl disables them): @@ -107,11 +105,8 @@ The following files are still GPL only (--enable-lgpl disables them): The following files contain some optional GPL code (--enable-lgpl disables it): - input/cmd_list.c potentially some commands options/parse_commandline.c dvd:// expansion player/audio.c libaf glue code - player/osd.c OSD level 3 - player/command.c add/cycle command, possibly sub-add command None of the exceptions listed above affect the final binary if it's built as LGPL. Linked libraries still can affect the final license (for example if diff --git a/input/cmd_list.c b/input/cmd_list.c index c8dd77cf7a..0bc12441fe 100644 --- a/input/cmd_list.c +++ b/input/cmd_list.c @@ -13,8 +13,6 @@ * * You should have received a copy of the GNU Lesser General Public * License along with mpv. If not, see . - * - * Parts under HAVE_GPL are licensed under GNU General Public License. */ #include @@ -103,12 +101,10 @@ const struct mp_cmd_def mp_cmds[] = { .allow_auto_repeat = true}, { MP_CMD_EXPAND_TEXT, "expand-text", { ARG_STRING } }, { MP_CMD_SHOW_PROGRESS, "show-progress", .allow_auto_repeat = true}, -#if HAVE_GPL { MP_CMD_SUB_ADD, "sub-add", { ARG_STRING, OARG_CHOICE(0, ({"select", 0}, {"auto", 1}, {"cached", 2})), OARG_STRING(""), OARG_STRING("") } }, { MP_CMD_SUB_REMOVE, "sub-remove", { OARG_INT(-1) } }, -#endif { MP_CMD_SUB_RELOAD, "sub-reload", { OARG_INT(-1) } }, { MP_CMD_TV_LAST_CHANNEL, "tv-last-channel", }, @@ -153,7 +149,6 @@ const struct mp_cmd_def mp_cmds[] = { { MP_CMD_RUN, "run", { ARG_STRING, ARG_STRING }, .vararg = true }, { MP_CMD_SET, "set", { ARG_STRING, ARG_STRING } }, -#if HAVE_GPL { MP_CMD_ADD, "add", { ARG_STRING, OARG_DOUBLE(1) }, .allow_auto_repeat = true, .scalable = true, @@ -165,7 +160,6 @@ const struct mp_cmd_def mp_cmds[] = { .allow_auto_repeat = true, .scalable = true, }, -#endif { MP_CMD_MULTIPLY, "multiply", { ARG_STRING, ARG_DOUBLE }, .allow_auto_repeat = true}, diff --git a/player/command.c b/player/command.c index b5317e1470..c89f6a7f6f 100644 --- a/player/command.c +++ b/player/command.c @@ -13,8 +13,6 @@ * * You should have received a copy of the GNU Lesser General Public * License along with mpv. If not, see . - * - * Parts under HAVE_GPL are licensed under GNU General Public License. */ #include @@ -5002,8 +5000,6 @@ int run_command(struct MPContext *mpctx, struct mp_cmd *cmd, struct mpv_node *re break; } -#if HAVE_GPL - // Possibly GPL due to 7a71da01d64374ce22b430590f3df32c881288bd. case MP_CMD_ADD: case MP_CMD_CYCLE: { @@ -5033,14 +5029,12 @@ int run_command(struct MPContext *mpctx, struct mp_cmd *cmd, struct mpv_node *re return -1; } else if (r <= 0) { set_osd_msg(mpctx, osdl, osd_duration, - "Failed to increment property '%s' by %g", - property, s.inc); + "Failed to change property '%s'", property); return -1; } } break; } -#endif case MP_CMD_MULTIPLY: { char *property = cmd->args[0].v.s; @@ -5331,8 +5325,6 @@ int run_command(struct MPContext *mpctx, struct mp_cmd *cmd, struct mpv_node *re break; } -#if HAVE_GPL - // Possibly GPL due to 2f376d1b39913e8ff4c4499e7cf7148ec331d4db. case MP_CMD_SUB_ADD: case MP_CMD_AUDIO_ADD: { if (!mpctx->playing) @@ -5384,7 +5376,6 @@ int run_command(struct MPContext *mpctx, struct mp_cmd *cmd, struct mpv_node *re print_track_list(mpctx, "Track removed:"); break; } -#endif case MP_CMD_SUB_RELOAD: case MP_CMD_AUDIO_RELOAD: { diff --git a/player/osd.c b/player/osd.c index 70dbd1640a..1453c9b599 100644 --- a/player/osd.c +++ b/player/osd.c @@ -13,8 +13,6 @@ * * You should have received a copy of the GNU Lesser General Public * License along with mpv. If not, see . - * - * Parts under HAVE_GPL are licensed under GNU General Public License. */ #include @@ -431,14 +429,11 @@ static void sadd_osd_status(char **buffer, struct MPContext *mpctx, int level) talloc_free(text); } else { sadd_hhmmssff(buffer, get_playback_time(mpctx), fractions); -#if HAVE_GPL - // Potentially GPL due to 8d190244d21a4d40bb9e8f7d51aa09ca1888de09. if (level == 3) { saddf(buffer, " / "); sadd_hhmmssff(buffer, get_time_length(mpctx), fractions); sadd_percentage(buffer, get_percent_pos(mpctx)); } -#endif } } }