[vlc-devel] [PATCH 6/6] mediacodec: don't transform the fmt too soon

Thomas Guillem thomas at gllm.fr
Fri Jan 24 11:03:42 CET 2020


Regression from c515dc468dfffe8ed56042c2a3cc28fcb8e9d071

The transformation must be done after the fmt_out is fully configured.
---
 modules/codec/omxil/mediacodec.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/modules/codec/omxil/mediacodec.c b/modules/codec/omxil/mediacodec.c
index c802f8c71e6..d7e597b004a 100644
--- a/modules/codec/omxil/mediacodec.c
+++ b/modules/codec/omxil/mediacodec.c
@@ -624,15 +624,6 @@ CreateVideoContext(decoder_t *p_dec)
 {
     decoder_sys_t *p_sys = p_dec->p_sys;
 
-    /* If MediaCodec can handle the rotation, reset the orientation to
-     * Normal in order to ask the vout not to rotate. */
-    if (p_sys->video.i_angle != 0)
-    {
-        assert(p_dec->fmt_out.i_codec == VLC_CODEC_ANDROID_OPAQUE);
-        p_dec->fmt_out.video.orientation = p_dec->fmt_in.video.orientation;
-        video_format_TransformTo(&p_dec->fmt_out.video, ORIENT_NORMAL);
-    }
-
     vlc_decoder_device *dec_dev = decoder_GetDecoderDevice(p_dec);
     if (!dec_dev || dec_dev->type != VLC_DECODER_DEVICE_AWINDOW)
     {
@@ -652,7 +643,7 @@ CreateVideoContext(decoder_t *p_dec)
      * to modify its layout, or if there is no external subtitle surfaces. */
 
     if (p_dec->fmt_out.video.projection_mode != PROJECTION_MODE_RECTANGULAR
-     || p_dec->fmt_out.video.orientation != ORIENT_NORMAL
+     || (!p_sys->api.b_support_rotation && p_dec->fmt_out.video.orientation != ORIENT_NORMAL)
      || !AWindowHandler_canSetVideoLayout(awh)
      || !has_subtitle_surface)
         id = AWindow_SurfaceTexture;
@@ -1185,6 +1176,15 @@ static int Video_ProcessOutput(decoder_t *p_dec, mc_api_out *p_out,
                 p_sys->video.i_mpeg_dar_den * p_dec->fmt_out.video.i_width;
         }
 
+        /* If MediaCodec can handle the rotation, reset the orientation to
+         * Normal in order to ask the vout not to rotate. */
+        if (p_sys->video.i_angle != 0)
+        {
+            assert(p_dec->fmt_out.i_codec == VLC_CODEC_ANDROID_OPAQUE);
+            p_dec->fmt_out.video.orientation = p_dec->fmt_in.video.orientation;
+            video_format_TransformTo(&p_dec->fmt_out.video, ORIENT_NORMAL);
+        }
+
         if (decoder_UpdateVideoOutput(p_dec, p_sys->video.ctx) != 0)
         {
             msg_Err(p_dec, "UpdateVout failed");
-- 
2.20.1



More information about the vlc-devel mailing list