omxvideodec: handle IL 1.2 behavior for OMX_SetParameter

It triggers SettingsChanged on the other port and it is up to
the client to decide if it should lead to a port reconfiguration.

Settings are propagated to the other port for fields they have
in common. But this event is only triggered on the other port
if it actually change a setting.

https://bugzilla.gnome.org/show_bug.cgi?id=783976
This commit is contained in:
Julien Isorce 2017-06-19 23:56:02 +01:00
parent 709d91ea2b
commit 1b7d0b8599

View file

@ -775,6 +775,24 @@ gst_omx_video_dec_allocate_output_buffers (GstOMXVideoDec * self)
gst_omx_error_to_string (err), err); gst_omx_error_to_string (err), err);
goto done; goto done;
} }
#if OMX_VERSION_MINOR == 2
/* In OMX-IL 1.2.0, the nBufferCountActual change is propagated to the
* the input port upon call to the SetParameter on out port above. This
* propagation triggers a SettingsChanged event. It is up to the client
* to decide if this event should lead to reconfigure the port. Here
* this is clearly informal so lets just acknowledge the event to avoid
* input port reconfiguration. Note that the SettingsChanged event will
* be sent in-context of the SetParameter call above. So the event is
* garantie to be proceeded in the handle_message call below. */
err = gst_omx_port_mark_reconfigured (self->dec_in_port);
if (err != OMX_ErrorNone) {
GST_ERROR_OBJECT (self,
"Failed to acknowledge port settings changed: %s (0x%08x)",
gst_omx_error_to_string (err), err);
goto done;
}
#endif
} }
if (!gst_omx_port_is_enabled (port)) { if (!gst_omx_port_is_enabled (port)) {
@ -2070,11 +2088,23 @@ gst_omx_video_dec_set_format (GstVideoDecoder * decoder,
return FALSE; return FALSE;
} }
} }
#if OMX_VERSION_MINOR == 2
/* In OMX-IL 1.2.0, the nFrameWidth/Height changes are propagated to the
* the output port upon call to the SetParameter on in port above. This
* propagation triggers a SettingsChanged event. It is up to the client
* to decide if this event should lead to reconfigure the port. Here
* this is clearly informal so lets just acknowledge the event to avoid
* output port reconfiguration. Note that the SettingsChanged event will
* be sent in-context of the SetParameter call above. So the event is
* garantie to be proceeded in the handle_message call below. */
if (gst_omx_port_mark_reconfigured (self->dec_out_port) != OMX_ErrorNone)
return FALSE;
#else
GST_DEBUG_OBJECT (self, "Updating outport port definition"); GST_DEBUG_OBJECT (self, "Updating outport port definition");
if (gst_omx_port_update_port_definition (self->dec_out_port, if (gst_omx_port_update_port_definition (self->dec_out_port,
NULL) != OMX_ErrorNone) NULL) != OMX_ErrorNone)
return FALSE; return FALSE;
#endif
gst_buffer_replace (&self->codec_data, state->codec_data); gst_buffer_replace (&self->codec_data, state->codec_data);
self->input_state = gst_video_codec_state_ref (state); self->input_state = gst_video_codec_state_ref (state);