<HTML><HEAD><TITLE>Samsung Enterprise Portal mySingle</TITLE>
<META content="text/html; charset=utf-8" http-equiv=Content-Type>
<STYLE id=mysingle_style>P {
        MARGIN-TOP: 5px; FONT-FAMILY: Times New Roman, arial; MARGIN-BOTTOM: 5px; FONT-SIZE: 9pt
}
TD {
        MARGIN-TOP: 5px; FONT-FAMILY: Times New Roman, arial; MARGIN-BOTTOM: 5px; FONT-SIZE: 9pt
}
LI {
        MARGIN-TOP: 5px; FONT-FAMILY: Times New Roman, arial; MARGIN-BOTTOM: 5px; FONT-SIZE: 9pt
}
BODY {
        FONT-FAMILY: Times New Roman, arial; FONT-SIZE: 9pt
}
</STYLE>

<META name=GENERATOR content=ActiveSquare></HEAD>
<BODY>
<P>But&nbsp;EOS buffer is still lost in your apporoach.</P>
<P>We need to decide&nbsp;how&nbsp;popped eos buffer is processed. (currently this buffer is lost).</P>
<P>&nbsp;</P>
<P>Anyway I cannot resolve repeatation problem using your patch.</P><BR><BR>------- <B>Original Message</B> -------<BR><B>Sender</B> : Felipe Contreras&lt;felipe.contreras@gmail.com&gt;<BR><B>Date</B> : 2010-09-10 08:06 (GMT+09:00)<BR><B>Title</B> : Re: [Gstreamer-openmax] Repeat Mode of Totem Player<BR><BR>On&nbsp;Mon,&nbsp;Aug&nbsp;30,&nbsp;2010&nbsp;at&nbsp;2:25&nbsp;PM,&nbsp;Mickey&nbsp;Kim&nbsp;&lt;jihun.kim@samsung.com&gt;&nbsp;wrote: <BR>&gt;&nbsp;&gt;From&nbsp;794a96ffdbb7c1a4451ff0e0e14a7e2fad337c45&nbsp;Mon&nbsp;Sep&nbsp;17&nbsp;00:00:00&nbsp;2001 <BR>&gt;&nbsp;From:&nbsp;mickey&nbsp;&lt;mickey@avatar.(none)&gt; <BR>&gt;&nbsp;Date:&nbsp;Mon,&nbsp;30&nbsp;Aug&nbsp;2010&nbsp;15:44:00&nbsp;+0900 <BR>&gt;&nbsp;Subject:&nbsp;[PATCH]&nbsp;[gst-openmax]&nbsp;Fix&nbsp;repeate&nbsp;mode&nbsp;issue&nbsp;of&nbsp;totem&nbsp;player <BR>&gt;&nbsp;When&nbsp;totem&nbsp;play&nbsp;single&nbsp;file&nbsp;in&nbsp;playlist&nbsp;in&nbsp;repeat&nbsp;mode,&nbsp;single&nbsp;file&nbsp;is&nbsp;played&nbsp;for&nbsp;2times. <BR>&gt;&nbsp;Totem&nbsp;stops&nbsp;at&nbsp;third&nbsp;time,&nbsp;only&nbsp;plays&nbsp;when&nbsp;seek&nbsp;button&nbsp;is&nbsp;pressed. <BR>&gt;&nbsp;When&nbsp;totem&nbsp;player&nbsp;detects&nbsp;EOS&nbsp;(end&nbsp;of&nbsp;stream)&nbsp;in&nbsp;repeat&nbsp;mode,&nbsp;it&nbsp;doesn't&nbsp;change&nbsp;the&nbsp;statete. <BR>&gt;&nbsp;gst-openmax,&nbsp;libomx&nbsp;source&nbsp;code&nbsp;are&nbsp;implemented&nbsp;without&nbsp;consideration&nbsp;of&nbsp;this&nbsp;case. <BR>&gt;&nbsp;The&nbsp;repeate&nbsp;mode&nbsp;without&nbsp;state&nbsp;change&nbsp;causes&nbsp;a&nbsp;buffer&nbsp;loss&nbsp;in&nbsp;gst-openmax&nbsp;queue&nbsp;for&nbsp;one&nbsp;repeatation. <BR>&gt;&nbsp;Singed-off-by:&nbsp;Mickey&nbsp;Kim&nbsp;&lt;jihun.kim@samsung.com&gt; <BR>&gt;&nbsp;--- <BR>&gt;&nbsp;&nbsp;omx/gstomx_base_filter.c&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;+ <BR>&gt;&nbsp;&nbsp;omx/gstomx_util.c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;13&nbsp;+++++++++++-- <BR>&gt;&nbsp;&nbsp;2&nbsp;files&nbsp;changed,&nbsp;12&nbsp;insertions(+),&nbsp;2&nbsp;deletions(-) <BR>&gt;&nbsp;diff&nbsp;--git&nbsp;a/omx/gstomx_base_filter.c&nbsp;b/omx/gstomx_base_filter.c <BR>&gt;&nbsp;index&nbsp;a16cb5f..40d4c4c&nbsp;100644 <BR>&gt;&nbsp;---&nbsp;a/omx/gstomx_base_filter.c <BR>&gt;&nbsp;+++&nbsp;b/omx/gstomx_base_filter.c <BR>&gt;&nbsp;@@&nbsp;-504,6&nbsp;+504,7&nbsp;@@&nbsp;output_loop&nbsp;(gpointer&nbsp;data) <BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GST_DEBUG_OBJECT&nbsp;(self,&nbsp;"got&nbsp;eos"); <BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gst_pad_push_event&nbsp;(self-&gt;srcpad,&nbsp;gst_event_new_eos&nbsp;()); <BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;=&nbsp;GST_FLOW_UNEXPECTED; <BR>&gt;&nbsp;+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_omx_port_push_buffer&nbsp;(out_port,&nbsp;omx_buffer); <BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;goto&nbsp;leave; <BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <BR>&gt; <BR>&gt;&nbsp;diff&nbsp;--git&nbsp;a/omx/gstomx_util.c&nbsp;b/omx/gstomx_util.c <BR>&gt;&nbsp;index&nbsp;283c32d..ce226e0&nbsp;100644 <BR>&gt;&nbsp;---&nbsp;a/omx/gstomx_util.c <BR>&gt;&nbsp;+++&nbsp;b/omx/gstomx_util.c <BR>&gt;&nbsp;@@&nbsp;-697,8&nbsp;+697,17&nbsp;@@&nbsp;g_omx_port_flush&nbsp;(GOmxPort&nbsp;*port) <BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OMX_BUFFERHEADERTYPE&nbsp;*omx_buffer; <BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;((omx_buffer&nbsp;=&nbsp;async_queue_pop_forced&nbsp;(port-&gt;queue))) <BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <BR>&gt;&nbsp;-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;omx_buffer-&gt;nFilledLen&nbsp;=&nbsp;0; <BR>&gt;&nbsp;-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_omx_port_release_buffer&nbsp;(port,&nbsp;omx_buffer); <BR>&gt;&nbsp;+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(omx_buffer-&gt;nFlags&nbsp;&amp;&nbsp;OMX_BUFFERFLAG_EOS) <BR>&gt;&nbsp;+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <BR>&gt;&nbsp;+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;omx_buffer-&gt;nFlags&nbsp;=&nbsp;0; <BR>&gt;&nbsp;+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_omx_port_push_buffer&nbsp;(port,&nbsp;omx_buffer); <BR>&gt;&nbsp;+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; <BR>&gt;&nbsp;+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <BR>&gt;&nbsp;+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else <BR>&gt;&nbsp;+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <BR>&gt;&nbsp;+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;omx_buffer-&gt;nFilledLen&nbsp;=&nbsp;0; <BR>&gt;&nbsp;+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_omx_port_release_buffer&nbsp;(port,&nbsp;omx_buffer); <BR>&gt;&nbsp;+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else <BR>&gt;&nbsp;-- <BR>&gt;&nbsp;1.7.0.4 <BR><BR>I&nbsp;don't&nbsp;think&nbsp;this&nbsp;is&nbsp;the&nbsp;right&nbsp;approach. <BR><BR>Buffers&nbsp;marked&nbsp;with&nbsp;EOS&nbsp;should&nbsp;not&nbsp;be&nbsp;any&nbsp;different&nbsp;from&nbsp;other <BR>buffers;&nbsp;they&nbsp;should&nbsp;be&nbsp;returned&nbsp;with&nbsp;OMX_FillThisBuffer(). <BR><BR>However,&nbsp;it&nbsp;does&nbsp;seem&nbsp;true&nbsp;that&nbsp;the&nbsp;EOS&nbsp;is&nbsp;not&nbsp;handled&nbsp;correctly&nbsp;as <BR>the&nbsp;buffers&nbsp;are&nbsp;lost. <BR><BR>What&nbsp;do&nbsp;you&nbsp;think&nbsp;about&nbsp;this&nbsp;instead? <BR><BR>---&nbsp;a/omx/gstomx_base_filter.c <BR>+++&nbsp;b/omx/gstomx_base_filter.c <BR>@@&nbsp;-499,14&nbsp;+499,6&nbsp;@@&nbsp;output_loop&nbsp;(gpointer&nbsp;data) <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GST_WARNING_OBJECT&nbsp;(self,&nbsp;"empty&nbsp;buffer"); <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <BR><BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(G_UNLIKELY&nbsp;(omx_buffer-&gt;nFlags&nbsp;&amp;&nbsp;OMX_BUFFERFLAG_EOS)) <BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GST_DEBUG_OBJECT&nbsp;(self,&nbsp;"got&nbsp;eos"); <BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gst_pad_push_event&nbsp;(self-&gt;srcpad,&nbsp;gst_event_new_eos&nbsp;()); <BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;=&nbsp;GST_FLOW_UNEXPECTED; <BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;goto&nbsp;leave; <BR>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <BR>- <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(self-&gt;share_output_buffer&nbsp;&amp;&amp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;!omx_buffer-&gt;pBuffer&nbsp;&amp;&amp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;omx_buffer-&gt;nOffset&nbsp;==&nbsp;0) <BR>@@&nbsp;-542,6&nbsp;+534,14&nbsp;@@&nbsp;output_loop&nbsp;(gpointer&nbsp;data) <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GST_ERROR_OBJECT&nbsp;(self,&nbsp;"no&nbsp;input&nbsp;buffer&nbsp;to&nbsp;share"); <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <BR><BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(G_UNLIKELY&nbsp;(omx_buffer-&gt;nFlags&nbsp;&amp;&nbsp;OMX_BUFFERFLAG_EOS)) <BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GST_DEBUG_OBJECT&nbsp;(self,&nbsp;"got&nbsp;eos"); <BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gst_pad_push_event&nbsp;(self-&gt;srcpad,&nbsp;gst_event_new_eos&nbsp;()); <BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;omx_buffer-&gt;nFlags&nbsp;&amp;=&nbsp;~OMX_BUFFERFLAG_EOS; <BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;=&nbsp;GST_FLOW_UNEXPECTED; <BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <BR>+ <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;omx_buffer-&gt;nFilledLen&nbsp;=&nbsp;0; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GST_LOG_OBJECT&nbsp;(self,&nbsp;"release_buffer"); <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_omx_port_release_buffer&nbsp;(out_port,&nbsp;omx_buffer); <BR><BR>--&nbsp; <BR>Felipe&nbsp;Contreras <BR><BR>
<TABLE id=confidentialsignimg>
<TBODY>
<TR>
<TD NAMO_LOCK>
<P><IMG border=0 src="cid:QKNMBDIFBEI0@namo.co.kr" width=520></P></TD></TR></TBODY></TABLE>
<P></P></BODY></HTML>