# ---------------------------------------------------------------------------- # pyglet # Copyright (c) 2006-2008 Alex Holkner # Copyright (c) 2008-2021 pyglet contributors # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in # the documentation and/or other materials provided with the # distribution. # * Neither the name of pyglet nor the names of its # contributors may be used to endorse or promote products # derived from this software without specific prior written # permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE # COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # ---------------------------------------------------------------------------- from pyglet.util import Codecs, Decoder, Encoder from .base import * import pyglet _debug = pyglet.options['debug_media'] _codecs = Codecs() add_decoders = _codecs.add_decoders get_decoders = _codecs.get_decoders add_encoders = _codecs.add_encoders get_encoders = _codecs.get_encoders class MediaDecoder(Decoder): def decode(self, file, filename, streaming): """Read the given file object and return an instance of `Source` or `StreamingSource`. Throws MediaDecodeException if there is an error. `filename` can be a file type hint. """ raise NotImplementedError() class MediaEncoder(Encoder): def encode(self, source, file, filename): """Encode the given source to the given file. `filename` provides a hint to the file format desired. options are encoder-specific, and unknown options should be ignored or issue warnings. """ raise NotImplementedError() def add_default_media_codecs(): # Add all bundled codecs. These should be listed in order of # preference. This is called automatically by pyglet.media. try: from . import wave add_decoders(wave) add_encoders(wave) except ImportError: pass if pyglet.compat_platform.startswith('linux'): try: from . import gstreamer add_decoders(gstreamer) except ImportError: pass try: if pyglet.compat_platform in ('win32', 'cygwin'): from pyglet.libs.win32.constants import WINDOWS_VISTA_OR_GREATER if WINDOWS_VISTA_OR_GREATER: # Supports Vista and above. from . import wmf add_decoders(wmf) except ImportError: pass try: if have_ffmpeg(): from . import ffmpeg add_decoders(ffmpeg) except ImportError: pass def have_ffmpeg(): """Check if FFmpeg library is available. Returns: bool: True if FFmpeg is found. .. versionadded:: 1.4 """ try: from . import ffmpeg_lib if _debug: print('FFmpeg available, using to load media files.') return True except (ImportError, FileNotFoundError): if _debug: print('FFmpeg not available.') return False