
    \j4                        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          A/root/.hermes/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
}nl| j0                  d
k(  rRd}
| j                   j                  j2                  dz  }| j                   j                  j4                  dz  }d}|}d}d
}nt7        d      ||k(  s||	k(  rd}d}||z  rt7        d      | j0                  dk(  rKd}
| j                   j                  j2                  }| j                   j                  j4                  }||z  }d
}n| j0                  d
k(  rUd}
| j                   j                  j2                  dz  }| j                   j                  j4                  dz  }d}||z  }d}d
}n$t7        d      |t&        k7  rt        d      t        j8                  |      }|t        j                  k(  rt        d      |j:                  t        j<                  t        j>                  z  t        j@                  z  z  rt        d      d}d}tC        |jD                        D ]  }|jF                  |   jH                  | j0                  k7  r*|dk(  r|jF                  |   jJ                  }nIt        j                  t        j,                  |jF                  |   jJ                        |k7  rt        d      |d
z  } |dk(  rt7        d| j0                   d      ||z  rt        d      ||z  }|d
k7  r|dk7  rt        d      |dk(  r(|j:                  t        jL                  z  rt        d      |dz  }||z  rt7        d      |d
k(  r"d}
| j2                  }| j4                  }||z  }d
}n%d}
| j2                  }| j4                  }|}||z  }|}d
}t        jN                         }|t        j                  k(  rtQ        d      tS        t        jT                  || j                   j                               t        j                  t        j                  t.           tW        |
t        jX                  t.              z              }t        j                  t        j                  t.           tW        |
t        jX                  t.              z              }|t        j                  k(  s|t        j                  k(  ro|t        j                  k7  rt[        |       |t        j                  k7  rt[        |       t        j\                  t        j^                  |             tQ        d      |
dk(  r||d<   ||d
<   ||d<   ||d
<   n||d<   ||d
<   ||d<   ||d<   ||d
<   ||d<   t        j                  t        j                  t        j`                     tW        dt        jX                  t        j`                        z              }|t        j                  k(  rIt[        |       t[        |       t        j\                  t        j^                  |             tQ        d      t        j                  t        j`                  |      |d<   t        j                  t        j`                  |      |d
<   t        j                  t        j`                  |      |d<   t        j                  t        j                  tb           tW        t        jX                  tb                          }|t        j                  k(  rTt[        |       t[        |       t[        |       t        j\                  t        j^                  |             tQ        d      t        j                  t        j`                  |j                  | j0                           |jd                  _        ||jd                  _3        ||jd                  _4        |
|jd                  _5        tm        d
|d
      |jd                  _7        ||jd                  _8        ||jd                  _9        d|jd                  _:        t        j                  t        j`                  |      |_;        tx        |_=        	 t}        t        j                  t        j`                  |      dt~              }|S # t        $ r ty        |        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&unknown pixel format for DLPack exportzIbitstream, palette, and Bayer formats are not supported for DLPack exportz7mixed component step is not supported for DLPack exportzplane z has no componentsz/unsupported component packing for DLPack exportz=only 8- and 16-bit components are supported for DLPack exportz6big-endian formats are not supported for DLPack exportzav_frame_alloc() failedzmalloc() failed)codebitslanes   dltensor)Ar   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_pix_fmt_desc_getr>   AV_PIX_FMT_FLAG_BITSTREAMAV_PIX_FMT_FLAG_PALAV_PIX_FMT_FLAG_BAYERr&   r'   r(   r)   stepAV_PIX_FMT_FLAG_BE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_fmtrl   rm   r:   nv12p010lep016lern   rU   itemsizes0s1s2st0st1st2desc
step_bytesncompr0   	frame_refrq   rr   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D %&OPP ''/  v{{")*RSSzz--))*++,
 *$ 
 &'J !E4--. 	99Q<%%3A:!%1!2!2J[[TYYq\->->?:M-Q  
	 z 6$**5G!HIIE!)E  "U*H1}Q)S  1}c.D.D!D)L  a<D8# !CDDz[[ZZ8+[[ZZ8+141C1C1E	#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   53k* *l )__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 kC$J k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   ri   rt   r   AVFramer\   rg   rh   r   )r   r   r   rq   rr   s        r2   ru   ru   S  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   rj   r   rY   rv   )r   r   s     r2   rw   rw   l  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   rj   voidru   objectrw   r   r4   r2   <module>r      s     # # . 
 6 E 4 
 5 z z  zz	 ^^O,[[   , % %6;; %  %r4   