
    dj(                        d dl Z d dlmc mZ d dlmZ d dlmZm	Z	m
Z
 d dlmZ d dlmZmZ d dlmZ d dlmZmZmZ d dlmZmZ e j         G d	 d
e                      Ze j        e j         e j        d          de j        e          de j!        fd                                    Z"e j         e j        d          de#de j!        fd                        Z$dS )    N)	err_check)VideoFormatComponentget_pix_fmtget_video_format)
VideoFrame)PyBUF_WRITABLEPyBuffer_FillInfo)	Py_buffer)PyCapsule_GetPointerPyCapsule_IsValidPyCapsule_New)freemallocc                       e Zd Zdedej        fdZej        dej        fd            Z	e
d             Zej        dej        fd            Zdej        e         d	ej        fd
Zd Zdddedz  fdZdS )
VideoPlaneframeindexc                    |j         }|j        j        rht          j        t          j        t          j                 |j        j        j                  }t          |j
        |j        j        |j        j                  }|dk    r"|j        dk    rd| _        d| _        d| _        d S t          |j        j                  D ]G}|j        j        |         j        |k    r*t'          ||          }|j        | _        |j        | _         nHt)          d| d|          t+          | j        j        j        | j                           | j        z  | _        d S )N   pal8   i   zcould not find plane z of )formatptrhw_frames_ctxcythoncastpointerlibAVHWFramesContextdatar   	sw_formatwidthheightnamebuffer_sizerangenb_componentscompplaner   RuntimeErrorabsr   linesizer   )selfr   r   fmt
frames_ctxi	components          I/home/agentuser/manim-venv/lib/python3.11/site-packages/av/video/plane.py	__cinit__zVideoPlane.__cinit__   sD   l9" 	@Fs45uy7N7SA AJ #$eiouy7G C A::#(f,,DJDK&DFsw,-- 	K 	KAw|A$--0a88	&_
'.	 . IuII#IIJJJ
 tz~6tzBCCdkQ    returnc                     | j         S )N)r%   r-   s    r2   _buffer_sizezVideoPlane._buffer_size5   s    r4   c                 :    | j         j        j        | j                 S )zN
        Bytes per horizontal line in this plane.

        :type: int
        )r   r   r,   r   r7   s    r2   	line_sizezVideoPlane.line_size9   s     z~&tz22r4   c                 ,    | j         j        j        rdS dS )NFT)r   r   r   r7   s    r2   _buffer_writablezVideoPlane._buffer_writableB   s    :>' 	5tr4   viewflagsc                    | j         j        j        rt          d          |t          z  r#|                                 st          d          t          || |                                 | 	                                d|           d S )NzyHardware frame planes do not support the Python buffer protocol. Use DLPack (__dlpack__) or download to a software frame.zbuffer is not writabler   )
r   r   r   	TypeErrorr   r<   
ValueErrorr	   _buffer_ptrr8   )r-   r=   r>   s      r2   __getbuffer__zVideoPlane.__getbuffer__H   s    :>' 	K   >! 	7$*?*?*A*A 	75666$d&6&6&8&8$:K:K:M:MqRWXXXXXr4   c                     | j         j        j        rat          j        t
          j        | j         j        j                  t          d          k    rt          d          t          | j         j        fS t          dfS )N   cuda4DLPack export is only implemented for CUDA hw framesr   )r   r   r   r   r   r   AVPixelFormatr   r   NotImplementedErrorkCuda
_device_idkCPUr7   s    r2   __dlpack_device__zVideoPlane.__dlpack_device__R   sx    :>' 	2{3,djn.CDDI I   *J   4:011ayr4   N)streamrM   c          	         | j         j        j        d         t          j        k    rt          d          | j         j        j        rt          j        t          j	        | j         j        j
                  t          d          k    rt          d          |t          d          t          j        t          j        t          j                 | j         j        j        j                  }|j        }t"          }| j         j        }n7t          j        t          j	        | j         j        j
                  }t&          }d}| j        }|dk     rt          d          t          d          }t          d          }t          d	          }	t          j        t          j                  \  }
}}t          j        t.                    \  }}}t          j        t.                    \  }}}||k    rd
}d}| j        dk    r*d}
| j         j        j        }| j         j        j        }|}d
}n| j        d
k    r3d}
| j         j        j        dz  }| j         j        j        dz  }d}|}d}d
}nt7          d          ||k    s||	k    rd}d}||z  rt7          d          | j        dk    r,d}
| j         j        j        }| j         j        j        }||z  }d
}n_| j        d
k    r6d}
| j         j        j        dz  }| j         j        j        dz  }d}||z  }d}d
}nt7          d          t          d          t          j                    }|t          j        k    rt;          d          t=          t          j        || j         j                             t          j        t          j        t.                   tA          |
t          j!        t.                    z                      }t          j        t          j        t.                   tA          |
t          j!        t.                    z                      }|t          j        k    s|t          j        k    rs|t          j        k    rtE          |           |t          j        k    rtE          |           t          j#        t          j$        |                     t;          d          |
dk    r||d<   ||d
<   ||d<   ||d
<   n||d<   ||d
<   ||d<   ||d<   ||d
<   ||d<   t          j        t          j        t          j%                 tA          dt          j!        t          j%                  z                      }|t          j        k    rStE          |           tE          |           t          j#        t          j$        |                     t;          d          t          j        t          j%        |          |d<   t          j        t          j%        |          |d
<   t          j        t          j%        |          |d<   t          j        t          j        tL                   tA          t          j!        tL                                        }|t          j        k    rbtE          |           tE          |           tE          |           t          j#        t          j$        |                     t;          d          t          j        t          j%        |j        | j                           |j'        _        ||j'        _(        ||j'        _)        |
|j'        _*        tW          d
|d
          |j'        _,        ||j'        _-        ||j'        _.        d|j'        _/        t          j        t          j%        |          |_0        tb          |_2        	 tg          t          j        t          j%        |          dth                    }n# tj          $ r tc          |            w xY w|S )Nr   zBDLPack export requires a refcounted AVFrame (frame.buf[0] is NULL)rE   rF   ziCUDA stream synchronization is not supported. Pass stream=None and synchronize before calling __dlpack__.z4negative linesize is not supported for DLPack exports   nv12s   p010les   p016ler            zinvalid plane index for NV12   z linesize is not aligned to dtypez!invalid plane index for P010/P016z'unsupported sw_format for DLPack exportzav_frame_alloc() failedzmalloc() failed)codebitslanes   dltensor)6r   r   bufr   NULLr@   r   r   r   rG   r   r   rH   r   r   r    r!   rI   rJ   rK   r:   declareintint64_tr   r#   r"   rA   av_frame_allocMemoryErrorr   av_frame_refr   sizeofr   av_frame_freeaddressp_voidDLManagedTensor	dl_tensordevice_type	device_idndim
DLDataTypedtypeshapestridesbyte_offsetmanager_ctx_dlpack_managed_tensor_deleterdeleterr   _dlpack_capsule_destructor	Exception)r-   rM   r/   sw_fmtre   rf   r:   nv12p010lep016lerg   rT   itemsizes0s1s2st0st1st2	frame_refrj   rk   ctxmanagedcapsules                            r2   
__dlpack__zVideoPlane.__dlpack__]   s	   :>a FK//T   :>' 	{3,djn.CDDI I   *J   !)R  
 AGs45tz~7S7XA AJ  )FK
-II[!2DJN4IJJFKIN	q==%F   7##Y''Y''%~fj99dH^G,,
Bw//S#T>>HDzQZ^*Z^)qZ^*a/Z^)Q. !?@@@v6!1!1HD8# E !CDDDzQZ^*Z^)8+qZ^*a/Z^)Q.8+ !DEEE%&OPPP141C1E1E	##7888#"9djn==>>>N7#VD6=3I3I,I%J%J
 
 +N7#VD6=3I3I,I%J%J
 
 FK7fk#9#9##U&+%%WfnY77888/000199E!HE!HGAJGAJJE!HE!HE!HGAJGAJGAJkN6=)6!fmFM6R6R2R+S+S
 
 &+KKKMMMfnY77888/000V]I66AV]E22AV]G44A+N?+VFM/4R4R-S-S
 
 fk!!IIIKKKMMMfnY77888/000!'V]IN4:<V!W!W(3%&/#!%",!$a"H"H"H"'$+!()%$k&-==8	#FM733* GG
  	 	 	*7333	 s   #3_ _2)__name__
__module____qualname__r   r   rZ   r3   cfuncsize_tr8   propertyr:   bintr<   r   r
   rC   rL   r    r4   r2   r   r      s&       Rz R&* R R R R> \ fm       \  3 3 X3 \&+    \
Y&."; YFJ Y Y Y Y	 	 	 26 g g gC$J g g g g g gr4   r   F)checkr   r5   c                    | t           j        k    rd S t          j        t           j        t           j                 | j                  }|t           j        k    rt          j        t           j        t          j                 |d                   }t          j        t           j        t                   |d                   }t          j        t           j        t                   |d                   }|t           j        k    r&t          j	        t          j
        |                     |t           j        k    rt          |           |t           j        k    rt          |           t          |           t          |            d S )Nr   r   rP   )r   rX   r   r   rb   rm   r   AVFramer[   r`   ra   r   )r   r~   r}   rj   rk   s        r2   rn   rn     s    &+
+fnV]3W5H
I
IC
fkKs{ ;SVDD	FN73SV<<+fnW5s1v>>##fnY77888FKKKKfk!!MMMS			MMMMMr4   r   c                     t          | d          r_t          j        t          j        t                   t          | d                    }|t          j        k    r|                    |           d S d S d S )NrV   )r   r   r   r   rc   r   rX   ro   )r   r   s     r2   rp   rp      sw     +.. %+N?+ +66
 
 fk!!OOG$$$$$% %
 "!r4   )%r   cython.cimports.libavcimportslibavr   cython.cimports.av.errorr   cython.cimports.av.video.formatr   r   r   cython.cimports.av.video.framer   cython.cimports.cpythonr   r	   cython.cimports.cpython.bufferr
   !cython.cimports.cpython.pycapsuler   r   r   cython.cimports.libc.stdlibr   r   cclassPlaner   r   nogil	exceptvalr   rc   voidrn   objectrp   r   r4   r2   <module>r      s    # # # # # # # # # . . . . . .         
 6 5 5 5 5 5 E E E E E E E E 4 4 4 4 4 4         
 5 4 4 4 4 4 4 4 o o o o o o o od ^O,[     , % %6; % % %  % % %r4   