<div dir="ltr">Thanks for your comments, I'm currently working on a bug with direct rendering on the Nexus 5. When it is solved I will send an updated version based the feedbacks I got.<br><div>I also forgot that you also need to patch android.git for my patch to compile:<br>

<a href="https://github.com/mstorsjo/vlc-android/commit/43a8a1c217717e5dba627dea46a6900c72d43244.patch">https://github.com/mstorsjo/vlc-android/commit/43a8a1c217717e5dba627dea46a6900c72d43244.patch</a><br><br></div><div>
<br>
2013/11/6 Rémi Denis-Courmont <span dir="ltr"><<a href="mailto:remi@remlab.net" target="_blank">remi@remlab.net</a>></span><br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">

<div>
<br>
</div>This is not good. The decoder might be destroyed or even replaced while the<br>
picture is still in flight.<br></blockquote><div>To solve this issue I would like to have a counter tracking the number of pictures that are currently in flight (filled by the decoder but not yet displayed) and wait on this counter in Close(). Do I have the guarantee that all pictures that are sent to the vout are actually displayed?<br>

</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div><br>
> +    uint32_t i_index;<br>
> +    int b_displayed;<br>
> +};<br>
> diff --git a/modules/video_output/Modules.am<br>
> b/modules/video_output/Modules.am index 041dc29..e29c4ec 100644<br>
> --- a/modules/video_output/Modules.am<br>
> +++ b/modules/video_output/Modules.am<br>
> @@ -13,6 +13,7 @@ SOURCES_vout_macosx = macosx.m opengl.h opengl.c<br>
>  SOURCES_vout_coregraphicslayer = coregraphicslayer.m<br>
>  SOURCES_vout_ios2 = ios2.m opengl.h opengl.c<br>
>  SOURCES_android_surface = androidsurface.c<br>
> +SOURCES_android_surface_opaque = androidsurface_opaque.c<br>
><br>
>  if HAVE_DECKLINK<br>
>  libdecklinkoutput_plugin_la_SOURCES = decklink.cpp<br>
> diff --git a/modules/video_output/androidsurface_opaque.c<br>
> b/modules/video_output/androidsurface_opaque.c new file mode 100644<br>
> index 0000000..a8639a4<br>
> --- /dev/null<br>
> +++ b/modules/video_output/androidsurface_opaque.c<br>
> @@ -0,0 +1,203 @@<br>
> +/**************************************************************************<br>
</div>> *** + * androidsurface_opaque.c: Video output module using direct rendering<br>
<div>> with + * opaque buffers<br>
> +<br>
> ***************************************************************************<br>
</div>> ** + * Copyright (C) 2013 Felix Abecassis<br>
<div>> + *<br>
> + * Authors: Felix Abecassis <<a href="mailto:felix.abecassis@gmail.com" target="_blank">felix.abecassis@gmail.com</a>><br>
> + *<br>
> + * This program is free software; you can redistribute it and/or modify it<br>
> + * under the terms of the GNU Lesser General Public License as published by<br>
> + * the Free Software Foundation; either version 2.1 of the License, or + *<br>
> (at your option) any later version.<br>
> + *<br>
> + * This program is distributed in the hope that it will be useful,<br>
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of<br>
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the<br>
> + * GNU Lesser General Public License for more details.<br>
> + *<br>
> + * You should have received a copy of the GNU Lesser General Public License<br>
> + * along with this program; if not, write to the Free Software Foundation,<br>
> + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. +<br>
> ***************************************************************************<br>
</div>> **/ +<br>
<div>> +#ifdef HAVE_CONFIG_H<br>
> +# include "config.h"<br>
> +#endif<br>
> +<br>
> +#include <vlc_common.h><br>
> +#include <vlc_plugin.h><br>
> +#include <vlc_vout_display.h><br>
> +#include <vlc_picture_pool.h><br>
> +#include "../../codec/omxil/android_mediacodec.h"<br>
> +<br>
> +static int  Open (vlc_object_t *);<br>
> +static void Close(vlc_object_t *);<br>
> +<br>
> +vlc_module_begin()<br>
> +    set_category(CAT_VIDEO)<br>
> +    set_subcategory(SUBCAT_VIDEO_VOUT)<br>
> +    set_shortname("vout_mediacodec")<br>
> +    set_description(N_("Android MediaCodec direct rendering video output"))<br>
> +    set_capability("vout display", 200)<br>
> +    set_callbacks(Open, Close)<br>
> +vlc_module_end()<br>
> +<br>
> +/**************************************************************************<br>
</div>> *** + * Local prototypes<br>
> +<br>
> ***************************************************************************<br>
> **/ +<br>
<div>> +static picture_pool_t   *Pool  (vout_display_t *, unsigned);<br>
> +static void             Display(vout_display_t *, picture_t *, subpicture_t<br>
> *); +static int              Control(vout_display_t *, int, va_list);<br>
> +<br>
> +struct vout_display_sys_t<br>
> +{<br>
> +    picture_pool_t *pool;<br>
> +    video_format_t fmt;<br>
<br>
</div>Write-only?<br>
</blockquote></div><br></div><div class="gmail_extra">I'm sorry, I didn't understand. What do you mean?<br></div><div class="gmail_extra"><br>-- <br>Félix Abecassis<div><a href="http://felix.abecassis.me" target="_blank">http://felix.abecassis.me</a></div>


</div></div></div>