\hypertarget{group__Ecore__Drm2__Fb__Group}{}\doxysection{Drm framebuffer functions}
\label{group__Ecore__Drm2__Fb__Group}\index{Drm framebuffer functions@{Drm framebuffer functions}}


Functions that deal with setup of framebuffers.  


\doxysubsection*{Functions}
\begin{DoxyCompactItemize}
\item 
\mbox{\hyperlink{Elua_8h_a3db3556eec8ef18cb8ddb43816974ac8}{EAPI}} Ecore\+\_\+\+Drm2\+\_\+\+Fb $\ast$ \mbox{\hyperlink{group__Ecore__Drm2__Fb__Group_gac7d764c3035c909c0398b31b3b6fc011}{ecore\+\_\+drm2\+\_\+fb\+\_\+create}} (Ecore\+\_\+\+Drm2\+\_\+\+Device $\ast$dev, int width, int height, int depth, int bpp, unsigned int format)
\begin{DoxyCompactList}\small\item\em Create a new framebuffer object. \end{DoxyCompactList}\item 
\mbox{\hyperlink{Elua_8h_a3db3556eec8ef18cb8ddb43816974ac8}{EAPI}} void $\ast$ \mbox{\hyperlink{group__Ecore__Drm2__Fb__Group_ga9ec0bb02d50b32384ea77043af874705}{ecore\+\_\+drm2\+\_\+fb\+\_\+data\+\_\+get}} (Ecore\+\_\+\+Drm2\+\_\+\+Fb $\ast$fb)
\begin{DoxyCompactList}\small\item\em Get a framebuffer\textquotesingle{}s mmap\textquotesingle{}d data. \end{DoxyCompactList}\item 
\mbox{\hyperlink{Elua_8h_a3db3556eec8ef18cb8ddb43816974ac8}{EAPI}} unsigned int \mbox{\hyperlink{group__Ecore__Drm2__Fb__Group_ga299c59febe9acdfcfd71f64e06f435f4}{ecore\+\_\+drm2\+\_\+fb\+\_\+size\+\_\+get}} (Ecore\+\_\+\+Drm2\+\_\+\+Fb $\ast$fb)
\begin{DoxyCompactList}\small\item\em Get a framebuffer\textquotesingle{}s size. \end{DoxyCompactList}\item 
\mbox{\hyperlink{Elua_8h_a3db3556eec8ef18cb8ddb43816974ac8}{EAPI}} unsigned int \mbox{\hyperlink{group__Ecore__Drm2__Fb__Group_gab118797821bc554154c8a141769889f7}{ecore\+\_\+drm2\+\_\+fb\+\_\+stride\+\_\+get}} (Ecore\+\_\+\+Drm2\+\_\+\+Fb $\ast$fb)
\begin{DoxyCompactList}\small\item\em Get a framebuffer\textquotesingle{}s stride. \end{DoxyCompactList}\item 
\mbox{\hyperlink{Elua_8h_a3db3556eec8ef18cb8ddb43816974ac8}{EAPI}} void \mbox{\hyperlink{group__Ecore__Drm2__Fb__Group_gafabe8f7edef512bffbd4f821ab18eda6}{ecore\+\_\+drm2\+\_\+fb\+\_\+dirty}} (Ecore\+\_\+\+Drm2\+\_\+\+Fb $\ast$fb, \mbox{\hyperlink{group__Eina__Rectangle__Group_gad1f49db9be2cd747f458ebf4718b6228}{Eina\+\_\+\+Rectangle}} $\ast$rects, unsigned int count)
\begin{DoxyCompactList}\small\item\em Mark regions of a framebuffer as dirty. \end{DoxyCompactList}\item 
\mbox{\hyperlink{Elua_8h_a3db3556eec8ef18cb8ddb43816974ac8}{EAPI}} int \mbox{\hyperlink{group__Ecore__Drm2__Fb__Group_ga627dd307d8a2da67b1863a8f854785da}{ecore\+\_\+drm2\+\_\+fb\+\_\+flip}} (Ecore\+\_\+\+Drm2\+\_\+\+Fb $\ast$fb, Ecore\+\_\+\+Drm2\+\_\+\+Output $\ast$output)
\begin{DoxyCompactList}\small\item\em Schedule a pageflip to the given Ecore\+\_\+\+Drm2\+\_\+\+Fb. \end{DoxyCompactList}\item 
\mbox{\hyperlink{Elua_8h_a3db3556eec8ef18cb8ddb43816974ac8}{EAPI}} \mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool}} \mbox{\hyperlink{group__Ecore__Drm2__Fb__Group_ga707e208b0864c680788b4d4a73c80340}{ecore\+\_\+drm2\+\_\+fb\+\_\+flip\+\_\+complete}} (Ecore\+\_\+\+Drm2\+\_\+\+Output $\ast$output)
\begin{DoxyCompactList}\small\item\em Must be called by a page flip handler when the flip completes. \end{DoxyCompactList}\item 
\mbox{\hyperlink{Elua_8h_a3db3556eec8ef18cb8ddb43816974ac8}{EAPI}} \mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool}} \mbox{\hyperlink{group__Ecore__Drm2__Fb__Group_ga50d08fd820118c75e1afba2a8ae0b4d3}{ecore\+\_\+drm2\+\_\+fb\+\_\+busy\+\_\+get}} (Ecore\+\_\+\+Drm2\+\_\+\+Fb $\ast$fb)
\begin{DoxyCompactList}\small\item\em Return the Ecore\+\_\+\+Drm2\+\_\+\+Fb\textquotesingle{}s busy status. \end{DoxyCompactList}\item 
\mbox{\hyperlink{Elua_8h_a3db3556eec8ef18cb8ddb43816974ac8}{EAPI}} \mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool}} \mbox{\hyperlink{group__Ecore__Drm2__Fb__Group_gaae8f9d17c0db16fd00f238f9414b4c3a}{ecore\+\_\+drm2\+\_\+fb\+\_\+release}} (Ecore\+\_\+\+Drm2\+\_\+\+Output $\ast$o, \mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool}} panic)
\begin{DoxyCompactList}\small\item\em Try to force a framebuffer release for an output. \end{DoxyCompactList}\item 
\mbox{\hyperlink{Elua_8h_a3db3556eec8ef18cb8ddb43816974ac8}{EAPI}} Ecore\+\_\+\+Drm2\+\_\+\+Fb $\ast$ \mbox{\hyperlink{group__Ecore__Drm2__Fb__Group_ga5738db036738f820c0d0261defa61aa2}{ecore\+\_\+drm2\+\_\+fb\+\_\+dmabuf\+\_\+import}} (Ecore\+\_\+\+Drm2\+\_\+\+Device $\ast$dev, int width, int height, int depth, int bpp, unsigned int format, unsigned int strides\mbox{[}4\mbox{]}, int dmabuf\+\_\+fd\mbox{[}4\mbox{]}, int dmabuf\+\_\+fd\+\_\+count)
\begin{DoxyCompactList}\small\item\em Import a dmabuf object as a Framebuffer. \end{DoxyCompactList}\item 
\mbox{\hyperlink{Elua_8h_a3db3556eec8ef18cb8ddb43816974ac8}{EAPI}} void \mbox{\hyperlink{group__Ecore__Drm2__Fb__Group_ga12994af9ef3b3647da4538f3bd634698}{ecore\+\_\+drm2\+\_\+fb\+\_\+discard}} (Ecore\+\_\+\+Drm2\+\_\+\+Fb $\ast$fb)
\begin{DoxyCompactList}\small\item\em Discard a framebuffer object. \end{DoxyCompactList}\item 
\mbox{\hyperlink{Elua_8h_a3db3556eec8ef18cb8ddb43816974ac8}{EAPI}} void \mbox{\hyperlink{group__Ecore__Drm2__Fb__Group_ga8a6de8ee7e5c159ba92e4b12179d45ab}{ecore\+\_\+drm2\+\_\+fb\+\_\+status\+\_\+handler\+\_\+set}} (Ecore\+\_\+\+Drm2\+\_\+\+Fb $\ast$fb, Ecore\+\_\+\+Drm2\+\_\+\+Fb\+\_\+\+Status\+\_\+\+Handler handler, void $\ast$data)
\begin{DoxyCompactList}\small\item\em Register a callback for buffer status updates. \end{DoxyCompactList}\end{DoxyCompactItemize}


\doxysubsection{Detailed Description}
Functions that deal with setup of framebuffers. 



\doxysubsection{Function Documentation}
\mbox{\Hypertarget{group__Ecore__Drm2__Fb__Group_gac7d764c3035c909c0398b31b3b6fc011}\label{group__Ecore__Drm2__Fb__Group_gac7d764c3035c909c0398b31b3b6fc011}} 
\index{Drm framebuffer functions@{Drm framebuffer functions}!ecore\_drm2\_fb\_create@{ecore\_drm2\_fb\_create}}
\index{ecore\_drm2\_fb\_create@{ecore\_drm2\_fb\_create}!Drm framebuffer functions@{Drm framebuffer functions}}
\doxysubsubsection{\texorpdfstring{ecore\_drm2\_fb\_create()}{ecore\_drm2\_fb\_create()}}
{\footnotesize\ttfamily \mbox{\hyperlink{Elua_8h_a3db3556eec8ef18cb8ddb43816974ac8}{EAPI}} Ecore\+\_\+\+Drm2\+\_\+\+Fb$\ast$ ecore\+\_\+drm2\+\_\+fb\+\_\+create (\begin{DoxyParamCaption}\item[{Ecore\+\_\+\+Drm2\+\_\+\+Device $\ast$}]{dev,  }\item[{int}]{width,  }\item[{int}]{height,  }\item[{int}]{depth,  }\item[{int}]{bpp,  }\item[{unsigned int}]{format }\end{DoxyParamCaption})}



Create a new framebuffer object. 


\begin{DoxyParams}{Parameters}
{\em dev} & \\
\hline
{\em width} & \\
\hline
{\em height} & \\
\hline
{\em depth} & \\
\hline
{\em bpp} & \\
\hline
{\em format} & \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
A newly create framebuffer object, or NULL on failure
\end{DoxyReturn}
\begin{DoxySince}{Since}
1.\+18 
\end{DoxySince}


References EINA\+\_\+\+SAFETY\+\_\+\+ON\+\_\+\+NULL\+\_\+\+RETURN\+\_\+\+VAL, ERR, MAP\+\_\+\+FAILED, MAP\+\_\+\+SHARED, mmap(), and PROT\+\_\+\+WRITE.

\mbox{\Hypertarget{group__Ecore__Drm2__Fb__Group_ga9ec0bb02d50b32384ea77043af874705}\label{group__Ecore__Drm2__Fb__Group_ga9ec0bb02d50b32384ea77043af874705}} 
\index{Drm framebuffer functions@{Drm framebuffer functions}!ecore\_drm2\_fb\_data\_get@{ecore\_drm2\_fb\_data\_get}}
\index{ecore\_drm2\_fb\_data\_get@{ecore\_drm2\_fb\_data\_get}!Drm framebuffer functions@{Drm framebuffer functions}}
\doxysubsubsection{\texorpdfstring{ecore\_drm2\_fb\_data\_get()}{ecore\_drm2\_fb\_data\_get()}}
{\footnotesize\ttfamily \mbox{\hyperlink{Elua_8h_a3db3556eec8ef18cb8ddb43816974ac8}{EAPI}} void$\ast$ ecore\+\_\+drm2\+\_\+fb\+\_\+data\+\_\+get (\begin{DoxyParamCaption}\item[{Ecore\+\_\+\+Drm2\+\_\+\+Fb $\ast$}]{fb }\end{DoxyParamCaption})}



Get a framebuffer\textquotesingle{}s mmap\textquotesingle{}d data. 


\begin{DoxyParams}{Parameters}
{\em fb} & \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The mmap\textquotesingle{}d area of the framebuffer or NULL on failure
\end{DoxyReturn}
\begin{DoxySince}{Since}
1.\+18 
\end{DoxySince}


References EINA\+\_\+\+SAFETY\+\_\+\+ON\+\_\+\+NULL\+\_\+\+RETURN\+\_\+\+VAL, and EINA\+\_\+\+SAFETY\+\_\+\+ON\+\_\+\+TRUE\+\_\+\+RETURN\+\_\+\+VAL.

\mbox{\Hypertarget{group__Ecore__Drm2__Fb__Group_ga299c59febe9acdfcfd71f64e06f435f4}\label{group__Ecore__Drm2__Fb__Group_ga299c59febe9acdfcfd71f64e06f435f4}} 
\index{Drm framebuffer functions@{Drm framebuffer functions}!ecore\_drm2\_fb\_size\_get@{ecore\_drm2\_fb\_size\_get}}
\index{ecore\_drm2\_fb\_size\_get@{ecore\_drm2\_fb\_size\_get}!Drm framebuffer functions@{Drm framebuffer functions}}
\doxysubsubsection{\texorpdfstring{ecore\_drm2\_fb\_size\_get()}{ecore\_drm2\_fb\_size\_get()}}
{\footnotesize\ttfamily \mbox{\hyperlink{Elua_8h_a3db3556eec8ef18cb8ddb43816974ac8}{EAPI}} unsigned int ecore\+\_\+drm2\+\_\+fb\+\_\+size\+\_\+get (\begin{DoxyParamCaption}\item[{Ecore\+\_\+\+Drm2\+\_\+\+Fb $\ast$}]{fb }\end{DoxyParamCaption})}



Get a framebuffer\textquotesingle{}s size. 


\begin{DoxyParams}{Parameters}
{\em fb} & \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
size of the framebuffers\textquotesingle{} mmap\textquotesingle{}d data or 0 on failure
\end{DoxyReturn}
\begin{DoxySince}{Since}
1.\+18 
\end{DoxySince}


References EINA\+\_\+\+SAFETY\+\_\+\+ON\+\_\+\+NULL\+\_\+\+RETURN\+\_\+\+VAL, and EINA\+\_\+\+SAFETY\+\_\+\+ON\+\_\+\+TRUE\+\_\+\+RETURN\+\_\+\+VAL.

\mbox{\Hypertarget{group__Ecore__Drm2__Fb__Group_gab118797821bc554154c8a141769889f7}\label{group__Ecore__Drm2__Fb__Group_gab118797821bc554154c8a141769889f7}} 
\index{Drm framebuffer functions@{Drm framebuffer functions}!ecore\_drm2\_fb\_stride\_get@{ecore\_drm2\_fb\_stride\_get}}
\index{ecore\_drm2\_fb\_stride\_get@{ecore\_drm2\_fb\_stride\_get}!Drm framebuffer functions@{Drm framebuffer functions}}
\doxysubsubsection{\texorpdfstring{ecore\_drm2\_fb\_stride\_get()}{ecore\_drm2\_fb\_stride\_get()}}
{\footnotesize\ttfamily \mbox{\hyperlink{Elua_8h_a3db3556eec8ef18cb8ddb43816974ac8}{EAPI}} unsigned int ecore\+\_\+drm2\+\_\+fb\+\_\+stride\+\_\+get (\begin{DoxyParamCaption}\item[{Ecore\+\_\+\+Drm2\+\_\+\+Fb $\ast$}]{fb }\end{DoxyParamCaption})}



Get a framebuffer\textquotesingle{}s stride. 


\begin{DoxyParams}{Parameters}
{\em fb} & \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
stride of the framebuffer or 0 on failure
\end{DoxyReturn}
\begin{DoxySince}{Since}
1.\+18 
\end{DoxySince}


References EINA\+\_\+\+SAFETY\+\_\+\+ON\+\_\+\+NULL\+\_\+\+RETURN\+\_\+\+VAL, and EINA\+\_\+\+SAFETY\+\_\+\+ON\+\_\+\+TRUE\+\_\+\+RETURN\+\_\+\+VAL.

\mbox{\Hypertarget{group__Ecore__Drm2__Fb__Group_gafabe8f7edef512bffbd4f821ab18eda6}\label{group__Ecore__Drm2__Fb__Group_gafabe8f7edef512bffbd4f821ab18eda6}} 
\index{Drm framebuffer functions@{Drm framebuffer functions}!ecore\_drm2\_fb\_dirty@{ecore\_drm2\_fb\_dirty}}
\index{ecore\_drm2\_fb\_dirty@{ecore\_drm2\_fb\_dirty}!Drm framebuffer functions@{Drm framebuffer functions}}
\doxysubsubsection{\texorpdfstring{ecore\_drm2\_fb\_dirty()}{ecore\_drm2\_fb\_dirty()}}
{\footnotesize\ttfamily \mbox{\hyperlink{Elua_8h_a3db3556eec8ef18cb8ddb43816974ac8}{EAPI}} void ecore\+\_\+drm2\+\_\+fb\+\_\+dirty (\begin{DoxyParamCaption}\item[{Ecore\+\_\+\+Drm2\+\_\+\+Fb $\ast$}]{fb,  }\item[{\mbox{\hyperlink{group__Eina__Rectangle__Group_gad1f49db9be2cd747f458ebf4718b6228}{Eina\+\_\+\+Rectangle}} $\ast$}]{rects,  }\item[{unsigned int}]{count }\end{DoxyParamCaption})}



Mark regions of a framebuffer as dirty. 


\begin{DoxyParams}{Parameters}
{\em fb} & \\
\hline
{\em rects} & \\
\hline
{\em count} & \\
\hline
\end{DoxyParams}
\begin{DoxySince}{Since}
1.\+18 
\end{DoxySince}


References alloca(), EINA\+\_\+\+SAFETY\+\_\+\+ON\+\_\+\+NULL\+\_\+\+RETURN, EINA\+\_\+\+SAFETY\+\_\+\+ON\+\_\+\+TRUE\+\_\+\+RETURN, \+\_\+\+Eina\+\_\+\+Rectangle\+::h, \+\_\+\+Eina\+\_\+\+Rectangle\+::w, WRN, \+\_\+\+Eina\+\_\+\+Rectangle\+::x, and \+\_\+\+Eina\+\_\+\+Rectangle\+::y.

\mbox{\Hypertarget{group__Ecore__Drm2__Fb__Group_ga627dd307d8a2da67b1863a8f854785da}\label{group__Ecore__Drm2__Fb__Group_ga627dd307d8a2da67b1863a8f854785da}} 
\index{Drm framebuffer functions@{Drm framebuffer functions}!ecore\_drm2\_fb\_flip@{ecore\_drm2\_fb\_flip}}
\index{ecore\_drm2\_fb\_flip@{ecore\_drm2\_fb\_flip}!Drm framebuffer functions@{Drm framebuffer functions}}
\doxysubsubsection{\texorpdfstring{ecore\_drm2\_fb\_flip()}{ecore\_drm2\_fb\_flip()}}
{\footnotesize\ttfamily \mbox{\hyperlink{Elua_8h_a3db3556eec8ef18cb8ddb43816974ac8}{EAPI}} int ecore\+\_\+drm2\+\_\+fb\+\_\+flip (\begin{DoxyParamCaption}\item[{Ecore\+\_\+\+Drm2\+\_\+\+Fb $\ast$}]{fb,  }\item[{Ecore\+\_\+\+Drm2\+\_\+\+Output $\ast$}]{output }\end{DoxyParamCaption})}



Schedule a pageflip to the given Ecore\+\_\+\+Drm2\+\_\+\+Fb. 

The caller is responsible for running a page flip handler and calling \mbox{\hyperlink{group__Ecore__Drm2__Fb__Group_ga707e208b0864c680788b4d4a73c80340}{ecore\+\_\+drm2\+\_\+fb\+\_\+flip\+\_\+complete()}} when it completes.


\begin{DoxyParams}{Parameters}
{\em fb} & \\
\hline
{\em output} & \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The result of drm\+Mode\+Page\+Flip function call
\end{DoxyReturn}
\begin{DoxySince}{Since}
1.\+18 
\end{DoxySince}


References EINA\+\_\+\+SAFETY\+\_\+\+ON\+\_\+\+NULL\+\_\+\+RETURN\+\_\+\+VAL.



Referenced by ecore\+\_\+drm2\+\_\+output\+\_\+dpms\+\_\+set(), and ecore\+\_\+drm2\+\_\+output\+\_\+enabled\+\_\+set().

\mbox{\Hypertarget{group__Ecore__Drm2__Fb__Group_ga707e208b0864c680788b4d4a73c80340}\label{group__Ecore__Drm2__Fb__Group_ga707e208b0864c680788b4d4a73c80340}} 
\index{Drm framebuffer functions@{Drm framebuffer functions}!ecore\_drm2\_fb\_flip\_complete@{ecore\_drm2\_fb\_flip\_complete}}
\index{ecore\_drm2\_fb\_flip\_complete@{ecore\_drm2\_fb\_flip\_complete}!Drm framebuffer functions@{Drm framebuffer functions}}
\doxysubsubsection{\texorpdfstring{ecore\_drm2\_fb\_flip\_complete()}{ecore\_drm2\_fb\_flip\_complete()}}
{\footnotesize\ttfamily \mbox{\hyperlink{Elua_8h_a3db3556eec8ef18cb8ddb43816974ac8}{EAPI}} \mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool}} ecore\+\_\+drm2\+\_\+fb\+\_\+flip\+\_\+complete (\begin{DoxyParamCaption}\item[{Ecore\+\_\+\+Drm2\+\_\+\+Output $\ast$}]{output }\end{DoxyParamCaption})}



Must be called by a page flip handler when the flip completes. 


\begin{DoxyParams}{Parameters}
{\em output} & \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
Whether there\textquotesingle{}s an undisplayed buffer still in the queue.
\end{DoxyReturn}
\begin{DoxySince}{Since}
1.\+18 
\end{DoxySince}


References ecore\+\_\+main\+\_\+loop\+\_\+thread\+\_\+safe\+\_\+call\+\_\+async(), EINA\+\_\+\+FALSE, EINA\+\_\+\+LIST\+\_\+\+FOREACH\+\_\+\+SAFE, EINA\+\_\+\+SAFETY\+\_\+\+ON\+\_\+\+NULL\+\_\+\+RETURN\+\_\+\+VAL, and EINA\+\_\+\+TRUE.

\mbox{\Hypertarget{group__Ecore__Drm2__Fb__Group_ga50d08fd820118c75e1afba2a8ae0b4d3}\label{group__Ecore__Drm2__Fb__Group_ga50d08fd820118c75e1afba2a8ae0b4d3}} 
\index{Drm framebuffer functions@{Drm framebuffer functions}!ecore\_drm2\_fb\_busy\_get@{ecore\_drm2\_fb\_busy\_get}}
\index{ecore\_drm2\_fb\_busy\_get@{ecore\_drm2\_fb\_busy\_get}!Drm framebuffer functions@{Drm framebuffer functions}}
\doxysubsubsection{\texorpdfstring{ecore\_drm2\_fb\_busy\_get()}{ecore\_drm2\_fb\_busy\_get()}}
{\footnotesize\ttfamily \mbox{\hyperlink{Elua_8h_a3db3556eec8ef18cb8ddb43816974ac8}{EAPI}} \mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool}} ecore\+\_\+drm2\+\_\+fb\+\_\+busy\+\_\+get (\begin{DoxyParamCaption}\item[{Ecore\+\_\+\+Drm2\+\_\+\+Fb $\ast$}]{fb }\end{DoxyParamCaption})}



Return the Ecore\+\_\+\+Drm2\+\_\+\+Fb\textquotesingle{}s busy status. 


\begin{DoxyParams}{Parameters}
{\em fb} & \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The busy status
\end{DoxyReturn}
\begin{DoxySince}{Since}
1.\+19 
\end{DoxySince}


References EINA\+\_\+\+FALSE, EINA\+\_\+\+SAFETY\+\_\+\+ON\+\_\+\+NULL\+\_\+\+RETURN\+\_\+\+VAL, and EINA\+\_\+\+SAFETY\+\_\+\+ON\+\_\+\+TRUE\+\_\+\+RETURN\+\_\+\+VAL.

\mbox{\Hypertarget{group__Ecore__Drm2__Fb__Group_gaae8f9d17c0db16fd00f238f9414b4c3a}\label{group__Ecore__Drm2__Fb__Group_gaae8f9d17c0db16fd00f238f9414b4c3a}} 
\index{Drm framebuffer functions@{Drm framebuffer functions}!ecore\_drm2\_fb\_release@{ecore\_drm2\_fb\_release}}
\index{ecore\_drm2\_fb\_release@{ecore\_drm2\_fb\_release}!Drm framebuffer functions@{Drm framebuffer functions}}
\doxysubsubsection{\texorpdfstring{ecore\_drm2\_fb\_release()}{ecore\_drm2\_fb\_release()}}
{\footnotesize\ttfamily \mbox{\hyperlink{Elua_8h_a3db3556eec8ef18cb8ddb43816974ac8}{EAPI}} \mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool}} ecore\+\_\+drm2\+\_\+fb\+\_\+release (\begin{DoxyParamCaption}\item[{Ecore\+\_\+\+Drm2\+\_\+\+Output $\ast$}]{o,  }\item[{\mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool}}}]{panic }\end{DoxyParamCaption})}



Try to force a framebuffer release for an output. 

This tries to release the next or optionally pending, or current buffer from the output. If successful there will be a release callback to the registered handler, and the fb will no longer be flagged busy.

Releasing buffers committed to scanout will potentially cause flicker, so this is only done when the panic flag is set.


\begin{DoxyParams}{Parameters}
{\em o} & The output to force release \\
\hline
{\em panic} & Try to release even buffers committed to scanout\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
EINA\+\_\+\+TRUE if a buffer was released
\end{DoxyReturn}
\begin{DoxySince}{Since}
1.\+19 
\end{DoxySince}


References DBG, EINA\+\_\+\+FALSE, EINA\+\_\+\+SAFETY\+\_\+\+ON\+\_\+\+NULL\+\_\+\+RETURN\+\_\+\+VAL, and EINA\+\_\+\+TRUE.

\mbox{\Hypertarget{group__Ecore__Drm2__Fb__Group_ga5738db036738f820c0d0261defa61aa2}\label{group__Ecore__Drm2__Fb__Group_ga5738db036738f820c0d0261defa61aa2}} 
\index{Drm framebuffer functions@{Drm framebuffer functions}!ecore\_drm2\_fb\_dmabuf\_import@{ecore\_drm2\_fb\_dmabuf\_import}}
\index{ecore\_drm2\_fb\_dmabuf\_import@{ecore\_drm2\_fb\_dmabuf\_import}!Drm framebuffer functions@{Drm framebuffer functions}}
\doxysubsubsection{\texorpdfstring{ecore\_drm2\_fb\_dmabuf\_import()}{ecore\_drm2\_fb\_dmabuf\_import()}}
{\footnotesize\ttfamily \mbox{\hyperlink{Elua_8h_a3db3556eec8ef18cb8ddb43816974ac8}{EAPI}} Ecore\+\_\+\+Drm2\+\_\+\+Fb$\ast$ ecore\+\_\+drm2\+\_\+fb\+\_\+dmabuf\+\_\+import (\begin{DoxyParamCaption}\item[{Ecore\+\_\+\+Drm2\+\_\+\+Device $\ast$}]{dev,  }\item[{int}]{width,  }\item[{int}]{height,  }\item[{int}]{depth,  }\item[{int}]{bpp,  }\item[{unsigned int}]{format,  }\item[{unsigned int}]{strides\mbox{[}4\mbox{]},  }\item[{int}]{dmabuf\+\_\+fd\mbox{[}4\mbox{]},  }\item[{int}]{dmabuf\+\_\+fd\+\_\+count }\end{DoxyParamCaption})}



Import a dmabuf object as a Framebuffer. 


\begin{DoxyParams}{Parameters}
{\em dev} & \\
\hline
{\em width} & \\
\hline
{\em height} & \\
\hline
{\em depth} & \\
\hline
{\em bpp} & \\
\hline
{\em format} & \\
\hline
{\em strides} & \\
\hline
{\em dmabuf\+\_\+fd} & \\
\hline
{\em dmabuf\+\_\+fd\+\_\+count} & \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
A newly created framebuffer object, or NULL on failure
\end{DoxyReturn}
\begin{DoxySince}{Since}
1.\+20 
\end{DoxySince}


References EINA\+\_\+\+SAFETY\+\_\+\+ON\+\_\+\+NULL\+\_\+\+RETURN\+\_\+\+VAL, and EINA\+\_\+\+TRUE.

\mbox{\Hypertarget{group__Ecore__Drm2__Fb__Group_ga12994af9ef3b3647da4538f3bd634698}\label{group__Ecore__Drm2__Fb__Group_ga12994af9ef3b3647da4538f3bd634698}} 
\index{Drm framebuffer functions@{Drm framebuffer functions}!ecore\_drm2\_fb\_discard@{ecore\_drm2\_fb\_discard}}
\index{ecore\_drm2\_fb\_discard@{ecore\_drm2\_fb\_discard}!Drm framebuffer functions@{Drm framebuffer functions}}
\doxysubsubsection{\texorpdfstring{ecore\_drm2\_fb\_discard()}{ecore\_drm2\_fb\_discard()}}
{\footnotesize\ttfamily \mbox{\hyperlink{Elua_8h_a3db3556eec8ef18cb8ddb43816974ac8}{EAPI}} void ecore\+\_\+drm2\+\_\+fb\+\_\+discard (\begin{DoxyParamCaption}\item[{Ecore\+\_\+\+Drm2\+\_\+\+Fb $\ast$}]{fb }\end{DoxyParamCaption})}



Discard a framebuffer object. 

Decreases the refcount on a fb object. It will be destroyed when it\textquotesingle{}s no longer attached to scanout or otherwise in use.


\begin{DoxyParams}{Parameters}
{\em fb} & \\
\hline
\end{DoxyParams}
\begin{DoxySince}{Since}
1.\+20 
\end{DoxySince}


References EINA\+\_\+\+SAFETY\+\_\+\+ON\+\_\+\+NULL\+\_\+\+RETURN, EINA\+\_\+\+SAFETY\+\_\+\+ON\+\_\+\+TRUE\+\_\+\+RETURN, and EINA\+\_\+\+TRUE.

\mbox{\Hypertarget{group__Ecore__Drm2__Fb__Group_ga8a6de8ee7e5c159ba92e4b12179d45ab}\label{group__Ecore__Drm2__Fb__Group_ga8a6de8ee7e5c159ba92e4b12179d45ab}} 
\index{Drm framebuffer functions@{Drm framebuffer functions}!ecore\_drm2\_fb\_status\_handler\_set@{ecore\_drm2\_fb\_status\_handler\_set}}
\index{ecore\_drm2\_fb\_status\_handler\_set@{ecore\_drm2\_fb\_status\_handler\_set}!Drm framebuffer functions@{Drm framebuffer functions}}
\doxysubsubsection{\texorpdfstring{ecore\_drm2\_fb\_status\_handler\_set()}{ecore\_drm2\_fb\_status\_handler\_set()}}
{\footnotesize\ttfamily \mbox{\hyperlink{Elua_8h_a3db3556eec8ef18cb8ddb43816974ac8}{EAPI}} void ecore\+\_\+drm2\+\_\+fb\+\_\+status\+\_\+handler\+\_\+set (\begin{DoxyParamCaption}\item[{Ecore\+\_\+\+Drm2\+\_\+\+Fb $\ast$}]{fb,  }\item[{Ecore\+\_\+\+Drm2\+\_\+\+Fb\+\_\+\+Status\+\_\+\+Handler}]{handler,  }\item[{void $\ast$}]{data }\end{DoxyParamCaption})}



Register a callback for buffer status updates. 

When a flip completes ecore\+\_\+drm2 may release a buffer. Use this callback if you need to do bookkeeping or locking on buffer release.

Additionally, an fb may be placed on scanout or removed from scanout by evas. When this happens a compositor needs to ensure the buffers aren\textquotesingle{}t released back to a client while they\textquotesingle{}re on scanout.


\begin{DoxyParams}{Parameters}
{\em fb} & The fb to register the callback on \\
\hline
{\em handler} & The function to handle the callback \\
\hline
{\em data} & The user data to pass to the callback\\
\hline
\end{DoxyParams}
\begin{DoxySince}{Since}
1.\+20 
\end{DoxySince}
