As I've said, it's not based on your implementation of LE9. I didn't use any OMX components to render. I also didn't use port connections between decoder and renderer. But video_render component crashes on some occasions even if input port buffer release callback happens. I tried to flush renderer queue on input format change. I think the problem happens because there is always a single buffer left in the renderer, and I can't tell if it's used by firmware or not before disabling/flushing the port.
Is there any reliable way to determine the buffer is no longer needed by the renderer component?
Just to clarify LE9 has two independent HW acceleration methods, MMAL and openmax.
The (default) MMAL decoder uses the MMAL renderer and doesn't use openmax in any way.
MMAL works with buffers that you submit (mmal_port_send_buffer) and receive (through callback function given to mmal_port_enable).
The rule is once you've submitted a buffer it is owned by the firmware until it is returned in the callback.