
    m inG                        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 d dlm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 d dlmZ ej        defd            Zej         G d de                       ZdS )    N)Fraction)libav)Codec)CodecContextwrap_codec_context)StreamContainer)_Dictionary)	err_check)Packet)Streamwrap_stream)dict_to_avdictto_avrational)
Dictionaryselfc                 $   t                      | _        | j        r| j        s	 |                     t          j        | j                             | j        N| j        j	        j
        t
          j        z  s0t          j        t          j        | j        j                             d| _        d S # | j        N| j        j	        j
        t
          j        z  s0t          j        t          j        | j        j                             d| _        w xY wd S d S )NT)r   streams_started_doner
   libav_write_trailerptrfileoformatflagsAVFMT_NOFILEavio_closepcythonaddresspbr   s    S/var/www/html/auto_sub_bot/venv/lib/python3.11/site-packages/av/container/output.pyclose_outputr#      s    "$$DL} 	TZ 		NN3/99:::y $(*:*@3CS*S tx{ ; ;<<<DJJJ y $(*:*@3CS*S tx{ ; ;<<<DJ	 	 	 	s   ,B- -ADc                      e Zd Zd Zd Zddedz  fdZ	 ddededz  fdZ	ded	efd
Z
dededefdZddedz  fdZej        d             Zed             Zed             Zed             Zed             Zd Zd ZdefdZdS )OutputContainerc                     t                      | _        i | _        t          j        5  t          j                    | _        d d d            d S # 1 swxY w Y   d S N)r   r   metadatar   nogilr   av_packet_alloc
packet_ptr)r   argskwargss      r"   	__cinit__zOutputContainer.__cinit__#   s    &((\ 	4 	4!133DO	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s   AAAc                     t          |            t          j        5  t          j        t          j        | j                             d d d            d S # 1 swxY w Y   d S r'   )r#   r   r)   r   av_packet_freer   r+   r!   s    r"   __dealloc__zOutputContainer.__dealloc__)   s    T\ 	@ 	@v~do>>???	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@s   ,AAANoptionsc                 p   t          |d          }|j        }t          j        | j        j        |j        t          j                  s$t          | j        j	        d|j	        d          t          j
        | j        |          }t          j        |          }|j        t          j        k    rt          j        |_        |                    dd          |_        |                    dd          |_        |                    dd	          |_        |                    d
d          |_        	 t+          |                    d          t-          j        |j                             n# t2          $ r Y nw xY wt+          |pdt-          j        |j                             |j        |_        |j        |_        n|j        t          j        k    r|j        d	         |_        |                    dd	          |_        |                    d
d          |_        	 t+          |                    d          t-          j        |j                             n# t2          $ r Y nw xY w|d|_        n-t          |          t@          u r||_        ntC          d          |j        |_        t          j"        t-          j        |j#                  d           | j        j        j$        t          j%        z  r|xj$        t          j&        z  c_$        tO          t          j(        |j)        |                     tU          ||d          }	tW          | ||	          }
| j,        -                    |
           |r|
j.        /                    |           |0                                D ]\  }}tc          |
||           |
S )a  add_stream(codec_name, rate=None)

        Creates a new stream from a codec name and returns it.
        Supports video, audio, and subtitle streams.

        :param codec_name: The name of a codec.
        :type codec_name: str
        :param dict options: Stream options.
        :param \**kwargs: Set attributes for the stream.
        :rtype: The new :class:`~av.stream.Stream`.

        w format does not support  codecwidthi  heighti  bit_rater   bit_rate_tolerancei  	time_base   i }  Ni  z'audio stream `rate` must be: int | None   )2r   r   r   avformat_query_codecr   idFF_COMPLIANCE_NORMAL
ValueErrorformatnameavformat_new_streamavcodec_alloc_context3typeAVMEDIA_TYPE_VIDEOAV_PIX_FMT_YUV420Ppix_fmtpopr7   r8   r9   r:   r   r   r   r;   KeyError	framerateavg_frame_rateAVMEDIA_TYPE_AUDIOsample_fmts
sample_fmtsample_rateint	TypeErrorav_channel_layout_default	ch_layoutr   AVFMT_GLOBALHEADERAV_CODEC_FLAG_GLOBAL_HEADERr
   avcodec_parameters_from_contextcodecparr   r   r   
add_streamr2   updateitemssetattr)r   
codec_namerater2   r-   	codec_objcodecstreamctxpy_codec_context	py_streamkvs                r"   rZ   zOutputContainer.add_stream.   sm    !S11	;D= 'Heh(@
 
 	 ;#XX	XXX  
 03/FtxQV/W/W252LU2S2S :///0CK

7C00CIHc22CJ!::j!44CL%+ZZ0Df%M%MC"fjj55v~cm7T7TUUUU   $*"fnS]&C&CDDD$'MF!"}F Z3111".q1CN!::j!44CL%+ZZ0De%L%LC"fjj55v~cm7T7TUUUU    |"'ds"""& IJJJ"}F)&.*G*GKKK 8!C$:: 	9II88II 	#5fosKKLLL *<C)M)M'f6FGG		*** 	.$$W---LLNN 	% 	%DAqIq!$$$$s$   -:E( (
E54E5:I 
I"!I"templateopaquec                    ||j         dk    }|j         | j        |fi |S |r|j        j        }nt	          |j        j        j        d          }|j        }t          j        | j        j	        |j
        t          j                  s$t          | j        j        d|j        d          t          j        | j        |          }t          j        |          }t!          t          j        ||j        j                             d|_        | j        j	        j        t          j        z  r|xj        t          j        z  c_        |s|j        j        |_        t!          t          j        |j        |                     t1          ||d          }t3          | ||          }	| j                            |	           |                                D ]\  }
}t;          |	|
|           |	S )a  
        Creates a new stream from a template. Supports video, audio, subtitle, data and attachment streams.

        :param template: Copy codec from another :class:`~av.stream.Stream` instance.
        :param opaque: If True, copy opaque data from the template's codec context.
        :param \**kwargs: Set attributes for the stream.
        :rtype: The new :class:`~av.stream.Stream`.
        Nvideor4   r5   r6   r   )rF   codec_context'_add_stream_without_codec_from_templatera   r   rC   r   r   r>   r   r?   r@   rA   rB   rD   rE   r
   avcodec_parameters_to_contextrY   	codec_tagr   rV   rW   rX   r   r   r   rZ   r\   r]   )r   rh   ri   r-   r`   ra   rb   rc   rd   re   rf   rg   s               r"   add_stream_from_templatez(OutputContainer.add_stream_from_template   s    >]g-F!)?4?SSFSSS  	F .4IIh4:?EEI;D= 'Heh(@
 
 	 ;#XX	XXX  
 03/FtxQV/W/W252LU2S2S#3C9NOOPPP 8!C$:: 	9II88II  	5 .4CI 	#5fosKKLLL *<C)M)M'f6FGG		***LLNN 	% 	%DAqIq!$$$$    returnc                    |j         j        j        }|t          j        t          j        hvrt          d|j         d          t          j        | j         t          j
                  }|t          j
        k    rt          d          t          t          j        |j        |j         j                             |j         j        |_        |j         j        |_        |j         j        |_        |j         j        |_        t%          | |d           }| j                            |           t+          |j                  |_        |                                D ]\  }}t1          |||           |S )Nztemplate stream of type  has no codec contextCould not allocate stream)r   rY   
codec_typer   AVMEDIA_TYPE_ATTACHMENTAVMEDIA_TYPE_DATArA   rF   rD   r   NULLMemoryErrorr
   avcodec_parameters_copyr;   
start_timedurationdispositionr   r   rZ   dictr(   r\   r]   )r   rh   r-   rv   rb   re   rf   rg   s           r"   rm   z7OutputContainer._add_stream_without_codec_from_template   sK    "*!6!A
c93;PQQQO8=OOO   03/FHfk0
 0
 V[  9:::#-fox|?TUUVVV $<1$L3",/%\5'fd;;		***!("344	LLNN 	% 	%DAqIq!$$$$rq   rC   mimetypedatac                    t          j        | j        t          j                  }|t          j        k    rt          d          t           j        |j        _        t           j	        |j        _
        t          |          }|rt          j        t          j        t          j        |dz                       }|t          j        k    rt          d          t          |          D ]}||         ||<   d||<   t          j        t          j        |          |j        _        ||j        _        t          j        |j                  }t)          t          j        |d|                                d                     |                                }	t)          t          j        |d|	d                     t/          | |d          }
| j                            |
           |
S )a  
        Create an attachment stream and embed its payload into the container header.

        - Only supported by formats that support attachments (e.g. Matroska).
        - No per-packet muxing is required; attachments are written at header time.
        ru      z"Could not allocate attachment datar   s   filenames   mimetypeN)r   rD   r   r   ry   rz   rw   rY   rv   AV_CODEC_ID_NONEcodec_idlencastp_uchar	av_mallocrange	extradataextradata_sizer   r(   r
   av_dict_setencoder   r   rZ   )r   rC   r   r   rb   payload_sizebufimeta_ptr
mime_bytesre   s              r"   add_attachmentzOutputContainer.add_attachment   s    03/FHfk0
 0
 V[  9:::%(%@"#&#7  '*$ii 		:+fncmL1<L.M.MNNCfk!!!"FGGG<(( ! !aA !C(.FNC(H(HFO%-9FO* >&/22#/(KJJKKK__&&
#/(KQGGHHH'fd;;		***rq   c                    t           j        }|t          j        |                                          }|t           j        k    rt          d|           t          j        | j        j        |j	        t          j
                  st          | j        j        d|d          t          j        | j        |          }|t           j        k    rt          d          t           j        }|t           j        k    rt          j        |          }|t           j        k    rt          d          | j        j        j        t          j        z  r|xj        t          j        z  c_        t'          t          j        |j        |                     nt          j        |j        _        d}|t           j        k    rt1          ||d          }t3          | ||          }| j                            |           |r|j                            |           |S )a4  add_data_stream(codec_name=None)

        Creates a new data stream and returns it.

        :param codec_name: Optional name of the data codec (e.g. 'klv')
        :type codec_name: str | None
        :param dict options: Stream options.
        :rtype: The new :class:`~av.data.stream.DataStream`.
        NzUnknown data codec: r5   r6   ru   z Could not allocate codec context)r   ry   r   avcodec_find_encoder_by_namer   rA   r>   r   r   r?   r@   rB   rC   rD   rz   rE   r   rV   rW   r
   rX   rY   rx   rv   r   r   r   rZ   r2   r[   )r   r^   r2   ra   rb   rc   rd   re   s           r"   add_data_streamzOutputContainer.add_data_stream  s    <B;!4Z5F5F5H5HIIE## !D
!D!DEEE + %(C,D   !{'XXJXXX  
 03/FtxQV/W/WV[  9::: 39+FK,U33Cfk!!!"DEEE x%(>> =		S<<		 c9&/3OOPPPP *-)>FO& 15&+1#udCC'f6FGG		*** 	.$$W---rq   c                 p   | j         rdS t                      | j        D ]}|j        }|"|j        dvrt          d|j         d          n}|j        sv| j        	                                D ] \  }}|j        
                    ||           !|                                 | j        D ] }||j        vr                    |           !|                                 t          j        | j        | j        nd          }|}| j        j        t(          j        k    rg| j        j        j        t0          j        z  sIt5          t1          j        t)          j        | j        j                  |t0          j                             t=          t)          j        | j        j                  | j        | j         | j!                   tE          | j        | j#                  }|$                                }|                     t1          j%        | j        t)          j        |j                                       |D ]}||vr                    |           fd| j        	                                D             }	|	r6ddl&}
|
'                    tP                    }|)                    d	|	z             d
| _         dS )z,Write the file header! Called automatically.N>   r   
attachmentzStream rt    )encodingerrorsc                 $    i | ]\  }}|v	||S  r   ).0rf   rg   used_optionss      r"   
<dictcomp>z2OutputContainer.start_encoding.<locals>.<dictcomp>  s0     
 
 
QQl5J5JAq5J5J5Jrq   r   zSome options were not used: %sT)*r   setr   rl   rF   rA   indexis_openr2   r\   
setdefaultopenadd_finalize_for_outputosfsencoder   rC   r   r    r   ry   r   r   r   r   r
   	avio_openr   AVIO_FLAG_WRITEr   r(   metadata_encodingmetadata_errorsr   container_optionscopyavformat_write_headerlogging	getLogger__name__warning)r   rb   rc   rf   rg   name_objrC   all_optionsr2   unused_optionsr   logr   s               @r"   start_encodingzOutputContainer.start_encodingJ  s    = 	F  EE l 	* 	*F&C{;&<<<$%Rv|%R%R%RSSS = { 0 $ 2 2 4 4 5 51..q!4444HHJJJ "\ 0 0CK//(,,Q///'')))) +493Ddii"MM&8;&+%%dh.>.DsGW.W%fnTX[994ATUU  
 	N48,--M+'		
 	
 	
 	
 $.dlD<R#S#S*//11s06>'+;V;VWWXXX  	$ 	$A  ###
 
 
 
!\//11
 
 
  	KNNN##H--CKK8>IJJJrq   c                 ^   t                      }t          j        }t          j        }	 t          j        t          j        |                    }|t          j        k    rnNt          j        | j        j        |j	        t          j
                  dk    r|                    |j                   |S )zC
        Returns a set of all codecs this format supports.
        Tr   )r   r   ry   r   av_codec_iterater   r>   r   r   r?   r@   r   rC   )r   resultra   ri   s       r"   supported_codecsz OutputContainer.supported_codecs  s    
 ee;A; &	'()?)?@@E## (H$eh0H   
 

5:&&&	' rq   c                 H    t          j        | j        j        j                  S )zL
        Returns the default video codec this container recommends.
        )r   avcodec_get_namerB   optrvideo_codecr!   s    r"   default_video_codecz#OutputContainer.default_video_codec      
 #DK$4$@AAArq   c                 H    t          j        | j        j        j                  S )zL
        Returns the default audio codec this container recommends.
        )r   r   rB   r   audio_codecr!   s    r"   default_audio_codecz#OutputContainer.default_audio_codec  r   rq   c                 H    t          j        | j        j        j                  S )zO
        Returns the default subtitle codec this container recommends.
        )r   r   rB   r   subtitle_codecr!   s    r"   default_subtitle_codecz&OutputContainer.default_subtitle_codec  s    
 #DK$4$CDDDrq   c                 $    t          |            d S r'   )r#   r!   s    r"   closezOutputContainer.close  s    Trq   c                     t          |t                    r|                     |           d S |D ]}|                     |           d S r'   )
isinstancer   mux_one)r   packetspackets      r"   muxzOutputContainer.mux  s\     gv&& 	%LL!!!!!! % %V$$$$% %rq   r   c                 Z   |                                   |j        j        dk     s7t          j        t          j        |j        j                  | j        j        k    rt          d          | j        j        |j        j                 }|	                    |j
                   |                     t          j        | j        |j                             t          j        5  t          j        | j        | j                  }d d d            n# 1 swxY w Y   |                     |           d S )Nr   zBad Packet stream_index.)r   r   stream_indexr   r   uint
nb_streamsrA   r   _rebase_timer;   r
   r   av_packet_refr+   r)   av_interleaved_write_frame)r   r   rb   rets       r"   r   zOutputContainer.mux_one  sD    J#a''{6;
(?@@DHDWWW7888/3x/?
@W/XF,--- 	s(&*EEFFF\ 	X 	X!<TXtWWC	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	X 	Xss    DDD)NNr'   )r   
__module____qualname__r.   r1   r   rZ   r   boolrp   rm   strbytesr   r   r   ccallr   propertyr   r   r   r   r   r   r   r   r   rq   r"   r%   r%   !   s       4 4 4@ @ @
U U U U U Up 7;> >>(,t> > > >@	   B&3 &# &U & & & &P: :t : : : :x \A A \AF   X. B B XB B B XB E E XE  % % %f      rq   r%   )!r   	fractionsr   r   cython.cimportsr   r   cython.cimports.av.codec.codecr    cython.cimports.av.codec.contextr   r   $cython.cimports.av.container.streamsr   cython.cimports.av.dictionaryr	   cython.cimports.av.errorr
   cython.cimports.av.packetr   cython.cimports.av.streamr   r   cython.cimports.av.utilsr   r   av.dictionaryr   cfuncr%   r#   cclass	Containerr   rq   r"   <module>r      sd   				        ( ( ( ( ( ( 0 0 0 0 0 0 M M M M M M M M @ @ @ @ @ @ 5 5 5 5 5 5 . . . . . . , , , , , , 9 9 9 9 9 9 9 9 B B B B B B B B $ $ $ $ $ $      x x x x xi x x x x xrq   