
    q	h                        S SK Jr  S SKrS SKJr  S SKJrJr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Jr  SSKJr  SSKJr  SSKJr  \ " S S5      5       r " S S5      rg)    )annotationsN)	dataclass)AnyAsyncIteratorOptional   )	FfiClient	FfiHandle)ffi_pb2)video_frame_pb2)TrackSource)	RingQueuetask_done_logger)Participant)Track)
VideoFramec                  4    \ rS rSr% S\S'   S\S'   S\S'   Srg	)
VideoFrameEvent   r   frameinttimestamp_uszproto_video_frame.VideoRotationrotation N)__name__
__module____qualname____firstlineno____annotations____static_attributes__r       J/var/www/html/env/lib/python3.13/site-packages/livekit/rtc/video_stream.pyr   r      s    --r!   r   c                     \ rS rSrSr   S         SS jjr\SSSS.           SS jj5       r\SSSS.         SS jj5       rSS	 jr	SS
 jr
      SS jrSS jrSS jrSS jrSS jrSS jrSrg)VideoStream&   zDVideoStream is a stream of video frames received from a RemoteTrack.Nr   c                l   U=(       d    [         R                  " 5       U l        [        R                  R
                  R                  U R                  5      U l        [        U5      U l	        Xl
        X@l        X0l        X@l        S nSU;   a  U R                  US   US   S9nOU R                  5       n[        UR                   R"                  5      U l        UR&                  U l        U R                  R+                  U R-                  5       5      U l        U R.                  R1                  [2        5        g )Nparticipanttrack_source)r'   r(   )asyncioget_event_loop_loopr	   instancequeue	subscribe
_ffi_queuer   _queue_track_format	_capacity%_create_owned_stream_from_participant_create_owned_streamr
   handleid_ffi_handleinfo_infocreate_task_run_taskadd_done_callbackr   )selftrackloopcapacityformatkwargsstreams          r"   __init__VideoStream.__init__)   s     5W335
#,,22<<TZZH9B89L$)!F"??"=1~@V @ F ..0F$V]]%5%56[[
ZZ++DIIK8


$$%56r!   )rA   rC   rB   c          	         [        UUUUUS S9$ )N)r'   r(   rA   rB   rC   r@   r$   )clsr'   r(   rA   rC   rB   s         r"   from_participantVideoStream.from_participantF   s#     #%
 	
r!   c                   [        UUUUS9$ )N)r@   rA   rB   rC   rI   )rJ   r@   rA   rC   rB   s        r"   
from_trackVideoStream.from_trackY   s     	
 	
r!   c                j    [         R                  R                  R                  U R                  5        g N)r	   r,   r-   unsubscriber/   r?   s    r"   __del__VideoStream.__del__i   s       ,,T__=r!   c                   U R                   c   e[        R                  " 5       nUR                  nU R                   R                  R
                  Ul        [        R                  R                  Ul
        U R                  b  U R                  Ul        SUl        [        R                  R!                  U5      nUR                  R"                  $ NT)r1   	proto_ffi
FfiRequestnew_video_streamr8   r6   track_handleproto_video_frameVideoStreamTypeVIDEO_STREAM_NATIVEtyper2   rC   normalize_strider	   r,   requestrE   )r?   reqrZ   resps       r"   r5    VideoStream._create_owned_streaml   s    {{&&&""$//(,(?(?(F(F% 1 A A U U<<#&*ll#,0)!!))#.$$+++r!   c                x   [         R                  " 5       nUR                  nUR                  R                  Ul        [        R                  R                  Ul	        X$l
        SUl        U R                  b  U R                  Ul        [        R                  R!                  U5      nUR                  R"                  $ rW   )rX   rY   video_stream_from_participantr8   r6   participant_handler\   r]   r^   r_   r(   r`   r2   rC   r	   r,   ra   rE   )r?   r'   r(   rb   rf   rc   s         r"   r4   1VideoStream._create_owned_stream_from_participantx   s     ""$(+(I(I%;F;R;R;Y;Y%8->-N-N-b-b%*5A29=%6<<#37<<)0!!))#.11888r!   c                >  #     U R                   R                  U R                  5      I S h  vN nUR                  nUR	                  S5      (       a{  UR
                  R                  n[        R                  " U5      n[        UUR
                  R                  UR
                  R                  S9nU R                  R                  U5        OUR	                  S5      (       a  OM  [        R                  R                   R#                  U R                   5        g  N7f)Nframe_received)r   r   r   eos)r/   wait_for	_is_eventvideo_stream_eventHasFieldrj   bufferr   _from_owned_infor   r   r   r0   putr	   r,   r-   rR   )r?   eventvideo_eventowned_buffer_infor   s        r"   r<   VideoStream._run   s     //224>>BBE22K##$455$/$>$>$E$E!"334EF'!,!;!;!H!H(77@@ &%%e,,! $ 	  ,,T__=# Cs   *DDC/Dc                l   #    U R                   R                  5         U R                  I S h  vN   g  N7frQ   )r8   disposer=   rS   s    r"   acloseVideoStream.aclose   s$       "jjs   *424c                \    UR                   R                  U R                  R                  :H  $ rQ   )rn   stream_handler8   r6   )r?   es     r"   rm   VideoStream._is_event   s%    ##11T5E5E5L5LLLr!   c                    U $ rQ   r   rS   s    r"   	__aiter__VideoStream.__aiter__   s    r!   c                   #    U R                   R                  5       (       a  [        eU R                  R	                  5       I S h  vN nUc  [        eU$  N7frQ   )r=   doneStopAsyncIterationr0   get)r?   items     r"   	__anext__VideoStream.__anext__   sD     ::??$$[[__&&<$$	 's   AAAA)	r3   r8   r/   r2   r:   r+   r0   r=   r1   )Nr   N)
r@   r   rA   #Optional[asyncio.AbstractEventLoop]rB   r   rC   5Optional[proto_video_frame.VideoBufferType.ValueType]returnNone)r'   r   r(   TrackSource.ValueTyperA   r   rC   r   rB   r   r   r$   )
r@   r   rA   r   rC   r   rB   r   r   r$   )r   r   )r   r   )r'   r   r(   r   r   r   )r}   zproto_ffi.FfiEventr   bool)r   zAsyncIterator[VideoFrameEvent])r   r   )r   r   r   r   __doc__rF   classmethodrK   rN   rT   r5   r4   r<   ry   rm   r   r   r    r   r!   r"   r$   r$   &   s5   N
 59HL77 27 	7
 F7 
7:  59HL
 !
 ,	

 2
 F
 
 

 
$ 
 59HL
 
 2	

 F
 
 

 
>
,9&96K9	9>*Mr!   r$   )
__future__r   r)   dataclassesr   typingr   r   r   _ffi_clientr	   r
   _protor   rX   r   r\   _proto.track_pb2r   _utilsr   r   r'   r   r@   r   video_framer   r   r$   r   r!   r"   <module>r      sS    #  ! / / - ( 8 ) / $  # . . .G Gr!   