
    dj                         d dl Z d dlZd dlmc mZ d dlmZ  G d d          Zej	        dej
        ej                 defd            Zdedee         fd	Zdedee         fd
Zdedee         fdZdS )    N)	err_checkc            
       |    e Zd ZU dZeed<   eed<   eed<   ee         ed<   dedededee         ddf
dZdefd	Z	dS )

DeviceInfoa  Information about an input or output device.

    :param str name: The device identifier, for use as the first argument to :func:`av.open`.
    :param str description: Human-readable description of the device.
    :param bool is_default: Whether this is the default device.
    :param list media_types: Media types this device provides, e.g. ``["video"]``, ``["audio"]``,
        or ``["video", "audio"]``.

    namedescription
is_defaultmedia_typesreturnNc                 >    || _         || _        || _        || _        d S )Nr   r   r   r	   )selfr   r   r   r	   s        D/home/agentuser/manim-venv/lib/python3.11/site-packages/av/device.py__init__zDeviceInfo.__init__   s(     	&$&    c                 B    | j         rdnd}d| j        d| j        | dS )Nz
 (default) z<av.DeviceInfo  >)r   r   r   )r   defaults     r   __repr__zDeviceInfo.__repr__$   s5    "&/9,,rMMMt/?M7MMMMr   )
__name__
__module____qualname____doc__str__annotations__boollistr   r    r   r   r   r      s           IIIc
'
' 
' 	
'
 #Y
' 

' 
' 
' 
'N# N N N N N Nr   r   device_listr
   c           	         g }t          | j                  D ]}| j        |         }g }t          |j                  D ]L}|j        |         }t          j        |          }|r'|                    |                                           M|                    t          |j
        r|j
                                        nd|j        r|j                                        nd|| j        k    |                     |S )Nr   r   )range
nb_devicesdevicesnb_media_typesr	   libav_get_media_type_stringappenddecoder   device_namedevice_descriptiondefault_device)r    r$   idevice_infor	   jmtss           r   _build_device_listr2   )   s   G ;)** 
 
!)!,{122 	/ 	/A(+B,R00A /""188::...*[,335551K:AACCC!;;'	 	 		
 	
 	
 	
 Nr   format_namec           	         ddl m} t          j        |           }t          j        }t          j        t	          j        |          ddd           t          j        }|                                }|	                    |j
                   g }	 |                                5 }t          j        t	          j        |          d|t	          j        |                     |r&t          j        t	          j        |                     ddd           n# 1 swxY w Y   d}|D ]\  }	}
}|                                }d|                                v rd}3d	|                                v rd
}Lt!          j        d|          }|rM|                    t'          |                    d          |                    d          d|g                     	 |	                    |           t          j        t	          j        |                     n@# |	                    |           t          j        t	          j        |                     w xY w|S )zFallback for formats (e.g. avfoundation) that log devices instead of
    implementing get_device_list. Opens the format with list_devices=1 and
    parses the INFO log output.r   )loggings   list_devices   1r   Nvideozvideo deviceszaudio devicesaudioz\[(\d+)\] (.+)      Fr   )avr5   r&   av_find_input_formatcythonNULLav_dict_setaddress	get_level	set_levelINFOCaptureavformat_open_inputavformat_close_inputstriplowerrematchr(   r   groupav_dict_free)r3   	avloggingfmtoptsctx	old_levelr$   logscurrent_media_type_level_namemessagems                r   _enumerate_via_log_fallbackrX   L   s    (''''';>;S< <C .4[DOFN4((/4CCC/5{C ##%%I	''' "G/   	>D#FN3$7$7c6>RVCWCWXXX >()<)<===	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>
 %&* 	 	"FE7mmooG'--//11%,"" GMMOO33%,""H.88 NN"!"()

',);(<	    	$ 	I&&&--.... 	I&&&--....Ns2   H !A$DH DH DB8H =Ic           
      J   t          j        |           }|st          d|           t          j        }	 t          t          j        |t          j        t          j        t          j        |                               t          |          t          j	        t          j        |                     S # t          $ r8 t          |           cY t          j	        t          j        |                     S w xY w# t          j	        t          j        |                     w xY w)a  List the available input devices for a given format.

    :param str format_name: The format name, e.g. ``"avfoundation"``, ``"dshow"``, ``"v4l2"``.
    :rtype: list[DeviceInfo]
    :raises ValueError: If *format_name* is not a known input format.
    :raises av.FFmpegError: If the device does not support enumeration.

    Example::

        for device in av.enumerate_input_devices("avfoundation"):
            print(device.name, device.description)

    zno such input format: )r&   r<   
ValueErrorr=   r>   r   avdevice_list_input_sourcesr@   r2   avdevice_free_list_devicesNotImplementedErrorrX   r3   rN   r    s      r   enumerate_input_devicesr_   ~   s     <?;S< <C  CA+AABBB8>KD+V[&+v~k/J/J 	
 	
 	

 "+.. 	&v~k'B'BCCCC  8 8 8 +;7777&v~k'B'BCCCC8
 	&v~k'B'BCCCCs$   AB5 5C7C: 6C77C: :(D"c           
         t          j        | t          j        t          j                  }|st	          d|           t          j        }t          t          j        |t          j        t          j        t          j        |                               	 t          |          t          j	        t          j        |                     S # t          j	        t          j        |                     w xY w)a.  List the available output devices for a given format.

    :param str format_name: The format name, e.g. ``"audiotoolbox"``.
    :rtype: list[DeviceInfo]
    :raises ValueError: If *format_name* is not a known output format.
    :raises av.FFmpegError: If the device does not support enumeration.

    zno such output format: )
r&   av_guess_formatr=   r>   rZ   r   avdevice_list_output_sinksr@   r2   r\   r^   s      r   enumerate_output_devicesrc      s     =@<OV[&+= =C  DB;BBCCC8>K&fk6>++F+F	
 	
  D!+..&v~k'B'BCCCC&v~k'B'BCCCCs   C (C3)rI   r=   cython.cimports.libavcimportslibavr&   cython.cimports.av.errorr   r   cfuncpointerAVDeviceInfoListr   r2   r   rX   r_   rc   r   r   r   <module>rk      s?   				  # # # # # # # # # . . . . . .N N N N N N N NB FN33G$H T    D/S /T*5E / / / /d!D !Dj1A !D !D !D !DHD# D$z2B D D D D D Dr   