
    \j                     <   d dl Z d dlmZ d dlZd dlmc mZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ  G d de      Z G d	 d
e      Z ej$                  e e             Z ej$                  e e j*                               Zej.                  dej0                  ej2                  ej4                        defd       Zej:                  ej<                   G d d                    Zej>                  d        Z ej:                  ej<                   G d d                    Z!y)    N)IntEnum)Codec)
Dictionary)	err_check)get_video_formatc                   L   e Zd Zej                  Zej                  Zej                  Z	ej                  Zej                  Zej                  Zej                   Zej$                  Zej(                  Zej,                  Zej0                  Zej4                  Zej8                  ZdZdZy)HWDeviceType      N) __name__
__module____qualname__libAV_HWDEVICE_TYPE_NONEnoneAV_HWDEVICE_TYPE_VDPAUvdpauAV_HWDEVICE_TYPE_CUDAcudaAV_HWDEVICE_TYPE_VAAPIvaapiAV_HWDEVICE_TYPE_DXVA2dxva2AV_HWDEVICE_TYPE_QSVqsvAV_HWDEVICE_TYPE_VIDEOTOOLBOXvideotoolboxAV_HWDEVICE_TYPE_D3D11VAd3d11vaAV_HWDEVICE_TYPE_DRMdrmAV_HWDEVICE_TYPE_OPENCLopenclAV_HWDEVICE_TYPE_MEDIACODEC
mediacodecAV_HWDEVICE_TYPE_VULKANvulkanAV_HWDEVICE_TYPE_D3D12VAd3d12vaamfohcodec     C/root/.hermes/venv/lib/python3.12/site-packages/av/codec/hwaccel.pyr	   r	      s    $$D&&E$$D&&E&&E

"
"C44L**G

"
"C((F00J((F**G
CGr-   r	   c                   p    e Zd ZdZej
                  Zej                  Zej                  Z
ej                  Zy)HWConfigMethodr   N)r   r   r   r   r   'AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTXhw_device_ctx'AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTXhw_frame_ctx"AV_CODEC_HW_CONFIG_METHOD_INTERNALinternal AV_CODEC_HW_CONFIG_METHOD_AD_HOCad_hocr,   r-   r.   r0   r0      s8    D33  >>L55H11Fr-   r0   ptrreturnc                    	 t         t        j                  t        j                  |          S # t        $ r Y nw xY wt        t              }|j                  |        |t         t        j                  t        j                  |       <   |S N)_singletonscythoncast
Py_ssize_tKeyErrorHWConfig_cinit_sentinel_init)r9   configs     r.   wrap_hwconfigrF   -   sk    6;;v'8'8#>?? 0F
LL7=KF--s34Ms   *- 	99c                       e Zd Zd Zej
                  dej                  ej                  ej                        dej                  fd       Zd Zed        Zed        Zed        Zed	        Zy
)rB   c                 *    |t         urt        d      y )NzCannot instantiate CodecContext)rC   RuntimeError)selfsentinels     r.   __init__zHWConfig.__init__<   s    ?*@AA +r-   r9   r:   c                     || _         y r<   )r9   )rJ   r9   s     r.   rD   zHWConfig._init@   s     r-   c                 :   d| j                   j                   dt        j                  | j                         d| j
                  r| j
                  j                  nd  d| j                   dt        j                  t        j                  | j                        ddS )Nz<av.z device_type=z format=z is_supported=z at 0xx>)	__class__r   r   av_hwdevice_get_type_namedevice_typeformatnameis_supportedr>   r?   r@   r9   rJ   s    r.   __repr__zHWConfig.__repr__F   s    4>>**+ ,889I9IJK L*.++dkk&&4@ A --.fV[[ARARTXT\T\5]^_4``ac	
r-   c                 @    t        | j                  j                        S r<   )r	   r9   rS   rW   s    r.   rS   zHWConfig.device_typeN   s    DHH0011r-   c                 D    t        | j                  j                  dd      S )Nr   )r   r9   pix_fmtrW   s    r.   rT   zHWConfig.formatR   s     0 0!Q77r-   c                 @    t        | j                  j                        S r<   )r0   r9   methodsrW   s    r.   r]   zHWConfig.methodsV   s    dhh..//r-   c                 b    t        | j                  j                  t        j                  z        S r<   )boolr9   r]   r   r1   rW   s    r.   rV   zHWConfig.is_supportedZ   s"    DHH$$s'R'RRSSr-   N)r   r   r   rL   r>   cfuncpointerconstr   AVCodecHWConfigvoidrD   rX   propertyrS   rT   r]   rV   r,   r-   r.   rB   rB   9   s    B \\>>&,,s/B/B"CD	 

 2 2 8 8 0 0 T Tr-   rB   c                      g } t         j                  }	 t        j                  |      }|t         j                  k(  r	 | S | j                  t        j                  t        |                   Y)zkReturn the names of the hardware device types FFmpeg was built with,
    e.g. ``["cuda", "videotoolbox"]``.)r   r   av_hwdevice_iterate_typesappendrR   r	   )resultrO   s     r.   hwdevices_availablerj   _   s_     F55A
))!,)))M 	c33LODE	 r-   c                   P    e Zd ZdZ	 	 	 	 	 d
dZddedefdZddededefdZ	d	 Z
y)HWAccela  HWAccel(device_type, device=None, allow_software_fallback=True, options=None, flags=None, is_hw_owned=False)

    Settings for hardware-accelerated decoding and encoding. Pass an instance to
    :func:`av.open` to decode on the device, or to
    :meth:`OutputContainer.add_stream <av.container.OutputContainer.add_stream>`
    to encode on it.

    :param device_type: The kind of device, e.g. ``"cuda"``, ``"vaapi"``,
        ``"videotoolbox"``. See :func:`hwdevices_available` for the types
        supported by the loaded FFmpeg.
    :type device_type: str or HWDeviceType
    :param str device: An optional device identifier, e.g. a DRI render node path
        (``"/dev/dri/renderD128"``) for VAAPI or a device index (``"1"``) for CUDA.
        Uses the default device if ``None``.
    :param bool allow_software_fallback: Whether decoding falls back to a software
        decoder when the hardware decoder cannot handle the stream.
    :param dict options: Options passed to ``av_hwdevice_ctx_create``.
    :param int flags: Flags passed to ``av_hwdevice_ctx_create``.
    :param bool is_hw_owned: If True, decoded frames stay on the device (for
        consumption via DLPack, for example) instead of being downloaded to
        system memory.
    Nc                    t        |t              r|| _        nWt        |t              r$t	        t        j                  |            | _        n#t        |t              r|| _        nt        d      || _        d| _	        | j                  t        j                  k(  r|rt	        |      | _	        |d n| | _        || _        |si n
t        |      | _        | j                  t        j                  k(  r(| j                  r| j                  j                  dd       |sdn|| _        t"        j$                  | _        d | _        y )NzUnknown type for device_typer   primary_ctx1)
isinstancer	   _device_typestrintr   av_hwdevice_find_type_by_name
ValueErroris_hw_owned	device_idr   _deviceallow_software_fallbackdictoptions
setdefaultflagsr>   NULLr9   rE   )rJ   rS   devicery   r{   r}   rv   s          r.   rL   zHWAccel.__init__   s     k<0 +DS) #C$E$Ek$R SDS) +D;<<& 1 11f [DN%~tfX'>$!(rd7m 1 11d6F6FLL##M37#Q
;;r-   codecfor_encodingc           	         t         j                  }|r|t         j                  z  }|j                  D ]C  }|j                  j
                  |z  s| j                  r|j                  | j                  k7  rC n t        d|       || _	        t        j                  }| j                  r| j                  j                         }|}t        | j                        }t!        t        j"                  t        j$                  | j                        |j                  j                  ||j                  | j&                               y )Nz!No supported hardware config for )r   r1   r3   hardware_configsr9   r]   rq   rS   NotImplementedErrorrE   r>   r~   rx   encoder   r{   r   av_hwdevice_ctx_createaddressr}   )rJ   r   r   supported_methodsrE   c_devicedevice_bytes	c_optionss           r.   _initialize_hw_contextzHWAccel._initialize_hw_context   s
    ),(S(S!L!LL ,, 	SFJJ&&)::  V%7%74;L;L%L	S &(I%&QRR"(++<<<<..0L#H *4<< 8	&&txx(

&&

	
r-   r:   c                     | j                   rt        d      t        | j                  | j                  | j
                  | j                  | j                        }|j                  ||       |S )z>Create a new hardware accelerator context with the given codecz$Hardware context already initialized)rS   r   ry   r{   rv   )r   )	r9   rI   rl   rq   rx   ry   r{   rv   r   )rJ   r   r   rets       r.   createzHWAccel.create   sb    88EFF))<<$($@$@LL((
 	""5|"D
r-   c                     | j                   r3t        j                  t        j                  | j                                y y r<   )r9   r   av_buffer_unrefr>   r   rW   s    r.   __dealloc__zHWAccel.__dealloc__   s)    88txx 89 r-   )NTNNF)F)r   r   r   __doc__rL   r   r_   r   rl   r   r   r,   r-   r.   rl   rl   m   sQ    4  $B!
E !
 !
FE  ' :r-   rl   )"weakrefenumr   r>   cython.cimports.libavcimportslibavr   cython.cimports.av.codec.codecr   cython.cimports.av.dictionaryr   cython.cimports.av.errorr   cython.cimports.av.video.formatr   r	   r0   declareobjectrC   WeakValueDictionaryr=   r`   ra   rb   rc   rB   rF   finalcclassccallrj   rl   r,   r-   r.   <module>r      s      # # 0 4 . <7 &2W 2 !&..2fnnV%@W%@%@%BC v~~fll33F3F&GH X   !T !T  !TH 
 
 m: m:  m:r-   