[vlc-commits] mediacodec: add MC_API_VIDEO_QUIRKS_IGNORE_SIZE

Thomas Guillem git at videolan.org
Tue Oct 29 11:23:52 CET 2019


vlc | branch: master | Thomas Guillem <thomas at gllm.fr> | Tue Oct 29 11:01:48 2019 +0100| [669505d1844188a54f2c63acaf94d58cafb9cbbf] | committer: Thomas Guillem

mediacodec: add MC_API_VIDEO_QUIRKS_IGNORE_SIZE

Some implementations return the surface output size instead of the input video
size. In that case, use the size parsed by the hxxx_helper.

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

 modules/codec/omxil/mediacodec.c     | 19 +++++++++++++++----
 modules/codec/omxil/mediacodec.h     |  3 ++-
 modules/codec/omxil/mediacodec_jni.c | 12 +++++++++++-
 3 files changed, 28 insertions(+), 6 deletions(-)

diff --git a/modules/codec/omxil/mediacodec.c b/modules/codec/omxil/mediacodec.c
index 68912a8f2d..0254c9c230 100644
--- a/modules/codec/omxil/mediacodec.c
+++ b/modules/codec/omxil/mediacodec.c
@@ -1024,10 +1024,21 @@ static int Video_ProcessOutput(decoder_t *p_dec, mc_api_out *p_out,
             i_height = p_out->conf.video.height;
         }
 
-        p_dec->fmt_out.video.i_visible_width =
-        p_dec->fmt_out.video.i_width = i_width;
-        p_dec->fmt_out.video.i_visible_height =
-        p_dec->fmt_out.video.i_height = i_height;
+        if (!(p_sys->api.i_quirks & MC_API_VIDEO_QUIRKS_IGNORE_SIZE))
+        {
+            p_dec->fmt_out.video.i_visible_width =
+            p_dec->fmt_out.video.i_width = i_width;
+            p_dec->fmt_out.video.i_visible_height =
+            p_dec->fmt_out.video.i_height = i_height;
+        }
+        else
+        {
+            p_dec->fmt_out.video.i_visible_width =
+            p_dec->fmt_out.video.i_width = p_sys->video.i_input_width;
+            p_dec->fmt_out.video.i_visible_height =
+            p_dec->fmt_out.video.i_height = p_sys->video.i_input_height;
+            msg_Dbg(p_dec, "video size ignored from MediaCodec");
+        }
 
         p_sys->video.i_stride = p_out->conf.video.stride;
         p_sys->video.i_slice_height = p_out->conf.video.slice_height;
diff --git a/modules/codec/omxil/mediacodec.h b/modules/codec/omxil/mediacodec.h
index bcc7d665d4..2147f9f8ef 100644
--- a/modules/codec/omxil/mediacodec.h
+++ b/modules/codec/omxil/mediacodec.h
@@ -43,7 +43,8 @@ int MediaCodecNdk_Init(mc_api*);
 #define MC_API_QUIRKS_NEED_CSD 0x1
 #define MC_API_VIDEO_QUIRKS_IGNORE_PADDING 0x2
 #define MC_API_VIDEO_QUIRKS_SUPPORT_INTERLACED 0x4
-#define MC_API_AUDIO_QUIRKS_NEED_CHANNELS 0x8
+#define MC_API_VIDEO_QUIRKS_IGNORE_SIZE 0x8
+#define MC_API_AUDIO_QUIRKS_NEED_CHANNELS 0x10
 
 /* MediaCodec only QUIRKS */
 #define MC_API_VIDEO_QUIRKS_ADAPTIVE 0x1000
diff --git a/modules/codec/omxil/mediacodec_jni.c b/modules/codec/omxil/mediacodec_jni.c
index 671e9ce975..ba2e92f21e 100644
--- a/modules/codec/omxil/mediacodec_jni.c
+++ b/modules/codec/omxil/mediacodec_jni.c
@@ -454,7 +454,17 @@ char* MediaCodec_GetName(vlc_object_t *p_obj, const char *psz_mime,
                 memcpy(psz_name, name_ptr, name_len);
                 psz_name[name_len] = '\0';
 
-                if (b_adaptive)
+                bool ignore_size = false;
+
+                if (ignore_size)
+                {
+                    *p_quirks |= MC_API_VIDEO_QUIRKS_IGNORE_SIZE;
+                    /* If the MediaCodec size is ignored, the adaptive mode
+                     * should be disabled in order to trigger the hxxx_helper
+                     * parsers that will parse the correct video size. Hence
+                     * the following 'else if' */
+                }
+                else if (b_adaptive)
                     *p_quirks |= MC_API_VIDEO_QUIRKS_ADAPTIVE;
             }
         }



More information about the vlc-commits mailing list