o
    2je                     @   s  d dl Z d dlmZ d dlZd dlm  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 deZG d	d
 d
eZeee Zeee  Zejdejejej  defddZejejG dd dZejdd Z ejejG dd dZ!dS )    N)IntEnum)Codec)
Dictionary)	err_check)get_video_formatc                   @   sb   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jZejZejZdZdZdS )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 r*   r*   K/var/www/html/whisper/venv/lib/python3.10/site-packages/av/codec/hwaccel.pyr      s     r   c                   @   s(   e Zd ZdZejZejZej	Z
ejZdS )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*   r+   r,      s    
r,   ptrreturnc                 C   sP   z
t ttj|  W S  ty   Y nw tt}||  |t ttj| < |S N)_singletonscythoncast
Py_ssize_tKeyErrorHWConfig_cinit_sentinel_init)r5   configr*   r*   r+   wrap_hwconfig-   s   
rA   c                   @   st   e Zd Zdd Zejdejejej	  dej
fddZdd Zed	d
 Zedd Zedd Zedd ZdS )r=   c                 C   s   |t urtdd S )NzCannot instantiate CodecContext)r>   RuntimeError)selfsentinelr*   r*   r+   __init__<   s   zHWConfig.__init__r5   r6   c                 C   s
   || _ d S r7   )r5   )rC   r5   r*   r*   r+   r?   @   s   
zHWConfig._initc                 C   sN   d| j j dt| j d| jr| jjnd  d| j dt	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_supportedr9   r:   r;   r5   rC   r*   r*   r+   __repr__F   s   
zHWConfig.__repr__c                 C      t | jjS r7   )r   r5   rJ   rN   r*   r*   r+   rJ   N      zHWConfig.device_typec                 C   s   t | jjddS )Nr   )r   r5   pix_fmtrN   r*   r*   r+   rK   R   s   zHWConfig.formatc                 C   rP   r7   )r,   r5   methodsrN   r*   r*   r+   rS   V   rQ   zHWConfig.methodsc                 C   s   t | jjtj@ S r7   )boolr5   rS   r   r-   rN   r*   r*   r+   rM   Z   s   zHWConfig.is_supportedN)r
   r   r   rE   r9   cfuncpointerconstr   AVCodecHWConfigvoidr?   rO   propertyrJ   rK   rS   rM   r*   r*   r*   r+   r=   9   s"    


r=   c                  C   s<   g } t j}	 t |}|t jkr	 | S | t t| qr7   )r   r   av_hwdevice_iterate_typesappendrI   r   )resultrF   r*   r*   r+   hwdevices_available_   s   

r^   c                   @   sH   e Zd Z					dddZdefddZded	efd
dZdd ZdS )HWAccelNTFc                 C   s   t |tr	|| _nt |trtt|| _nt |tr || _ntd|| _d| _	| jtj
kr7|r7t|| _	|d u r=d n| | _|| _|sHi nt|| _| jtj
kr]| jr]| jdd |sadn|| _tj| _d | _d S )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flagsr9   NULLr5   r@   )rC   rJ   devicerk   rm   ro   rh   r*   r*   r+   rE   n   s&   
	



zHWAccel.__init__codecc                 C   s   |j D ]}|jjtj@ sq| jr|j| jkrq ntd| || _t	j
}| jr0| j }|}t| j}ttt	| j|jj||j| j d S )Nz!No supported hardware config for )hardware_configsr5   rS   r   r-   rc   rJ   NotImplementedErrorr@   r9   rp   rj   encoder   rm   r   av_hwdevice_ctx_createaddressro   )rC   rr   r@   c_devicedevice_bytes	c_optionsr*   r*   r+   _initialize_hw_context   s,   



zHWAccel._initialize_hw_contextr6   c                 C   s8   | j rtdt| j| j| j| j| jd}|| |S )z>Create a new hardware accelerator context with the given codecz$Hardware context already initialized)rJ   rq   rk   rm   rh   )	r5   rB   r_   rc   rj   rk   rm   rh   r{   )rC   rr   retr*   r*   r+   create   s   
zHWAccel.createc                 C   s    | j rtt| j  d S d S r7   )r5   r   av_buffer_unrefr9   rw   rN   r*   r*   r+   __dealloc__   s   zHWAccel.__dealloc__)NTNNF)	r
   r   r   rE   r   r{   r_   r}   r   r*   r*   r*   r+   r_   k   s    
!r_   )"weakrefenumr   r9   cython.cimports.libavcimportslibavr   cython.cimports.av.codec.codecr   cython.cimports.av.dictionaryr   cython.cimports.av.errorr   cython.cimports.av.video.formatr   r   r,   declareobjectr>   WeakValueDictionaryr8   rU   rV   rW   rX   r=   rA   finalcclassccallr^   r_   r*   r*   r*   r+   <module>   s,    
"$
