\hypertarget{classio_1_1agora_1_1base_1_1_texture_buffer}{}\doxysection{io.\+agora.\+base.\+Texture\+Buffer Class Reference}
\label{classio_1_1agora_1_1base_1_1_texture_buffer}\index{io.agora.base.TextureBuffer@{io.agora.base.TextureBuffer}}
Inheritance diagram for io.\+agora.\+base.\+Texture\+Buffer\+:\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[height=4.000000cm]{classio_1_1agora_1_1base_1_1_texture_buffer}
\end{center}
\end{figure}
\doxysubsection*{Public Member Functions}
\begin{DoxyCompactItemize}
\item 
\mbox{\hyperlink{classio_1_1agora_1_1base_1_1_texture_buffer_adf70ea24af31182008918fa10f560ded}{Texture\+Buffer}} (@Non\+Null javax.\+microedition.\+khronos.\+egl.\+E\+G\+L\+Context shared\+Context, int width, int height, \mbox{\hyperlink{enumio_1_1agora_1_1base_1_1_video_frame_1_1_texture_buffer_1_1_type}{Type}} type, int id, Matrix transform\+Matrix, @Nullable Handler to\+I420\+Handler, @Nullable Yuv\+Converter yuv\+Converter, @Nullable Runnable release\+Callback)
\item 
\mbox{\hyperlink{classio_1_1agora_1_1base_1_1_texture_buffer_a938dfdfa90966d5aebc4110be153ef34}{Texture\+Buffer}} (@Non\+Null android.\+opengl.\+E\+G\+L\+Context shared\+Context, int width, int height, \mbox{\hyperlink{enumio_1_1agora_1_1base_1_1_video_frame_1_1_texture_buffer_1_1_type}{Type}} type, int id, Matrix transform\+Matrix, @Nullable Handler to\+I420\+Handler, @Nullable Yuv\+Converter yuv\+Converter, @Nullable Runnable release\+Callback)
\item 
\mbox{\Hypertarget{classio_1_1agora_1_1base_1_1_texture_buffer_a821bfd98f16fbbb30010fadb8cf74546}\label{classio_1_1agora_1_1base_1_1_texture_buffer_a821bfd98f16fbbb30010fadb8cf74546}} 
{\bfseries Texture\+Buffer} (@Non\+Null Egl\+Base.\+Context egl\+Context, int width, int height, \mbox{\hyperlink{enumio_1_1agora_1_1base_1_1_video_frame_1_1_texture_buffer_1_1_type}{Type}} type, int id, Matrix transform\+Matrix, @Non\+Null Handler to\+I420\+Handler, @Non\+Null Yuv\+Converter yuv\+Converter, @Nullable Runnable release\+Callback)
\item 
\mbox{\hyperlink{classio_1_1agora_1_1base_1_1_texture_buffer_abd4b449cbdc8bb4800133e11347ad828}{Texture\+Buffer}} (@Non\+Null Egl\+Base.\+Context egl\+Context, int width, int height, \mbox{\hyperlink{enumio_1_1agora_1_1base_1_1_video_frame_1_1_texture_buffer_1_1_type}{Type}} type, int id, Matrix transform\+Matrix, @Nullable Handler to\+I420\+Handler, @Nullable Yuv\+Converter yuv\+Converter, @Nullable Runnable release\+Callback, @Nullable Texture\+Buffer\+Pool source\+Texture\+Pool, int sequence)
\item 
\mbox{\Hypertarget{classio_1_1agora_1_1base_1_1_texture_buffer_a85421bfd8d267e070a5599b7f8ae0d53}\label{classio_1_1agora_1_1base_1_1_texture_buffer_a85421bfd8d267e070a5599b7f8ae0d53}} 
\mbox{\hyperlink{classio_1_1agora_1_1base_1_1_texture_buffer}{Texture\+Buffer}} {\bfseries with\+Sequence} (int sequence)
\item 
\mbox{\Hypertarget{classio_1_1agora_1_1base_1_1_texture_buffer_a6bed4640d95142eae77aec495bea34c5}\label{classio_1_1agora_1_1base_1_1_texture_buffer_a6bed4640d95142eae77aec495bea34c5}} 
Video\+Frame.\+Texture\+Buffer.\+Type {\bfseries get\+Type} ()
\item 
int \mbox{\hyperlink{classio_1_1agora_1_1base_1_1_texture_buffer_a529164da2e1ad01e850f3138402a564f}{get\+Texture\+Id}} ()
\item 
Matrix \mbox{\hyperlink{classio_1_1agora_1_1base_1_1_texture_buffer_afcefd3ab72ed1170e68973d729c5c0f6}{get\+Transform\+Matrix}} ()
\item 
Egl\+Base.\+Context \mbox{\hyperlink{classio_1_1agora_1_1base_1_1_texture_buffer_a340c98bbedc6e1628ebb9ceb18da3214}{get\+Egl\+Base\+Context}} ()
\item 
\mbox{\Hypertarget{classio_1_1agora_1_1base_1_1_texture_buffer_ac4ea1454e02e40b25ce67cb8b20b309a}\label{classio_1_1agora_1_1base_1_1_texture_buffer_ac4ea1454e02e40b25ce67cb8b20b309a}} 
Object {\bfseries get\+Source\+Texture\+Pool} ()
\item 
\mbox{\Hypertarget{classio_1_1agora_1_1base_1_1_texture_buffer_a89002a40be180b7e8f02eba5f76f37fa}\label{classio_1_1agora_1_1base_1_1_texture_buffer_a89002a40be180b7e8f02eba5f76f37fa}} 
long {\bfseries get\+Native\+Egl\+Context} ()
\item 
\mbox{\Hypertarget{classio_1_1agora_1_1base_1_1_texture_buffer_a823fcdc92ea1101a851f52d162adac68}\label{classio_1_1agora_1_1base_1_1_texture_buffer_a823fcdc92ea1101a851f52d162adac68}} 
int {\bfseries get\+Egl\+Context\+Type} ()
\item 
\mbox{\Hypertarget{classio_1_1agora_1_1base_1_1_texture_buffer_a965c2923ebc686abef2e856130f5f18a}\label{classio_1_1agora_1_1base_1_1_texture_buffer_a965c2923ebc686abef2e856130f5f18a}} 
float\mbox{[}$\,$\mbox{]} {\bfseries get\+Transform\+Matrix\+Array} ()
\item 
int \mbox{\hyperlink{classio_1_1agora_1_1base_1_1_texture_buffer_adf0aef647918aa4669b25f120317da72}{get\+Sequence}} ()
\item 
int \mbox{\hyperlink{classio_1_1agora_1_1base_1_1_texture_buffer_a60017dee95042fd977b9db5b21681889}{get\+Width}} ()
\item 
int \mbox{\hyperlink{classio_1_1agora_1_1base_1_1_texture_buffer_ae0000bf276c6c737c96c249f8ef1576c}{get\+Height}} ()
\item 
\mbox{\Hypertarget{classio_1_1agora_1_1base_1_1_texture_buffer_a99a37698bae16fe5e76db2b792d7dfcd}\label{classio_1_1agora_1_1base_1_1_texture_buffer_a99a37698bae16fe5e76db2b792d7dfcd}} 
Yuv\+Converter {\bfseries get\+Yuv\+Converter} ()
\item 
\mbox{\Hypertarget{classio_1_1agora_1_1base_1_1_texture_buffer_a51ae68395a344f1897c7fbd5859adce9}\label{classio_1_1agora_1_1base_1_1_texture_buffer_a51ae68395a344f1897c7fbd5859adce9}} 
Handler {\bfseries get\+To\+I420\+Handler} ()
\item 
Video\+Frame.\+Buffer \mbox{\hyperlink{classio_1_1agora_1_1base_1_1_texture_buffer_a3cdde866bcca847685814d32c4470474}{apply\+New\+I420\+Handler}} ( @Non\+Null Handler to\+I420\+Handler, @Non\+Null Yuv\+Converter yuv\+Converter)
\item 
Video\+Frame.\+I420\+Buffer \mbox{\hyperlink{classio_1_1agora_1_1base_1_1_texture_buffer_af6e9b29e43fe6a9b448076be2834c102}{to\+I420}} ()
\item 
void \mbox{\hyperlink{classio_1_1agora_1_1base_1_1_texture_buffer_ad2f1e99893f63361a6890a7ebfbc9545}{retain}} ()
\item 
void \mbox{\hyperlink{classio_1_1agora_1_1base_1_1_texture_buffer_a871a2d31cdfc3de2528357783deb553e}{release}} ()
\item 
Video\+Frame.\+Buffer \mbox{\hyperlink{classio_1_1agora_1_1base_1_1_texture_buffer_a6e5ac394e14c1b038cd41c7c37edbe9f}{crop\+And\+Scale}} (int cropX, int cropY, int crop\+Width, int crop\+Height, int scale\+Width, int scale\+Height)
\item 
Video\+Frame.\+Buffer \mbox{\hyperlink{classio_1_1agora_1_1base_1_1_texture_buffer_aa316631527a6aa4b402565b80a78e62d}{mirror}} (int frame\+Rotation)
\item 
Video\+Frame.\+Buffer \mbox{\hyperlink{classio_1_1agora_1_1base_1_1_texture_buffer_a999e9cc35a490aaa5da8e46ea76f947c}{rotate}} (int frame\+Rotation)
\item 
Video\+Frame.\+Buffer \mbox{\hyperlink{classio_1_1agora_1_1base_1_1_texture_buffer_adf327ac14ddac885c68c7be2e5aedead}{transform}} (int cropX, int cropY, int crop\+Width, int crop\+Height, int scale\+Width, int scale\+Height, int rotation)
\item 
\mbox{\hyperlink{classio_1_1agora_1_1base_1_1_texture_buffer}{Texture\+Buffer}} \mbox{\hyperlink{classio_1_1agora_1_1base_1_1_texture_buffer_ab40c00bcf146c79bc3150e30f6ea18a5}{apply\+Transform\+Matrix}} (Matrix transform\+Matrix, int new\+Width, int new\+Height)
\item 
\mbox{\hyperlink{classio_1_1agora_1_1base_1_1_texture_buffer}{Texture\+Buffer}} \mbox{\hyperlink{classio_1_1agora_1_1base_1_1_texture_buffer_a9d50809daaf766c1f91e7cae20391dfa}{apply\+New\+Texture\+Info}} (\mbox{\hyperlink{enumio_1_1agora_1_1base_1_1_video_frame_1_1_texture_buffer_1_1_type}{Type}} new\+Type, int new\+Texture\+Id, Matrix new\+Matrix, int new\+Width, int new\+Height)
\end{DoxyCompactItemize}


\doxysubsection{Detailed Description}
Android texture buffer that glues together the necessary information together with a generic release callback. To\+I420() is implemented by providing a Handler and a Yuv\+Converter. 

\doxysubsection{Constructor \& Destructor Documentation}
\mbox{\Hypertarget{classio_1_1agora_1_1base_1_1_texture_buffer_adf70ea24af31182008918fa10f560ded}\label{classio_1_1agora_1_1base_1_1_texture_buffer_adf70ea24af31182008918fa10f560ded}} 
\index{io.agora.base.TextureBuffer@{io.agora.base.TextureBuffer}!TextureBuffer@{TextureBuffer}}
\index{TextureBuffer@{TextureBuffer}!io.agora.base.TextureBuffer@{io.agora.base.TextureBuffer}}
\doxysubsubsection{\texorpdfstring{TextureBuffer()}{TextureBuffer()}\hspace{0.1cm}{\footnotesize\ttfamily [1/3]}}
{\footnotesize\ttfamily io.\+agora.\+base.\+Texture\+Buffer.\+Texture\+Buffer (\begin{DoxyParamCaption}\item[{@Non\+Null javax.\+microedition.\+khronos.\+egl.\+E\+G\+L\+Context}]{shared\+Context,  }\item[{int}]{width,  }\item[{int}]{height,  }\item[{\mbox{\hyperlink{enumio_1_1agora_1_1base_1_1_video_frame_1_1_texture_buffer_1_1_type}{Type}}}]{type,  }\item[{int}]{id,  }\item[{Matrix}]{transform\+Matrix,  }\item[{@Nullable Handler}]{to\+I420\+Handler,  }\item[{@Nullable Yuv\+Converter}]{yuv\+Converter,  }\item[{@Nullable Runnable}]{release\+Callback }\end{DoxyParamCaption})}

Constructs a new \mbox{\hyperlink{classio_1_1agora_1_1base_1_1_texture_buffer}{Texture\+Buffer}} backed by the given texture id.


\begin{DoxyParams}{Parameters}
{\em shared\+Context} & egl 1.\+0 E\+G\+L\+Context \mbox{\hyperlink{}{javax.\+microedition.\+khronos.\+egl.\+E\+G\+L\+Context}} \\
\hline
{\em width} & width \\
\hline
{\em height} & height \\
\hline
{\em type} & texture type \mbox{\hyperlink{}{Texture\+Buffer.\+Type}} \\
\hline
{\em id} & texture id \\
\hline
{\em transform\+Matrix} & the transform matrix associated with the texture id \\
\hline
{\em to\+I420\+Handler} & nullable, the \mbox{\hyperlink{}{Handler}} related to the GL thread which create the texture \\
\hline
{\em yuv\+Converter} & nullable, yuv converter \mbox{\hyperlink{}{Yuv\+Converter}} \\
\hline
{\em release\+Callback} & nullable, invoked the this buffer released.\\
\hline
\end{DoxyParams}
@api\+Note either \mbox{\hyperlink{}{to\+I420\+Handler}} or \mbox{\hyperlink{}{yuv\+Converter}} is null, \mbox{\hyperlink{classio_1_1agora_1_1base_1_1_texture_buffer_af6e9b29e43fe6a9b448076be2834c102}{to\+I420()}} will throw exception, but sdk will try to complete these two parameter in some inner component. \mbox{\Hypertarget{classio_1_1agora_1_1base_1_1_texture_buffer_a938dfdfa90966d5aebc4110be153ef34}\label{classio_1_1agora_1_1base_1_1_texture_buffer_a938dfdfa90966d5aebc4110be153ef34}} 
\index{io.agora.base.TextureBuffer@{io.agora.base.TextureBuffer}!TextureBuffer@{TextureBuffer}}
\index{TextureBuffer@{TextureBuffer}!io.agora.base.TextureBuffer@{io.agora.base.TextureBuffer}}
\doxysubsubsection{\texorpdfstring{TextureBuffer()}{TextureBuffer()}\hspace{0.1cm}{\footnotesize\ttfamily [2/3]}}
{\footnotesize\ttfamily io.\+agora.\+base.\+Texture\+Buffer.\+Texture\+Buffer (\begin{DoxyParamCaption}\item[{@Non\+Null android.\+opengl.\+E\+G\+L\+Context}]{shared\+Context,  }\item[{int}]{width,  }\item[{int}]{height,  }\item[{\mbox{\hyperlink{enumio_1_1agora_1_1base_1_1_video_frame_1_1_texture_buffer_1_1_type}{Type}}}]{type,  }\item[{int}]{id,  }\item[{Matrix}]{transform\+Matrix,  }\item[{@Nullable Handler}]{to\+I420\+Handler,  }\item[{@Nullable Yuv\+Converter}]{yuv\+Converter,  }\item[{@Nullable Runnable}]{release\+Callback }\end{DoxyParamCaption})}

Constructs a new \mbox{\hyperlink{classio_1_1agora_1_1base_1_1_texture_buffer}{Texture\+Buffer}} backed by the given texture id.


\begin{DoxyParams}{Parameters}
{\em shared\+Context} & egl 1.\+4 E\+G\+L\+Contextt \mbox{\hyperlink{}{android.\+opengl.\+E\+G\+L\+Context}} \\
\hline
{\em width} & width \\
\hline
{\em height} & height \\
\hline
{\em type} & texture type \mbox{\hyperlink{}{Texture\+Buffer.\+Type}} \\
\hline
{\em id} & texture id \\
\hline
{\em transform\+Matrix} & the transform matrix associated with the texture id \\
\hline
{\em to\+I420\+Handler} & nullable, the \mbox{\hyperlink{}{Handler}} related to the GL thread which create the texture \\
\hline
{\em yuv\+Converter} & nullable, yuv converter \mbox{\hyperlink{}{Yuv\+Converter}} \\
\hline
{\em release\+Callback} & nullable, invoked the this buffer released.\\
\hline
\end{DoxyParams}
@api\+Note either \mbox{\hyperlink{}{to\+I420\+Handler}} or \mbox{\hyperlink{}{yuv\+Converter}} is null, \mbox{\hyperlink{classio_1_1agora_1_1base_1_1_texture_buffer_af6e9b29e43fe6a9b448076be2834c102}{to\+I420()}} will throw exception, but sdk will try to complete these two parameter in some inner component. \mbox{\Hypertarget{classio_1_1agora_1_1base_1_1_texture_buffer_abd4b449cbdc8bb4800133e11347ad828}\label{classio_1_1agora_1_1base_1_1_texture_buffer_abd4b449cbdc8bb4800133e11347ad828}} 
\index{io.agora.base.TextureBuffer@{io.agora.base.TextureBuffer}!TextureBuffer@{TextureBuffer}}
\index{TextureBuffer@{TextureBuffer}!io.agora.base.TextureBuffer@{io.agora.base.TextureBuffer}}
\doxysubsubsection{\texorpdfstring{TextureBuffer()}{TextureBuffer()}\hspace{0.1cm}{\footnotesize\ttfamily [3/3]}}
{\footnotesize\ttfamily io.\+agora.\+base.\+Texture\+Buffer.\+Texture\+Buffer (\begin{DoxyParamCaption}\item[{@Non\+Null Egl\+Base.\+Context}]{egl\+Context,  }\item[{int}]{width,  }\item[{int}]{height,  }\item[{\mbox{\hyperlink{enumio_1_1agora_1_1base_1_1_video_frame_1_1_texture_buffer_1_1_type}{Type}}}]{type,  }\item[{int}]{id,  }\item[{Matrix}]{transform\+Matrix,  }\item[{@Nullable Handler}]{to\+I420\+Handler,  }\item[{@Nullable Yuv\+Converter}]{yuv\+Converter,  }\item[{@Nullable Runnable}]{release\+Callback,  }\item[{@Nullable Texture\+Buffer\+Pool}]{source\+Texture\+Pool,  }\item[{int}]{sequence }\end{DoxyParamCaption})}

Constructs a new \mbox{\hyperlink{classio_1_1agora_1_1base_1_1_texture_buffer}{Texture\+Buffer}} backed by the given texture id


\begin{DoxyParams}{Parameters}
{\em egl\+Context} & wrapped egl\+Context \\
\hline
{\em width} & width \\
\hline
{\em height} & height \\
\hline
{\em type} & texture type \mbox{\hyperlink{}{Texture\+Buffer.\+Type}} \\
\hline
{\em id} & texture id \\
\hline
{\em transform\+Matrix} & the transform matrix associated with the texture id \\
\hline
{\em to\+I420\+Handler} & nullable, the \mbox{\hyperlink{}{Handler}} related to the GL thread which create the texture \\
\hline
{\em yuv\+Converter} & nullable, yuv converter \mbox{\hyperlink{}{Yuv\+Converter}} \\
\hline
{\em release\+Callback} & nullable, invoked the this buffer released.\\
\hline
\end{DoxyParams}
@api\+Note either \mbox{\hyperlink{}{to\+I420\+Handler}} or \mbox{\hyperlink{}{yuv\+Converter}} is null, \mbox{\hyperlink{classio_1_1agora_1_1base_1_1_texture_buffer_af6e9b29e43fe6a9b448076be2834c102}{to\+I420()}} will throw exception, but sdk will try to complete these two parameter in some inner component. 

\doxysubsection{Member Function Documentation}
\mbox{\Hypertarget{classio_1_1agora_1_1base_1_1_texture_buffer_a529164da2e1ad01e850f3138402a564f}\label{classio_1_1agora_1_1base_1_1_texture_buffer_a529164da2e1ad01e850f3138402a564f}} 
\index{io.agora.base.TextureBuffer@{io.agora.base.TextureBuffer}!getTextureId@{getTextureId}}
\index{getTextureId@{getTextureId}!io.agora.base.TextureBuffer@{io.agora.base.TextureBuffer}}
\doxysubsubsection{\texorpdfstring{getTextureId()}{getTextureId()}}
{\footnotesize\ttfamily int io.\+agora.\+base.\+Texture\+Buffer.\+get\+Texture\+Id (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}

\begin{DoxyReturn}{Returns}
texture id 
\end{DoxyReturn}


Implements \mbox{\hyperlink{interfaceio_1_1agora_1_1base_1_1_video_frame_1_1_texture_buffer_a6ba9c5f5b12076dbe0de0fc85424e03d}{io.\+agora.\+base.\+Video\+Frame.\+Texture\+Buffer}}.

\mbox{\Hypertarget{classio_1_1agora_1_1base_1_1_texture_buffer_afcefd3ab72ed1170e68973d729c5c0f6}\label{classio_1_1agora_1_1base_1_1_texture_buffer_afcefd3ab72ed1170e68973d729c5c0f6}} 
\index{io.agora.base.TextureBuffer@{io.agora.base.TextureBuffer}!getTransformMatrix@{getTransformMatrix}}
\index{getTransformMatrix@{getTransformMatrix}!io.agora.base.TextureBuffer@{io.agora.base.TextureBuffer}}
\doxysubsubsection{\texorpdfstring{getTransformMatrix()}{getTransformMatrix()}}
{\footnotesize\ttfamily Matrix io.\+agora.\+base.\+Texture\+Buffer.\+get\+Transform\+Matrix (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}

Retrieve the transform matrix associated with the frame. This transform matrix maps 2D homogeneous coordinates of the form (s, t, 1) with s and t in the inclusive range \mbox{[}0, 1\mbox{]} to the coordinate that should be used to sample that location from the buffer. 

Implements \mbox{\hyperlink{interfaceio_1_1agora_1_1base_1_1_video_frame_1_1_texture_buffer_aed49ca148b1a1d4bfc2339fb25631801}{io.\+agora.\+base.\+Video\+Frame.\+Texture\+Buffer}}.

\mbox{\Hypertarget{classio_1_1agora_1_1base_1_1_texture_buffer_a340c98bbedc6e1628ebb9ceb18da3214}\label{classio_1_1agora_1_1base_1_1_texture_buffer_a340c98bbedc6e1628ebb9ceb18da3214}} 
\index{io.agora.base.TextureBuffer@{io.agora.base.TextureBuffer}!getEglBaseContext@{getEglBaseContext}}
\index{getEglBaseContext@{getEglBaseContext}!io.agora.base.TextureBuffer@{io.agora.base.TextureBuffer}}
\doxysubsubsection{\texorpdfstring{getEglBaseContext()}{getEglBaseContext()}}
{\footnotesize\ttfamily Egl\+Base.\+Context io.\+agora.\+base.\+Texture\+Buffer.\+get\+Egl\+Base\+Context (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}

Retrieve the wrapped eglcontext \mbox{\hyperlink{}{Egl\+Base.\+Context}} 

Implements \mbox{\hyperlink{interfaceio_1_1agora_1_1base_1_1_video_frame_1_1_texture_buffer_ab5f83480d469934e19d919565a045f70}{io.\+agora.\+base.\+Video\+Frame.\+Texture\+Buffer}}.

\mbox{\Hypertarget{classio_1_1agora_1_1base_1_1_texture_buffer_adf0aef647918aa4669b25f120317da72}\label{classio_1_1agora_1_1base_1_1_texture_buffer_adf0aef647918aa4669b25f120317da72}} 
\index{io.agora.base.TextureBuffer@{io.agora.base.TextureBuffer}!getSequence@{getSequence}}
\index{getSequence@{getSequence}!io.agora.base.TextureBuffer@{io.agora.base.TextureBuffer}}
\doxysubsubsection{\texorpdfstring{getSequence()}{getSequence()}}
{\footnotesize\ttfamily int io.\+agora.\+base.\+Texture\+Buffer.\+get\+Sequence (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}

Sequence number managed by texture buffer creator. 

Implements \mbox{\hyperlink{interfaceio_1_1agora_1_1base_1_1_video_frame_1_1_texture_buffer_ab6799dee9357358d7bd2c17f1e6f0f75}{io.\+agora.\+base.\+Video\+Frame.\+Texture\+Buffer}}.

\mbox{\Hypertarget{classio_1_1agora_1_1base_1_1_texture_buffer_a60017dee95042fd977b9db5b21681889}\label{classio_1_1agora_1_1base_1_1_texture_buffer_a60017dee95042fd977b9db5b21681889}} 
\index{io.agora.base.TextureBuffer@{io.agora.base.TextureBuffer}!getWidth@{getWidth}}
\index{getWidth@{getWidth}!io.agora.base.TextureBuffer@{io.agora.base.TextureBuffer}}
\doxysubsubsection{\texorpdfstring{getWidth()}{getWidth()}}
{\footnotesize\ttfamily int io.\+agora.\+base.\+Texture\+Buffer.\+get\+Width (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}

Resolution of the buffer in pixels.

\begin{DoxyReturn}{Returns}
width. 
\end{DoxyReturn}


Implements \mbox{\hyperlink{interfaceio_1_1agora_1_1base_1_1_video_frame_1_1_buffer_a23ed478a1b2c5401e0ca1825342a23f9}{io.\+agora.\+base.\+Video\+Frame.\+Buffer}}.

\mbox{\Hypertarget{classio_1_1agora_1_1base_1_1_texture_buffer_ae0000bf276c6c737c96c249f8ef1576c}\label{classio_1_1agora_1_1base_1_1_texture_buffer_ae0000bf276c6c737c96c249f8ef1576c}} 
\index{io.agora.base.TextureBuffer@{io.agora.base.TextureBuffer}!getHeight@{getHeight}}
\index{getHeight@{getHeight}!io.agora.base.TextureBuffer@{io.agora.base.TextureBuffer}}
\doxysubsubsection{\texorpdfstring{getHeight()}{getHeight()}}
{\footnotesize\ttfamily int io.\+agora.\+base.\+Texture\+Buffer.\+get\+Height (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}

Resolution of the buffer in pixels.

\begin{DoxyReturn}{Returns}
height. 
\end{DoxyReturn}


Implements \mbox{\hyperlink{interfaceio_1_1agora_1_1base_1_1_video_frame_1_1_buffer_a2a2b6e87e00209dd52a6dcee781d7014}{io.\+agora.\+base.\+Video\+Frame.\+Buffer}}.

\mbox{\Hypertarget{classio_1_1agora_1_1base_1_1_texture_buffer_a3cdde866bcca847685814d32c4470474}\label{classio_1_1agora_1_1base_1_1_texture_buffer_a3cdde866bcca847685814d32c4470474}} 
\index{io.agora.base.TextureBuffer@{io.agora.base.TextureBuffer}!applyNewI420Handler@{applyNewI420Handler}}
\index{applyNewI420Handler@{applyNewI420Handler}!io.agora.base.TextureBuffer@{io.agora.base.TextureBuffer}}
\doxysubsubsection{\texorpdfstring{applyNewI420Handler()}{applyNewI420Handler()}}
{\footnotesize\ttfamily Video\+Frame.\+Buffer io.\+agora.\+base.\+Texture\+Buffer.\+apply\+New\+I420\+Handler (\begin{DoxyParamCaption}\item[{@Non\+Null Handler}]{to\+I420\+Handler,  }\item[{@Non\+Null Yuv\+Converter}]{yuv\+Converter }\end{DoxyParamCaption})}

Create a new \mbox{\hyperlink{classio_1_1agora_1_1base_1_1_texture_buffer}{Texture\+Buffer}} with an applied transform to\+I420\+Handler and a new yuv\+Converter. The existing buffer is unchanged. \mbox{\Hypertarget{classio_1_1agora_1_1base_1_1_texture_buffer_af6e9b29e43fe6a9b448076be2834c102}\label{classio_1_1agora_1_1base_1_1_texture_buffer_af6e9b29e43fe6a9b448076be2834c102}} 
\index{io.agora.base.TextureBuffer@{io.agora.base.TextureBuffer}!toI420@{toI420}}
\index{toI420@{toI420}!io.agora.base.TextureBuffer@{io.agora.base.TextureBuffer}}
\doxysubsubsection{\texorpdfstring{toI420()}{toI420()}}
{\footnotesize\ttfamily Video\+Frame.\+I420\+Buffer io.\+agora.\+base.\+Texture\+Buffer.\+to\+I420 (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}

Returns a memory-\/backed frame in I420 format. If the pixel data is in another format, a conversion will take place. All implementations must provide a fallback to I420 for compatibility with e.\+g. the internal Web\+R\+TC software encoders.

\begin{DoxyNote}{Note}
invoke \mbox{\hyperlink{classio_1_1agora_1_1base_1_1_texture_buffer_a871a2d31cdfc3de2528357783deb553e}{release()}} to release the memory or decreases ref count by one, otherwise memory may be leaked. 
\end{DoxyNote}


Implements \mbox{\hyperlink{interfaceio_1_1agora_1_1base_1_1_video_frame_1_1_buffer_a52b3ce61de7817c9524281c28bfeaaa7}{io.\+agora.\+base.\+Video\+Frame.\+Buffer}}.

\mbox{\Hypertarget{classio_1_1agora_1_1base_1_1_texture_buffer_ad2f1e99893f63361a6890a7ebfbc9545}\label{classio_1_1agora_1_1base_1_1_texture_buffer_ad2f1e99893f63361a6890a7ebfbc9545}} 
\index{io.agora.base.TextureBuffer@{io.agora.base.TextureBuffer}!retain@{retain}}
\index{retain@{retain}!io.agora.base.TextureBuffer@{io.agora.base.TextureBuffer}}
\doxysubsubsection{\texorpdfstring{retain()}{retain()}}
{\footnotesize\ttfamily void io.\+agora.\+base.\+Texture\+Buffer.\+retain (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}

Increases ref count by one. 

Implements \mbox{\hyperlink{interfaceio_1_1agora_1_1base_1_1_video_frame_1_1_buffer_a947158565c8906f669d6befb328a7d22}{io.\+agora.\+base.\+Video\+Frame.\+Buffer}}.

\mbox{\Hypertarget{classio_1_1agora_1_1base_1_1_texture_buffer_a871a2d31cdfc3de2528357783deb553e}\label{classio_1_1agora_1_1base_1_1_texture_buffer_a871a2d31cdfc3de2528357783deb553e}} 
\index{io.agora.base.TextureBuffer@{io.agora.base.TextureBuffer}!release@{release}}
\index{release@{release}!io.agora.base.TextureBuffer@{io.agora.base.TextureBuffer}}
\doxysubsubsection{\texorpdfstring{release()}{release()}}
{\footnotesize\ttfamily void io.\+agora.\+base.\+Texture\+Buffer.\+release (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}

Decreases ref count by one. When the ref count reaches zero, resources related to the object will be freed. 

Implements \mbox{\hyperlink{interfaceio_1_1agora_1_1base_1_1_video_frame_1_1_buffer_a53f5b85a4c0ba647c39ee9cdf5567257}{io.\+agora.\+base.\+Video\+Frame.\+Buffer}}.

\mbox{\Hypertarget{classio_1_1agora_1_1base_1_1_texture_buffer_a6e5ac394e14c1b038cd41c7c37edbe9f}\label{classio_1_1agora_1_1base_1_1_texture_buffer_a6e5ac394e14c1b038cd41c7c37edbe9f}} 
\index{io.agora.base.TextureBuffer@{io.agora.base.TextureBuffer}!cropAndScale@{cropAndScale}}
\index{cropAndScale@{cropAndScale}!io.agora.base.TextureBuffer@{io.agora.base.TextureBuffer}}
\doxysubsubsection{\texorpdfstring{cropAndScale()}{cropAndScale()}}
{\footnotesize\ttfamily Video\+Frame.\+Buffer io.\+agora.\+base.\+Texture\+Buffer.\+crop\+And\+Scale (\begin{DoxyParamCaption}\item[{int}]{cropX,  }\item[{int}]{cropY,  }\item[{int}]{crop\+Width,  }\item[{int}]{crop\+Height,  }\item[{int}]{scale\+Width,  }\item[{int}]{scale\+Height }\end{DoxyParamCaption})}

Crops a region defined by $\vert$cropx$\vert$, $\vert$crop\+Y$\vert$, $\vert$crop\+Width$\vert$ and $\vert$crop\+Height$\vert$. Scales it to size $\vert$scale\+Width$\vert$ x $\vert$scale\+Height$\vert$.

\begin{DoxyReturn}{Returns}
a new buffer which match the request, null if not supported.
\end{DoxyReturn}
\begin{DoxyNote}{Note}
invoke \mbox{\hyperlink{classio_1_1agora_1_1base_1_1_texture_buffer_a871a2d31cdfc3de2528357783deb553e}{release()}} to release the memory or decreases ref count by one, otherwise memory may be leaked. 
\end{DoxyNote}


Implements \mbox{\hyperlink{interfaceio_1_1agora_1_1base_1_1_video_frame_1_1_buffer_a3dd7ca92b21f526856b4d24e3d65cc0a}{io.\+agora.\+base.\+Video\+Frame.\+Buffer}}.

\mbox{\Hypertarget{classio_1_1agora_1_1base_1_1_texture_buffer_aa316631527a6aa4b402565b80a78e62d}\label{classio_1_1agora_1_1base_1_1_texture_buffer_aa316631527a6aa4b402565b80a78e62d}} 
\index{io.agora.base.TextureBuffer@{io.agora.base.TextureBuffer}!mirror@{mirror}}
\index{mirror@{mirror}!io.agora.base.TextureBuffer@{io.agora.base.TextureBuffer}}
\doxysubsubsection{\texorpdfstring{mirror()}{mirror()}}
{\footnotesize\ttfamily Video\+Frame.\+Buffer io.\+agora.\+base.\+Texture\+Buffer.\+mirror (\begin{DoxyParamCaption}\item[{int}]{frame\+Rotation }\end{DoxyParamCaption})}

Apply mirror

\begin{DoxyReturn}{Returns}
a new buffer which match the request, null if not supported.
\end{DoxyReturn}
\begin{DoxyNote}{Note}
invoke \mbox{\hyperlink{classio_1_1agora_1_1base_1_1_texture_buffer_a871a2d31cdfc3de2528357783deb553e}{release()}} to release the memory or decreases ref count by one, otherwise memory may be leaked. 
\end{DoxyNote}


Implements \mbox{\hyperlink{interfaceio_1_1agora_1_1base_1_1_video_frame_1_1_buffer_a035a3f710625fc668f5594186d57b08c}{io.\+agora.\+base.\+Video\+Frame.\+Buffer}}.

\mbox{\Hypertarget{classio_1_1agora_1_1base_1_1_texture_buffer_a999e9cc35a490aaa5da8e46ea76f947c}\label{classio_1_1agora_1_1base_1_1_texture_buffer_a999e9cc35a490aaa5da8e46ea76f947c}} 
\index{io.agora.base.TextureBuffer@{io.agora.base.TextureBuffer}!rotate@{rotate}}
\index{rotate@{rotate}!io.agora.base.TextureBuffer@{io.agora.base.TextureBuffer}}
\doxysubsubsection{\texorpdfstring{rotate()}{rotate()}}
{\footnotesize\ttfamily Video\+Frame.\+Buffer io.\+agora.\+base.\+Texture\+Buffer.\+rotate (\begin{DoxyParamCaption}\item[{int}]{frame\+Rotation }\end{DoxyParamCaption})}

Apply rotate \begin{DoxyReturn}{Returns}
a new buffer which match the request, null if not supported.
\end{DoxyReturn}
\begin{DoxyNote}{Note}
invoke \mbox{\hyperlink{classio_1_1agora_1_1base_1_1_texture_buffer_a871a2d31cdfc3de2528357783deb553e}{release()}} to release the memory or decreases ref count by one, otherwise memory may be leaked. 
\end{DoxyNote}


Implements \mbox{\hyperlink{interfaceio_1_1agora_1_1base_1_1_video_frame_1_1_buffer_afdf60a0efe0e87e092ad84c4247fca32}{io.\+agora.\+base.\+Video\+Frame.\+Buffer}}.

\mbox{\Hypertarget{classio_1_1agora_1_1base_1_1_texture_buffer_adf327ac14ddac885c68c7be2e5aedead}\label{classio_1_1agora_1_1base_1_1_texture_buffer_adf327ac14ddac885c68c7be2e5aedead}} 
\index{io.agora.base.TextureBuffer@{io.agora.base.TextureBuffer}!transform@{transform}}
\index{transform@{transform}!io.agora.base.TextureBuffer@{io.agora.base.TextureBuffer}}
\doxysubsubsection{\texorpdfstring{transform()}{transform()}}
{\footnotesize\ttfamily Video\+Frame.\+Buffer io.\+agora.\+base.\+Texture\+Buffer.\+transform (\begin{DoxyParamCaption}\item[{int}]{cropX,  }\item[{int}]{cropY,  }\item[{int}]{crop\+Width,  }\item[{int}]{crop\+Height,  }\item[{int}]{scale\+Width,  }\item[{int}]{scale\+Height,  }\item[{int}]{frame\+Rotation }\end{DoxyParamCaption})}

Apply crop/scale/mirror/rotate \begin{DoxyReturn}{Returns}
a new buffer which match the request, null if not supported.
\end{DoxyReturn}
\begin{DoxyNote}{Note}
invoke \mbox{\hyperlink{classio_1_1agora_1_1base_1_1_texture_buffer_a871a2d31cdfc3de2528357783deb553e}{release()}} to release the memory or decreases ref count by one, otherwise memory may be leaked. 
\end{DoxyNote}


Implements \mbox{\hyperlink{interfaceio_1_1agora_1_1base_1_1_video_frame_1_1_buffer_a524ad2e6d965ea18870a4a504c115bf6}{io.\+agora.\+base.\+Video\+Frame.\+Buffer}}.

\mbox{\Hypertarget{classio_1_1agora_1_1base_1_1_texture_buffer_ab40c00bcf146c79bc3150e30f6ea18a5}\label{classio_1_1agora_1_1base_1_1_texture_buffer_ab40c00bcf146c79bc3150e30f6ea18a5}} 
\index{io.agora.base.TextureBuffer@{io.agora.base.TextureBuffer}!applyTransformMatrix@{applyTransformMatrix}}
\index{applyTransformMatrix@{applyTransformMatrix}!io.agora.base.TextureBuffer@{io.agora.base.TextureBuffer}}
\doxysubsubsection{\texorpdfstring{applyTransformMatrix()}{applyTransformMatrix()}}
{\footnotesize\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1base_1_1_texture_buffer}{Texture\+Buffer}} io.\+agora.\+base.\+Texture\+Buffer.\+apply\+Transform\+Matrix (\begin{DoxyParamCaption}\item[{Matrix}]{transform\+Matrix,  }\item[{int}]{new\+Width,  }\item[{int}]{new\+Height }\end{DoxyParamCaption})}

Create a new \mbox{\hyperlink{classio_1_1agora_1_1base_1_1_texture_buffer}{Texture\+Buffer}} with an applied transform matrix and a new size. The existing buffer is unchanged. The given transform matrix is applied first when texture coordinates are still in the unmodified \mbox{[}0, 1\mbox{]} range. \mbox{\Hypertarget{classio_1_1agora_1_1base_1_1_texture_buffer_a9d50809daaf766c1f91e7cae20391dfa}\label{classio_1_1agora_1_1base_1_1_texture_buffer_a9d50809daaf766c1f91e7cae20391dfa}} 
\index{io.agora.base.TextureBuffer@{io.agora.base.TextureBuffer}!applyNewTextureInfo@{applyNewTextureInfo}}
\index{applyNewTextureInfo@{applyNewTextureInfo}!io.agora.base.TextureBuffer@{io.agora.base.TextureBuffer}}
\doxysubsubsection{\texorpdfstring{applyNewTextureInfo()}{applyNewTextureInfo()}}
{\footnotesize\ttfamily \mbox{\hyperlink{classio_1_1agora_1_1base_1_1_texture_buffer}{Texture\+Buffer}} io.\+agora.\+base.\+Texture\+Buffer.\+apply\+New\+Texture\+Info (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{enumio_1_1agora_1_1base_1_1_video_frame_1_1_texture_buffer_1_1_type}{Type}}}]{new\+Type,  }\item[{int}]{new\+Texture\+Id,  }\item[{Matrix}]{new\+Matrix,  }\item[{int}]{new\+Width,  }\item[{int}]{new\+Height }\end{DoxyParamCaption})}

Create a new \mbox{\hyperlink{classio_1_1agora_1_1base_1_1_texture_buffer}{Texture\+Buffer}} with a new texture info. The existing buffer is unchanged and is reference counted by the new byffer. 