
    dj1              
       8   d dl mZ d dlZd dlmc mZ d dlmZ d dl	m
Z
mZ d dlmZ  G d de          Z G d d	e          Z G d
 de          Z G d de          Z G d de          Zej        ej        dededej        dej        fd                        Zej        ej        dedej        dej        fd                        Zej        d ej        ej                  dej        dej        fd            Zej         G d d                      ZdS )    )IntEnumN)	err_check)VideoFormatget_pix_fmt)alloc_video_framec                       e Zd ZU eZded<   eZded<   eZ	ded<   e
Zded<   eZd	ed
<   eZded<   eZded<   eZded<   eZded<   eZded<   eZded<   dS )InterpolationzFast bilinearFAST_BILINEARBilinearBILINEARz2-tap cubic B-splineBICUBICExperimentalXzNearest neighbor / pointPOINTzArea averagingAREAzBicubic luma / Bilinear chromaBICUBLINzGaussian approximationGAUSSzUnwindowed SincSINCz3-tap sinc/sincLANCZOSzUnwindowed natural cubic splineSPLINEN)__name__
__module____qualname__SWS_FAST_BILINEARr
   __annotations__SWS_BILINEARr   SWS_BICUBICr   SWS_Xr   	SWS_POINTr   SWS_AREAr   SWS_BICUBLINr   	SWS_GAUSSr   SWS_SINCr   SWS_LANCZOSr   
SWS_SPLINEr        O/home/agentuser/manim-venv/lib/python3.11/site-packages/av/video/reformatter.pyr	   r	   
   s         %6M?666'Hj'''&1G#111A~(1E%111%D
%%%1=H.===&/E#///&D
&&&!,G,,,0:F-:::::r'   r	   c                   F    e Zd ZeZeZeZe	Z
eZeZeZeZeZeZe	ZeZeZeZdS )
ColorspaceN)r   r   r   SWS_CS_ITU709ITU709
SWS_CS_FCCFCCSWS_CS_ITU601ITU601SWS_CS_ITU624ITU624SWS_CS_SMPTE170M	SMPTE170MSWS_CS_SMPTE240M	SMPTE240MSWS_CS_DEFAULTDEFAULTitu709fccitu601itu624	smpte170m	smpte240mdefaultr&   r'   r(   r*   r*      sT        F
CFF I IGF
CFF I IGGGr'   r*   c                   p    e Zd ZU ej        Zded<   ej        Zded<   ej	        Z
ded<   ej        Zded<   d	S )

ColorRangeUnspecifiedUNSPECIFIEDz%MPEG (limited) YUV range, 219*2^(n-8)MPEGzJPEG (full) YUV range, 2^n-1JPEGzNot part of ABINBN)r   r   r   libAVCOL_RANGE_UNSPECIFIEDrC   r   AVCOL_RANGE_MPEGrD   AVCOL_RANGE_JPEGrE   AVCOL_RANGE_NBrF   r&   r'   r(   rA   rA   *   sa         !$!<K<<<474HD
1HHH+.+?D
(???.B.....r'   rA   c                      e Zd ZU dZej        Zded<   ej        Z	ded<   ej
        Zded<   ej        Zded	<   ej        Zd
ed<   ej        Zded<   ej        Zded<   ej        Zded<   ej        Zded<   ej        Zded<   ej        Zded<   ej        Zded<   ej        Zded<   ej         Z!ded<   ej"        Z#ded<   ej$        Z%d ed!<   ej&        Z'd"ed#<   d$S )%ColorTrczuTransfer characteristic (gamma curve) of a video frame.

    Maps to FFmpeg's ``AVColorTransferCharacteristic``.
    zBT.709BT709rB   rC   zGamma 2.2 (BT.470M)GAMMA22zGamma 2.8 (BT.470BG)GAMMA28z
SMPTE 170Mr4   
SMPTE 240Mr6   LinearLINEARzLogarithmic (100:1 range)LOGz"Logarithmic (100*sqrt(10):1 range)LOG_SQRTzIEC 61966-2-4 (sRGB)IEC61966_2_4zBT.1361 extended colour gamut
BT1361_ECGzIEC 61966-2-1 (sYCC)IEC61966_2_1zBT.2020 10-bit	BT2020_10zBT.2020 12-bit	BT2020_12zSMPTE 2084 (PQ, HDR10)	SMPTE2084zSMPTE 428-1SMPTE428zARIB STD-B67 (HLG)ARIB_STD_B67N)(r   r   r   __doc__rG   AVCOL_TRC_BT709rN   r   AVCOL_TRC_UNSPECIFIEDrC   AVCOL_TRC_GAMMA22rO   AVCOL_TRC_GAMMA28rP   AVCOL_TRC_SMPTE170Mr4   AVCOL_TRC_SMPTE240Mr6   AVCOL_TRC_LINEARrS   AVCOL_TRC_LOGrT   AVCOL_TRC_LOG_SQRTrU   AVCOL_TRC_IEC61966_2_4rV   AVCOL_TRC_BT1361_ECGrW   AVCOL_TRC_IEC61966_2_1rX   AVCOL_TRC_BT2020_10rY   AVCOL_TRC_BT2020_12rZ   AVCOL_TRC_SMPTE2084r[   AVCOL_TRC_SMPTE428r\   AVCOL_TRC_ARIB_STD_B67r]   r&   r'   r(   rM   rM   1   sl         
 )E8)))!$!:K:::%(%:G":::&)&;G#;;;!5I|555!5I|555+FH+++'*'8C	$888585KH2KKK+.+EL(EEE252JJ/JJJ+.+EL(EEE"%"9I999"%"9I999*-*AI'AAA!4Hm444),)CL&CCCCCr'   rM   c                   4   e Zd ZU dZej        Zded<   ej        Z	ded<   ej
        Zded<   ej        Zded	<   ej        Zd
ed<   ej        Zded<   ej        Zded<   ej        Zded<   ej        Zded<   ej        Zded<   ej        Zded<   ej        Zded<   dS )ColorPrimarieszRColor primaries of a video frame.

    Maps to FFmpeg's ``AVColorPrimaries``.
    zBT.709 / sRGB / sYCCrN   rB   rC   zBT.470MBT470MzBT.470BG / BT.601-6 625BT470BGzSMPTE 170M / BT.601-6 525r4   rQ   r6   zGeneric film (Illuminant C)FILMzBT.2020 / BT.2100BT2020zSMPTE 428-1 / XYZr\   zSMPTE 431-2 (DCI-P3)SMPTE431zSMPTE 432-1 (Display P3)SMPTE432zEBU 3213-E / JEDEC P22EBU3213N)r   r   r   r^   rG   AVCOL_PRI_BT709rN   r   AVCOL_PRI_UNSPECIFIEDrC   AVCOL_PRI_BT470Mrr   AVCOL_PRI_BT470BGrs   AVCOL_PRI_SMPTE170Mr4   AVCOL_PRI_SMPTE240Mr6   AVCOL_PRI_FILMrt   AVCOL_PRI_BT2020ru   AVCOL_PRI_SMPTE428r\   AVCOL_PRI_SMPTE431rv   AVCOL_PRI_SMPTE432rw   AVCOL_PRI_EBU3213rx   r&   r'   r(   rq   rq   J   s         
 %($7E!777!$!:K:::,FI,,,),)>G&>>>-0-DI*DDD!5I|555*-*<D
'<<<"%"6F666$'$:H!:::'*'=H$===+.+AH(AAA(+(=G%=====r'   rq   value
enum_classr?   returnc                     | |S t          | |          r| j        S t          | t                    r| S t          | t                    r||          j        S t	          d|  d|j                   )NzCannot convert z to )
isinstancer   intstr
ValueErrorr   )r   r   r?   s      r(   _resolve_enum_valuer   ^   s     }%$$ {% % '% &&
GuGG*2EGG
H
HHr'   formatc                     | |S t          | t                    rt          j        t          |           j        S t          |           S N)r   r   cythoncastpix_fmtr   )r   r?   s     r(   _resolve_formatr   o   sC     ~&+&& 8{;//77vr'   frame
colorspacecolor_rangec                 ^   |t           j        k    r$t          j        t           j        |          | _        |t          k    rt           j        | _        dS |t          k    rt           j
        | _        dS |t          k    rt           j        | _        dS |t          k    rt           j        | _        dS dS )zCSet AVFrame colorspace/range from SWS_CS_* and AVColorRange values.N)rG   rH   r   r   AVColorRanger   r+   AVCOL_SPC_BT709r   r-   AVCOL_SPC_FCCr/   AVCOL_SPC_SMPTE170Mr5   AVCOL_SPC_SMPTE240M)r   r   r   s      r(   _set_frame_colorspacer   y   s     c111"K(8+FF
 ]"".	z	!	!,	}	$	$2	'	'	'2 
(	'r'   c                      e Zd ZdZd Z	 	 	 	 	 	 	 	 	 	 	 ddefdZej        dedej	        dej	        de
j        d	ej	        d
ej	        dej	        dej	        dej	        dej	        dej	        dej        dej        dej	        fd            ZdS )VideoReformatterzAn object for reformatting size and pixel format of :class:`.VideoFrame`.

    It is most efficient to have a reformatter object for each set of parameters
    you will use as calling :meth:`reformat` will reconfigure the internal object.

    c                     t           j        5  t          t          j        | j                             d d d            d S # 1 swxY w Y   d S r   )r   nogilsws_free_contextaddressptr)selfs    r(   __dealloc__zVideoReformatter.__dealloc__   s    \ 	7 	7V^DH55666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s   'AAANr   c                 <   t          ||j        j                  }t          |t          |j        j                  }t          |t          |j        j                  }t          |t          t                    }t          |t          d          }t          |	t          d          }t          |
t          d          }t          |t          d          }||nd}||n|j        j        }||n|j        j        }|
du}|du}|                     ||||||||||||||          S )aw  Create a new :class:`VideoFrame` with the given width/height/format/colorspace.

        Returns the same frame untouched if nothing needs to be done to it.

        :param int width: New width, or ``None`` for the same width.
        :param int height: New height, or ``None`` for the same height.
        :param format: New format, or ``None`` for the same format.
        :type  format: :class:`.VideoFormat` or ``str``
        :param src_colorspace: Current colorspace, or ``None`` for the frame colorspace.
        :type  src_colorspace: :class:`Colorspace` or ``str``
        :param dst_colorspace: Desired colorspace, or ``None`` for the frame colorspace.
        :type  dst_colorspace: :class:`Colorspace` or ``str``
        :param interpolation: The interpolation method to use, or ``None`` for ``BILINEAR``.
        :type  interpolation: :class:`Interpolation` or ``str``
        :param src_color_range: Current color range, or ``None`` for the ``UNSPECIFIED``.
        :type  src_color_range: :class:`ColorRange` or ``str``
        :param dst_color_range: Desired color range, or ``None`` for the ``UNSPECIFIED``.
        :type  dst_color_range: :class:`ColorRange` or ``str``
        :param dst_color_trc: Desired transfer characteristic to tag on the output frame,
            or ``None`` to preserve the source frame's value. This sets frame metadata only;
            it does not perform a pixel-level transfer function conversion.
        :type  dst_color_trc: :class:`ColorTrc` or ``int``
        :param dst_color_primaries: Desired color primaries to tag on the output frame,
            or ``None`` to preserve the source frame's value.
        :type  dst_color_primaries: :class:`ColorPrimaries` or ``int``
        :param int threads: How many threads to use for scaling, or ``0`` for automatic
            selection based on the number of available CPUs. Defaults to ``0`` (auto).

        r   N)r   r   r   r   r*   r   r   r	   r   rA   rM   rq   widthheight	_reformat)r   r   r   r   r   src_colorspacedst_colorspaceinterpolationsrc_color_rangedst_color_rangedst_color_trcdst_color_primariesthreadsc_dst_formatc_src_colorspacec_dst_colorspacec_interpolationc_src_color_rangec_dst_color_rangec_dst_color_trcc_dst_color_primaries	c_threadsc_widthc_heightset_dst_color_trcset_dst_color_primariess                             r(   reformatzVideoReformatter.reformat   sF   X 'vu|/CDD.J	(<
 
 /J	(<
 
 .=,
 
 0QOO/QOO-mXqII 3!
 !
 ,3+>A	','8eeeio)/);vvAQ *7d)B/B$/N~~!#
 
 	
r'   r   r   
dst_formatr   r   r   r   r   r   r   r   r   r   c                    |j         j        dk     rt          d          t          j        t
          j        |j         j                  }||k    r2||j         j        k    r"||j         j        k    r||k    r||	k    r|s|s|S |j         j	        rt                      }t          t          j        |j         |j         d                     |j        |_        |                                 |}t          j        t
          j        |j         j                  }| j         t          j        k    r7t!                      | _         | j         t          j        k    rt#          d          || j         _        t          j        t          j        |          | j         _        t                      }|                    |           |                    |||           |j         j        }|j         j        }t3          |j         ||           t3          |j         ||	           t          j        5  t7          | j         |j         |j                   }d d d            n# 1 swxY w Y   ||j         _        ||j         _        t          |           |r)t          j        t
          j        |
          |j         _        |r)t          j        t
          j        |          |j         _        |S )Nr   zFrame does not have format set.zCould not allocate SwsContext) r   r   r   r   r   rG   AVPixelFormatr   r   hw_frames_ctxr   r   av_hwframe_transfer_datapts_init_user_attributesNULLsws_alloc_contextMemoryErrorr   uintflags_copy_internal_attributes_initr   r   r   r   sws_scale_frameAVColorTransferCharacteristic	color_trcAVColorPrimariescolor_primaries)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   
src_formatframe_sw	new_frameframe_src_colorspaceframe_src_color_rangerets                        r(   r   zVideoReformatter._reformat   s   $ 9a>???[!2EI4DEE
 *$$((%)***.00?22% 3+ 3 L9" 	J(**Hc28<ANNOOO 9HL**,,,ES%6	8HIIJ8v{""(**DHx6;&&!"ABBB"V[-@@ 1 3 3	++E222
E6222 271E27)2GeiIIIim^_MMM\ 	F 	F!$(IM59EEC	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F  4	 5	#  	&,k1=' 'IM# # 	,2K$&9- -IM) s   !III)NNNNNNNNNNN)r   r   r   r^   r   
VideoFramer   r   cfuncr   rG   r   bintr   r&   r'   r(   r   r      sS        7 7 7  S
 S
S
 S
 S
 S
j \NN zN 
	N
 %N 
N 
N zN  N  N zN $ZN ";N "(N N N N \N N Nr'   r   )enumr   r   cython.cimports.libavcimportslibavrG   cython.cimports.av.errorr   cython.cimports.av.video.formatr   r   cython.cimports.av.video.framer   r	   r*   rA   rM   rq   r   inlineobjectr   r   r   r   pointerAVFramer   cclassr   r&   r'   r(   <module>r      s          # # # # # # # # # . . . . . . D D D D D D D D < < < < < <; ; ; ; ;G ; ; ;       $/ / / / / / / /D D D D Dw D D D2> > > > >W > > >( II%I06
IZI I I  I F S-> 3CT      36>#+&&3
3 3 3 3 3, p p p p p p p p p pr'   