
    3jX                     
   S SK r S SKrS SKJr  S SKJr  S SKJrJ	r	  S SK
Jr  S SKJr  S SKJr  S SKJr  S S	KJrJr  S S
KJrJr  \R0                  S\4S j5       r\R6                  \R8                   " S S\5      5       5       rg)    N)libav)Codec)CodecContextwrap_codec_context)StreamContainer)
Dictionary)	err_check)Packet)Streamwrap_stream)dict_to_avdictto_avrationalselfc                    [        5       U l        U R                  S-  S:X  Ga  U R                  b<  [	        U R                  R                  SS5      (       a  U =R                  S-  sl        g  U R                  [        R                  " U R                  5      5        U R                  ct  U R                  R                  R                  [        R                  -  (       d>  [        R                  " [        R                  " U R                  R                  5      5        U =R                  S-  sl        g g ! U R                  ct  U R                  R                  R                  [        R                  -  (       d>  [        R                  " [        R                  " U R                  R                  5      5        U =R                  S-  sl        f = f)N      closedF   )r   streams_myflagfilegetattrr	   libav_write_trailerptroformatflagsAVFMT_NOFILEavio_closepcythonaddresspbr   s    M/home/wildlama/miniconda3/lib/python3.13/site-packages/av/container/output.pyclose_outputr%      s   "$DL||bA 99 WTYY^^Xu%M%MLLAL	NN3//9:yy $((*:*:*@*@3CSCS*Stxx{{ ;<LLAL  yy $((*:*:*@*@3CSCS*Stxx{{ ;<LLALs   ./D5 5BGc                   0   \ rS rSrS rS rS rSS\S-  4S jjrSS\	S	\
4S
 jjr SS\
S\S-  4S jjrS\
S	\
4S jrS\	S\	S\4S jrSS\S-  4S jjr\R&                  S 5       r\S 5       r\S 5       r\S 5       r\S 5       rS rS rS\4S jrSrg) OutputContainer#   c                     [        5       U l        0 U l        [        R                     [
        R                  " 5       U l        S S S 5        g ! , (       d  f       g = fN)r   r   metadatar    nogilr   av_packet_alloc
packet_ptr)r   argskwargss      r$   	__cinit__OutputContainer.__cinit__&   s4    &(\\!113DO \\s   A
Ac                     [        U 5        g r*   r%   r#   s    r$   __del__OutputContainer.__del__,   
    T    c                     [         R                     [        R                  " [         R                  " U R
                  5      5        S S S 5        g ! , (       d  f       g = fr*   )r    r,   r   av_packet_freer!   r.   r#   s    r$   __dealloc__OutputContainer.__dealloc__/   s.    \\v~~doo>? \\s   5A
ANoptionsc           	      l	   [        US5      nUR                  n[        R                  " U R                  R                  UR
                  [        R                  5      (       d1  [        U R                  R                  < SUR                  < S35      e[        R                  " U R                  U5      n[        R                  " U5      nUR                  [        R                  :X  Ga  [        R                  Ul        UR!                  SS5      Ul        UR!                  SS5      Ul        UR!                  SS	5      Ul        UR!                  S
S5      Ul         [+        UR!                  S5      [,        R.                  " UR0                  5      5        [+        U=(       d    S[,        R.                  " UR4                  5      5        UR4                  Ul        UR0                  Ul        GOUR                  [        R8                  :X  Ga  [,        R:                  n	[        R<                  " [,        R:                  U[        R>                  S	[,        R.                  " U	5      [,        R:                  5        U	(       a>  [,        R@                  " [,        RB                  [        RD                     U	5      S	   Ul#        UR!                  SS	5      Ul        UR!                  S
S5      Ul         [+        UR!                  S5      [,        R.                  " UR0                  5      5        Uc  SUl$        O$[        U5      [J        L a  X(l$        O[M        S5      eUR0                  Ul        [        RN                  " [,        R.                  " URP                  5      S5        U R                  R                  RR                  [        RT                  -  (       a#  U=RR                  [        RV                  -  sl)        [Y        [        RZ                  " UR\                  U5      5        [_        XS5      n
[a        XU
5      nU Rb                  Re                  U5        U(       a  URf                  Ri                  U5        URk                  5        H  u  p[m        XU5        M     U$ ! [2         a     GNf = f! [2         a     GNf = f)aI  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  'audio stream `rate` must be: int | None   )7r   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poprB   rC   rD   rE   r   r    r!   rF   KeyError	framerateavg_frame_rateAVMEDIA_TYPE_AUDIONULLavcodec_get_supported_configAV_CODEC_CONFIG_SAMPLE_FORMATcastpointerAVSampleFormat
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_streamr=   updateitemssetattr)r   
codec_namerater=   r0   	codec_objcodecstreamctxoutpy_codec_context	py_streamkvs                 r$   rk   OutputContainer.add_stream3   sh    !S1	;D== ''HHehh(@(@
 
 ;;##&&?	?QQWX 
 03/F/FtxxQV/W252L2LU2S ::///00CK

7C0CIHc2CJ!::j!4CL%+ZZ0Df%MC"fjj5v~~cmm7TU $*"fnnS]]&CD$'MMF!"}}F ZZ3111=C[[C,,11s# !'V^^C<N<N-OQT!UVW!X!::j!4CL%+ZZ0De%LC"fjj5v~~cmm7TU |"'ds""& IJJ"}}F))&..*GK 88!!C$:$::II888I 	#55foosKL *<C)M'6FG		*$$W-LLNDAI!$ # s  0  s$   9R '9R% 
R"!R"%
R32R3ro   returnc                    UR                  5       n[        R                  " U5      n[        R                  nU[        R                  :X  a  [        R
                  " U5      nU[        R                  :X  a9  [        R                  " U5      nU[        R                  :X  a  [        SU< 35      eU[        R                  :w  a  UR                  nUR                  nOUR                  nUR                  n[        R                  " U R                  R                  U[        R                  5      (       d'  [        U R                  R                  < SU< S35      e[        R                   " U R                  [        R                  5      n	U	[        R                  :X  a  [#        S5      eXyR$                  l        XR$                  l        U[        R*                  :X  ap  UR-                  SS5      U	R$                  l        UR-                  SS5      U	R$                  l        Ub*  [3        U[        R4                  " U	R6                  5      5        OEU[        R8                  :X  a1  Ub.  [        U5      [:        L a  X)R$                  l        O[?        S	5      e[A        X	S5      n
U RB                  RE                  U
5        URG                  5        H  u  p[I        XU5        M     U
$ )
a  add_mux_stream(codec_name, rate=None)

Creates a new stream for muxing pre-encoded data without creating a
:class:`.CodecContext`. Use this when you want to mux packets that were
already encoded externally and no encoding/decoding is needed.

:param codec_name: The name of a codec.
:type codec_name: str
:param \**kwargs: Set attributes for the stream (e.g. ``width``, ``height``,
    ``time_base``).
:rtype: The new :class:`~av.stream.Stream`.

zUnknown codec: r@   rA   Could not allocate streamrB   r   rC   NrH   )%encoder   avcodec_find_encoder_by_namer    r[   avcodec_find_decoder_by_nameavcodec_descriptor_get_by_namerM   rK   rR   rJ   r   r   rL   rN   rO   rP   MemoryErrorrj   codec_id
codec_typerS   rV   rB   rC   r   r!   rY   rZ   rc   rb   rd   r   r   rk   rm   rn   )r   ro   rp   r0   codec_name_bytesrr   codec_descriptorr   r   rs   rw   rx   ry   s                r$   add_mux_streamOutputContainer.add_mux_stream   s@    #-"3"3"5,,-=> 	 KK 	 FKK445EFEFKK"AABRS6;;. ?:.!ABB FKKxxHJ'**H)..J ''HHh(@(@
 
 ;;##&&?
~VT 
 03/F/FHHfkk0
 V[[ 9::#+ %/"///$*JJw$:FOO!%+ZZ!%<FOO"dFNN63H3H$IJ3111:$26OO/#$MNN (d;		*LLNDAI!$ # r8   templateopaquec                 x   Uc  UR                   S:g  nUR                  c  U R                  " U40 UD6$ U(       a  UR                  R                  nO*[	        UR                  R                  R
                  S5      nUR                  n[        R                  " U R                  R                  UR                  [        R                  5      (       d1  [        U R                  R
                  < SUR
                  < S35      e[        R                  " U R                  U5      n[        R                  " U5      n[!        [        R"                  " XqR                  R$                  5      5        SUl        UR                  R(                  Ul        UR                  R(                  Ul        U R                  R                  R*                  [        R,                  -  (       a#  U=R*                  [        R.                  -  sl        U(       d  UR                  R*                  Ul        [!        [        R0                  " UR$                  U5      5        [3        XuS5      nU=R4                  S-  sl        [7        XU5      n	U R8                  R;                  U	5        UR=                  5        H  u  p[?        XU5        M     U	$ )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videor?   r@   rA   r      ) rR   codec_context'_add_stream_without_codec_from_templaterr   r   rO   r   r   rJ   r   rK   rL   rM   rN   rP   rQ   r	   avcodec_parameters_to_contextrj   	codec_tagrF   r   rg   rh   ri   r   	_ctxflagsr   r   rk   rm   rn   )r   r   r   r0   rq   rr   rs   rt   rv   rw   rx   ry   s               r$   add_stream_from_template(OutputContainer.add_stream_from_template   s    >]]g-F!!)??SFSS  ..44Ih44::??EI;D== ''HHehh(@(@
 
 ;;##&&?	?QQWX 
 03/F/FtxxQV/W252L2LU2S#33C9N9NOP $<<11 .. 88!!C$:$::II888I  ..44CI 	#55foosKL *<C)M""a'"'6FG		*LLNDAI!$ # r8   c                 |   UR                   R                  R                  nU[        R                  [        R
                  1;  a  [        SUR                   S35      e[        R                  " U R                   [        R                  5      nU[        R                  :X  a  [        S5      e[        [        R                  " UR                  UR                   R                  5      5        UR                   R                  Ul        UR                   R                  Ul        UR                   R                   Ul        UR                   R"                  Ul        [%        XS 5      nU R&                  R)                  U5        [+        UR,                  5      Ul        UR/                  5        H  u  pg[1        XVU5        M     U$ )Nztemplate stream of type z has no codec contextr}   )r   rj   r   r   AVMEDIA_TYPE_ATTACHMENTAVMEDIA_TYPE_DATArM   rR   rP   r    r[   r   r	   avcodec_parameters_copyrF   
start_timedurationdispositionr   r   rk   dictr+   rm   rn   )r   r   r0   r   rs   rw   rx   ry   s           r$   r   7OutputContainer._add_stream_without_codec_from_template&  sJ    "*!6!6!A!A
c993;P;PQQ*8==/9NO  03/F/FHHfkk0
 V[[ 9::#--foox||?T?TUV $<<11$LL33",,//%\\55'd;		*!("3"34	LLNDAI!$ # r8   rO   mimetypedatac                 
   [         R                  " U R                  [        R                  5      nU[        R                  :X  a  [        S5      e[         R                  UR                  l        [         R                  UR                  l
        [        U5      nU(       a  [        R                  " [        R                  [         R                  " US-   5      5      nU[        R                  :X  a  [        S5      e[        U5       H	  nX7   Xg'   M     SXe'   [        R                  " [        R                  U5      UR                  l        XTR                  l        [        R$                  " UR&                  5      n[)        [         R*                  " USUR-                  5       S5      5        UR-                  5       n	[)        [         R*                  " USU	S5      5        [/        XS5      n
U R0                  R3                  U
5        U
$ )z
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.
r}   r   z"Could not allocate attachment datar   s   filenames   mimetypeN)r   rP   r   r    r[   r   r   rj   r   AV_CODEC_ID_NONEr   lenr^   p_uchar	av_mallocrange	extradataextradata_sizer!   r+   r	   av_dict_setr~   r   r   rk   )r   rO   r   r   rs   payload_sizebufimeta_ptr
mime_bytesrw   s              r$   add_attachmentOutputContainer.add_attachmentG  sd    03/F/FHHfkk0
 V[[ 9::%(%@%@"#&#7#7  '*$i++fnncmmL1<L.MNCfkk!!"FGG<( ) !C(.FNNC(HFOO%-9OO* >>&//2#//(KJK__&
#//(KQGH'd;		*r8   c                 V   [         R                  n[         R                  nUGb.  UR                  5       n[        R                  " U5      nU[         R                  :X  a  [        R
                  " U5      nU[         R                  :X  a8  [        R                  " U5      nU[         R                  :X  a  [        SU 35      eU[         R                  :w  a  UR                  OUR                  n[        R                  " U R                  R                  U[        R                  5      (       d'  [        U R                  R                  < SU< S35      e[        R                  " U R                  U5      nU[         R                  :X  a  [!        S5      e[         R                  nU[         R                  :w  a  [        R"                  " U5      nU[         R                  :X  a  [!        S5      eU R                  R                  R$                  [        R&                  -  (       a#  U=R$                  [        R(                  -  sl        [+        [        R,                  " UR.                  U5      5        ON[        R0                  UR.                  l        U[         R                  :w  a  UR                  UR.                  l        Sn	U[         R                  :w  a  [7        XS5      n	[9        XU	5      n
U R:                  R=                  U
5        U(       a  U
R>                  RA                  U5        U
$ )a  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: r@   rA   r}   z Could not allocate codec context)!r    r[   r~   r   r   r   r   rM   rK   rJ   r   r   rL   rN   rO   rP   r   rQ   r   rg   rh   r	   ri   rj   r   r   r   r   r   r   rk   r=   rl   )r   ro   r=   rr   r   r   r   rs   rt   rv   rw   s              r$   add_data_streamOutputContainer.add_data_streamo  s_    <B;;KK 	 !&0&7&7&9445EFE#889IJ##&#E#EFV#W #v{{2$';J<%HII $)FKK#7uxx=M=P=PH++  (C,D,D  !{{''**CJ>QWX 
 03/F/FtxxQV/WV[[ 9:: 39++FKK,,U3Cfkk!!"DEE xx%%(>(>>		S<<<	 c99&//3OP *-)>)>FOO&6;;.+;+>+>( 15&++1#dC'6FG		*$$W-r8   c                    U R                   S-  (       a  g[        5       nU R                   H  nUR                  nUb  UR                  (       d  U R
                  R                  5        H   u  pEUR
                  R                  XE5        M"     UR                  S-  (       dE  UR                  5         U R
                   H%  nXCR
                  ;  d  M  UR                  U5        M'     UR                  5         M     [        R                  " U R                  c  U R                  OS5      nUnU R                   R"                  [$        R&                  :X  a  U R                   R(                  R*                  [,        R.                  -  (       dW  [1        [,        R2                  " [$        R4                  " U R                   R"                  5      U[,        R6                  5      5        [9        [$        R4                  " U R                   R:                  5      U R:                  U R<                  U R>                  S9  [A        U R
                  U RB                  5      nURE                  5       n	U R1                  [,        RF                  " U R                   [$        R4                  " U	R                   5      5      5        U H  nXI;  d  M
  UR                  U5        M     U R
                  R                  5        VVs0 s H  u  pEXA;  d  M  XE_M     n
nnU
(       a-  SSK$nURK                  [L        5      nURO                  SU
-  5        U =R                   S-  sl         gs  snnf )z,Write the file header! Called automatically.r   Nr    )encodingerrorsr   zSome options were not used: %s)(r   setr   r   is_openr=   rm   
setdefaultr   openadd_finalize_for_outputosfsencoder   rO   r   r"   r    r[   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   used_optionsrs   rt   rx   ry   name_objrO   all_optionsr=   unused_optionsr   logs                r$   start_encodingOutputContainer.start_encoding  s[    <<!  E llF&&Cs{{ LL..0DAKK**10 1 )HHJ "\\KK/(,,Q/ * '') #" ++4993Ddii"M&88;;&++%dhh.>.>.D.DsGWGW.WfnnTXX[[94ATATU
 	NN488,,-MM++''		
 #-T\\4;Q;Q"R)..0s006>>'++;VWX A  #  "\\//1
1TQQ5JDAD1 	 
 ##H-CKK8>IJ
s   .M=Mc                    [        5       n[        R                  n[        R                  n [        R                  " [        R
                  " U5      5      nU[        R                  :X  a   U$ [        R                  " U R                  R                  UR                  [        R                  5      S:X  a  UR                  UR                  5        M  )z3
Returns a set of all codecs this format supports.
r   )r   r    r[   r   av_codec_iterater!   rJ   r   r   rK   rL   r   rO   )r   resultrr   r   s       r$   supported_codecs OutputContainer.supported_codecs  s    
 e;A;; &(()?@E#  ((HH$$ehh0H0H 
 

5::& r8   c                 j    [         R                  " U R                  R                  R                  5      $ )z<
Returns the default video codec this container recommends.
)r   avcodec_get_namerN   optrvideo_codecr#   s    r$   default_video_codec#OutputContainer.default_video_codec  %    
 ##DKK$4$4$@$@AAr8   c                 j    [         R                  " U R                  R                  R                  5      $ )z<
Returns the default audio codec this container recommends.
)r   r   rN   r   audio_codecr#   s    r$   default_audio_codec#OutputContainer.default_audio_codec  r   r8   c                 j    [         R                  " U R                  R                  R                  5      $ )z?
Returns the default subtitle codec this container recommends.
)r   r   rN   r   subtitle_codecr#   s    r$   default_subtitle_codec&OutputContainer.default_subtitle_codec  s%    
 ##DKK$4$4$C$CDDr8   c                     [        U 5        g r*   r4   r#   s    r$   closeOutputContainer.close$  r7   r8   c                     [        U[        5      (       a  U R                  U5        g U H  nU R                  U5        M     g r*   )
isinstancer
   mux_one)r   packetspackets      r$   muxOutputContainer.mux'  s3     gv&&LL!!V$ "r8   r   c                    U R                  5         UR                  R                  S:  dQ  [        R                  " [        R
                  UR                  R                  5      U R                  R                  :  a  [        S5      eU R                  R                  UR                  R                     nUR                  UR                  5        U R                  [        R                  " U R                  UR                  5      5        [        R                     [        R                   " U R                  U R                  5      nS S S 5        U R                  W5        g ! , (       d  f       N = f)Nr   zBad Packet stream_index.)r   r   stream_indexr    r^   uint
nb_streamsrM   r   _rebase_timerF   r	   r   av_packet_refr.   r,   av_interleaved_write_frame)r   r   rs   rets       r$   r   OutputContainer.mux_one0  s     JJ##a'{{6;;

(?(?@DHHDWDWW788/3xx/?/?

@W@W/XF,,- 	s((&**EF\\!<<TXXtWC s \s   ,E
E-)r+   r.   r   )NNr*   )r   
__module____qualname____firstlineno__r1   r5   r;   r   rk   strr   r   boolr   r   bytesr   r   r    ccallr   propertyr   r   r   r   r   r   r
   r   __static_attributes__ r8   r$   r'   r'   #   s'   4@_ _BK Kf K\ 7;CC(,tCJ	B&3 &# &U &PEt EN \\> >@  . B B B B E E%f r8   r'   )r   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   cfuncr'   r%   finalcclass	Containerr  r8   r$   <module>r     ss    	  ( 0 M @ 4 . , 9 B   & ^i ^  ^r8   