]> git.sesse.net Git - vlc/commitdiff
omxil: Get the new port definition on crop rect changes
authorMartin Storsjö <martin@martin.st>
Wed, 4 Apr 2012 12:17:59 +0000 (15:17 +0300)
committerJean-Baptiste Kempf <jb@videolan.org>
Wed, 4 Apr 2012 12:08:39 +0000 (14:08 +0200)
Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
modules/codec/omxil/omxil.c
modules/codec/omxil/omxil.h

index 047b8fface99c041be885e80120af844d69ce517..34509e1c100255f3e0a5e703ef03fe615a6e54d6 100644 (file)
@@ -1213,6 +1213,12 @@ static picture_t *DecodeVideo( decoder_t *p_dec, block_t **pp_block )
         OMX_FIFO_PEEK(&p_sys->out.fifo, p_header);
         if(!p_header) break; /* No frame available */
 
+        if(p_sys->out.b_update_def)
+        {
+            omx_error = GetPortDefinition(p_dec, &p_sys->out, p_sys->out.p_fmt);
+            p_sys->out.b_update_def = 0;
+        }
+
         if(p_header->nFilledLen)
         {
             p_pic = p_header->pAppPrivate;
@@ -1320,9 +1326,16 @@ reconfig:
     for(i = 0; i < p_sys->ports; i++)
     {
         OmxPort *p_port = &p_sys->p_ports[i];
-        if(!p_port->b_reconfigure) continue;
-        p_port->b_reconfigure = 0;
-        omx_error = PortReconfigure(p_dec, p_port);
+        if(p_port->b_reconfigure)
+        {
+            omx_error = PortReconfigure(p_dec, p_port);
+            p_port->b_reconfigure = 0;
+        }
+        if(p_port->b_update_def)
+        {
+            omx_error = GetPortDefinition(p_dec, p_port, p_port->p_fmt);
+            p_port->b_update_def = 0;
+        }
     }
 
     return p_pic;
@@ -1639,6 +1652,12 @@ static OMX_ERRORTYPE OmxEventHandler( OMX_HANDLETYPE omx_handle,
             p_sys->sentinel_buffer.nFlags = OMX_BUFFERFLAG_EOS;
             OMX_FIFO_PUT(&p_sys->in.fifo, &p_sys->sentinel_buffer);
         }
+        else if( data_2 == OMX_IndexConfigCommonOutputCrop )
+        {
+            for(i = 0; i < p_sys->ports; i++)
+                if(p_sys->p_ports[i].definition.nPortIndex == data_1)
+                    p_sys->p_ports[i].b_update_def = true;
+        }
         else
         {
             msg_Dbg( p_dec, "Unhandled setting change %x", (unsigned int)data_2 );
index 1fc28f7752fe790c445df809c74e88647792dbd7..4fa1d60b4897a2c9146774f37502fa5fb3d8d9c0 100644 (file)
@@ -69,6 +69,7 @@ typedef struct OmxPort
     OmxFormatParam format_param;
 
     OMX_BOOL b_reconfigure;
+    OMX_BOOL b_update_def;
     OMX_BOOL b_direct;
     OMX_BOOL b_flushed;