\section{\-Functions for \-Encoding}
\label{group__encfuncs}\index{\-Functions for Encoding@{\-Functions for Encoding}}
\subsection*{\-Functions for encoding}
\label{_amgrpc58fb8743a7ca83eb895d57e29e032c8}%
\-You must link to {\ttfamily libtheoraenc} and {\ttfamily libtheoradec} if you use any of the functions in this section.

\-The functions are listed in the order they are used in a typical encode. \-The basic steps are\-:
\begin{DoxyItemize}
\item \-Fill in a \doxyref{th\-\_\-info}{p.}{structth__info} structure with details on the format of the video you wish to encode.
\item \-Allocate a \doxyref{th\-\_\-enc\-\_\-ctx}{p.}{theoraenc_8h_af5cc40472b925456d42526a035d66edd} handle with \doxyref{th\-\_\-encode\-\_\-alloc()}{p.}{group__encfuncs_gaa91e47bc9dd5f6ee52045bd7b815e5a7}.
\item \-Perform any additional encoder configuration required with \doxyref{th\-\_\-encode\-\_\-ctl()}{p.}{group__encfuncs_ga3a427f6514dfdc01ea72172c469d51d9}.
\item \-Repeatedly call \doxyref{th\-\_\-encode\-\_\-flushheader()}{p.}{group__encfuncs_ga9439d61b566039d194ff782681fbc408} to retrieve all the header packets.
\item \-For each uncompressed frame\-:
\begin{DoxyItemize}
\item \-Submit the uncompressed frame via \doxyref{th\-\_\-encode\-\_\-ycbcr\-\_\-in()}{p.}{group__encfuncs_gadbe7dd66b411c2d61ab8153c15308750}
\item \-Repeatedly call \doxyref{th\-\_\-encode\-\_\-packetout()}{p.}{group__encfuncs_ga96d8ac1dda53187455352f99bbb5b04b} to retrieve any video data packets that are ready.
\end{DoxyItemize}
\item \-Call \doxyref{th\-\_\-encode\-\_\-free()}{p.}{group__encfuncs_ga36b23d216532231925c4107894204680} to release all encoder memory. 
\end{DoxyItemize}\begin{DoxyCompactItemize}
\item 
{\bf th\-\_\-enc\-\_\-ctx} $\ast$ {\bf th\-\_\-encode\-\_\-alloc} (const {\bf th\-\_\-info} $\ast$\-\_\-info)
\begin{DoxyCompactList}\small\item\em \-Allocates an encoder instance. \end{DoxyCompactList}\item 
int {\bf th\-\_\-encode\-\_\-ctl} ({\bf th\-\_\-enc\-\_\-ctx} $\ast$\-\_\-enc, int \-\_\-req, void $\ast$\-\_\-buf, size\-\_\-t \-\_\-buf\-\_\-sz)
\begin{DoxyCompactList}\small\item\em \-Encoder control function. \end{DoxyCompactList}\item 
int {\bf th\-\_\-encode\-\_\-flushheader} ({\bf th\-\_\-enc\-\_\-ctx} $\ast$\-\_\-enc, {\bf th\-\_\-comment} $\ast$\-\_\-comments, ogg\-\_\-packet $\ast$\-\_\-op)
\begin{DoxyCompactList}\small\item\em \-Outputs the next header packet. \end{DoxyCompactList}\item 
int {\bf th\-\_\-encode\-\_\-ycbcr\-\_\-in} ({\bf th\-\_\-enc\-\_\-ctx} $\ast$\-\_\-enc, {\bf th\-\_\-ycbcr\-\_\-buffer} \-\_\-ycbcr)
\begin{DoxyCompactList}\small\item\em \-Submits an uncompressed frame to the encoder. \end{DoxyCompactList}\item 
int {\bf th\-\_\-encode\-\_\-packetout} ({\bf th\-\_\-enc\-\_\-ctx} $\ast$\-\_\-enc, int \-\_\-last, ogg\-\_\-packet $\ast$\-\_\-op)
\begin{DoxyCompactList}\small\item\em \-Retrieves encoded video data packets. \end{DoxyCompactList}\item 
void {\bf th\-\_\-encode\-\_\-free} ({\bf th\-\_\-enc\-\_\-ctx} $\ast$\-\_\-enc)
\begin{DoxyCompactList}\small\item\em \-Frees an allocated encoder instance. \end{DoxyCompactList}\end{DoxyCompactItemize}


\subsection{\-Function \-Documentation}
\index{\-Functions for Encoding@{\-Functions for Encoding}!th\-\_\-encode\-\_\-alloc@{th\-\_\-encode\-\_\-alloc}}
\index{th\-\_\-encode\-\_\-alloc@{th\-\_\-encode\-\_\-alloc}!Functions for Encoding@{\-Functions for Encoding}}
\subsubsection[{th\-\_\-encode\-\_\-alloc}]{\setlength{\rightskip}{0pt plus 5cm}{\bf th\-\_\-enc\-\_\-ctx}$\ast$ {\bf th\-\_\-encode\-\_\-alloc} (
\begin{DoxyParamCaption}
\item[{const {\bf th\-\_\-info} $\ast$}]{\-\_\-info}
\end{DoxyParamCaption}
)}\label{group__encfuncs_gaa91e47bc9dd5f6ee52045bd7b815e5a7}


\-Allocates an encoder instance. 


\begin{DoxyParams}{\-Parameters}
{\em \-\_\-info} & \-A \doxyref{th\-\_\-info}{p.}{structth__info} struct filled with the desired encoding parameters. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{\-Returns}
\-The initialized \doxyref{th\-\_\-enc\-\_\-ctx}{p.}{theoraenc_8h_af5cc40472b925456d42526a035d66edd} handle. 
\end{DoxyReturn}

\begin{DoxyRetVals}{\-Return values}
{\em \-N\-U\-L\-L} & \-If the encoding parameters were invalid. \\
\hline
\end{DoxyRetVals}
\index{\-Functions for Encoding@{\-Functions for Encoding}!th\-\_\-encode\-\_\-ctl@{th\-\_\-encode\-\_\-ctl}}
\index{th\-\_\-encode\-\_\-ctl@{th\-\_\-encode\-\_\-ctl}!Functions for Encoding@{\-Functions for Encoding}}
\subsubsection[{th\-\_\-encode\-\_\-ctl}]{\setlength{\rightskip}{0pt plus 5cm}int {\bf th\-\_\-encode\-\_\-ctl} (
\begin{DoxyParamCaption}
\item[{{\bf th\-\_\-enc\-\_\-ctx} $\ast$}]{\-\_\-enc, }
\item[{int}]{\-\_\-req, }
\item[{void $\ast$}]{\-\_\-buf, }
\item[{size\-\_\-t}]{\-\_\-buf\-\_\-sz}
\end{DoxyParamCaption}
)}\label{group__encfuncs_ga3a427f6514dfdc01ea72172c469d51d9}


\-Encoder control function. 

\-This is used to provide advanced control the encoding process. 
\begin{DoxyParams}{\-Parameters}
{\em \-\_\-enc} & \-A \doxyref{th\-\_\-enc\-\_\-ctx}{p.}{theoraenc_8h_af5cc40472b925456d42526a035d66edd} handle. \\
\hline
{\em \-\_\-req} & \-The control code to process. \-See \doxyref{the list of available control codes}{p.}{theoraenc_8h_encctlcodes} for details. \\
\hline
{\em \-\_\-buf} & \-The parameters for this control code. \\
\hline
{\em \-\_\-buf\-\_\-sz} & \-The size of the parameter buffer. \\
\hline
\end{DoxyParams}
\index{\-Functions for Encoding@{\-Functions for Encoding}!th\-\_\-encode\-\_\-flushheader@{th\-\_\-encode\-\_\-flushheader}}
\index{th\-\_\-encode\-\_\-flushheader@{th\-\_\-encode\-\_\-flushheader}!Functions for Encoding@{\-Functions for Encoding}}
\subsubsection[{th\-\_\-encode\-\_\-flushheader}]{\setlength{\rightskip}{0pt plus 5cm}int {\bf th\-\_\-encode\-\_\-flushheader} (
\begin{DoxyParamCaption}
\item[{{\bf th\-\_\-enc\-\_\-ctx} $\ast$}]{\-\_\-enc, }
\item[{{\bf th\-\_\-comment} $\ast$}]{\-\_\-comments, }
\item[{ogg\-\_\-packet $\ast$}]{\-\_\-op}
\end{DoxyParamCaption}
)}\label{group__encfuncs_ga9439d61b566039d194ff782681fbc408}


\-Outputs the next header packet. 

\-This should be called repeatedly after encoder initialization until it returns 0 in order to get all of the header packets, in order, before encoding actual video data. 
\begin{DoxyParams}{\-Parameters}
{\em \-\_\-enc} & \-A \doxyref{th\-\_\-enc\-\_\-ctx}{p.}{theoraenc_8h_af5cc40472b925456d42526a035d66edd} handle. \\
\hline
{\em \-\_\-comments} & \-The metadata to place in the comment header, when it is encoded. \\
\hline
{\em \-\_\-op} & \-An {\ttfamily ogg\-\_\-packet} structure to fill. \-All of the elements of this structure will be set, including a pointer to the header data. \-The memory for the header data is owned by {\ttfamily libtheoraenc}, and may be invalidated when the next encoder function is called. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{\-Returns}
\-A positive value indicates that a header packet was successfully produced. 
\end{DoxyReturn}

\begin{DoxyRetVals}{\-Return values}
{\em 0} & \-No packet was produced, and no more header packets remain. \\
\hline
{\em \-T\-H\-\_\-\-E\-F\-A\-U\-L\-T} & {\itshape \-\_\-enc\/}, {\itshape \-\_\-comments\/}, or {\itshape \-\_\-op\/} was {\ttfamily \-N\-U\-L\-L}. \\
\hline
\end{DoxyRetVals}
\index{\-Functions for Encoding@{\-Functions for Encoding}!th\-\_\-encode\-\_\-free@{th\-\_\-encode\-\_\-free}}
\index{th\-\_\-encode\-\_\-free@{th\-\_\-encode\-\_\-free}!Functions for Encoding@{\-Functions for Encoding}}
\subsubsection[{th\-\_\-encode\-\_\-free}]{\setlength{\rightskip}{0pt plus 5cm}void {\bf th\-\_\-encode\-\_\-free} (
\begin{DoxyParamCaption}
\item[{{\bf th\-\_\-enc\-\_\-ctx} $\ast$}]{\-\_\-enc}
\end{DoxyParamCaption}
)}\label{group__encfuncs_ga36b23d216532231925c4107894204680}


\-Frees an allocated encoder instance. 


\begin{DoxyParams}{\-Parameters}
{\em \-\_\-enc} & \-A \doxyref{th\-\_\-enc\-\_\-ctx}{p.}{theoraenc_8h_af5cc40472b925456d42526a035d66edd} handle. \\
\hline
\end{DoxyParams}
\index{\-Functions for Encoding@{\-Functions for Encoding}!th\-\_\-encode\-\_\-packetout@{th\-\_\-encode\-\_\-packetout}}
\index{th\-\_\-encode\-\_\-packetout@{th\-\_\-encode\-\_\-packetout}!Functions for Encoding@{\-Functions for Encoding}}
\subsubsection[{th\-\_\-encode\-\_\-packetout}]{\setlength{\rightskip}{0pt plus 5cm}int {\bf th\-\_\-encode\-\_\-packetout} (
\begin{DoxyParamCaption}
\item[{{\bf th\-\_\-enc\-\_\-ctx} $\ast$}]{\-\_\-enc, }
\item[{int}]{\-\_\-last, }
\item[{ogg\-\_\-packet $\ast$}]{\-\_\-op}
\end{DoxyParamCaption}
)}\label{group__encfuncs_ga96d8ac1dda53187455352f99bbb5b04b}


\-Retrieves encoded video data packets. 

\-This should be called repeatedly after each frame is submitted to flush any encoded packets, until it returns 0. \-The encoder will not buffer these packets as subsequent frames are compressed, so a failure to do so will result in lost video data. \begin{DoxyNote}{\-Note}
\-Currently the encoder operates in a one-\/frame-\/in, one-\/packet-\/out manner. \-However, this may be changed in the future. 
\end{DoxyNote}

\begin{DoxyParams}{\-Parameters}
{\em \-\_\-enc} & \-A \doxyref{th\-\_\-enc\-\_\-ctx}{p.}{theoraenc_8h_af5cc40472b925456d42526a035d66edd} handle. \\
\hline
{\em \-\_\-last} & \-Set this flag to a non-\/zero value if no more uncompressed frames will be submitted. \-This ensures that a proper \-E\-O\-S flag is set on the last packet. \\
\hline
{\em \-\_\-op} & \-An {\ttfamily ogg\-\_\-packet} structure to fill. \-All of the elements of this structure will be set, including a pointer to the video data. \-The memory for the video data is owned by {\ttfamily libtheoraenc}, and may be invalidated when the next encoder function is called. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{\-Returns}
\-A positive value indicates that a video data packet was successfully produced. 
\end{DoxyReturn}

\begin{DoxyRetVals}{\-Return values}
{\em 0} & \-No packet was produced, and no more encoded video data remains. \\
\hline
{\em \-T\-H\-\_\-\-E\-F\-A\-U\-L\-T} & {\itshape \-\_\-enc\/} or {\itshape \-\_\-op\/} was {\ttfamily \-N\-U\-L\-L}. \\
\hline
\end{DoxyRetVals}
\index{\-Functions for Encoding@{\-Functions for Encoding}!th\-\_\-encode\-\_\-ycbcr\-\_\-in@{th\-\_\-encode\-\_\-ycbcr\-\_\-in}}
\index{th\-\_\-encode\-\_\-ycbcr\-\_\-in@{th\-\_\-encode\-\_\-ycbcr\-\_\-in}!Functions for Encoding@{\-Functions for Encoding}}
\subsubsection[{th\-\_\-encode\-\_\-ycbcr\-\_\-in}]{\setlength{\rightskip}{0pt plus 5cm}int {\bf th\-\_\-encode\-\_\-ycbcr\-\_\-in} (
\begin{DoxyParamCaption}
\item[{{\bf th\-\_\-enc\-\_\-ctx} $\ast$}]{\-\_\-enc, }
\item[{{\bf th\-\_\-ycbcr\-\_\-buffer}}]{\-\_\-ycbcr}
\end{DoxyParamCaption}
)}\label{group__encfuncs_gadbe7dd66b411c2d61ab8153c15308750}


\-Submits an uncompressed frame to the encoder. 


\begin{DoxyParams}{\-Parameters}
{\em \-\_\-enc} & \-A \doxyref{th\-\_\-enc\-\_\-ctx}{p.}{theoraenc_8h_af5cc40472b925456d42526a035d66edd} handle. \\
\hline
{\em \-\_\-ycbcr} & \-A buffer of \-Y'\-Cb\-Cr data to encode. \\
\hline
\end{DoxyParams}

\begin{DoxyRetVals}{\-Return values}
{\em 0} & \-Success. \\
\hline
{\em \-T\-H\-\_\-\-E\-F\-A\-U\-L\-T} & {\itshape \-\_\-enc\/} or {\itshape \-\_\-ycbcr\/} is {\ttfamily \-N\-U\-L\-L}. \\
\hline
{\em \-T\-H\-\_\-\-E\-I\-N\-V\-A\-L} & \-The buffer size does not match the frame size the encoder was initialized with, or encoding has already completed. \\
\hline
\end{DoxyRetVals}
