The spec notes that for video decoders, the size of the output buffers may need to change when they start decoding a stream. When this happens the component calls EventHandler with OMX_EventPortSettingsChanged. At this point, the decoder will not have generated any output data.

Since the component will have already taken the output buffer from the queue, should the component return the buffer to the client using a call to FillBufferDone but with nFilledLen set to zero? I imagine that the client just passes on the buffers as normal, so the consumer of the buffer will look at the length and do nothing with it (assuming flags, etc aren't set). Is this the intention for hwo this works?

I guess this is implementation specific, but it probably applies to most implementations.