o
    wi                     @   s   d dl Z d dlmZmZ d dlmZ e jG dd dZe jG dd dZe j	ded	e j
d
efddZe jG dd dZe jG dd deZe jG dd dZe jG dd deZdS )    N)PyBuffer_FillInfoPyBytes_FromString)uint64_tc                   @   s   e Zd Zdd ZdS )SubtitleProxyc                 C   s   t t| j d S N)libavsubtitle_freecythonaddressstructself r   R/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/av/subtitles/subtitle.py__dealloc__   s   zSubtitleProxy.__dealloc__N)__name__
__module____qualname__r   r   r   r   r   r      s    r   c                   @   sn   e Zd ZdZdefddZdd Zedd Zed	d
 Z	edd Z
edd Zdd Zdd Zdd ZdS )SubtitleSetzm
    A :class:`SubtitleSet` can contain many :class:`Subtitle` objects.

    Wraps :ffmpeg:`AVSubtitle`.
    proxyc                    s,   | _ t fddt j jjD  _d S )Nc                 3   s    | ]}t  |V  qd S r   )build_subtitle.0ir   r   r   	<genexpr>   s    

z(SubtitleSet.__cinit__.<locals>.<genexpr>)r   tupleranger   	num_rectsrects)r   r   r   r   r   	__cinit__   s   zSubtitleSet.__cinit__c                 C   s&   d| j j d| j j dt| ddS )N<. at 0xx>)	__class__r   r   idr   r   r   r   __repr__   s   $zSubtitleSet.__repr__c                 C   
   | j jjS r   )r   r   formatr   r   r   r   r)         
zSubtitleSet.formatc                 C   r(   r   )r   r   start_display_timer   r   r   r   r+   #   r*   zSubtitleSet.start_display_timec                 C   r(   r   )r   r   end_display_timer   r   r   r   r,   '   r*   zSubtitleSet.end_display_timec                 C   r(   )z$Same as packet pts, in av.time_base.)r   r   ptsr   r   r   r   r-   +   s   
zSubtitleSet.ptsc                 C   
   t | jS r   )lenr   r   r   r   r   __len__0      
zSubtitleSet.__len__c                 C   r.   r   )iterr   r   r   r   r   __iter__3   r1   zSubtitleSet.__iter__c                 C   
   | j | S r   )r   r   r   r   r   r   __getitem__6   r1   zSubtitleSet.__getitem__N)r   r   r   __doc__r   r   r'   propertyr)   r+   r,   r-   r0   r3   r6   r   r   r   r   r      s    



r   subtitleindexreturnc                 C   s|   |dk st t j|| jjjkrtd| jjj| }|jt	j
kr&t| |S |jt	jks2|jt	jkr7t| |S td|j )zBuild an av.Stream for an existing AVStream.

    The AVStream MUST be fully constructed and ready for use before this is called.
    r    subtitle rect index out of rangezunknown subtitle type %r)r	   castuintr   r   r   
ValueErrorr   typer   SUBTITLE_BITMAPBitmapSubtitleSUBTITLE_ASSSUBTITLE_TEXTAssSubtitle)r9   r:   ptrr   r   r   r   :   s    

r   c                   @   s,   e Zd ZdZdedejfddZdd ZdS )	Subtitlezg
    An abstract base class for each concrete type of subtitle.
    Wraps :ffmpeg:`AVSubtitleRect`
    r9   r:   c                 C   s   |dk st t j||jjjkrtd|j| _| jjj| | _| jj	t
jkr,d| _	d S | jj	t
jkr8d| _	d S | jj	t
jkrDd| _	d S | jj	t
jkrPd| _	d S td| jj	)Nr   r<   s   nones   bitmaps   texts   asszunknown subtitle type )r	   r=   r>   r   r   r   r?   r   rF   r@   r   SUBTITLE_NONErA   rD   rC   r   r9   r:   r   r   r   r   T   s   



zSubtitle.__cinit__c                 C   s   d| j j dt| ddS )Nz<av.r"   r#   r$   )r%   r   r&   r   r   r   r   r'   h   s   zSubtitle.__repr__N)	r   r   r   r7   r   r	   intr   r'   r   r   r   r   rG   M   s    rG   c                   @   s|   e Zd Zde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edd Zdd Zdd Zdd ZdS )rB   r9   r:   c                    s    t  fddtdD  _d S )Nc                 3   s&    | ]} j j| rt |V  qd S r   )rF   linesizeBitmapSubtitlePlaner   r   r   r   r   o   s    
z+BitmapSubtitle.__cinit__.<locals>.<genexpr>   )r   r   planesrI   r   r   r   r   n   s   zBitmapSubtitle.__cinit__c                 C   sF   d| j j d| j j d| j d| j d| j d| j dt| ddS )	Nr    r!    r#   z at ,z; at 0xr$   )r%   r   r   widthheightr#   yr&   r   r   r   r   r'   s   s   zBitmapSubtitle.__repr__c                 C      | j jS r   )rF   r#   r   r   r   r   r#   y      zBitmapSubtitle.xc                 C   rT   r   )rF   rS   r   r   r   r   rS   }   rU   zBitmapSubtitle.yc                 C   rT   r   )rF   wr   r   r   r   rQ      rU   zBitmapSubtitle.widthc                 C   rT   r   )rF   hr   r   r   r   rR      rU   zBitmapSubtitle.heightc                 C   rT   r   )rF   	nb_colorsr   r   r   r   rX      rU   zBitmapSubtitle.nb_colorsc                 C   r.   r   )r/   rN   r   r   r   r   r0      r1   zBitmapSubtitle.__len__c                 C   r.   r   )r2   rN   r   r   r   r   r3      r1   zBitmapSubtitle.__iter__c                 C   r4   r   )rN   r5   r   r   r   r6      r1   zBitmapSubtitle.__getitem__N)r   r   r   r   r	   rJ   r   r'   r8   r#   rS   rQ   rR   rX   r0   r3   r6   r   r   r   r   rB   l   s     




rB   c                   @   s:   e Zd ZdedejfddZdeje dejfddZ	d	S )
rL   r9   r:   c                 C   s^   |dkrt d|jj| st d|| _|| _|jj|jj | _t	tj
|jj| | _d S )NrM   z"BitmapSubtitles have only 4 planeszplane does not exist)r?   rF   rK   r9   r:   rV   rW   buffer_sizer	   r=   p_voiddata_bufferrI   r   r   r   r      s   zBitmapSubtitlePlane.__cinit__viewflagsc                 C   s   t || | j| jd| d S )Nr   )r   r\   rY   )r   r]   r^   r   r   r   __getbuffer__      z!BitmapSubtitlePlane.__getbuffer__N)
r   r   r   rB   r	   rJ   r   pointer	Py_bufferr_   r   r   r   r   rL      s    rL   c                   @   s<   e Zd ZdZdd Zedd Zedd Zedd	 Zd
S )rE   zY
    Represents an ASS/Text subtitle format, as opposed to a bitmap Subtitle format.
    c                 C   s   d| j dt| ddS )Nz<av.AssSubtitle r"   r#   r$   )dialoguer&   r   r   r   r   r'      r`   zAssSubtitle.__repr__c                 C      | j jtjurt| j jS dS )zl
        Returns the subtitle in the ASS/SSA format. Used by the vast majority of subtitle formats.
            )rF   assr	   NULLr   r   r   r   r   rf         zAssSubtitle.assc           	      C   s  d}d}d}| j }ttj\}}t }t|}|dk r6||k r6|| dkr*|d7 }|d7 }|dk r6||k s ||k r|| }|d |krFdn||d  }|dkr^|dkr^|d |d	7 }q6|sq|d
krk|dkrkd}n|| n|dkrwd}|d7 }||k s:t|S )zK
        Extract the dialogue from the ass format. Strip comments.
        r   F   ,      \   N   
      {   T}   )rf   r	   declarechar	bytearrayr/   appendbytes)	r   comma_countr   stateass_textrs   	next_charresulttext_lenr   r   r   rc      s8   
zAssSubtitle.dialoguec                 C   rd   )zN
        Rarely used attribute. You're probably looking for dialogue.
        re   )rF   textr	   rg   r   r   r   r   r   r}      rh   zAssSubtitle.textN)	r   r   r   r7   r'   r8   rf   rc   r}   r   r   r   r   rE      s    

%rE   )r	   cython.cimports.cpythonr   r   cython.cimports.libc.stdintr   cclassr   r   cfuncrJ   rG   r   rB   rL   rE   r   r   r   r   <module>   s"    -*