o
    2jT                     @   s   d dl Z d dlmZmZ d dlmZmZmZmZ d dl	m
Z
 e je jG dd dZe jdde jd	edB fd
dZe jG dd dZdS )    N)PyBUF_WRITABLEPyBuffer_FillInfo)PyBUF_SIMPLEPyBuffer_ReleasePyObject_CheckBufferPyObject_GetBuffer)memcpyc                   @   s   e Zd Zdd Zdd ZdS )
ByteSourcec                 C   s   || _ z|| _W n	 ty   Y nw t|| _d S t|r=t|t| j	t
}|s=d| _ttj| j	j| _| j	j| _d S td)NTz'expected bytes, bytearray or memoryview)ownerptr	TypeErrorlenlengthr   r   cythonaddressviewr   has_viewcastp_ucharbuf)selfr
   res r   D/var/www/html/whisper/venv/lib/python3.10/site-packages/av/buffer.py	__cinit__   s    


zByteSource.__cinit__c                 C   s   | j rtt| j d S d S N)r   r   r   r   r   r   r   r   r   __dealloc__%   s   zByteSource.__dealloc__N)__name__
__module____qualname__r   r   r   r   r   r   r	      s    r	   F
allow_nonereturnc                 C   s&   |r| d u rd S t | tr| S t| S r   )
isinstancer	   )objr!   r   r   r   
bytesource*   s
   
r%   c                   @   s   e Zd ZdZejdejfddZdejfddZ	dej
fddZd	eje d
ejfddZedd Zedd Zdd ZdS )BufferzxA base class for PyAV objects which support the buffer protocol, such
    as :class:`.Packet` and :class:`.Plane`.

    r"   c                 C      dS )Nr   r   r   r   r   r   _buffer_size;   s   zBuffer._buffer_sizec                 C   s   t jS r   )r   NULLr   r   r   r   _buffer_ptr?   s   zBuffer._buffer_ptrc                 C   r'   )NTr   r   r   r   r   _buffer_writableB   s   zBuffer._buffer_writabler   flagsc                 C   s6   |t @ r|  stdt|| |  |  d| d S )Nbuffer is not writabler   )r   r+   
ValueErrorr   r*   r(   )r   r   r,   r   r   r   __getbuffer__E   s   zBuffer.__getbuffer__c                 C   s   |   S r   )r(   r   r   r   r   buffer_sizeK   s   zBuffer.buffer_sizec                 C   s   t t j|  S )z!The memory address of the buffer.)r   r   size_tr*   r   r   r   r   
buffer_ptrO   s   zBuffer.buffer_ptrc                 C   sX   |   stdt|}|  }|j|kr!td|j d| dt|  |j| dS )zReplace the data in this object with the given buffer.

        Accepts anything that supports the `buffer protocol <https://docs.python.org/3/c-api/buffer.html>`_,
        e.g. bytes, NumPy arrays, other :class:`Buffer` objects, etc..

        r-   zgot z bytes; need z bytesN)r+   r.   r%   r(   r   r   r*   r   )r   inputsourcesizer   r   r   updateT   s   
zBuffer.updateN)r   r   r    __doc__r   cfuncr1   r(   p_voidr*   bintr+   pointer	Py_bufferintr/   propertyr0   r2   r6   r   r   r   r   r&   4   s    

r&   )F)r   cython.cimports.cpythonr   r   cython.cimports.cpython.bufferr   r   r   r   cython.cimports.libc.stringr   finalcclassr	   r8   r:   r%   r&   r   r   r   r   <module>   s    	