You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
175 lines
6.3 KiB
175 lines
6.3 KiB
From e26cfcfe002c87a39eac63bbaa5ad0d4d69c95a4 Mon Sep 17 00:00:00 2001
|
|
From: Quentin Gliosca <quentin.gliosca@gmail.com>
|
|
Date: Tue, 12 May 2020 16:48:31 +0200
|
|
Subject: [PATCH 1/3] Fix the order of languages in audio track selection
|
|
|
|
Fix #129
|
|
---
|
|
gaupol/player.py | 7 ++++++-
|
|
1 file changed, 6 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/gaupol/player.py b/gaupol/player.py
|
|
index 836abea2..c266e0b9 100644
|
|
--- a/gaupol/player.py
|
|
+++ b/gaupol/player.py
|
|
@@ -118,7 +118,8 @@ def _ensure_default_segment(self):
|
|
|
|
def get_audio_languages(self):
|
|
"""Return a sequence of audio languages or ``None``."""
|
|
- return tuple(x.get_language() for x in self._info.get_audio_streams())
|
|
+ return tuple(self._playbin.emit("get-audio-tags", i).get_string("language-code")[1]
|
|
+ for i in range(self._playbin.props.n_audio))
|
|
|
|
def get_duration(self, mode=None):
|
|
"""Return duration of video stream or ``None``."""
|
|
@@ -356,6 +357,10 @@ def set_uri(self, uri):
|
|
dialog.add_button(_("_OK"), Gtk.ResponseType.OK)
|
|
dialog.set_default_response(Gtk.ResponseType.OK)
|
|
gaupol.util.flash_dialog(dialog)
|
|
+ else:
|
|
+ # Make stream tags available from _playbin
|
|
+ self._playbin.set_state(Gst.State.PAUSED)
|
|
+ self._playbin.get_state(Gst.CLOCK_TIME_NONE)
|
|
|
|
def stop(self):
|
|
"""Stop."""
|
|
|
|
From 9ace4fefe5d246c5588538a715a185c796e218ef Mon Sep 17 00:00:00 2001
|
|
From: Quentin Gliosca <quentin.gliosca@gmail.com>
|
|
Date: Tue, 12 May 2020 17:27:35 +0200
|
|
Subject: [PATCH 2/3] Improve names of audio tracks in menu
|
|
|
|
---
|
|
gaupol/agents/video.py | 18 ++++++++++++++----
|
|
gaupol/player.py | 20 ++++++++++++++++----
|
|
2 files changed, 30 insertions(+), 8 deletions(-)
|
|
|
|
diff --git a/gaupol/agents/video.py b/gaupol/agents/video.py
|
|
index d434255a..0f6b935c 100644
|
|
--- a/gaupol/agents/video.py
|
|
+++ b/gaupol/agents/video.py
|
|
@@ -27,7 +27,11 @@
|
|
from gi.repository import Gtk
|
|
|
|
with aeidon.util.silent(Exception):
|
|
+ from gi import require_version
|
|
+ require_version('GstTag', '1.0')
|
|
from gi.repository import Gst
|
|
+ from gi.repository import GstTag
|
|
+
|
|
|
|
|
|
class VideoAgent(aeidon.Delegate):
|
|
@@ -348,11 +352,17 @@ def _update_languages_menu(self):
|
|
"""Update the audio language selection menu."""
|
|
menu = self.get_menubar_section("audio-languages-placeholder")
|
|
menu.remove_all()
|
|
- languages = self.player.get_audio_languages()
|
|
- for i, language in enumerate(languages):
|
|
- language = language or _("Undefined")
|
|
+ tracks = self.player.get_audio_infos()
|
|
+ for i, track in enumerate(tracks):
|
|
+ title = track.title or "{} {}".format(_("Track"), i + 1)
|
|
+ lang = None
|
|
+ if track.language_code is not None:
|
|
+ lang = GstTag.tag_get_language_name(track.language_code)
|
|
+ if lang is None:
|
|
+ lang = track.language_name
|
|
+ name = title if lang is None else "{} - [{}]".format(title, lang.title())
|
|
action = "win.set-audio-language::{:d}".format(i)
|
|
- menu.append(language, action)
|
|
+ menu.append(name, action)
|
|
if i == self.player.audio_track:
|
|
action = self.get_action("set-audio-language")
|
|
action.set_state(str(i))
|
|
diff --git a/gaupol/player.py b/gaupol/player.py
|
|
index c266e0b9..ee1e96dc 100644
|
|
--- a/gaupol/player.py
|
|
+++ b/gaupol/player.py
|
|
@@ -21,6 +21,7 @@
|
|
import gaupol
|
|
import time
|
|
|
|
+from collections import namedtuple
|
|
from aeidon.i18n import _
|
|
from gi.repository import GLib
|
|
from gi.repository import Gtk
|
|
@@ -56,6 +57,8 @@ class VideoPlayer(aeidon.Observable):
|
|
|
|
signals = ("state-changed",)
|
|
|
|
+ TrackInfo = namedtuple("TrackInfo", ["title", "language_code", "language_name"])
|
|
+
|
|
def __init__(self):
|
|
"""Initialize a :class:`VideoPlayer` instance."""
|
|
aeidon.Observable.__init__(self)
|
|
@@ -116,10 +119,19 @@ def _ensure_default_segment(self):
|
|
self._playbin.seek_simple(Gst.Format.TIME, seek_flags, pos)
|
|
self._in_default_segment = True
|
|
|
|
- def get_audio_languages(self):
|
|
- """Return a sequence of audio languages or ``None``."""
|
|
- return tuple(self._playbin.emit("get-audio-tags", i).get_string("language-code")[1]
|
|
- for i in range(self._playbin.props.n_audio))
|
|
+ def get_audio_infos(self):
|
|
+ """Return a sequence of audio track infos."""
|
|
+ return tuple(
|
|
+ self._make_track_infos(self._playbin.emit("get-audio-tags", i))
|
|
+ for i in range(self._playbin.props.n_audio)
|
|
+ )
|
|
+
|
|
+ def _make_track_infos(self, tags):
|
|
+ return self.TrackInfo(
|
|
+ tags.get_string("title")[1],
|
|
+ tags.get_string("language-code")[1],
|
|
+ tags.get_string("language-name")[1]
|
|
+ )
|
|
|
|
def get_duration(self, mode=None):
|
|
"""Return duration of video stream or ``None``."""
|
|
|
|
From f50b4e54dc9aa84fc1b3eb403d680b8a0be77dc3 Mon Sep 17 00:00:00 2001
|
|
From: Quentin Gliosca <quentin.gliosca@gmail.com>
|
|
Date: Wed, 13 May 2020 07:29:27 +0200
|
|
Subject: [PATCH 3/3] Cosmetic changes
|
|
|
|
---
|
|
gaupol/__init__.py | 1 +
|
|
gaupol/agents/video.py | 4 +---
|
|
2 files changed, 2 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/gaupol/__init__.py b/gaupol/__init__.py
|
|
index f7a9663d..fc02287b 100644
|
|
--- a/gaupol/__init__.py
|
|
+++ b/gaupol/__init__.py
|
|
@@ -44,6 +44,7 @@
|
|
"Gst": "1.0",
|
|
"GstPbutils": "1.0",
|
|
"GstVideo": "1.0",
|
|
+ "GstTag": "1.0",
|
|
}.items():
|
|
with aeidon.util.silent(Exception):
|
|
gi.require_version(module, version)
|
|
diff --git a/gaupol/agents/video.py b/gaupol/agents/video.py
|
|
index 0f6b935c..3c9e3113 100644
|
|
--- a/gaupol/agents/video.py
|
|
+++ b/gaupol/agents/video.py
|
|
@@ -27,8 +27,6 @@
|
|
from gi.repository import Gtk
|
|
|
|
with aeidon.util.silent(Exception):
|
|
- from gi import require_version
|
|
- require_version('GstTag', '1.0')
|
|
from gi.repository import Gst
|
|
from gi.repository import GstTag
|
|
|
|
@@ -354,7 +352,7 @@ def _update_languages_menu(self):
|
|
menu.remove_all()
|
|
tracks = self.player.get_audio_infos()
|
|
for i, track in enumerate(tracks):
|
|
- title = track.title or "{} {}".format(_("Track"), i + 1)
|
|
+ title = track.title or _("Track {:d}").format(i + 1)
|
|
lang = None
|
|
if track.language_code is not None:
|
|
lang = GstTag.tag_get_language_name(track.language_code)
|