
    Ej)                        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 j2                  e j4                   G d	 d
e                    Ze j:                  e j<                   e j>                  d      de j@                  e!   de jD                  fd                     Z#e j:                   e j>                  d      de$de jD                  fd              Z%y)    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y)
VideoPlaneframeindexc                 f   |j                   }|j                  j                  rt        j                  t        j
                  t        j                     |j                  j                  j                        }t        |j                  |j                  j                  |j                  j                        }|dk(  r%|j                  dk(  rd| _        d| _        d| _        y t        |j                  j                         D ]X  }|j                  j"                  |   j$                  |k(  s*t'        ||      }|j                  | _        |j                  | _         n t)        d| d|      t+        | j,                  j                  j.                  | j0                           | j                  z  | _        y )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          D/var/www/html/qr/venv/lib/python3.12/site-packages/av/video/plane.py	__cinit__zVideoPlane.__cinit__   sN   ll99""@Fs445uyy7N7N7S7SAJ #$$eiioouyy7G7GC A:#((f,DJDK&Dsww,,- 	KAww||A$$-0a8	&__
'..	K !6ugT#IJJ
 tzz~~66tzzBCdkkQ    returnc                     | j                   S )N)r%   r-   s    r2   _buffer_sizezVideoPlane._buffer_size6   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_size:   s!     zz~~&&tzz22r4   c                 F    | j                   j                  j                  ryy)NFT)r   r   r   r7   s    r2   _buffer_writablezVideoPlane._buffer_writableC   s    ::>>''r4   viewflagsc                    | j                   j                  j                  rt        d      |t        z  r| j                         st        d      | j                         }| j                   j                  j                  | j                     }|dk  r9| j                  }t        j                  t        j                  |      |dz
  |z  z   }t        || || j                         d|       y )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   r   	TypeErrorr   r<   
ValueError_buffer_ptrr,   r   r#   r   r   p_charr	   r8   )r-   r=   r>   r   r:   r#   s         r2   __getbuffer__zVideoPlane.__getbuffer__I   s    ::>>''K  >!$*?*?*A566!--/ $

 7 7

 C	q=!%F++fmmS1VaZ94LLC$c4+<+<+>5Ir4   c                 <   | j                   j                  j                  rut        j                  t
        j                  | j                   j                  j                        t        d      k7  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__Z   sx    ::>>''{{3,,djjnn.C.CDI  *J  4::0011ayr4   N)streamrN   c          	         | j                   j                  j                  d   t        j                  k(  rt        d      | j                   j                  j                  rt        j                  t        j                  | j                   j                  j                        t        d      k7  rt        d      |t        d      t        j                  t        j                  t        j                     | j                   j                  j                  j                        }|j                   }t"        }| j                   j$                  }nJt        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}| j0                  dk(  rHd}
| j                   j                  j2                  }| j                   j                  j4                  }|}d
}n[| j0                  d
k(  rQd}
| j                   j                  j2                  dz  }| j                   j                  j4                  dz  }d}|}d}d
}nt7        d      ||k(  s||	k(  rd}d}||z  rt7        d      | j0                  dk(  rJd}
| j                   j                  j2                  }| j                   j                  j4                  }||z  }d
}ny| j0                  d
k(  rTd}
| j                   j                  j2                  dz  }| j                   j                  j4                  dz  }d}||z  }d}d
}nt7        d      t        d      t        j8                         }|t        j                  k(  rt;        d      t=        t        j>                  || j                   j                               t        j                  t        j                  t.           tA        |
t        jB                  t.              z              }t        j                  t        j                  t.           tA        |
t        jB                  t.              z              }|t        j                  k(  s|t        j                  k(  ro|t        j                  k7  rtE        |       |t        j                  k7  rtE        |       t        jF                  t        jH                  |             t;        d      |
dk(  r||d<   ||d
<   ||d<   ||d
<   n||d<   ||d
<   ||d<   ||d<   ||d
<   ||d<   t        j                  t        j                  t        jJ                     tA        dt        jB                  t        jJ                        z              }|t        j                  k(  rItE        |       tE        |       t        jF                  t        jH                  |             t;        d      t        j                  t        jJ                  |      |d<   t        j                  t        jJ                  |      |d
<   t        j                  t        jJ                  |      |d<   t        j                  t        j                  tL           tA        t        jB                  tL                          }|t        j                  k(  rTtE        |       tE        |       tE        |       t        jF                  t        jH                  |             t;        d      t        j                  t        jJ                  |j                  | j0                           |jN                  _        ||jN                  _(        ||jN                  _)        |
|jN                  _*        tW        d
|d
      |jN                  _,        ||jN                  _-        ||jN                  _.        d|jN                  _/        t        j                  t        jJ                  |      |_0        tb        |_2        	 tg        t        j                  t        jJ                  |      dth              }|S # tj        $ r tc        |        w xY w)Nr   zBDLPack export requires a refcounted AVFrame (frame.buf[0] is NULL)rF   rG   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   rH   r   r   rI   r   r   r    r!   rJ   rK   rL   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-   rN   r/   sw_fmtrf   rg   r:   nv12p010lep016lerh   rU   itemsizes0s1s2st0st1st2	frame_refrk   rl   ctxmanagedcapsules                            r2   
__dlpack__zVideoPlane.__dlpack__e   s   ::>>a FKK/T  ::>>''{{3,,djjnn.C.CDI  *J  !)R 
 AGs445tzz~~7S7S7X7XAJ  ))FK

--I[[!2!2DJJNN4I4IJFKINN	q=%F  7#Y'Y'%~~fjj9dH^^G,
Bw/S#T>HDzzQZZ^^**ZZ^^))qZZ^^**a/ZZ^^))Q. !?@@v6!1HD8# !CDDzzQZZ^^**ZZ^^))8+qZZ^^**a/ZZ^^))Q.8+ !DEE%&OPP141C1C1E	#788#""9djjnn=>NN7#VD6==3I,I%J
 ++NN7#VD6==3I,I%J
 FKK7fkk#9#U&++%WfnnY78/0019E!HE!HGAJGAJE!HE!HE!HGAJGAJGAJkkNN6==)6!fmmFMM6R2R+S
 &++KMfnnY78/00V]]I6AV]]E2AV]]G4A++NN?+VFMM/4R-S
 fkk!IKMfnnY78/00!'V]]INN4::<V!W(3%&/#!%",!$a"H"'$+!()%$kk&--=8	#FMM73*G 	  	*73	s   $3c c/)__name__
__module____qualname__r   r   r[   r3   cfuncsize_tr8   propertyr:   bintr<   r   r
   rD   rM   r    r4   r2   r   r      s    Rz R&** R> \\ fmm     3 3 \\&++  
J&.."; JFJJ J"	 26 gC$J gr4   r   F)checkr   r5   c                    | t         j                  k(  ry t        j                  t         j                  t         j                     | j
                        }|t         j                  k7  rt        j                  t         j                  t        j                     |d         }t        j                  t         j                  t           |d         }t        j                  t         j                  t           |d         }|t         j                  k7  r(t        j                  t        j                  |             |t         j                  k7  rt        |       |t         j                  k7  rt        |       t        |       t        |        y )Nr   r   rQ   )r   rY   r   r   rc   rn   r   AVFramer\   ra   rb   r   )r   r   r~   rk   rl   s        r2   ro   ro     s     &++
++fnnV]]3W5H5H
IC
fkkKKs{{ ;SVD	FNN73SV<++fnnW5s1v>#fnnY78FKKKfkk!MS	Mr4   r   c                     t        | d      r[t        j                  t        j                  t           t        | d            }|t        j                  k7  r|j                  |       y y y )NrW   )r   r   r   r   rd   r   rY   rp   )r   r   s     r2   rq   rq   (  sV     +.++NN?+ +6
 fkk!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   finalcclassPlaner   r   nogil	exceptvalr   rd   voidro   objectrq   r   r4   r2   <module>r      s     # # . 
 6 E 4 
 5 v v  vr ^^O,[[   , % %6;; %  %r4   