vlc | branch: master | Thomas Guillem <tho...@gllm.fr> | Tue May 12 18:10:18 
2015 +0200| [fb43d75f9b3bbfd41c6ad6d2f7babbd0e59089ce] | committer: Thomas 
Guillem

mediacodec: move restart handling in DecodeVideo

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

 modules/codec/omxil/android_mediacodec.c |   43 +++++++++++++++++-------------
 1 file changed, 24 insertions(+), 19 deletions(-)

diff --git a/modules/codec/omxil/android_mediacodec.c 
b/modules/codec/omxil/android_mediacodec.c
index 740c124..4d1757d 100644
--- a/modules/codec/omxil/android_mediacodec.c
+++ b/modules/codec/omxil/android_mediacodec.c
@@ -1344,12 +1344,11 @@ static int GetOutput(decoder_t *p_dec, JNIEnv *env, 
picture_t *p_pic, jlong time
     return 0;
 }
 
-static void H264ProcessBlock(decoder_t *p_dec, JNIEnv *env, block_t *p_block,
-                             bool *p_delayed_open)
+static void H264ProcessBlock(decoder_t *p_dec, block_t *p_block,
+                             bool *p_csd_changed, bool *p_size_changed)
 {
     decoder_sys_t *p_sys = p_dec->p_sys;
     struct H264ConvertState convert_state = { 0, 0 };
-    bool b_size_changed;
 
     assert(p_dec->fmt_in.i_codec == VLC_CODEC_H264 && p_block);
 
@@ -1358,22 +1357,14 @@ static void H264ProcessBlock(decoder_t *p_dec, JNIEnv 
*env, block_t *p_block,
         convert_h264_to_annexb(p_block->p_buffer, p_block->i_buffer,
                                p_sys->nal_size, &convert_state);
     } else if (H264SetCSD(p_dec, p_block->p_buffer, p_block->i_buffer,
-                          &b_size_changed) == VLC_SUCCESS)
+                          p_size_changed) == VLC_SUCCESS)
     {
-        if (p_sys->codec && b_size_changed)
-        {
-            msg_Err(p_dec, "SPS/PPS changed during playback and "
-                    "MediaCodec configured with a different video size. "
-                    "Restart it !");
-            CloseMediaCodec(p_dec, env);
-        }
-        if (!p_sys->codec)
-            *p_delayed_open = true;
+        *p_csd_changed = true;
     }
 }
 
-static void HEVCProcessBlock(decoder_t *p_dec, JNIEnv *env, block_t *p_block,
-                             bool *p_delayed_open)
+static void HEVCProcessBlock(decoder_t *p_dec, block_t *p_block,
+                             bool *p_csd_changed, bool *p_size_changed)
 {
     decoder_sys_t *p_sys = p_dec->p_sys;
     struct H264ConvertState convert_state = { 0, 0 };
@@ -1387,8 +1378,8 @@ static void HEVCProcessBlock(decoder_t *p_dec, JNIEnv 
*env, block_t *p_block,
     }
 
     /* TODO */
-    VLC_UNUSED(env);
-    VLC_UNUSED(p_delayed_open);
+    VLC_UNUSED(p_csd_changed);
+    VLC_UNUSED(p_size_changed);
 }
 
 static picture_t *DecodeVideo(decoder_t *p_dec, block_t **pp_block)
@@ -1450,11 +1441,25 @@ static picture_t *DecodeVideo(decoder_t *p_dec, block_t 
**pp_block)
 
     if (b_new_block)
     {
+        bool b_csd_changed = false, b_size_changed = false;
+
         p_sys->b_new_block = false;
         if (p_dec->fmt_in.i_codec == VLC_CODEC_H264)
-            H264ProcessBlock(p_dec, env, p_block, &b_delayed_open);
+            H264ProcessBlock(p_dec, p_block, &b_csd_changed, &b_size_changed);
         else if (p_dec->fmt_in.i_codec == VLC_CODEC_HEVC)
-            HEVCProcessBlock(p_dec, env, p_block, &b_delayed_open);
+            HEVCProcessBlock(p_dec, p_block, &b_csd_changed, &b_size_changed);
+
+        if (p_sys->codec && b_csd_changed)
+        {
+            if (b_size_changed)
+            {
+                msg_Err(p_dec, "SPS/PPS changed during playback and "
+                        "video size are different. Restart it !");
+                CloseMediaCodec(p_dec, env);
+            }
+        }
+        if (!p_sys->codec)
+            b_delayed_open = true;
     }
 
     /* try delayed opening if there is a new extra data */

_______________________________________________
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to