[vlc-devel] [PATCH] mediacodec: detect size changed by comparing visible size

Zhao Zhili quinkblack at foxmail.com
Thu Aug 9 04:14:16 CEST 2018


Input size may not aligned to the requirement of codec. For H.264 We can
align the size to macroblock size before comparing, but it doesn't work
with HEVC.
---
 modules/codec/omxil/mediacodec.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/modules/codec/omxil/mediacodec.c b/modules/codec/omxil/mediacodec.c
index 68912a8..3a42219 100644
--- a/modules/codec/omxil/mediacodec.c
+++ b/modules/codec/omxil/mediacodec.c
@@ -112,7 +112,7 @@ typedef struct
         {
             void *p_surface, *p_jsurface;
             unsigned i_angle;
-            unsigned i_input_width, i_input_height;
+            unsigned i_input_visible_width, i_input_visible_height;
             unsigned int i_stride, i_slice_height;
             int i_pixel_format;
             struct hxxx_helper hh;
@@ -259,10 +259,10 @@ static void HXXXInitSize(decoder_t *p_dec, bool *p_size_changed)
         unsigned i_w, i_h, i_vw, i_vh;
         hxxx_helper_get_current_picture_size(hh, &i_w, &i_h, &i_vw, &i_vh);
 
-        *p_size_changed = (i_w != p_sys->video.i_input_width
-                        || i_h != p_sys->video.i_input_height);
-        p_sys->video.i_input_width = i_w;
-        p_sys->video.i_input_height = i_h;
+        *p_size_changed = (i_vw != p_sys->video.i_input_visible_width
+                        || i_vh != p_sys->video.i_input_visible_height);
+        p_sys->video.i_input_visible_width = i_vw;
+        p_sys->video.i_input_visible_height = i_vh;
         /* fmt_out video size will be updated by mediacodec output callback */
     }
 }
@@ -731,9 +731,9 @@ static int OpenDecoder(vlc_object_t *p_this, pf_MediaCodecApi_init pf_init)
                 p_dec->fmt_out.video.i_sar_den = 1;
             }
 
-            p_sys->video.i_input_width =
+            p_sys->video.i_input_visible_width = p_dec->fmt_in.video.i_visible_width;
+            p_sys->video.i_input_visible_height = p_dec->fmt_in.video.i_visible_height;
             p_dec->fmt_out.video.i_visible_width = p_dec->fmt_out.video.i_width;
-            p_sys->video.i_input_height =
             p_dec->fmt_out.video.i_visible_height = p_dec->fmt_out.video.i_height;
 
             if (UpdateVout(p_dec) != VLC_SUCCESS)
-- 
2.9.5





More information about the vlc-devel mailing list