Ë
    Dü´j¸  ã                   ól   — d dl Z d dlZd dlZddlmZ  G d„ dej
                  «      Zd„ Zd
d„Zd„ Z	d	„ Z
y)é    Né   )Úloggerc                   ó:   — e Zd ZdZd„ Zd„ Zed„ «       Zdd„Zd„ Z	y)	Ú
LogCatcherzÞThread to keep reading from stderr so that the buffer does not
    fill up and stalls the ffmpeg process. On stderr a message is send
    on every few frames with some meta information. We only keep the
    last ones.
    c                 ó¶   — || _         d| _        g | _        d| _        t        j
                  j                  | «       d| _        d| _        | j                  «        y )NÚ ó    TF)
Ú_fileÚ_headerÚ_linesÚ
_remainderÚ	threadingÚThreadÚ__init__ÚdaemonÚ_should_stopÚstart)ÚselfÚfiles     úU/root/workspace/ytshorts/venv/lib/python3.12/site-packages/imageio_ffmpeg/_parsing.pyr   zLogCatcher.__init__   sJ   € ØˆŒ
ØˆŒØˆŒØˆŒÜ×Ñ×!Ñ! $Ô'ØˆŒØ!ˆÔØ�
‰
�r	   c                 ó   — d| _         y )NT)r   ©r   s    r   Ústop_mezLogCatcher.stop_me   s
   € Ø ˆÕr	   c                 ó   — | j                   S )z>Get header text. Empty string if the header is not yet parsed.)r   r   s    r   ÚheaderzLogCatcher.header   s   € ð �|‰|Ðr	   c                 ó|  — |dkD  r{t        j                   «       |z   }| j                  «       rTt        j                   «       |k  r=t        j                  d«       | j                  «       rt        j                   «       |k  rŒ=dj                  | j                  «      }| j
                  dz   |j                  dd«      z   S )aG  Get the whole text written to stderr so far. To preserve
        memory, only the last 50 to 100 frames are kept.

        If a timeout is given, wait for this thread to finish. When
        something goes wrong, we stop ffmpeg and want a full report of
        stderr, but this thread might need a tiny bit more time.
        r   g{®Gáz„?ó   
ú
úutf-8Úignore)ÚtimeÚis_aliveÚsleepÚjoinr   r   Údecode)r   ÚtimeoutÚetimeÚliness       r   Úget_textzLogCatcher.get_text!   sˆ   € ð �QŠ;Ü—I‘I“K 'Ñ)ˆEØ—-‘-”/¤d§i¡i£k°EÒ&9Ü—
‘
˜4Ô ð —-‘-”/¤d§i¡i£k°EÓ&9ð —
‘
˜4Ÿ;™;Ó'ˆØ�|‰|˜dÑ" U§\¡\°'¸8Ó%DÑDÐDr	   c                 ó  — t         }| j                  �sAt        j                  d«       	 | j                  j                  d«      }|s�n|j                  dd«      j                  dd«      }|j                  d«      }| j                  |d   z   |d<   |j                  d«      | _	        | j                  j                  |«       | j                  sVt        | j                  «      rddj                  | j                  «      }| xj                  |j!                  dd«      z  c_        n#| j                  r || j                  «      | _        | j                  s�ŒA	 | j                  j#                  «        y # t        $ r Y Œ'w xY w# t$        $ r Y y w xY w)	Nr   é   ó   r   s   

éÿÿÿÿr   r    )Úlimit_linesr   r!   r#   r
   ÚreadÚ
ValueErrorÚreplaceÚsplitr   Úpopr   Úextendr   Úget_output_video_liner$   r%   ÚcloseÚ	Exception)r   Úlimit_lines_localÚliner(   r   s        r   ÚrunzLogCatcher.run3   s9  € ä'Ðà×#Ó#Ü�J‰J�qŒMðØ—z‘z—‘ rÓ*�ñ Ùà—<‘<  uÓ-×5Ñ5°g¸uÓEˆDØ—J‘J˜uÓ%ˆEØ—‘¨¨q©Ñ1ˆE�!‰HØ#Ÿi™i¨›mˆDŒOà�K‰K×Ñ˜uÔ%Ø—<’<Ü(¨¯©Ô5Ø"ŸZ™Z¨¯©Ó4�FØ—L’L F§M¡M°'¸8Ó$DÑD–LØ—’Ù/°·±Ó<�”ð+ ×#Ô#ð2	Ø�J‰J×ÑÕøô+ ò Ùðûô, ò 	Ùð	ús#   ªE1 ÅF  Å1	E=Å<E=Æ 	FÆFN)r   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Úpropertyr   r)   r:   © r	   r   r   r      s0   „ ñòò!ð ñó ðóEó$ r	   r   c                 ó˜   — d}| D ]C  }|j                  «       }|j                  d«      rd}Œ'|sŒ*|j                  d«      sŒ<d|v sŒA|c S  y)z[Get the line that defines the video stream that ffmpeg outputs,
    and which we read.
    Fs   Output Ts   Stream s    Video:N)ÚlstripÚ
startswith)r(   Ú	in_outputr9   Úslines       r   r5   r5   V   sS   € ð €IØò ˆØ—‘“ˆØ×Ñ˜JÔ'Ø‰IÚØ×Ñ 
Õ+°
¸eÒ0CØ’ñr	   c                 ó<   — t        | «      d|z  kD  r
dg| | d z   } | S )z(When number of lines > 2*N, reduce to N.é   s#   ... showing only last few lines ...N)Úlen)r(   ÚNs     r   r.   r.   d   s,   € ä
ˆ5ƒz�A˜‘EÒØ7Ð8¸5À!ÀÀ¸:ÑEˆØ€Lr	   c                  ó  — t        | «      dk(  rt        | d   «      S t        | «      dk(  r dt        | d   «      z  t        | d   «      z   S t        | «      dk(  r2dt        | d   «      z  dt        | d   «      z  z   t        | d   «      z   S y)zZconverts a time to second. Either cvsecs(min, secs) or
    cvsecs(hours, mins, secs).
    r   r   rG   é<   é   i  N)rH   Úfloat)Úargss    r   ÚcvsecsrO   k   sŠ   € ô ˆ4ƒy�A‚~Ü�T˜!‘W‹~ÐÜ	ˆT‹�aŠØ”E˜$˜q™'“NÑ"¤U¨4°©7£^Ñ3Ð3Ü	ˆT‹�aŠØ”e˜D ™G“nÑ$ r¬E°$°q±'«NÑ':Ñ:¼UÀ4ÈÁ7»^ÑKÐKð 
r	   c                 ó¨  — | j                  «       }i }|d   j                  dd«      d   j                  d«      d   }|j                  «       dz   |d   j                  «       z   |d<   |D �cg c])  }|j                  «       j	                  d«      sŒ#d	|v sŒ(|‘Œ+ }}|d   }|j                  d
d«      d   j                  «       j                  dd«      d   j                  «       |d<   t        j                  d|j                  d
d«      d   «      d   j                  «       |d<   |D �cg c])  }|j                  «       j	                  d«      sŒ#d|v sŒ(|‘Œ+ }}t        |«      dkD  rL|d   }|j                  dd«      d   j                  «       j                  dd«      d   j                  «       |d<   d}	|d   fD ]:  }t        j                  d|«      }
|
sŒt        |
d   d   j                  «       «      }	Œ< |	|d<   |d   }t        j                  d|«      }||j                  «       |j                  «       dz
   j                  d«      }t        t        t        |«      «      |d<   |d   }t        j                  d|«      }||j                  «       |j                  «       dz
   j                  d«      }t        t        t        |«      «      |d<   |d   |d   k7  r+t        j                   dj#                  |d   |d   «      «       t        j$                  d«      }|j                  | «      }d}|�|j'                  «       d   }t        |«      |d<   |D �cg c]	  }d|v sŒ|‘Œ c}d   }t        j                  d|«      }d}|�;||j                  «       dz   |j                  «        j                  d«      }t)        |Ž }||d<   |S c c}w c c}w c c}w )Nr   Úversionr   r-   Ú	Copyrightú Úffmpeg_versionzStream z Video: zVideo: Úcodecz,\s*(?![^()]*\))Úpix_fmtz Audio: zAudio: Úaudio_codecz ([0-9]+\.?[0-9]*) (fps)Úfpsz [0-9]*x[0-9]*(,| )ÚxÚsource_sizeÚsizezIThe frame size for reading {} is different from the source frame size {}.zrotate\s+:\s([0-9]+)Úrotatez
Duration: z, [0-9][0-9]:[0-9][0-9]:[0-9][0-9].[0-9][0-9]ú:Úduration)Ú
splitlinesr2   ÚstriprB   rC   ÚrerH   ÚfindallrM   Úsearchr   ÚendÚtupleÚmapÚintr   ÚwarningÚformatÚcompileÚgroupsrO   )Útextr(   ÚmetaÚverÚlÚ
videolinesr9   Ú
audiolinesÚ
audio_linerX   ÚmatchesÚmatchÚpartsÚ
reo_rotater\   r^   Úhmss                    r   Úparse_ffmpeg_headerrx   w   sÅ  € Ø�O‰OÓ€EØ€Dð
 �‰(�.‰.˜ AÓ
& rÑ
*×
0Ñ
0°Ó
=¸aÑ
@€CØ ŸY™Y›[¨3Ñ.°°q±·±Ó1AÑA€DÐ	Ñð öØ˜AŸH™H›J×1Ñ1°)Õ<ÀÈqÂŠð€Jð ð
 �a‰=€DØ—J‘J˜y¨!Ó,¨RÑ0×7Ñ7Ó9×?Ñ?ÀÀQÓGÈÑJ×PÑPÓR€Dˆ�MÜ—h‘hð 	Ø�
‰
�9˜aÓ  Ñ$ó	ð ñ		÷ 
‰‹ð 	ˆ�Oð öØ˜AŸH™H›J×1Ñ1°)Õ<ÀÈqÂŠð€Jð ô ˆ:ƒ˜ÒØ ‘]ˆ
à×Ñ˜Y¨Ó*¨2Ñ.×5Ñ5Ó7×=Ñ=¸cÀ1ÓEÀaÑH×NÑNÓPð 	ˆ]Ñð €CØ˜A‘�ò /ˆÜ—*‘*Ð8¸$Ó?ˆÚÜ˜ ™
 1™×+Ñ+Ó-Ó.‰Cð/ð €Dˆ�Kð �a‰=€DÜ�I‰IÐ+¨TÓ2€EØ�—‘“ §¡£¨q¡Ð1×7Ñ7¸Ó<€EÜ¤¤C¨£Ó0€DˆÑð �b‰>€DÜ�I‰IÐ+¨TÓ2€EØ�—‘“ §¡£¨q¡Ð1×7Ñ7¸Ó<€EÜœœS %›Ó)€Dˆ�Lð ˆMÑ˜d 6™lÒ*Ü�‰ð7ß7=±vØ�V‘˜d =Ñ1ó8ô	
ô —‘Ð3Ó4€JØ×Ñ˜dÓ#€EØ€FØÐØ—‘“ Ñ"ˆÜ˜“[€Dˆ�Nð Ö2�! °Ò 1ŠAÒ2°1Ñ5€DÜ�I‰IÐDÀdÓK€EØ€HØÐØ�5—;‘;“= 1Ñ$ u§y¡y£{Ð3×9Ñ9¸#Ó>ˆÜ˜3�<ˆØ€DˆÑà€Kùò]ùò&ùòf 3s0   Á+$OÂOÂOÄ($O
ÅO
ÅO
Í	OÍO)é    )ra   r   r!   Ú_utilsr   r   r   r5   r.   rO   rx   r@   r	   r   ú<module>r{      s<   ðÛ 	Û Û å ôK�×!Ñ!ô Kò\óò	LóYr	   