[vlc-devel] [PATCH] android: Only reupload subtitle surfaces if they have changed
Felix Abecassis
felix.abecassis at gmail.com
Fri Feb 7 10:32:13 CET 2014
LGTM until we come up with a better method such as the one you have
described in your patch.
Thank you,
2014-02-06 Martin Storsjö <martin at martin.st>:
> This avoids reuploading a full resolution 32 bpp surface for
> every frame while the subtitles are displayed.
>
> Ideally this information perhaps should be signalled from the vlc
> core in some way, but until then, this avoids excessive slowdowns
> with subtitles with the mediacodec direct rendering.
> ---
> modules/video_output/android/opaque.c | 25 +++++++++++++++++++++++++
> 1 file changed, 25 insertions(+)
>
> diff --git a/modules/video_output/android/opaque.c
> b/modules/video_output/android/opaque.c
> index 371d65f..4812e64 100644
> --- a/modules/video_output/android/opaque.c
> +++ b/modules/video_output/android/opaque.c
> @@ -30,6 +30,7 @@
> #include <vlc_vout_display.h>
> #include <vlc_picture_pool.h>
> #include <vlc_filter.h>
> +#include <vlc_md5.h>
>
> #include <dlfcn.h>
>
> @@ -83,12 +84,36 @@ struct vout_display_sys_t
> picture_t *subtitles_picture;
>
> bool b_has_subpictures;
> +
> + uint8_t hash[16];
> };
>
> static void DisplaySubpicture(vout_display_t *vd, subpicture_t
> *subpicture)
> {
> vout_display_sys_t *sys = vd->sys;
>
> + struct md5_s hash;
> + InitMD5(&hash);
> + if (subpicture) {
> + for (subpicture_region_t *r = subpicture->p_region; r != NULL; r
> = r->p_next) {
> + AddMD5(&hash, &r->i_x, sizeof(r->i_x));
> + AddMD5(&hash, &r->i_y, sizeof(r->i_y));
> + AddMD5(&hash, &r->fmt.i_visible_width,
> sizeof(r->fmt.i_visible_width));
> + AddMD5(&hash, &r->fmt.i_visible_height,
> sizeof(r->fmt.i_visible_height));
> + AddMD5(&hash, &r->fmt.i_x_offset, sizeof(r->fmt.i_x_offset));
> + AddMD5(&hash, &r->fmt.i_y_offset, sizeof(r->fmt.i_y_offset));
> + const int pixels_offset = r->fmt.i_y_offset *
> r->p_picture->p->i_pitch +
> + r->fmt.i_x_offset *
> r->p_picture->p->i_pixel_pitch;
> +
> + for (int y = 0; y < r->fmt.i_visible_height; y++)
> + AddMD5(&hash, &r->p_picture->p->p_pixels[pixels_offset +
> y*r->p_picture->p->i_pitch], r->fmt.i_visible_width);
> + }
> + }
> + EndMD5(&hash);
> + if (!memcmp(hash.buf, sys->hash, 16))
> + return;
> + memcpy(sys->hash, hash.buf, 16);
> +
> jobject jsurf = jni_LockAndGetSubtitlesSurface();
> if (sys->window && jsurf != sys->jsurf)
> {
> --
> 1.8.3.4 (Apple Git-47)
>
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
>
--
Félix Abecassis
http://felix.abecassis.me
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/vlc-devel/attachments/20140207/b1c52a4b/attachment.html>
More information about the vlc-devel
mailing list