[pitivi] proxy: Allow audio stream outside of container



commit 01a1c54f173959d23ac63d42a2025dc6899e56d3
Author: Stefan Popa <stefanpopa2209 gmail com>
Date:   Fri Jul 21 20:49:01 2017 +0300

    proxy: Allow audio stream outside of container
    
    Allows using supported audio streams even if they are not inside
    a container.
    
    Fixes T7756.
    
    Reviewed-by: Alex Băluț <alexandru balut gmail com>
    Differential Revision: https://phabricator.freedesktop.org/D1800

 pitivi/utils/proxy.py        |   32 +++++++++++++++++++++++++-------
 tests/samples/mp3_sample.mp3 |  Bin 0 -> 451854 bytes
 tests/test_media_library.py  |    3 +++
 3 files changed, 28 insertions(+), 7 deletions(-)
---
diff --git a/pitivi/utils/proxy.py b/pitivi/utils/proxy.py
index ec307c5..f5ce771 100644
--- a/pitivi/utils/proxy.py
+++ b/pitivi/utils/proxy.py
@@ -87,17 +87,25 @@ class ProxyManager(GObject.Object, Loggable):
                                                                   object)),
     }
 
+    WHITELIST_CONTAINER_CAPS = ["video/quicktime", "application/ogg",
+                                "video/x-matroska", "video/webm"]
+    WHITELIST_AUDIO_CAPS = ["audio/mpeg", "audio/x-vorbis",
+                            "audio/x-raw", "audio/x-flac"]
+    WHITELIST_VIDEO_CAPS = ["video/x-h264", "image/jpeg",
+                            "video/x-raw", "video/x-vp8",
+                            "video/x-theora"]
+
     WHITELIST_FORMATS = []
-    for container in ["video/quicktime", "application/ogg",
-                      "video/x-matroska", "video/webm"]:
-        for audio in ["audio/mpeg", "audio/x-vorbis",
-                      "audio/x-raw", "audio/x-flac"]:
-            for video in ["video/x-h264", "image/jpeg",
-                          "video/x-raw", "video/x-vp8",
-                          "video/x-theora"]:
+    for container in WHITELIST_CONTAINER_CAPS:
+        for audio in WHITELIST_AUDIO_CAPS:
+            for video in WHITELIST_VIDEO_CAPS:
                 WHITELIST_FORMATS.append(createEncodingProfileSimple(
                     container, audio, video))
 
+    for audio in WHITELIST_AUDIO_CAPS:
+        a = GstPbutils.EncodingAudioProfile.new(Gst.Caps(audio), None, None, 0)
+        WHITELIST_FORMATS.append(a)
+
     proxy_extension = "proxy.mkv"
 
     def __init__(self, app):
@@ -133,6 +141,16 @@ class ProxyManager(GObject.Object, Loggable):
             return not info.get_caps().intersect(profile.get_format()).is_empty()
 
         info = asset.get_info()
+        if isinstance(encoding_profile, GstPbutils.EncodingAudioProfile):
+            if isinstance(info.get_stream_info(), GstPbutils.DiscovererContainerInfo):
+                return False
+            audios = info.get_audio_streams()
+            if len(audios) != 1 or not capsMatch(audios[0], encoding_profile):
+                return False
+            if info.get_video_streams():
+                return False
+            return True
+
         container = info.get_stream_info()
         if container:
             if not capsMatch(container, encoding_profile):
diff --git a/tests/samples/mp3_sample.mp3 b/tests/samples/mp3_sample.mp3
new file mode 100644
index 0000000..4226ded
Binary files /dev/null and b/tests/samples/mp3_sample.mp3 differ
diff --git a/tests/test_media_library.py b/tests/test_media_library.py
index cb1b209..afa38f2 100644
--- a/tests/test_media_library.py
+++ b/tests/test_media_library.py
@@ -217,6 +217,9 @@ class TestMediaLibrary(BaseTestMediaLibrary):
         self.assertEqual(asset.creation_progress, 100)
         self.assertEqual(asset.get_proxy(), proxy)
 
+    def test_supported_out_of_container_audio(self):
+        self.runCheckImport(["mp3_sample.mp3"], check_no_transcoding=True)
+
     def testMissingUriDisplayed(self):
         with common.created_project_file() as uri:
             self._customSetUp(project_uri=uri)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]