o
    2j.                     @   sz  U d dl Z d dlZd dlZd dlZd dlmZ d dlZd dlmZ	 d dl
mZ d dlmZmZ d dlmZmZ g dZeee Zejdejd	efd
dZejded	ejfddZG dd deZeejedZeedZG dd dee Z G dd deZ!G dd deZ"de	j# de fde	j$ de%fde	j& de'fde	j( de fde	j) de fde	j* de fd e	j+ d!e,fd"e	j- ddfd#e	j. ddfd$e	j/ de fd%e	j0 d&e'fd'e	j1 de fd(e	j2 de fd)e	j3 d*dfd+e	j4 de fd,e	j5 ddfd-e	j6 ddfd.e	j7 ddfd/e	j8 ddfd0e	j9 d1e"fd2e	j: d3e"fd4e	j; d5e"fd6e	j< d7e"fd8e	j= d9e"fd:e	j> d;e"fd<e	j? d=e!fd>ed?e%ffZ@G d@dA dAeAZBejCG dBdC dCZDeBdDeDfdEeEidFdG e@D ZFeFD ]ZGeGeH eGjI< eGjJekreeG_Kqle	LeGjJ eG_Kqli ZMeNeOdH< dIdJ ZPePdKe jQe jRf ePdLe jSe jTe jUe jVf ePdMe jWf ePdNe jXf ePdOe jYf ePdPe jZf ePdQe j[f ePdRe j\f ePdSe j]f ePdTe j^f ePdUe j_f ePdVe j`e jaf ePdWe jbf ePdXe jcf ePdYe jdf ePdZe jef ePd[e jff ePd\d]dG e jgD  G d^d_ d_ee'ZhG d`da daeZieheMe jj< eheH d_< ekd_ e@D ]A\ZlZmZIZneIpSelo pdbdcdd ZIendu r]efZqnerenergenfZqneenfZqeAeIeqdEeEiZseseMem< eseH eI< ekeI qA[@eee Zteejd aueejd avejwdmd	ejfdedfZxejejydgdhdidmdjejd	ejfdkdlZzdS )n    N)local)libav)get_last_error)fprintfstderr)freemalloc)	ErrorTypeFFmpegErrorLookupError	HTTPErrorHTTPClientErrorUndefinedErrorcodereturnc                 C   s,   t | d@ | d? d@ | d? d@ | d? d@ fS )zaConvert an integer error code into 4-byte tag.

    >>> code_to_tag(1953719668)
    b'test'

                )bytes)r    r   C/var/www/html/whisper/venv/lib/python3.10/site-packages/av/error.pycode_to_tag   s   


r   tagc                 C   s@   t | dkr
td| d | d d>  | d d>  | d d	>  S )
zcConvert a 4-byte error tag into an integer code.

    >>> tag_to_code(b'test')
    1953719668

       zError tags are 4 bytes.r      r      r      r   )len
ValueError)r   r   r   r   tag_to_code+   s   ,r    c                       sB   e Zd ZdZd fdd	Zedd Zedd Zd	d
 Z  Z	S )r
   an  Exception class for errors from within FFmpeg.

    .. attribute:: errno

        FFmpeg's integer error code.

    .. attribute:: strerror

        FFmpeg's error message.

    .. attribute:: filename

        The filename that was being operated on (if available).

    .. attribute:: log

        The tuple from :func:`av.logging.get_last_log`, or ``None``.

    Nc                    sN   ||g}|s|r| | |r| | t j|  || _|| _t|| _d S N)appendsuper__init__errnostrerrortupleargs)selfr   messagefilenamelogr(   	__class__r   r   r$   M   s   

zFFmpegError.__init__c                 C   "   z| j d W S  ty   Y d S w Nr   r(   
IndexErrorr)   r   r   r   r+   Y   
   zFFmpegError.filenamec                 C   r/   )Nr   r1   r3   r   r   r   r,   `   r4   zFFmpegError.logc                 C   s   d}| j d ur| d| j  d}| jd ur| | j }| jr'| d| j}| jr>| d| jd   d| jd   }|S )N z[Errno ] : ; last error log: [r   r   )r%   r&   r+   r,   stripr)   msgr   r   r   __str__g   s   

&zFFmpegError.__str__)NN)
__name__
__module____qualname____doc__r$   propertyr+   r,   r<   __classcell__r   r   r-   r   r
   8   s    

r
   s   PyAVzError in PyAV callbackc                   @      e Zd ZdS )r   Nr=   r>   r?   r   r   r   r   r   }       r   c                   @   rC   )r   NrD   r   r   r   r   r      rE   r   c                   @   rC   )r   NrD   r   r   r   r   r      rE   r   BSF_NOT_FOUNDBSFNotFoundErrorBUGBUFFER_TOO_SMALLDECODER_NOT_FOUNDDEMUXER_NOT_FOUNDENCODER_NOT_FOUNDEOFEOFErrorEXITEXTERNALFILTER_NOT_FOUNDINVALIDDATAInvalidDataErrorMUXER_NOT_FOUNDOPTION_NOT_FOUNDPATCHWELCOMEPatchWelcomeErrorPROTOCOL_NOT_FOUNDUNKNOWNEXPERIMENTALINPUT_CHANGEDOUTPUT_CHANGEDHTTP_BAD_REQUESTHTTPBadRequestErrorHTTP_UNAUTHORIZEDHTTPUnauthorizedErrorHTTP_FORBIDDENHTTPForbiddenErrorHTTP_NOT_FOUNDHTTPNotFoundErrorHTTP_TOO_MANY_REQUESTSHTTPTooManyRequestsErrorHTTP_OTHER_4XXHTTPOtherClientErrorHTTP_SERVER_ERRORHTTPServerErrorPYAV_CALLBACKPyAVCallbackErrorc                       s>   e Zd Z fddZdd ZdddZd	d
 Zdd Z  ZS )EnumTypec                    s   t  | |||S r!   )r#   __new__)mclnamebasesattrsr(   r-   r   r   rn      s   zEnumType.__new__c                 C   s*   i | _ i | _g | _|D ]}| j|  qd S r!   )_by_name	_by_value_all_create)r)   rp   rq   rr   itemsspecr   r   r   r$      s   zEnumType.__init__NFc                 C   s>   z| j | }W |S  ty   | t|||}|| j |< Y |S w r!   )rt   KeyErrorsentinel)r)   rp   valuedocby_value_onlyitemr   r   r   rv      s   zEnumType._createc                 C   
   t | jS r!   )r   ru   r3   r   r   r   __len__      
zEnumType.__len__c                 C   r   r!   )iterru   r3   r   r   r   __iter__   r   zEnumType.__iter__)NF)	r=   r>   r?   rn   r$   rv   r   r   rB   r   r   r-   r   rm      s    

rm   c                   @   sh   e Zd ZdZejeddZejejddZ	ddedejfddZ
d	d
 Zdd Zdd Zedd ZdS )EnumItemzAn enumeration of FFmpeg's error types.

    .. attribute:: tag

        The FFmpeg byte tag for the error.

    .. attribute:: strerror

        The error message that would be returned.
    readonly)
visibilityNrp   r{   c                 C   s2   |t urtd| jj d|| _|| _|| _d S )NzCannot instantiate .)rz   RuntimeErrorr.   r=   rp   r{   r@   )r)   	sentinel_rp   r{   r|   r   r   r   	__cinit__   s
   
zEnumItem.__cinit__c              	   C   s,   d| j j d| j j d| j d| jdd	S )N<r   :z(0xxz)>)r.   r>   r=   rp   r{   r3   r   r   r   __repr__   s   ,zEnumItem.__repr__c                 C      | j S r!   )rp   r3   r   r   r   r<         zEnumItem.__str__c                 C   r   r!   )r{   r3   r   r   r   __int__   r   zEnumItem.__int__c                 C   r   r!   )r   r{   r3   r   r   r   r      s   
zEnumItem.tagr!   )r=   r>   r?   r@   cythondeclarestrrp   intr{   r   r   r<   r   rA   r   r   r   r   r   r      s    r   r	   r>   c                 C   s   g | ]}|d d qS r0   r   ).0r   r   r   r   
<listcomp>       r   classesc                 C   sJ   t t| t}t| t|fdti}|D ]}|t|< q|t | < t	|  |S )Nr>   )
getattr__builtins__OSErrortyper
   r=   r   globals__all__r"   )rp   codesbaseclsr   r   r   r   _extend_builtin   s   


r   PermissionErrorBlockingIOErrorChildProcessErrorConnectionAbortedErrorConnectionRefusedErrorConnectionResetErrorFileExistsErrorInterruptedErrorIsADirectoryErrorFileNotFoundErrorNotADirectoryErrorBrokenPipeErrorProcessLookupErrorTimeoutErrorMemoryErrorNotImplementedErrorOverflowErrorr   c                 C   s   g | ]}|t vr|qS r   )r   )r   r   r   r   r   r   #  r   c                   @   s   e Zd Zdd ZdS )ArgumentErrorc                 C   s~   d}| j d ur| | j  }| jr| d| j}| jd ur&| d| j }| jr=| d| jd   d| jd   }|S )Nr5   r7   z
 returned r8   r   r6   r   )r&   r+   r%   r,   r9   r:   r   r   r   r<   '  s   

&zArgumentError.__str__N)r=   r>   r?   r<   r   r   r   r   r   &  s    r   c                   @   s   e Zd ZdZdS )r   zLFallback exception type in case FFmpeg returns an error we don't know about.N)r=   r>   r?   r@   r   r   r   r   r   7  s    r   _r5   Errorc                 C   sT   t tdd }|d urttd tj|  td8 a| pt } | t_| r'td7 at	 S )Nexc_infoz&PyAV library exception being dropped:
r   )
r   _localr   r   	tracebackprint_exception
_err_countsysr   c_PYAV_STASHED_ERROR)r   existingr   r   r   stash_exception_  s   

r   F)checkresc           
      C   s   t rttdd}|durt d8 a dt_|d |d | dkr"| S t \}}|tkr0|a|}nd}|  }ttj	t
tjtt }|tjkrLt z#|tkrTt}nt| |tj |pbt|}t|t}	|	||||t| w )z6Raise appropriate exceptions from library return code.r   Nr   r   r   )r   r   r   r   with_tracebackr   _last_log_countr   castp_charr   libAV_ERROR_MAX_STRING_SIZEsizeofcharNULLr   r   PYAV_STASHED_ERROR_messageav_strerrorosr&   r   getr   r   )
r   r+   r   	log_countlast_logr,   r   error_bufferr*   r   r   r   r   	err_checkq  s6   	


r   r!   ){r%   r   r   r   	threadingr   r   cython.cimportsr   r   cython.cimports.av.loggingr   cython.cimports.libc.stdior   r   cython.cimports.libc.stdlibr   r   r   r   objectrz   ccallr   r   r   r    	Exceptionr
   r   r   r   r   r   r   AVERROR_BSF_NOT_FOUNDAVERROR_BUGr   AVERROR_BUFFER_TOO_SMALLr   AVERROR_DECODER_NOT_FOUNDAVERROR_DEMUXER_NOT_FOUNDAVERROR_ENCODER_NOT_FOUNDAVERROR_EOFrN   AVERROR_EXITAVERROR_EXTERNALAVERROR_FILTER_NOT_FOUNDAVERROR_INVALIDDATAAVERROR_MUXER_NOT_FOUNDAVERROR_OPTION_NOT_FOUNDAVERROR_PATCHWELCOMEAVERROR_PROTOCOL_NOT_FOUNDAVERROR_UNKNOWNAVERROR_EXPERIMENTALAVERROR_INPUT_CHANGEDAVERROR_OUTPUT_CHANGEDAVERROR_HTTP_BAD_REQUESTAVERROR_HTTP_UNAUTHORIZEDAVERROR_HTTP_FORBIDDENAVERROR_HTTP_NOT_FOUNDAVERROR_HTTP_TOO_MANY_REQUESTSAVERROR_HTTP_OTHER_4XXAVERROR_HTTP_SERVER_ERROR_ffmpeg_specsr   rm   cclassr   r=   r	   enumr   rp   r{   r&   
av_err2strr   dict__annotations__r   EACCESEPERMEAGAINEALREADYEINPROGRESSEWOULDBLOCKECHILDECONNABORTEDECONNREFUSED
ECONNRESETEEXISTEINTREISDIRENOENTENOTDIREPIPE	ESHUTDOWNESRCH	ETIMEDOUTENOMEMENOSYSERANGE	errorcoder   r   EINVALr"   	enum_namer   r   titlereplacerq   
issubclassr   r   r   r   cfuncr   	exceptvalr   r   r   r   r   <module>   s   
 @
 %





 