
    ^j"$                        d Z ddlZddlZddlZddlZddlmZmZ ddlm	Z	 ddl
mZmZmZmZ ddlmZmZ 	 ddlZ ej        dd	           dd
lmZmZ n# eef$ rZ ee          dZ[ww xY w G d de	          Z G d de          Z G d d          Z G d de          Zd Z ej        e            G d de          Z d Z!d Z"dS )z&Multi-format decoder using Gstreamer.
    N)EventThread)DecodeException   )StreamingSource	AudioDataAudioFormatStaticSource)MediaEncoderMediaDecoderGstz1.0)r   GLibc                       e Zd ZdS )GStreamerDecodeExceptionN)__name__
__module____qualname__     X/home/agentuser/manim-venv/lib/python3.11/site-packages/pyglet/media/codecs/gstreamer.pyr   r      s        Dr   r   c                   (     e Zd ZdZ fdZd Z xZS )_GLibMainLoopThreadz'A background Thread for a GLib MainLoopc                     t                                          d           t          j                            d d          | _        |                                  d S )NT)daemonF)super__init__r   MainLoopnewmainloopstart)self	__class__s    r   r   z_GLibMainLoopThread.__init__   sH    %%%))$66

r   c                 8    | j                                          d S N)r   runr!   s    r   r%   z_GLibMainLoopThread.run!   s    r   )r   r   r   __doc__r   r%   __classcell__)r"   s   @r   r   r      sM        11    
      r   r   c                   L    e Zd ZdZd Zd Zd Zd Zd Zd Z	e
d             Zd	S )
_MessageHandlerzMessage Handler class for GStreamer Sources.
    
    This separate class holds a weak reference to the
    Source, preventing garbage collection issues. 
    
    c                 8    t          j        |          | _        d S r$   )weakrefproxysource)r!   r.   s     r   r   z_MessageHandler.__init__,   s    mF++r   c                 <   |j         t          j        j        k    rF| j        j                            | j        j                   | j        j        st          d          dS |j         t          j        j
        k    r!t          |                                          dS )zThe main message callbackz!Appears to be an unsupported fileN)typer   MessageTypeEOSr.   queueputsentinelcapsr   ERRORparse_error)r!   busmessages      r   r:   z_MessageHandler.message/   s    <3?...K!!$+"6777;# T./RSSST T \S_222*7+>+>+@+@AAA 32r   c           
         d| j         _        |                                                    d          }|                                                    t          j        j                  j	        t          j
        z  | j         _        |                    d          d         }|                    d          d         }t          d                    t          t           j        |                    d                                        }t'          |||          | j         _        | j         j                                         d	S )
znotify::caps callbackTr   channelsr   rate format)r<   sample_sizesample_rateN)r.   r6   get_current_capsget_structureget_peerquery_durationr   FormatTIMEdurationSECOND	_durationget_intintjoinfilterstrisdigit
get_stringr	   audio_formatis_readyset)r!   padargsinfor<   rA   r@   s          r   notify_capsz_MessageHandler.notify_caps:   s    ##%%33A66 # = =cjo N N WZ]Zd d<<
++A.ll6**1-"''&dooh6O6O"P"PQQRR#.kgr#s#s#s  	  """""r   c                 .   |                     d                                          }|                    d          rV| j        j                            d          }|                                s%d| j        _        |                    |           dS dS dS )zpad-added callbackNzaudio/x-rawsinkT)	
query_caps	to_string
startswithr.   	converterget_static_pad	is_linkedpadslink)r!   elementrU   namenextpads        r   	pad_addedz_MessageHandler.pad_addedI   s    ~~d##--//??=)) 	"k+::6BBG$$&& "#' !!!!!		" 	"" "r   c                 <    | j         j        st          d          dS )zFinished Adding padszNo Streams FoundN)r.   ra   r   )r!   rc   s     r   no_more_padsz_MessageHandler.no_more_padsR   s(    { 	?*+=>>>	? 	?r   c                     |                     d                                          }|                    d|                                          }| j        j                            |           t          j        j	        S )znew-sample callbackzpull-sampler   )
emit
get_bufferextract_dupget_sizer.   r3   r4   r   
FlowReturnOK)r!   rZ   buffermems       r   
new_samplez_MessageHandler.new_sampleW   sd     =))4466  FOO$5$566c"""~  r   c                 v    |                                 }|                    d          sdS t          |          )z*unknown-type callback for unreadable fileszaudio/N)r\   r]   r   )uridecodebin	decodebinr6   
streaminfos       r   unknown_typez_MessageHandler.unknown_type`   s<     ^^%%
$$X.. 	F&z222r   N)r   r   r   r'   r   r:   rX   rf   rh   rr   staticmethodrw   r   r   r   r*   r*   %   s         , , ,	B 	B 	B# # #" " "? ? ?
! ! ! 3 3 \3 3 3r   r*   c                   b    e Zd Z ej                    Z e            ZddZd Z	d Z
d	dZd ZdS )
GStreamerSourceNc                 ^	   t          j                    | _        t          |           }|rg|                    d           t          j        d          | _        | j                            |	                                           | j        j
        }t           j                            dd           | _        t           j                            dd           | _        t           j                            dd           | _        t           j                            dd           | _        t#          | j        | j        | j        | j        f          st%          d          | j        j                                         | j        j                            d	|j                   | j                            d
|           | j                            d|j                   | j                            d|j                   | j                            d|j                   | j                            dt           j                            d                     | j                            dd           | j                            dd           | j                            dd           | j                            dd           | j                            d|j                   | j                            | j                   | j                            | j                   | j                            | j                   | j                            | j                   | j                            | j                   | j                            | j                   | j                            | j                   | j                             d                              d|j!                  | _"        d| _#        d| _$        | j        %                    t           j&        j'                   tQ          j)        d          | _(        tU                      | _+        tU                      | _,        | j,        -                    d          st%          d          t\          j/                            |            d S )Nr   F)	bufferingfilesrcru   audioconvertappsinkzCould not initialize GStreamer.r:   locationz	pad-addedzno-more-padszunknown-typer6   z+audio/x-raw,format=S16LE,layout=interleaveddropsynczmax-bufferszemit-signalsTz
new-samplerZ   znotify::caps   r   )timeoutzInitialization Error)0r   Pipeline	_pipeliner*   seektempfileNamedTemporaryFile_filewritereadrd   ElementFactorymaker}   decoderr^   r   allr   r9   add_signal_watchconnectr:   set_propertyrf   rh   rw   Capsfrom_stringrr   addrb   r_   rX   caps_handlerra   r6   	set_stateStatePLAYINGr3   Queuer   	_finishedrS   waitrz   source_instances)r!   filenamefilemsg_handlers       r   r   zGStreamerSource.__init__n   s   %d++ 	'IIaLLL!4uEEEDJJTYY[[)))zH )..y$??)..{DAA+00FF)..y$??DL$,MNN 	N*+LMMM 	++---""9k.ABBB 	!!*h777 	[+*?@@@^[-EFFF^[-EFFF 	!!&#(*>*>?l*m*mnnn!!&%000!!&%000!!-333!!.$777\;+ABBB 	4<(((4<(((4>***4<((($,'''$.)))DL))) !L77??GGXcXopp 		  !2333[^^
}!!!!,, 	C*+ABBB(,,T22222r   c                 .    |                                   d S r$   )deleter&   s    r   __del__zGStreamerSource.__del__   s    r   c                    t          | d          r| j                                         	 | j                                        s2| j                                         | j                                        2| j                            d          }|                    | j	                  r|
                    | j	                   | j                            t          j        j                   | j        j                                         | j                            dd            d S # t(          t*          f$ r Y d S w xY w)Nr   rZ   r   )hasattrr   closer3   empty
get_nowaitr   r_   handler_is_connectedr   
disconnectr   r   r   r   NULLr9   remove_signal_watchr}   r   ImportErrorAttributeError)r!   rZ   s     r   r   zGStreamerSource.delete   s(   4!! 	J
	j&&(( (
%%''' j&&(( (<..v66D(():;; 3 1222N$$SY^444N22444L%%j$77777^, 	 	 	DD	s   C;D( (D=<D=        c                    | j                                         rd S t                      }t          |          |k     rV| j                                        }|| j        k    r| j                                          n||z  }t          |          |k     V|sd S | j        	                    t          j        j                  j        t          j        z  }| j        j        t          |          z  }t#          |t          |          ||g           S r$   )r   is_setbyteslenr3   getr5   rT   r   query_positionr   rF   rG   currI   rR   bytes_per_secondr   )r!   	num_bytescompensation_timedatapacket	timestamprH   s          r   get_audio_datazGStreamerSource.get_audio_data   s    >  "" 	4ww$ii)##Z^^%%F&&""$$$FND $ii)##  	4N11#*/BBFS	$5D		As4yy)XrBBBr   c                    | j                                         s2| j                                          | j                                         2| j                            t
          j        j        t
          j        j	        t
          j        j
        z  |t
          j        z             | j                                         d S r$   )r3   r   r   r   seek_simpler   rF   rG   	SeekFlagsFLUSHKEY_UNITrI   r   clear)r!   r   s     r   r   zGStreamerSource.seek   s    *""$$ 	$J!!### *""$$ 	$ 	""3:?#&=#69O#O#,sz#9	; 	; 	; 	r   r$   )r   )r   r   r   r,   WeakSetr   objectr5   r   r   r   r   r   r   r   r   rz   rz   i   s        &w((vxxH@3 @3 @3 @3D     C C C C(    r   rz   c                  L    t           j        D ]} |                                  d S r$   )rz   r   r   )srcs    r   _cleanupr      s/     /  

 r   c                   "    e Zd Zd Zd ZddZdS )GStreamerDecoderc                 T    t          j        d            t                      | _        d S r$   )r   initr   
_glib_loopr&   s    r   r   zGStreamerDecoder.__init__   s     -//r   c                     dS )N)z.mp3z.flacz.oggz.m4ar   r&   s    r   get_file_extensionsz$GStreamerDecoder.get_file_extensions   s    ..r   Tc                     t          fd|                                 D                       st          d          |rt          |          S t	          t          |                    S )Nc              3   B   K   | ]}                     |          V  d S r$   )endswith).0extr   s     r   	<genexpr>z*GStreamerDecoder.decode.<locals>.<genexpr>   s1      PPc8$$S))PPPPPPr   zUnsupported format.)anyr   r   rz   r
   )r!   r   r   	streamings    `  r   decodezGStreamerDecoder.decode   sw    PPPPT5M5M5O5OPPPPP 	B ++@AAA 	A"8T222$ ? ?@@@r   N)T)r   r   r   r   r   r   r   r   r   r   r      sL        0 0 0/ / /A A A A A Ar   r   c                       t                      gS r$   )r   r   r   r   get_decodersr   	  s    r   c                      g S r$   r   r   r   r   get_encodersr     s    Ir   )#r'   r3   atexitr,   r   	threadingr   r   pyglet.utilr   baser   r   r	   r
   r>   r   r   girequire_versiongi.repositoryr   r   
ValueErrorr   er   r   r*   rz   r   registerr   r   r   r   r   r   <module>r      s>        # # # # # # # # ' ' ' ' ' ' G G G G G G G G G G G G ( ( ( ( ( ( ( (IIIBue$$$'''''''''K    
+a..	 	 	 	 	 	 	 	    &   A3 A3 A3 A3 A3 A3 A3 A3Hv v v v vo v v vr      A A A A A| A A A2         s   A A+A&&A+