[vlc-commits] mediacodec: fix Android error callback not sent in case of early fail

Thomas Guillem git at videolan.org
Tue Mar 1 19:10:43 CET 2016


vlc | branch: master | Thomas Guillem <thomas at gllm.fr> | Tue Mar  1 19:08:48 2016 +0100| [4f5af4a46acee0560ecc1946bf0649f923ba59e9] | committer: Thomas Guillem

mediacodec: fix Android error callback not sent in case of early fail

This is the last android ugly hack. This will be gone with the decoder fallback.

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=4f5af4a46acee0560ecc1946bf0649f923ba59e9
---

 modules/codec/omxil/mediacodec.c     |    5 +++--
 modules/video_output/android/utils.c |   21 +++++++++++++++++++--
 modules/video_output/android/utils.h |    2 +-
 3 files changed, 23 insertions(+), 5 deletions(-)

diff --git a/modules/codec/omxil/mediacodec.c b/modules/codec/omxil/mediacodec.c
index 1331a44..539190f 100644
--- a/modules/codec/omxil/mediacodec.c
+++ b/modules/codec/omxil/mediacodec.c
@@ -1473,8 +1473,9 @@ end:
         if (!p_sys->b_error_signaled) {
             /* Signal the error to the Java.
              * TODO: remove this when there is a decoder fallback */
-            if (p_dec->fmt_in.i_cat == VIDEO_ES && p_sys->u.video.p_awh)
-                AWindowHandler_sendHardwareAccelerationError(p_sys->u.video.p_awh);
+            if (p_dec->fmt_in.i_cat == VIDEO_ES)
+                AWindowHandler_sendHardwareAccelerationError(VLC_OBJECT(p_dec),
+                                                             p_sys->u.video.p_awh);
             p_sys->b_error_signaled = true;
             vlc_cond_broadcast(&p_sys->cond);
         }
diff --git a/modules/video_output/android/utils.c b/modules/video_output/android/utils.c
index 24aba61..1a619ed 100644
--- a/modules/video_output/android/utils.c
+++ b/modules/video_output/android/utils.c
@@ -752,12 +752,29 @@ AWindowHandler_setWindowLayout(AWindowHandler *p_awh,
 }
 
 int
-AWindowHandler_sendHardwareAccelerationError(AWindowHandler *p_awh)
+AWindowHandler_sendHardwareAccelerationError(vlc_object_t *p_obj,
+                                             AWindowHandler *p_awh)
 {
-    JNIEnv *p_env = AWindowHandler_getEnv(p_awh);
+    assert(p_obj || p_awh);
+    JNIEnv *p_env;
+
+    if (p_awh)
+    {
+        p_env = AWindowHandler_getEnv(p_awh);
+        p_awh = NULL;
+    }
+    else
+    {
+        p_awh = AWindowHandler_new(p_obj);
+        if (!p_awh)
+            return VLC_EGENERIC;
+        p_env = AWindowHandler_getEnv(p_awh);
+    }
     if (!p_env)
         return VLC_EGENERIC;
 
     JNI_CALL(CallVoidMethod, sendHardwareAccelerationError);
+    if (p_awh)
+        AWindowHandler_destroy(p_awh);
     return VLC_SUCCESS;
 }
diff --git a/modules/video_output/android/utils.h b/modules/video_output/android/utils.h
index 4637718..d04f710 100644
--- a/modules/video_output/android/utils.h
+++ b/modules/video_output/android/utils.h
@@ -175,4 +175,4 @@ int AWindowHandler_setWindowLayout(AWindowHandler *p_awh,
 /* Signal a critical error
  * TODO: remove this when there is a decoder fallback */
 int
-AWindowHandler_sendHardwareAccelerationError(AWindowHandler *p_awh);
+AWindowHandler_sendHardwareAccelerationError(vlc_object_t *p_obj, AWindowHandler *p_awh);



More information about the vlc-commits mailing list