
    Hui                         d dl Z d dlmZ d dlmZmZ d dlmZ d dl	m
Z
 d dlmZmZ d dlmZ d dlmZmZ e j&                   G d	 d
e             Zy)    N)libav)
ByteSource
bytesource)	err_check)Packet)SubtitleProxySubtitleSet)PyBytes_FromStringAndSize)memcpystrlenc                       e Zd Zededz  fd       Zej                  dedz  ddfd       ZddZdede	fdZ
ej                  d	e	dz  fd
       Zej                  d	e	fd       Zy)SubtitleCodecContextreturnNc                 0   | j                   j                  t        j                  k(  s| j                   j                  dk  ryt        t        j                  t        j                  | j                   j                        | j                   j                        S )zAGet the subtitle header data (ASS/SSA format for text subtitles).r   N)ptrsubtitle_headercythonNULLsubtitle_header_sizer
   castp_charselfs    K/opt/pipecat/venv/lib/python3.12/site-packages/av/subtitles/codeccontext.pyr   z$SubtitleCodecContext.subtitle_header   se     HH$$3xx,,1(KKtxx'?'?@HH))
 	
    datac                    |Ut        j                  t        j                  | j                  j
                               d| j                  _        d| _        yt        |      }t        j                  t        j                  t        j                  | j                  j
                  |j                  t         j                  z               | j                  _        | j                  j
                  st        d      t        | j                  j
                  |j                  |j                         |j                  | j                  _        d| _        y)zSet the subtitle header data.Nr   zCannot allocate subtitle_headerT)libav_freepr   addressr   r   r   r   r   p_uchar
av_realloclengthAV_INPUT_BUFFER_PADDING_SIZEMemoryErrorr   subtitle_header_set)r   r   sources      r   r   z$SubtitleCodecContext.subtitle_header   s     <LL(@(@AB,-DHH) $(   %F'-{{HH,,MMC$D$DD(DHH$ 88++!"CDD488++VZZG,2MMDHH)#' r   c                     | j                   rJ| j                  r=t        j                  t	        j
                  | j                   j                               y y y )N)r   r&   r   r   r   r    r   r   s    r   __dealloc__z SubtitleCodecContext.__dealloc__0   s7    8800LL(@(@AB 18r   subtitlec                 X   | j                   j                  st        d      | j                  d       d}t	        |j
                  j                  j                        D ]  }|j
                  j                  j                  |   }|j                  t        j                  k7  r|t        |j                        z  }|j                  t        j                  k7  sy|t        |j                        z  } |dz  }t        j                  t        j                  t!        j"                  |            }|t        j                  k(  rt%        d      t!        j&                  | j                  ||t        j(                  |j
                  j                              }|dk  r!t!        j*                  |       t-        |d       t/        |      }t1        |j                  j2                  ||       t!        j*                  |       |j
                  j                  j4                  |j                  _        |j
                  j                  j4                  |j                  _        |j
                  j                  j8                  |j
                  j                  j:                  z
  |j                  _        |S )z
        Encode a SubtitleSet into a Packet.

        Args:
            subtitle: The SubtitleSet to encode

        Returns:
            A Packet containing the encoded subtitle data
        z Cannot encode with unknown codecFstrictr   i   z)Failed to allocate subtitle encode bufferzavcodec_encode_subtitle())codecr   
ValueErroropenrangeproxystruct	num_rectsrectsassr   r   r   textr   r!   r   	av_mallocr%   avcodec_encode_subtitler    av_freer   r   r   r   ptsdtsend_display_timestart_display_timeduration)r   r*   buf_sizeirectbufretpackets           r   encode_subtitlez$SubtitleCodecContext.encode_subtitle4   s    zz~~?@@			 #$x~~,,667 	.A>>((..q1Dxx6;;&F488,,yyFKK'F499--	. 	D$kk&..#--:QR&++IJJ55HHNN8>>001	
 7KKc67vzzS)C!..22

!..22

NN!!22nn##667 	


 r   rE   c           	         |t        d      t               }d}t        t        j                  | j
                  t        j                  |j                        t        j                  |      |j
                               |rt        |      S g S )Nzpacket cannot be Noner   )
RuntimeErrorr   r   r   avcodec_decode_subtitle2r   r   r    r3   r	   r   rE   r2   	got_frames       r   _send_packet_and_recvz*SubtitleCodecContext._send_packet_and_recvj   st    >677, !	((u||,y)

		
 u%%	r   c           	      f   | j                   j                  st        d      | j                  d       t	               }d}t        t        j                  | j                  t        j                  |j                        t        j                  |      |j                               |rt        |      S y)z<
        Returns SubtitleSet if you really need it.
        zcannot decode unknown codecFr,   r   N)r.   r   r/   r0   r   r   r   rI   r   r    r3   r	   rJ   s       r   decode2zSubtitleCodecContext.decode2   s    
 zz~~:;;			, !	((u||,y)

		
 u%%r   )r   N)__name__
__module____qualname__propertybytesr   setterr)   r	   r   rF   r   cfuncrL   ccallrN    r   r   r   r      s    

 

 

 (EDL (T ( (*C4 4 4l \\FTM  ( \\f  r   r   )r   cython.cimportsr   r   cython.cimports.av.bytesourcer   r   cython.cimports.av.errorr   cython.cimports.av.packetr   %cython.cimports.av.subtitles.subtitler   r	   cython.cimports.cpython.bytesr
   cython.cimports.libc.stringr   r   cclassCodecContextr   rW   r   r   <module>ra      s?     ( @ . , L C 6 K< K Kr   