
    3j                         S SK r S SKrS SKJs  Jr  S SKJr   " S S5      r\R                  S\R                  \R                     S\4S j5       rS\S\\   4S	 jrS\S\\   4S
 jrS\S\\   4S jrg)    N)	err_checkc            
       z    \ rS rSr% Sr\\S'   \\S'   \\S'   \\   \S'   S\S\S\S\\   SS4
S	 jr	S\4S
 jr
Srg)
DeviceInfo   a  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                 4    Xl         X l        X0l        X@l        g )Nr   r   r	   r
   )selfr   r   r	   r
   s        C/home/wildlama/miniconda3/lib/python3.13/site-packages/av/device.py__init__DeviceInfo.__init__   s     	&$&    c                 n    U R                   (       a  SOSnSU R                  < SU R                  < U S3$ )Nz
 (default) z<av.DeviceInfo  >)r	   r   r   )r   defaults     r   __repr__DeviceInfo.__repr__$   s3    "&//,r Qt/?/?.B7)1MMr   )r   r	   r
   r   )__name__
__module____qualname____firstlineno____doc__str__annotations__boollistr   r   __static_attributes__ r   r   r   r      sk     Ic
'
' 
' 	
'
 #Y
' 

'N# Nr   r   device_listr   c           
      |   / n[        U R                  5       GH  nU R                  U   n/ n[        UR                  5       HB  nUR                  U   n[
        R                  " U5      nU(       d  M1  UR                  U5        MD     UR                  [        UR                  (       a3  [        R                  " [        UR                  5      R                  5       OSUR                  (       a3  [        R                  " [        UR                  5      R                  5       OSX R                  :H  US95        GM"     U$ )Nr   r   )range
nb_devicesdevicesnb_media_typesr
   libav_get_media_type_stringappendr   device_namecythoncastbytesdecodedevice_descriptiondefault_device)r%   r)   idevice_infor
   jmtss           r   _build_device_listr:   )   s    G ;))*!))!,{112A((+B,,R0Aq""1%	 3 	** [[(?(?@GGI11 #KK{/M/MNUUW!;!;;'		
 +. Nr   format_namec           
         SSK Jn  [        R                  " U 5      n[        R
                  n[        R                  " [        R                  " U5      SSS5        [        R
                  nUR                  5       nUR                  UR                  5        / n UR                  5        n[        R                  " [        R                  " U5      SU[        R                  " U5      5        U(       a*  [        R                  " [        R                  " U5      5        SSS5        SnW H  u  pnUR                  5       nSUR                  5       ;   a  SnM.  S	UR                  5       ;   a  S
nMF  [         R"                  " SU5      nU(       d  Mf  UR%                  ['        UR)                  S5      UR)                  S5      SU/S95        M     UR                  U5        [        R*                  " [        R                  " U5      5        U$ ! , (       d  f       N= f! UR                  U5        [        R*                  " [        R                  " U5      5        f = f)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   )avr=   r+   av_find_input_formatr/   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)r;   	avloggingfmtoptsctx	old_levelr)   logscurrent_media_type_level_namemessagems                r   _enumerate_via_log_fallbackr_   L   s    (;>;S;S<C .4[[DOOFNN4(/4C/5{{C ##%I	' "G/ D##FNN3$7c6>>RVCWX(()<= !
 %&*"F7mmoG'--/1%," GMMO3%,"HH.81NN"!"()
',);(<	 '+$ 	I&-.N7 ! 0 	I&-.s,   H (A3HA.H >H 
HH =Ic           
      r   [         R                  " U 5      nU(       d  [        SU < 35      e[        R                  n [        [         R                  " U[        R                  [        R                  [        R                  " U5      5      5        [        U5      [         R                  " [        R                  " U5      5        $ ! [         a8    [        U 5      s [         R                  " [        R                  " U5      5        $ f = f! [         R                  " [        R                  " U5      5        f = f)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+   rD   
ValueErrorr/   rE   r   avdevice_list_input_sourcesrG   r:   avdevice_free_list_devicesNotImplementedErrorr_   r;   rU   r%   s      r   enumerate_input_devicesrf   ~   s     <?;S;S<C 1+ABB8>KD++V[[&++v~~k/J	

 "+. 	&&v~~k'BC  8 +;77&&v~~k'BC8
 	&&v~~k'BCs$   AC DD
 DD
 
,D6c           
      $   [         R                  " U [        R                  [        R                  5      nU(       d  [	        SU < 35      e[        R                  n[        [         R                  " U[        R                  [        R                  [        R                  " U5      5      5         [        U5      [         R                  " [        R                  " U5      5        $ ! [         R                  " [        R                  " U5      5        f = f)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/   rE   ra   r   avdevice_list_output_sinksrG   r:   rc   re   s      r   enumerate_output_devicesrj      s     =@<O<OV[[&++=C 2;/BCC8>K&&fkk6>>++F	
D!+.&&v~~k'BC&&v~~k'BCs   .
C# #,D)rP   r/   cython.cimports.libavcimportslibavr+   cython.cimports.av.errorr   r   cfuncpointerAVDeviceInfoListr"   r:   r   r_   rf   rj   r$   r   r   <module>rr      s    	  # # .N NB FNN33G3G$H T  D/S /T*5E /d!D !Dj1A !DHD# D$z2B Dr   