
    C1iI                        S SK r S SKJ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  S SKJr  \R8                  S\4S j5       r\R>                   " S S\ 5      5       rg)    N)Fraction)libav)Codec)CodecContextwrap_codec_context)StreamContainer)_Dictionary)	err_check)Packet)Streamwrap_stream)dict_to_avdictto_avrational)
Dictionaryselfc                    [        5       U l        U R                  (       a  U R                  (       d   U R	                  [
        R                  " U R                  5      5        U R                  ct  U R                  R                  R                  [
        R                  -  (       d>  [
        R                  " [        R                  " U R                  R                  5      5        SU l        g g g ! U R                  ct  U R                  R                  R                  [
        R                  -  (       d>  [
        R                  " [        R                  " U R                  R                  5      5        SU l        f = f)NT)r   streams_started_doner
   libav_write_trailerptrfileoformatflagsAVFMT_NOFILEavio_closepcythonaddresspbr   s    M/home/james-whalen/.local/lib/python3.13/site-packages/av/container/output.pyclose_outputr#      s    "$DL}}TZZ	NN3//9:yy $((*:*:*@*@3CSCS*Stxx{{ ;<DJ (} yy $((*:*:*@*@3CSCS*Stxx{{ ;<DJs   /C- -B
E7c                      \ rS rSrS rS 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        [        R                     [        R                  " [        R
                  " U R                  5      5        S S S 5        g ! , (       d  f       g = fr(   )r#   r   r*   r   av_packet_freer   r,   r!   s    r"   __dealloc__OutputContainer.__dealloc__)   s6    T\\v~~doo>? \\s   5A
A(Noptionsc                 6   [        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OUR                  [        R8                  :X  a  UR:                  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      [@        L a  X(l        O[C        S5      eUR0                  Ul        [        RD                  " [,        R.                  " URF                  5      S5        U R                  R                  RH                  [        RJ                  -  (       a#  U=RH                  [        RL                  -  sl$        [O        [        RP                  " URR                  U5      5        [U        XS5      n	[W        XU	5      n
U RX                  R[                  U
5        U(       a  U
R\                  R_                  U5        URa                  5        H  u  p[c        XU5        M     U
$ ! [2         a     GNrf = 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  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popr:   r;   r<   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_streamr5   updateitemssetattr)r   
codec_namerater5   r.   	codec_objcodecstreamctxpy_codec_context	py_streamkvs                r"   r]   OutputContainer.add_stream.   s    !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"..q1CN!::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$   9O9 9P
 9
PP

PPtemplateopaquec                    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                  R(                  [        R*                  -  (       a#  U=R(                  [        R,                  -  sl        U(       d  UR                  R(                  Ul        [!        [        R.                  " UR$                  U5      5        [1        XuS5      n[3        XU5      n	U R4                  R7                  U	5        UR9                  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videor7   r8   r9   r   )rI   codec_context'_add_stream_without_codec_from_templaterd   r   rF   r   r   rA   r   rB   rC   rD   rE   rG   rH   r
   avcodec_parameters_to_contextr\   	codec_tagr   rY   rZ   r[   r   r   r   r]   r_   r`   )r   rl   rm   r.   rc   rd   re   rf   rg   rh   ri   rj   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 88!!C$:$::II888I  ..44CI 	#55foosKL *<C)M'6FG		*LLNDAI!$ #     returnc                 |   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  has no codec contextCould not allocate stream)r   r\   
codec_typer   AVMEDIA_TYPE_ATTACHMENTAVMEDIA_TYPE_DATArD   rI   rG   r   NULLMemoryErrorr
   avcodec_parameters_copyr>   
start_timedurationdispositionr   r   r]   dictr)   r_   r`   )r   rl   r.   r{   re   rh   ri   rj   s           r"   rq   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!$ # rv   rF   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.
rz      z"Could not allocate attachment datar   s   filenames   mimetypeN)r   rG   r   r   r~   r   r|   r\   r{   AV_CODEC_ID_NONEcodec_idlencastp_uchar	av_mallocrange	extradataextradata_sizer   r)   r
   av_dict_setencoder   r   r]   )r   rF   r   r   re   payload_sizebufimeta_ptr
mime_bytesrh   s              r"   add_attachmentOutputContainer.add_attachment   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;		*rv   c                    [         R                  n[         R                  nUGbH  [        R                  " UR	                  5       5      nU[         R                  :X  a$  [        R
                  " UR	                  5       5      nU[         R                  :X  aF  [        R                  " UR	                  5       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        XsS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: r8   r9   rz   z Could not allocate codec context)!r   r~   r   avcodec_find_encoder_by_namer   avcodec_find_decoder_by_nameavcodec_descriptor_get_by_namerD   rB   rA   r   r   rC   rE   rF   rG   r   rH   r   rY   rZ   r
   r[   r\   r}   r{   r   r   r   r   r]   r5   r^   )
r   ra   r5   rd   codec_descriptorr   re   rf   rg   rh   s
             r"   add_data_streamOutputContainer.add_data_stream  si    <B;;BH++!44Z5F5F5HIE#889J9J9LM##&#E#E%%'$  $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-rv   c                    U R                   (       a  g[        5       nU R                   H  nUR                  nUc*  UR                  S;  a  [        SUR                   S35      eOUR                  (       d  U R                  R                  5        H   u  pEUR                  R                  XE5        M"     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.                  [0        R2                  -  (       dW  [5        [0        R6                  " [(        R8                  " U R$                  R&                  5      U[0        R:                  5      5        [=        [(        R8                  " U R$                  R>                  5      U R>                  U R@                  U RB                  S9  [E        U R                  U RF                  5      nURI                  5       n	U R5                  [0        RJ                  " U R$                  [(        R8                  " 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RO                  [P        5      nURS                  SU
-  5        S	U l         gs  snnf )
z,Write the file header! Called automatically.N>   r   
attachmentzStream ry    )encodingerrorsr   zSome options were not used: %sT)*r   setr   rp   rI   rD   indexis_openr5   r_   
setdefaultopenadd_finalize_for_outputosfsencoder   rF   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_optionsre   rf   ri   rj   name_objrF   all_optionsr5   unused_optionsr   logs                r"   start_encodingOutputContainer.start_encodingT  so    ==  E llF&&C{;;&<<$wv||n<Q%RSS = {{ $ 2 2 4..q4 !5HHJ "\\KK/(,,Q/ * '')# #( ++4993Ddii"M&88;;&++%dhh.>.>.D.DsGWGW.WfnnTXX[[94ATATU
 	NN488,,-MM++''		
 $.dllD<R<R#S*//1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   rA   r   r   rB   rC   r   rF   )r   resultrd   rm   s       r"   supported_codecs OutputContainer.supported_codecs  s    
 e;A;; &(()?@E#  ((HH$$ehh0H0H 
 

5::& rv   c                 j    [         R                  " U R                  R                  R                  5      $ )z<
Returns the default video codec this container recommends.
)r   avcodec_get_namerE   optrvideo_codecr!   s    r"   default_video_codec#OutputContainer.default_video_codec  %    
 ##DKK$4$4$@$@AArv   c                 j    [         R                  " U R                  R                  R                  5      $ )z<
Returns the default audio codec this container recommends.
)r   r   rE   r   audio_codecr!   s    r"   default_audio_codec#OutputContainer.default_audio_codec  r   rv   c                 j    [         R                  " U R                  R                  R                  5      $ )z?
Returns the default subtitle codec this container recommends.
)r   r   rE   r   subtitle_codecr!   s    r"   default_subtitle_codec&OutputContainer.default_subtitle_codec  s%    
 ##DKK$4$4$C$CDDrv   c                     [        U 5        g r(   )r#   r!   s    r"   closeOutputContainer.close  s
    Trv   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$ "rv   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_streamsrD   r   _rebase_timer>   r
   r   av_packet_refr,   r*   av_interleaved_write_frame)r   r   re   rets       r"   r   OutputContainer.mux_one  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,   r   )NNr(   )r   
__module____qualname____firstlineno__r/   r3   r   r]   r   boolrt   rq   strbytesr   r   r   ccallr   propertyr   r   r   r   r   r   r   r   __static_attributes__ rv   r"   r%   r%   !   s
   4@
U Up 7;>>(,t>@	B&3 &# &U &PDt DL \\A AF  . B B B B E E%f rv   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   rv   r"   <module>r     sm    	   ( 0 M @ 5 . , 9 B $    Bi B Brv   