\hypertarget{classagora_1_1rtc_1_1_i_video_sink_base}{}\doxysection{agora\+::rtc\+::I\+Video\+Sink\+Base Class Reference}
\label{classagora_1_1rtc_1_1_i_video_sink_base}\index{agora::rtc::IVideoSinkBase@{agora::rtc::IVideoSinkBase}}


{\ttfamily \#include $<$N\+G\+I\+Agora\+Media\+Node.\+h$>$}

Inheritance diagram for agora\+::rtc\+::I\+Video\+Sink\+Base\+:\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[height=3.000000cm]{classagora_1_1rtc_1_1_i_video_sink_base}
\end{center}
\end{figure}
\doxysubsection*{Public Member Functions}
\begin{DoxyCompactItemize}
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_video_sink_base_aec09504aff2e94f275431d538ab53c36}{set\+Property}} (const char $\ast$key, const void $\ast$buf, int buf\+\_\+size)
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_video_sink_base_a1a7933272cc9af497aa724db5087ceda}{get\+Property}} (const char $\ast$key, void $\ast$buf, int buf\+\_\+size)
\item 
virtual int \mbox{\hyperlink{classagora_1_1rtc_1_1_i_video_sink_base_a12a4f7d2fd8bf581f81a56e937c2a322}{on\+Frame}} (const \mbox{\hyperlink{structagora_1_1media_1_1base_1_1_video_frame}{media\+::base\+::\+Video\+Frame}} \&video\+Frame)=0
\item 
virtual bool \mbox{\hyperlink{classagora_1_1rtc_1_1_i_video_sink_base_a875a77dfdbf0706a6d71d6d9a2268643}{is\+External\+Sink}} ()
\item 
virtual bool \mbox{\hyperlink{classagora_1_1rtc_1_1_i_video_sink_base_afca4e05be4bd7a24d50e9ac038f2b01d}{on\+Data\+Stream\+Will\+Start}} ()
\item 
virtual void \mbox{\hyperlink{classagora_1_1rtc_1_1_i_video_sink_base_a4a12ef488c44eb3146b39bb4ce78bc35}{on\+Data\+Stream\+Will\+Stop}} ()
\item 
virtual bool \mbox{\hyperlink{classagora_1_1rtc_1_1_i_video_sink_base_acf2bb41f83e69489a68ddb6b10bdc56c}{apply\+Mirror}} ()
\item 
virtual bool \mbox{\hyperlink{classagora_1_1rtc_1_1_i_video_sink_base_a4141b805ee0086239b3a5402070c4a54}{apply\+Rotation}} ()
\end{DoxyCompactItemize}


\doxysubsection{Detailed Description}
The {\ttfamily \mbox{\hyperlink{classagora_1_1rtc_1_1_i_video_sink_base}{I\+Video\+Sink\+Base}}} class is the base class for the custom video sink. 

\doxysubsection{Member Function Documentation}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_video_sink_base_aec09504aff2e94f275431d538ab53c36}\label{classagora_1_1rtc_1_1_i_video_sink_base_aec09504aff2e94f275431d538ab53c36}} 
\index{agora::rtc::IVideoSinkBase@{agora::rtc::IVideoSinkBase}!setProperty@{setProperty}}
\index{setProperty@{setProperty}!agora::rtc::IVideoSinkBase@{agora::rtc::IVideoSinkBase}}
\doxysubsubsection{\texorpdfstring{setProperty()}{setProperty()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Video\+Sink\+Base\+::set\+Property (\begin{DoxyParamCaption}\item[{const char $\ast$}]{key,  }\item[{const void $\ast$}]{buf,  }\item[{int}]{buf\+\_\+size }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}

Sets a private property in the {\ttfamily \mbox{\hyperlink{classagora_1_1rtc_1_1_i_video_filter}{I\+Video\+Filter}}} class.


\begin{DoxyParams}{Parameters}
{\em key} & The pointer to the property name. \\
\hline
{\em buf} & The pointer to the buffer of this private property. \\
\hline
{\em buf\+\_\+size} & The buffer size of this private property. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item The actual size of the private property, if the method call succeeds.
\item -\/1, if the method call fails. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_video_sink_base_a1a7933272cc9af497aa724db5087ceda}\label{classagora_1_1rtc_1_1_i_video_sink_base_a1a7933272cc9af497aa724db5087ceda}} 
\index{agora::rtc::IVideoSinkBase@{agora::rtc::IVideoSinkBase}!getProperty@{getProperty}}
\index{getProperty@{getProperty}!agora::rtc::IVideoSinkBase@{agora::rtc::IVideoSinkBase}}
\doxysubsubsection{\texorpdfstring{getProperty()}{getProperty()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Video\+Sink\+Base\+::get\+Property (\begin{DoxyParamCaption}\item[{const char $\ast$}]{key,  }\item[{void $\ast$}]{buf,  }\item[{int}]{buf\+\_\+size }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}

Gets a private property in the {\ttfamily \mbox{\hyperlink{classagora_1_1rtc_1_1_i_video_filter}{I\+Video\+Filter}}} class.


\begin{DoxyParams}{Parameters}
{\em key} & The pointer to the property name. \\
\hline
{\em buf} & The pointer to the buffer of this private property. \\
\hline
{\em buf\+\_\+size} & The buffer size of this private property. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item The actual size of the private property, if the method call succeeds.
\item -\/1, if the method call fails. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_video_sink_base_a12a4f7d2fd8bf581f81a56e937c2a322}\label{classagora_1_1rtc_1_1_i_video_sink_base_a12a4f7d2fd8bf581f81a56e937c2a322}} 
\index{agora::rtc::IVideoSinkBase@{agora::rtc::IVideoSinkBase}!onFrame@{onFrame}}
\index{onFrame@{onFrame}!agora::rtc::IVideoSinkBase@{agora::rtc::IVideoSinkBase}}
\doxysubsubsection{\texorpdfstring{onFrame()}{onFrame()}}
{\footnotesize\ttfamily virtual int agora\+::rtc\+::\+I\+Video\+Sink\+Base\+::on\+Frame (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{structagora_1_1media_1_1base_1_1_video_frame}{media\+::base\+::\+Video\+Frame}} \&}]{video\+Frame }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}

Occurs when the {\ttfamily \mbox{\hyperlink{classagora_1_1rtc_1_1_i_video_sink_base}{I\+Video\+Sink\+Base}}} object receives the video frame. 
\begin{DoxyParams}{Parameters}
{\em video\+Frame} & The reference to the video frame. \\
\hline
\end{DoxyParams}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_video_sink_base_a875a77dfdbf0706a6d71d6d9a2268643}\label{classagora_1_1rtc_1_1_i_video_sink_base_a875a77dfdbf0706a6d71d6d9a2268643}} 
\index{agora::rtc::IVideoSinkBase@{agora::rtc::IVideoSinkBase}!isExternalSink@{isExternalSink}}
\index{isExternalSink@{isExternalSink}!agora::rtc::IVideoSinkBase@{agora::rtc::IVideoSinkBase}}
\doxysubsubsection{\texorpdfstring{isExternalSink()}{isExternalSink()}}
{\footnotesize\ttfamily virtual bool agora\+::rtc\+::\+I\+Video\+Sink\+Base\+::is\+External\+Sink (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}

Used internally to distinguish between external and internal sinks. External application should not override this interface. \mbox{\Hypertarget{classagora_1_1rtc_1_1_i_video_sink_base_afca4e05be4bd7a24d50e9ac038f2b01d}\label{classagora_1_1rtc_1_1_i_video_sink_base_afca4e05be4bd7a24d50e9ac038f2b01d}} 
\index{agora::rtc::IVideoSinkBase@{agora::rtc::IVideoSinkBase}!onDataStreamWillStart@{onDataStreamWillStart}}
\index{onDataStreamWillStart@{onDataStreamWillStart}!agora::rtc::IVideoSinkBase@{agora::rtc::IVideoSinkBase}}
\doxysubsubsection{\texorpdfstring{onDataStreamWillStart()}{onDataStreamWillStart()}}
{\footnotesize\ttfamily virtual bool agora\+::rtc\+::\+I\+Video\+Sink\+Base\+::on\+Data\+Stream\+Will\+Start (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}

This function is invoked right before data stream starts. Custom sink can override this function for initialization. \begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item {\ttfamily true}, if initialization succeeds.
\item {\ttfamily false}, if initialization fails. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_video_sink_base_a4a12ef488c44eb3146b39bb4ce78bc35}\label{classagora_1_1rtc_1_1_i_video_sink_base_a4a12ef488c44eb3146b39bb4ce78bc35}} 
\index{agora::rtc::IVideoSinkBase@{agora::rtc::IVideoSinkBase}!onDataStreamWillStop@{onDataStreamWillStop}}
\index{onDataStreamWillStop@{onDataStreamWillStop}!agora::rtc::IVideoSinkBase@{agora::rtc::IVideoSinkBase}}
\doxysubsubsection{\texorpdfstring{onDataStreamWillStop()}{onDataStreamWillStop()}}
{\footnotesize\ttfamily virtual void agora\+::rtc\+::\+I\+Video\+Sink\+Base\+::on\+Data\+Stream\+Will\+Stop (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}

This function is invoked right before data stream stops. Custom sink can override this function for deinitialization. \mbox{\Hypertarget{classagora_1_1rtc_1_1_i_video_sink_base_acf2bb41f83e69489a68ddb6b10bdc56c}\label{classagora_1_1rtc_1_1_i_video_sink_base_acf2bb41f83e69489a68ddb6b10bdc56c}} 
\index{agora::rtc::IVideoSinkBase@{agora::rtc::IVideoSinkBase}!applyMirror@{applyMirror}}
\index{applyMirror@{applyMirror}!agora::rtc::IVideoSinkBase@{agora::rtc::IVideoSinkBase}}
\doxysubsubsection{\texorpdfstring{applyMirror()}{applyMirror()}}
{\footnotesize\ttfamily virtual bool agora\+::rtc\+::\+I\+Video\+Sink\+Base\+::apply\+Mirror (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}

Whether to mirror the video frame. \begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item true\+: mirror the video frame.
\item false\+: do not mirror the video frame. 
\end{DoxyItemize}
\end{DoxyReturn}
\mbox{\Hypertarget{classagora_1_1rtc_1_1_i_video_sink_base_a4141b805ee0086239b3a5402070c4a54}\label{classagora_1_1rtc_1_1_i_video_sink_base_a4141b805ee0086239b3a5402070c4a54}} 
\index{agora::rtc::IVideoSinkBase@{agora::rtc::IVideoSinkBase}!applyRotation@{applyRotation}}
\index{applyRotation@{applyRotation}!agora::rtc::IVideoSinkBase@{agora::rtc::IVideoSinkBase}}
\doxysubsubsection{\texorpdfstring{applyRotation()}{applyRotation()}}
{\footnotesize\ttfamily virtual bool agora\+::rtc\+::\+I\+Video\+Sink\+Base\+::apply\+Rotation (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [virtual]}}

Whether to rotate the video frame. \begin{DoxyReturn}{Returns}

\begin{DoxyItemize}
\item true\+: rotate the video frame.
\item false\+: do not rotate the video frame. 
\end{DoxyItemize}
\end{DoxyReturn}
